From 3580b28ec9b89d0a042707c168080931e7745fb3 Mon Sep 17 00:00:00 2001 From: Jeffrey Heer Date: Tue, 7 Nov 2023 08:22:46 -0800 Subject: [PATCH] chore: v5.26.0 (#3823) * chore: Bump dev dependencies. * chore: Bump package versions. * docs: Add docs build files. * chore: Support docs bundle in local folder. --- .gitignore | 2 + docs/_config.yml | 1 + docs/_data/versions.yml | 2 +- docs/vega-core.js | 345 +- docs/vega-core.min.js | 2 +- docs/vega-core.min.js.map | 2 +- docs/vega-schema.json | 74 +- docs/vega.js | 345 +- docs/vega.min.js | 2 +- docs/vega.min.js.map | 2 +- lerna.json | 3 +- package.json | 34 +- packages/vega-cli/package.json | 4 +- packages/vega-functions/package.json | 4 +- packages/vega-parser/package.json | 8 +- packages/vega-scale/package.json | 2 +- packages/vega-scenegraph/package.json | 2 +- packages/vega-schema/package.json | 4 +- packages/vega-selections/package.json | 2 +- packages/vega-transforms/package.json | 2 +- packages/vega-typings/package.json | 2 +- .../tests/spec/valid/nulls-selection.ts | 146 + packages/vega-typings/vega-to-dataflow.js | 2 +- packages/vega-voronoi/package.json | 2 +- packages/vega/package.json | 14 +- yarn.lock | 5984 ++++++++--------- 26 files changed, 3526 insertions(+), 3466 deletions(-) create mode 100644 packages/vega-typings/tests/spec/valid/nulls-selection.ts diff --git a/.gitignore b/.gitignore index a93b5030ed..1700f429a5 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,8 @@ /build /docs/_site /docs/Gemfile.lock +/docs/.bundle/ +/docs/vendor/ /node_modules /packages/*/node_modules /packages/*/build diff --git a/docs/_config.yml b/docs/_config.yml index e6448b0666..7e7100eee7 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -24,6 +24,7 @@ kramdown: exclude: - Gemfile - Gemfile.lock + - vendor plugins: - jekyll-sitemap diff --git a/docs/_data/versions.yml b/docs/_data/versions.yml index ac99d97dd8..4425e67ca1 100644 --- a/docs/_data/versions.yml +++ b/docs/_data/versions.yml @@ -1,4 +1,4 @@ -vega__latest: '5.25.0' +vega__latest: '5.26.0' schema: '5' vega: '5' interpreter: '1' diff --git a/docs/vega-core.js b/docs/vega-core.js index 0aabf71de9..06c3531f20 100644 --- a/docs/vega-core.js +++ b/docs/vega-core.js @@ -35,7 +35,7 @@ function accessorFields(fn) { return fn == null ? null : fn.fields; } - function getter(path) { + function getter$1(path) { return path.length === 1 ? get1(path[0]) : getN(path); } const get1 = field => function (obj) { @@ -112,7 +112,7 @@ function field$1(field, name, opt) { const path = splitAccessPath(field); field = path.length === 1 ? path[0] : field; - return accessor((opt && opt.get || getter)(path), [field], name || field); + return accessor((opt && opt.get || getter$1)(path), [field], name || field); } const id = field$1('id'); const identity = accessor(_ => _, [], 'identity'); @@ -595,7 +595,7 @@ fields = flat ? array$2(fields).map(f => f.replace(/\\(.)/g, '$1')) : array$2(fields); } const len = fields && fields.length, - gen = opt && opt.get || getter, + gen = opt && opt.get || getter$1, map = f => gen(flat ? [f] : splitAccessPath(f)); let fn; if (!len) { @@ -4915,20 +4915,35 @@ }, req: ['max', 'values'], idx: 3 + }, + exponential: { + init: (m, r) => { + m.exp = 0; + m.exp_r = r; + }, + value: m => m.valid ? m.exp * (1 - m.exp_r) / (1 - m.exp_r ** m.valid) : undefined, + add: (m, v) => m.exp = m.exp_r * m.exp + v, + rem: (m, v) => m.exp = (m.exp - v / m.exp_r ** (m.valid - 1)) / m.exp_r + }, + exponentialb: { + value: m => m.valid ? m.exp * (1 - m.exp_r) : undefined, + req: ['exponential'], + idx: 1 } }; const ValidAggregateOps = Object.keys(AggregateOps).filter(d => d !== '__count__'); function measure(key, value) { - return out => extend({ + return (out, aggregate_param) => extend({ name: key, + aggregate_param: aggregate_param, out: out || key }, base_op, value); } [...ValidAggregateOps, '__count__'].forEach(key => { AggregateOps[key] = measure(key, AggregateOps[key]); }); - function createMeasure(op, name) { - return AggregateOps[op](name); + function createMeasure(op, param, name) { + return AggregateOps[op](name, param); } function compareIndex(a, b) { return a.idx - b.idx; @@ -4948,7 +4963,7 @@ function init() { this.valid = 0; this.missing = 0; - this._ops.forEach(op => op.init(this)); + this._ops.forEach(op => op.aggregate_param == null ? op.init(this) : op.init(this, op.aggregate_param)); } function add$1(v, t) { if (v == null || v === '') { @@ -5112,6 +5127,7 @@ * @param {Array} [params.groupby] - An array of accessors to groupby. * @param {Array} [params.fields] - An array of accessors to aggregate. * @param {Array} [params.ops] - An array of strings indicating aggregation operations. + * @param {Array} [params.aggregate_params=[null]] - An optional array of parameters for aggregation operations. * @param {Array} [params.as] - An array of output field names for aggregated values. * @param {boolean} [params.cross=false] - A flag indicating that the full * cross-product of groupby values should be generated, including empty cells. @@ -5154,6 +5170,12 @@ 'type': 'enum', 'array': true, 'values': ValidAggregateOps + }, { + 'name': 'aggregate_params', + 'type': 'field', + 'null': true, + 'array': true, + 'default': [null] }, { 'name': 'fields', 'type': 'field', @@ -5276,16 +5298,18 @@ this._measures = []; const fields = _.fields || [null], ops = _.ops || ['count'], + aggregate_params = _.aggregate_params || [null], as = _.as || [], n = fields.length, map = {}; - let field, op, m, mname, outname, i; + let field, op, aggregate_param, m, mname, outname, i; if (n !== ops.length) { error('Unmatched number of fields and aggregate ops.'); } for (i = 0; i < n; ++i) { field = fields[i]; op = ops[i]; + aggregate_param = aggregate_params[i] || null; if (field == null && op !== 'count') { error('Null aggregate field specified.'); } @@ -5304,7 +5328,7 @@ this._measures.push(m); } if (op !== 'count') this._countOnly = false; - m.push(createMeasure(op, outname)); + m.push(createMeasure(op, aggregate_param, outname)); } this._measures = this._measures.map(m => compileMeasures(m, m.field)); return Object.create(null); // aggregation cells (this.value) @@ -8169,6 +8193,7 @@ const ops = array$2(_.ops), fields = array$2(_.fields), params = array$2(_.params), + aggregate_params = array$2(_.aggregate_params), as = array$2(_.as), outputs = this.outputs = [], windows = this.windows = [], @@ -8183,6 +8208,8 @@ visitInputs(_.sort); ops.forEach((op, i) => { const field = fields[i], + param = params[i], + aggregate_param = aggregate_params[i] || null, mname = accessorName(field), name = measureName(op, mname, as[i]); visitInputs(field); @@ -8190,7 +8217,7 @@ // Window operation if (has$1(WindowOps, op)) { - windows.push(WindowOp(op, fields[i], params[i], name)); + windows.push(WindowOp(op, field, param, name)); } // Aggregate operation @@ -8209,7 +8236,7 @@ m.field = field; measures.push(m); } - m.push(createMeasure(op, name)); + m.push(createMeasure(op, aggregate_param, name)); } }); if (counts.length || measures.length) { @@ -8296,6 +8323,7 @@ * @param {Array} [params.fields] - An array of accessors * for data fields to use as inputs to window operations. * @param {Array<*>} [params.params] - An array of parameter values for window operations. + * @param {Array} [params.aggregate_params] - An optional array of parameter values for aggregation operations. * @param {Array} [params.as] - An array of output field names for window operations. * @param {Array} [params.frame] - Window frame definition as two-element array. * @param {boolean} [params.ignorePeers=false] - If true, base window frame boundaries on row @@ -8329,6 +8357,12 @@ 'type': 'number', 'null': true, 'array': true + }, { + 'name': 'aggregate_params', + 'type': 'field', + 'null': true, + 'array': true, + 'default': [null] }, { 'name': 'fields', 'type': 'field', @@ -9032,7 +9066,7 @@ count = Math.max(count, scale.bins.length); } if (minStep != null) { - count = Math.min(count, Math.floor(span(scale.domain()) / minStep || 1)); + count = Math.min(count, Math.floor(span(scale.domain()) / minStep || 1) + 1); } } if (isObject(count)) { @@ -11103,7 +11137,7 @@ const hitBackground = hitPath(rectanglePath); const hitForeground = hitPath(rectanglePath, false); const hitCorner = hitPath(rectanglePath, true); - function draw$4(context, scene, bounds) { + function draw$4(context, scene, bounds, markTypes) { visit(scene, group => { const gx = group.x || 0, gy = group.y || 0, @@ -11130,7 +11164,9 @@ // draw group contents visit(group, item => { - this.draw(context, item, bounds); + if (item.marktype === 'group' || markTypes == null || markTypes.includes(item.marktype)) { + this.draw(context, item, bounds, markTypes); + } }); // restore graphics context @@ -11499,10 +11535,13 @@ // we are using canvas const currentFont = font(item); return text => _measureWidth(text, currentFont); - } else { + } else if (textMetrics.width === estimateWidth) { // we are relying on estimates const currentFontHeight = fontSize(item); return text => _estimateWidth(text, currentFontHeight); + } else { + // User defined textMetrics.width function in use (e.g. vl-convert) + return text => textMetrics.width(item, text); } } function truncate(item, text) { @@ -12196,15 +12235,17 @@ * after this method returns. To receive notification when rendering is * complete, use the renderAsync method instead. * @param {object} scene - The root mark of a scenegraph to render. + * @param {Array} markTypes - Array of the mark types to render. + * If undefined, render all mark types * @return {Renderer} - This renderer instance. */ - render(scene) { + render(scene, markTypes) { const r = this; // bind arguments into a render call, and cache it // this function may be subsequently called for async redraw r._call = function () { - r._render(scene); + r._render(scene, markTypes); }; // invoke the renderer @@ -12219,8 +12260,10 @@ * Internal rendering method. Renderer subclasses should override this * method to actually perform rendering. * @param {object} scene - The root mark of a scenegraph to render. + * @param {Array} markTypes - Array of the mark types to render. + * If undefined, render all mark types */ - _render( /*scene*/ + _render( /*scene, markTypes*/ ) { // subclasses to override }, @@ -12230,10 +12273,12 @@ * perform image loading to get a complete rendering. The returned * Promise will not resolve until this process completes. * @param {object} scene - The root mark of a scenegraph to render. + * @param {Array} markTypes - Array of the mark types to render. + * If undefined, render all mark types * @return {Promise} - A Promise that resolves when rendering is complete. */ - renderAsync(scene) { - const r = this.render(scene); + renderAsync(scene, markTypes) { + const r = this.render(scene, markTypes); return this._ready ? this._ready.then(() => r) : Promise.resolve(r); }, /** @@ -12284,11 +12329,11 @@ const DragEnterEvent = 'dragenter'; const DragLeaveEvent = 'dragleave'; const DragOverEvent = 'dragover'; - const MouseDownEvent = 'mousedown'; - const MouseUpEvent = 'mouseup'; - const MouseMoveEvent = 'mousemove'; - const MouseOutEvent = 'mouseout'; - const MouseOverEvent = 'mouseover'; + const PointerDownEvent = 'pointerdown'; + const PointerUpEvent = 'pointerup'; + const PointerMoveEvent = 'pointermove'; + const PointerOutEvent = 'pointerout'; + const PointerOverEvent = 'pointerover'; const ClickEvent = 'click'; const DoubleClickEvent = 'dblclick'; const WheelEvent = 'wheel'; @@ -12296,9 +12341,9 @@ const TouchStartEvent = 'touchstart'; const TouchMoveEvent = 'touchmove'; const TouchEndEvent = 'touchend'; - const Events = [KeyDownEvent, KeyPressEvent, KeyUpEvent, DragEnterEvent, DragLeaveEvent, DragOverEvent, MouseDownEvent, MouseUpEvent, MouseMoveEvent, MouseOutEvent, MouseOverEvent, ClickEvent, DoubleClickEvent, WheelEvent, MouseWheelEvent, TouchStartEvent, TouchMoveEvent, TouchEndEvent]; - const TooltipShowEvent = MouseMoveEvent; - const TooltipHideEvent = MouseOutEvent; + const Events = [KeyDownEvent, KeyPressEvent, KeyUpEvent, DragEnterEvent, DragLeaveEvent, DragOverEvent, PointerDownEvent, PointerUpEvent, PointerMoveEvent, PointerOutEvent, PointerOverEvent, ClickEvent, DoubleClickEvent, WheelEvent, MouseWheelEvent, TouchStartEvent, TouchMoveEvent, TouchEndEvent]; + const TooltipShowEvent = PointerMoveEvent; + const TooltipHideEvent = PointerOutEvent; const HrefEvent = ClickEvent; function CanvasHandler(loader, tooltip) { Handler.call(this, loader, tooltip); @@ -12352,7 +12397,7 @@ this._canvas = el && domFind(el, 'canvas'); // add minimal events required for proper state management - [ClickEvent, MouseDownEvent, MouseMoveEvent, MouseOutEvent, DragLeaveEvent].forEach(type => eventListenerCheck(this, type)); + [ClickEvent, PointerDownEvent, PointerMoveEvent, PointerOutEvent, DragLeaveEvent].forEach(type => eventListenerCheck(this, type)); return Handler.prototype.initialize.call(this, el, origin, obj); }, // return the backing canvas instance @@ -12369,13 +12414,13 @@ DOMMouseScroll(evt) { this.fire(MouseWheelEvent, evt); }, - mousemove: move(MouseMoveEvent, MouseOverEvent, MouseOutEvent), + pointermove: move(PointerMoveEvent, PointerOverEvent, PointerOutEvent), dragover: move(DragOverEvent, DragEnterEvent, DragLeaveEvent), - mouseout: inactive(MouseOutEvent), + pointerout: inactive(PointerOutEvent), dragleave: inactive(DragLeaveEvent), - mousedown(evt) { + pointerdown(evt) { this._down = this._active; - this.fire(MouseDownEvent, evt); + this.fire(PointerDownEvent, evt); }, click(evt) { if (this._down === this._active) { @@ -12449,8 +12494,8 @@ o = this._origin; return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]); }, - // find the scenegraph item at the current mouse position - // x, y -- the absolute x, y mouse coordinates on the canvas element + // find the scenegraph item at the current pointer position + // x, y -- the absolute x, y pointer coordinates on the canvas element // gx, gy -- the relative coordinates within the current group pick(scene, x, y, gx, gy) { const g = this.context(), @@ -12486,7 +12531,7 @@ this._dirty = new Bounds(); this._tempb = new Bounds(); } - const base$1 = Renderer.prototype; + const base$2 = Renderer.prototype; const viewBounds = (origin, width, height) => new Bounds().set(0, 0, width, height).translate(-origin[0], -origin[1]); function clipToBounds(g, b, origin) { // expand bounds by 1 pixel, then round to pixel boundaries @@ -12517,10 +12562,10 @@ } // this method will invoke resize to size the canvas appropriately - return base$1.initialize.call(this, el, width, height, origin, scaleFactor); + return base$2.initialize.call(this, el, width, height, origin, scaleFactor); }, resize(width, height, origin, scaleFactor) { - base$1.resize.call(this, width, height, origin, scaleFactor); + base$2.resize.call(this, width, height, origin, scaleFactor); if (this._canvas) { // configure canvas size and transform resize(this._canvas, this._width, this._height, this._origin, this._scale, this._options.context); @@ -12549,7 +12594,7 @@ } this._dirty.union(b); }, - _render(scene) { + _render(scene, markTypes) { const g = this.context(), o = this._origin, w = this._width, @@ -12563,17 +12608,20 @@ this.clear(-o[0], -o[1], w, h); // render - this.draw(g, scene, b); + this.draw(g, scene, b, markTypes); // takedown g.restore(); db.clear(); return this; }, - draw(ctx, scene, bounds) { + draw(ctx, scene, bounds, markTypes) { + if (scene.marktype !== 'group' && markTypes != null && !markTypes.includes(scene.marktype)) { + return; + } const mark = Marks[scene.marktype]; if (scene.clip) clip$2(ctx, scene); - mark.draw.call(this, ctx, scene, bounds); + mark.draw.call(this, ctx, scene, bounds, markTypes); if (scene.clip) ctx.restore(); }, clear(x, y, w, h) { @@ -12872,7 +12920,7 @@ this._root = null; this._defs = null; } - const base = Renderer.prototype; + const base$1 = Renderer.prototype; inherits(SVGRenderer, Renderer, { /** * Initialize a new SVGRenderer instance. @@ -12907,7 +12955,7 @@ // set background color if defined this.background(this._bgcolor); - return base.initialize.call(this, el, width, height, origin, scaleFactor); + return base$1.initialize.call(this, el, width, height, origin, scaleFactor); }, /** * Get / set the background color. @@ -12916,7 +12964,7 @@ if (arguments.length && this._svg) { this._svg.style.setProperty('background-color', bgcolor); } - return base.background.apply(this, arguments); + return base$1.background.apply(this, arguments); }, /** * Resize the display. @@ -12929,7 +12977,7 @@ * @return {SVGRenderer} - This renderer instance; */ resize(width, height, origin, scaleFactor) { - base.resize.call(this, width, height, origin, scaleFactor); + base$1.resize.call(this, width, height, origin, scaleFactor); if (this._svg) { setAttributes(this._svg, { width: this._width * this._scale, @@ -12976,12 +13024,14 @@ /** * Internal rendering method. * @param {object} scene - The root mark of a scenegraph to render. + * @param {Array} markTypes - Array of the mark types to render. + * If undefined, render all mark types */ - _render(scene) { + _render(scene, markTypes) { // perform spot updates and re-render markup if (this._dirtyCheck()) { if (this._dirtyAll) this._clearDefs(); - this.mark(this._root, scene); + this.mark(this._root, scene, undefined, markTypes); domClear(this._root, 1); } this.defs(); @@ -13071,16 +13121,23 @@ * @param {SVGElement} el - The parent element in the SVG tree. * @param {object} scene - The mark parent to render. * @param {SVGElement} prev - The previous sibling in the SVG tree. + * @param {Array} markTypes - Array of the mark types to render. + * If undefined, render all mark types */ - mark(el, scene, prev) { + mark(el, scene, prev, markTypes) { if (!this.isDirty(scene)) { return scene._svg; } const svg = this._svg, - mdef = Marks[scene.marktype], + markType = scene.marktype, + mdef = Marks[markType], events = scene.interactive === false ? 'none' : null, isGroup = mdef.tag === 'g'; const parent = bind$1(scene, el, prev, 'g', svg); + if (markType !== 'group' && markTypes != null && !markTypes.includes(markType)) { + domClear(parent, 0); + return scene._svg; + } parent.setAttribute('class', cssClass(scene)); // apply aria attributes to parent container element @@ -13097,7 +13154,7 @@ node = bind$1(item, parent, sibling, mdef.tag, svg); if (dirty) { this._update(mdef, node, item); - if (isGroup) recurse(this, node, item); + if (isGroup) recurse(this, node, item, markTypes); } sibling = node; ++i; @@ -13278,14 +13335,14 @@ } // Recursively process group contents. - function recurse(renderer, el, group) { + function recurse(renderer, el, group, markTypes) { // child 'g' element is second to last among children (path, g, path) // other children here are foreground and background path elements el = el.lastChild.previousSibling; let prev, idx = 0; visit(group, item => { - prev = renderer.mark(el, item, prev); + prev = renderer.mark(el, item, prev, markTypes); ++idx; }); @@ -13789,7 +13846,139 @@ } return s; } + + /** + * @typedef {Object} HybridRendererOptions + * + * @property {string[]} [svgMarkTypes=['text']] - An array of SVG mark types to render + * in the SVG layer. All other mark types + * will be rendered in the Canvas layer. + * @property {boolean} [svgOnTop=true] - Flag to determine if SVG should be rendered on top. + * @property {boolean} [debug=false] - Flag to enable or disable debugging mode. When true, + * the top layer will be stacked below the bottom layer + * rather than overlaid on top. + */ + + /** @type {HybridRendererOptions} */ + const OPTS = { + svgMarkTypes: ['text'], + svgOnTop: true, + debug: false + }; + + /** + * Configure the HybridRenderer + * + * @param {HybridRendererOptions} options - HybridRenderer configuration options. + */ + function setHybridRendererOptions(options) { + OPTS['svgMarkTypes'] = options.svgMarkTypes ?? ['text']; + OPTS['svgOnTop'] = options.svgOnTop ?? true; + OPTS['debug'] = options.debug ?? false; + } + function HybridRenderer(loader) { + Renderer.call(this, loader); + this._svgRenderer = new SVGRenderer(loader); + this._canvasRenderer = new CanvasRenderer(loader); + } + const base = Renderer.prototype; + inherits(HybridRenderer, Renderer, { + /** + * Initialize a new HybridRenderer instance. + * @param {DOMElement} el - The containing DOM element for the display. + * @param {number} width - The coordinate width of the display, in pixels. + * @param {number} height - The coordinate height of the display, in pixels. + * @param {Array} origin - The origin of the display, in pixels. + * The coordinate system will be translated to this point. + * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply + * the width and height to determine the final pixel size. + * @return {HybridRenderer} - This renderer instance. + */ + initialize(el, width, height, origin, scaleFactor) { + this._root_el = domChild(el, 0, 'div'); + const bottomEl = domChild(this._root_el, 0, 'div'); + const topEl = domChild(this._root_el, 1, 'div'); + this._root_el.style.position = 'relative'; + + // Set position absolute to overlay svg on top of canvas + if (!OPTS.debug) { + bottomEl.style.height = '100%'; + topEl.style.position = 'absolute'; + topEl.style.top = '0'; + topEl.style.left = '0'; + topEl.style.height = '100%'; + topEl.style.width = '100%'; + } + this._svgEl = OPTS.svgOnTop ? topEl : bottomEl; + this._canvasEl = OPTS.svgOnTop ? bottomEl : topEl; + + // pointer-events to none on SVG layer so that canvas gets all events + this._svgEl.style.pointerEvents = 'none'; + this._canvasRenderer.initialize(this._canvasEl, width, height, origin, scaleFactor); + this._svgRenderer.initialize(this._svgEl, width, height, origin, scaleFactor); + return base.initialize.call(this, el, width, height, origin, scaleFactor); + }, + /** + * Flag a mark item as dirty. + * @param {Item} item - The mark item. + */ + dirty(item) { + if (OPTS.svgMarkTypes.includes(item.mark.marktype)) { + this._svgRenderer.dirty(item); + } else { + this._canvasRenderer.dirty(item); + } + return this; + }, + /** + * Internal rendering method. + * @param {object} scene - The root mark of a scenegraph to render. + * @param {Array} markTypes - Array of the mark types to render. + * If undefined, render all mark types + */ + _render(scene, markTypes) { + const allMarkTypes = markTypes ?? ['arc', 'area', 'image', 'line', 'path', 'rect', 'rule', 'shape', 'symbol', 'text', 'trail']; + const canvasMarkTypes = allMarkTypes.filter(m => !OPTS.svgMarkTypes.includes(m)); + this._svgRenderer.render(scene, OPTS.svgMarkTypes); + this._canvasRenderer.render(scene, canvasMarkTypes); + }, + /** + * Resize the display. + * @param {number} width - The new coordinate width of the display, in pixels. + * @param {number} height - The new coordinate height of the display, in pixels. + * @param {Array} origin - The new origin of the display, in pixels. + * The coordinate system will be translated to this point. + * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply + * the width and height to determine the final pixel size. + * @return {SVGRenderer} - This renderer instance; + */ + resize(width, height, origin, scaleFactor) { + base.resize.call(this, width, height, origin, scaleFactor); + this._svgRenderer.resize(width, height, origin, scaleFactor); + this._canvasRenderer.resize(width, height, origin, scaleFactor); + return this; + }, + background(bgcolor) { + // Propagate background color to lower canvas renderer + if (OPTS.svgOnTop) { + this._canvasRenderer.background(bgcolor); + } else { + this._svgRenderer.background(bgcolor); + } + return this; + } + }); + function HybridHandler(loader, tooltip) { + CanvasHandler.call(this, loader, tooltip); + } + inherits(HybridHandler, CanvasHandler, { + initialize(el, origin, obj) { + const canvas = domChild(domChild(el, 0, 'div'), OPTS.svgOnTop ? 0 : 1, 'div'); + return CanvasHandler.prototype.initialize.call(this, canvas, origin, obj); + } + }); const Canvas = 'canvas'; + const Hybrid = 'hybrid'; const PNG = 'png'; const SVG = 'svg'; const None$1 = 'none'; @@ -13797,6 +13986,7 @@ Canvas: Canvas, PNG: PNG, SVG: SVG, + Hybrid: Hybrid, None: None$1 }; const modules = {}; @@ -13810,6 +14000,11 @@ headless: SVGStringRenderer, handler: SVGHandler }; + modules[Hybrid] = { + renderer: HybridRenderer, + headless: HybridRenderer, + handler: HybridHandler + }; modules[None$1] = {}; function renderModule(name, _) { name = String(name || '').toLowerCase(); @@ -19608,7 +19803,7 @@ // map polygons to paths for (let i = 0, n = data.length; i < n; ++i) { const polygon = voronoi.cellPolygon(i); - data[i][as] = polygon ? toPathString(polygon) : null; + data[i][as] = polygon && !isPoint(polygon) ? toPathString(polygon) : null; } return pulse.reflow(_.modified()).modifies(as); } @@ -19622,6 +19817,9 @@ for (; p[n][0] === x && p[n][1] === y; --n); return 'M' + p.slice(0, n + 1).join('L') + 'Z'; } + function isPoint(p) { + return p.length === 2 && p[0][0] === p[1][0] && p[0][1] === p[1][1]; + } var voronoi = /*#__PURE__*/Object.freeze({ __proto__: null, @@ -20837,7 +21035,7 @@ resolvefilter: ResolveFilter }); - var version = "5.25.0"; + var version = "5.26.0"; const RawCode = 'RawCode'; const Literal = 'Literal'; @@ -22418,6 +22616,15 @@ return codegen; } + // Registers vega-util field accessors to protect against XSS attacks + const SELECTION_GETTER = Symbol('vega_selection_getter'); + function getter(f) { + if (!f.getter || !f.getter[SELECTION_GETTER]) { + f.getter = field$1(f.field); + f.getter[SELECTION_GETTER] = true; + } + return f.getter; + } const Intersect = 'intersect'; const Union = 'union'; const VlMulti = 'vlMulti'; @@ -22443,11 +22650,10 @@ f; for (; i < n; ++i) { f = fields[i]; - f.getter = field$1.getter || field$1(f.field); - dval = f.getter(datum); + dval = getter(f)(datum); if (isDate$1(dval)) dval = toNumber(dval); if (isDate$1(values[i])) values[i] = toNumber(values[i]); - if (isDate$1(values[i][0])) values[i] = values[i].map(toNumber); + if (isArray(values[i]) && isDate$1(values[i][0])) values[i] = values[i].map(toNumber); if (f.type === TYPE_ENUM) { // Enumerated fields can either specify individual values (single/multi selections) // or an array of values (interval selections). @@ -22555,7 +22761,7 @@ */ function selectionTuples(array, base) { return array.map(x => extend(base.fields ? { - values: base.fields.map(f => (f.getter || (f.getter = field$1(f.field)))(x.datum)) + values: base.fields.map(f => getter(f)(x.datum)) } : { [SelectionId]: $selectionId(x.datum) }, base)); @@ -22870,6 +23076,10 @@ const geoArea = geoMethod('area', d3Geo.geoArea); const geoBounds = geoMethod('bounds', d3Geo.geoBounds); const geoCentroid = geoMethod('centroid', d3Geo.geoCentroid); + function geoScale(projection, group) { + const p = getScale(projection, (group || this).context); + return p && p.scale(); + } function inScope(item) { const group = this.context.group; let value = false; @@ -23415,6 +23625,7 @@ expressionFunction('geoBounds', geoBounds, scaleVisitor); expressionFunction('geoCentroid', geoCentroid, scaleVisitor); expressionFunction('geoShape', geoShape, scaleVisitor); + expressionFunction('geoScale', geoScale, scaleVisitor); expressionFunction('indata', indata, indataVisitor); expressionFunction('data', data$1, dataVisitor); expressionFunction('treePath', treePath, dataVisitor); @@ -24079,8 +24290,8 @@ item: null })); - // evaluate cursor on each mousemove event - view.on(view.events('view', 'mousemove'), cursor, (_, event) => { + // evaluate cursor on each pointermove event + view.on(view.events('view', 'pointermove'), cursor, (_, event) => { const value = cursor.value, user = value ? isString(value) ? value : value.user : Default, item = event.item && event.item.cursor || null; @@ -24352,11 +24563,11 @@ hoverSet = [hoverSet || 'hover']; leaveSet = [leaveSet || 'update', hoverSet[0]]; - // invoke hover set upon mouseover - this.on(this.events('view', 'mouseover', itemFilter), markTarget, invoke(hoverSet)); + // invoke hover set upon pointerover + this.on(this.events('view', 'pointerover', itemFilter), markTarget, invoke(hoverSet)); - // invoke leave set upon mouseout - this.on(this.events('view', 'mouseout', itemFilter), markTarget, invoke(leaveSet)); + // invoke leave set upon pointerout + this.on(this.events('view', 'pointerout', itemFilter), markTarget, invoke(leaveSet)); return this; } @@ -29206,6 +29417,7 @@ } // -- Transforms ----- + extend(transforms, tx, vtx, encode$1, geo, force, label, tree, reg, voronoi, wordcloud, xf); Object.defineProperty(exports, 'path', { @@ -29226,6 +29438,8 @@ exports.GroupItem = GroupItem; exports.HOURS = HOURS; exports.Handler = Handler; + exports.HybridHandler = HybridHandler; + exports.HybridRenderer = HybridRenderer; exports.Info = Info; exports.Item = Item; exports.MILLISECONDS = MILLISECONDS; @@ -29399,6 +29613,7 @@ exports.sceneZOrder = zorder; exports.scheme = scheme; exports.serializeXML = serializeXML; + exports.setHybridRendererOptions = setHybridRendererOptions; exports.setRandom = setRandom; exports.span = span; exports.splitAccessPath = splitAccessPath; diff --git a/docs/vega-core.min.js b/docs/vega-core.min.js index 750a0ac5f7..e7d94a48b7 100644 --- a/docs/vega-core.min.js +++ b/docs/vega-core.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("d3-dsv"),require("topojson-client"),require("d3-array"),require("d3-format"),require("d3-time"),require("d3-time-format"),require("d3-shape"),require("d3-path"),require("d3-scale"),require("d3-interpolate"),require("d3-geo"),require("d3-color"),require("d3-force"),require("d3-hierarchy"),require("d3-delaunay"),require("d3-timer")):"function"==typeof define&&define.amd?define(["exports","d3-dsv","topojson-client","d3-array","d3-format","d3-time","d3-time-format","d3-shape","d3-path","d3-scale","d3-interpolate","d3-geo","d3-color","d3-force","d3-hierarchy","d3-delaunay","d3-timer"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).vega={},e.d3,e.topojson,e.d3,e.d3,e.d3,e.d3,e.d3,e.d3,e.d3,e.d3,e.d3,e.d3,e.d3,e.d3,e.d3,e.d3)}(this,(function(e,t,n,r,i,a,o,s,u,l,c,d,f,h,p,m,g){"use strict";function y(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var v=y(l),b=y(c);function x(e,t,n){return e.fields=t||[],e.fname=n,e}function _(e){return null==e?null:e.fname}function A(e){return null==e?null:e.fields}function k(e){return 1===e.length?w(e[0]):D(e)}const w=e=>function(t){return t[e]},D=e=>{const t=e.length;return function(n){for(let r=0;rr&&l(),s=r=i+1):"]"===a&&(s||E("Access path missing open bracket: "+e),s>0&&l(),s=0,r=i+1):i>r?l():r=i+1}return s&&E("Access path missing closing bracket: "+e),o&&E("Access path missing closing quote: "+e),i>r&&(i++,l()),t}function F(e,t,n){const r=C(e);return e=1===r.length?r[0]:e,x((n&&n.get||k)(r),[e],t||e)}const M=F("id"),S=x((e=>e),[],"identity"),B=x((()=>0),[],"zero"),O=x((()=>1),[],"one"),z=x((()=>!0),[],"true"),R=x((()=>!1),[],"false");function $(e,t,n){const r=[t].concat([].slice.call(n));console[e].apply(console,r)}const q=0,L=1,T=2,N=3,P=4;function U(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:$,r=e||q;return{level(e){return arguments.length?(r=+e,this):r},error(){return r>=L&&n(t||"error","ERROR",arguments),this},warn(){return r>=T&&n(t||"warn","WARN",arguments),this},info(){return r>=N&&n(t||"log","INFO",arguments),this},debug(){return r>=P&&n(t||"log","DEBUG",arguments),this}}}var j=Array.isArray;function I(e){return e===Object(e)}const W=e=>"__proto__"!==e;function G(){for(var e=arguments.length,t=new Array(e),n=0;n{for(const n in t)if("signals"===n)e.signals=V(e.signals,t.signals);else{const r="legend"===n?{layout:1}:"style"===n||null;H(e,n,t[n],r)}return e}),{})}function H(e,t,n,r){if(!W(t))return;let i,a;if(I(n)&&!j(n))for(i in a=I(e[t])?e[t]:e[t]={},n)r&&(!0===r||r[i])?H(a,i,n[i]):W(i)&&(a[i]=n[i]);else e[t]=n}function V(e,t){if(null==e)return t;const n={},r=[];function i(e){n[e.name]||(n[e.name]=1,r.push(e))}return t.forEach(i),e.forEach(i),r}function Y(e){return e[e.length-1]}function X(e){return null==e||""===e?null:+e}const J=e=>t=>e*Math.exp(t),Q=e=>t=>Math.log(e*t),K=e=>t=>Math.sign(t)*Math.log1p(Math.abs(t/e)),Z=e=>t=>Math.sign(t)*Math.expm1(Math.abs(t))*e,ee=e=>t=>t<0?-Math.pow(-t,e):Math.pow(t,e);function te(e,t,n,r){const i=n(e[0]),a=n(Y(e)),o=(a-i)*t;return[r(i-o),r(a-o)]}function ne(e,t){return te(e,t,X,S)}function re(e,t){var n=Math.sign(e[0]);return te(e,t,Q(n),J(n))}function ie(e,t,n){return te(e,t,ee(n),ee(1/n))}function ae(e,t,n){return te(e,t,K(n),Z(n))}function oe(e,t,n,r,i){const a=r(e[0]),o=r(Y(e)),s=null!=t?r(t):(a+o)/2;return[i(s+(a-s)*n),i(s+(o-s)*n)]}function se(e,t,n){return oe(e,t,n,X,S)}function ue(e,t,n){const r=Math.sign(e[0]);return oe(e,t,n,Q(r),J(r))}function le(e,t,n,r){return oe(e,t,n,ee(r),ee(1/r))}function ce(e,t,n,r){return oe(e,t,n,K(r),Z(r))}function de(e){return 1+~~(new Date(e).getMonth()/3)}function fe(e){return 1+~~(new Date(e).getUTCMonth()/3)}function he(e){return null!=e?j(e)?e:[e]:[]}function pe(e,t,n){let r,i=e[0],a=e[1];return a=n-t?[t,n]:[i=Math.min(Math.max(i,t),n-r),i+r]}function me(e){return"function"==typeof e}const ge="descending";function ye(e,t,n){n=n||{},t=he(t)||[];const r=[],i=[],a={},o=n.comparator||be;return he(e).forEach(((e,o)=>{null!=e&&(r.push(t[o]===ge?-1:1),i.push(e=me(e)?e:F(e,null,n)),(A(e)||[]).forEach((e=>a[e]=1)))})),0===i.length?null:x(o(i,r),Object.keys(a))}const ve=(e,t)=>(et||null==t)&&null!=e?1:(t=t instanceof Date?+t:t,(e=e instanceof Date?+e:e)!==e&&t==t?-1:t!=t&&e==e?1:0),be=(e,t)=>1===e.length?xe(e[0],t[0]):_e(e,t,e.length),xe=(e,t)=>function(n,r){return ve(e(n),e(r))*t},_e=(e,t,n)=>(t.push(0),function(r,i){let a,o=0,s=-1;for(;0===o&&++se}function ke(e,t){let n;return r=>{n&&clearTimeout(n),n=setTimeout((()=>(t(r),n=null)),e)}}function we(e){for(let t,n,r=1,i=arguments.length;ra&&(a=r))}else{for(r=t(e[o]);oa&&(a=r))}return[i,a]}function Ee(e,t){const n=e.length;let r,i,a,o,s,u=-1;if(null==t){for(;++u=i){r=a=i;break}if(u===n)return[-1,-1];for(o=s=u;++ui&&(r=i,o=u),a=i){r=a=i;break}if(u===n)return[-1,-1];for(o=s=u;++ui&&(r=i,o=u),ar(e)?n[e]:void 0,set(e,t){return r(e)||(++i.size,n[e]===Me&&--i.empty),n[e]=t,this},delete(e){return r(e)&&(--i.size,++i.empty,n[e]=Me),this},clear(){i.size=i.empty=0,i.object=n={}},test(e){return arguments.length?(t=e,i):t},clean(){const e={};let r=0;for(const i in n){const a=n[i];a===Me||t&&t(a)||(e[i]=a,++r)}i.size=r,i.empty=0,i.object=n=e}};return e&&Object.keys(e).forEach((t=>{i.set(t,e[t])})),i}function Be(e,t,n,r,i,a){if(!n&&0!==n)return a;const o=+n;let s,u=e[0],l=Y(e);lo&&(i=a,a=o,o=i),r=void 0===r||r,((n=void 0===n||n)?a<=e:ae.replace(/\\(.)/g,"$1"))):he(e));const r=e&&e.length,i=n&&n.get||k,a=e=>i(t?[e]:C(e));let o;if(r)if(1===r){const t=a(e[0]);o=function(e){return""+t(e)}}else{const t=e.map(a);o=function(e){let n=""+t[0](e),i=0;for(;++i{t={},n={},r=0},a=(i,a)=>(++r>e&&(n=t,t={},r=1),t[i]=a);return i(),{clear:i,has:e=>Fe(t,e)||Fe(n,e),get:e=>Fe(t,e)?t[e]:Fe(n,e)?a(e,n[e]):void 0,set:(e,n)=>Fe(t,e)?t[e]=n:a(e,n)}}function We(e,t,n,r){const i=t.length,a=n.length;if(!a)return t;if(!i)return n;const o=r||new t.constructor(i+a);let s=0,u=0,l=0;for(;s0?n[u++]:t[s++];for(;s=0;)n+=e;return n}function He(e,t,n,r){const i=n||" ",a=e+"",o=t-a.length;return o<=0?a:"left"===r?Ge(i,o)+a:"center"===r?Ge(i,~~(o/2))+a+Ge(i,Math.ceil(o/2)):a+Ge(i,o)}function Ve(e){return e&&Y(e)-e[0]||0}function Ye(e){return j(e)?"["+e.map(Ye)+"]":I(e)||Ne(e)?JSON.stringify(e).replace("\u2028","\\u2028").replace("\u2029","\\u2029"):e}function Xe(e){return null==e||""===e?null:!(!e||"false"===e||"0"===e)&&!!e}const Je=e=>Le(e)||$e(e)?e:Date.parse(e);function Qe(e,t){return t=t||Je,null==e||""===e?null:t(e)}function Ke(e){return null==e||""===e?null:e+""}function Ze(e){const t={},n=e.length;for(let r=0;r(e[t]=1+n,e)),{});function mt(e){const t=he(e).slice(),n={};t.length||E("Missing time unit."),t.forEach((e=>{Fe(pt,e)?n[e]=1:E(`Invalid time unit: ${e}.`)}));return(n[at]||n[st]?1:0)+(n[rt]||n[it]||n[ot]?1:0)+(n[ut]?1:0)>1&&E(`Incompatible time units: ${e}`),t.sort(((e,t)=>pt[e]-pt[t])),t}const gt={[nt]:"%Y ",[rt]:"Q%q ",[it]:"%b ",[ot]:"%d ",[at]:"W%U ",[st]:"%a ",[ut]:"%j ",[lt]:"%H:00",[ct]:"00:%M",[dt]:":%S",[ft]:".%L",[`${nt}-${it}`]:"%Y-%m ",[`${nt}-${it}-${ot}`]:"%Y-%m-%d ",[`${lt}-${ct}`]:"%H:%M"};function yt(e,t){const n=we({},gt,t),r=mt(e),i=r.length;let a,o,s="",u=0;for(u=0;uu;--a)if(o=r.slice(u,a).join("-"),null!=n[o]){s+=n[o],u=a;break}return s.trim()}const vt=new Date;function bt(e){return vt.setFullYear(e),vt.setMonth(0),vt.setDate(1),vt.setHours(0,0,0,0),vt}function xt(e){return At(new Date(e))}function _t(e){return kt(new Date(e))}function At(e){return a.timeDay.count(bt(e.getFullYear())-1,e)}function kt(e){return a.timeWeek.count(bt(e.getFullYear())-1,e)}function wt(e){return bt(e).getDay()}function Dt(e,t,n,r,i,a,o){if(0<=e&&e<100){const s=new Date(-1,t,n,r,i,a,o);return s.setFullYear(e),s}return new Date(e,t,n,r,i,a,o)}function Et(e){return Ft(new Date(e))}function Ct(e){return Mt(new Date(e))}function Ft(e){const t=Date.UTC(e.getUTCFullYear(),0,1);return a.utcDay.count(t-1,e)}function Mt(e){const t=Date.UTC(e.getUTCFullYear(),0,1);return a.utcWeek.count(t-1,e)}function St(e){return vt.setTime(Date.UTC(e,0,1)),vt.getUTCDay()}function Bt(e,t,n,r,i,a,o){if(0<=e&&e<100){const e=new Date(Date.UTC(-1,t,n,r,i,a,o));return e.setUTCFullYear(n.y),e}return new Date(Date.UTC(e,t,n,r,i,a,o))}function Ot(e,t,n,r,i){const a=t||1,o=Y(e),s=(e,t,i)=>function(e,t,n,r){const i=n<=1?e:r?(t,i)=>r+n*Math.floor((e(t,i)-r)/n):(t,r)=>n*Math.floor(e(t,r)/n);return t?(e,n)=>t(i(e,n),n):i}(n[i=i||e],r[i],e===o&&a,t),u=new Date,l=Ze(e),c=l[nt]?s(nt):Ae(2012),d=l[it]?s(it):l[rt]?s(rt):B,f=l[at]&&l[st]?s(st,1,at+st):l[at]?s(at,1):l[st]?s(st,1):l[ot]?s(ot,1):l[ut]?s(ut,1):O,h=l[lt]?s(lt):B,p=l[ct]?s(ct):B,m=l[dt]?s(dt):B,g=l[ft]?s(ft):B;return function(e){u.setTime(+e);const t=c(u);return i(t,d(u),f(u,t),h(u),p(u),m(u),g(u))}}function zt(e,t,n){return t+7*e-(n+6)%7}const Rt={[nt]:e=>e.getFullYear(),[rt]:e=>Math.floor(e.getMonth()/3),[it]:e=>e.getMonth(),[ot]:e=>e.getDate(),[lt]:e=>e.getHours(),[ct]:e=>e.getMinutes(),[dt]:e=>e.getSeconds(),[ft]:e=>e.getMilliseconds(),[ut]:e=>At(e),[at]:e=>kt(e),[at+st]:(e,t)=>zt(kt(e),e.getDay(),wt(t)),[st]:(e,t)=>zt(1,e.getDay(),wt(t))},$t={[rt]:e=>3*e,[at]:(e,t)=>zt(e,0,wt(t))};function qt(e,t){return Ot(e,t||1,Rt,$t,Dt)}const Lt={[nt]:e=>e.getUTCFullYear(),[rt]:e=>Math.floor(e.getUTCMonth()/3),[it]:e=>e.getUTCMonth(),[ot]:e=>e.getUTCDate(),[lt]:e=>e.getUTCHours(),[ct]:e=>e.getUTCMinutes(),[dt]:e=>e.getUTCSeconds(),[ft]:e=>e.getUTCMilliseconds(),[ut]:e=>Ft(e),[at]:e=>Mt(e),[st]:(e,t)=>zt(1,e.getUTCDay(),St(t)),[at+st]:(e,t)=>zt(Mt(e),e.getUTCDay(),St(t))},Tt={[rt]:e=>3*e,[at]:(e,t)=>zt(e,0,St(t))};function Nt(e,t){return Ot(e,t||1,Lt,Tt,Bt)}const Pt={[nt]:a.timeYear,[rt]:a.timeMonth.every(3),[it]:a.timeMonth,[at]:a.timeWeek,[ot]:a.timeDay,[st]:a.timeDay,[ut]:a.timeDay,[lt]:a.timeHour,[ct]:a.timeMinute,[dt]:a.timeSecond,[ft]:a.timeMillisecond},Ut={[nt]:a.utcYear,[rt]:a.utcMonth.every(3),[it]:a.utcMonth,[at]:a.utcWeek,[ot]:a.utcDay,[st]:a.utcDay,[ut]:a.utcDay,[lt]:a.utcHour,[ct]:a.utcMinute,[dt]:a.utcSecond,[ft]:a.utcMillisecond};function jt(e){return Pt[e]}function It(e){return Ut[e]}function Wt(e,t,n){return e?e.offset(t,n):void 0}function Gt(e,t,n){return Wt(jt(e),t,n)}function Ht(e,t,n){return Wt(It(e),t,n)}function Vt(e,t,n,r){return e?e.range(t,n,r):void 0}function Yt(e,t,n,r){return Vt(jt(e),t,n,r)}function Xt(e,t,n,r){return Vt(It(e),t,n,r)}const Jt=1e3,Qt=6e4,Kt=36e5,Zt=864e5,en=2592e6,tn=31536e6,nn=[nt,it,ot,lt,ct,dt,ft],rn=nn.slice(0,-1),an=rn.slice(0,-1),on=an.slice(0,-1),sn=on.slice(0,-1),un=[nt,it],ln=[nt],cn=[[rn,1,Jt],[rn,5,5e3],[rn,15,15e3],[rn,30,3e4],[an,1,Qt],[an,5,3e5],[an,15,9e5],[an,30,18e5],[on,1,Kt],[on,3,108e5],[on,6,216e5],[on,12,432e5],[sn,1,Zt],[[nt,at],1,6048e5],[un,1,en],[un,3,7776e6],[ln,1,tn]];function dn(e){const t=e.extent,n=e.maxbins||40,i=Math.abs(Ve(t))/n;let a,o,s=r.bisector((e=>e[2])).right(cn,i);return s===cn.length?(a=ln,o=r.tickStep(t[0]/tn,t[1]/tn,n)):s?(s=cn[i/cn[s-1][2]t[n]||(t[n]=e(n))}function hn(e){const t=fn(e.format),n=e.formatPrefix;return{format:t,formatPrefix:n,formatFloat(e){const n=i.formatSpecifier(e||",");if(null==n.precision){switch(n.precision=12,n.type){case"%":n.precision-=2;break;case"e":n.precision-=1}return r=t(n),a=t(".1f")(1)[1],e=>{const t=r(e),n=t.indexOf(a);if(n<0)return t;let i=function(e,t){let n,r=e.lastIndexOf("e");if(r>0)return r;for(r=e.length;--r>t;)if(n=e.charCodeAt(r),n>=48&&n<=57)return r+1}(t,n);const o=in;)if("0"!==t[i]){++i;break}return t.slice(0,i)+o}}return t(n);var r,a},formatSpan(e,a,o,s){s=i.formatSpecifier(null==s?",f":s);const u=r.tickStep(e,a,o),l=Math.max(Math.abs(e),Math.abs(a));let c;if(null==s.precision)switch(s.type){case"s":return isNaN(c=i.precisionPrefix(u,l))||(s.precision=c),n(s,l);case"":case"e":case"g":case"p":case"r":isNaN(c=i.precisionRound(u,l))||(s.precision=c-("e"===s.type));break;case"f":case"%":isNaN(c=i.precisionFixed(u))||(s.precision=c-2*("%"===s.type))}return t(s)}}}let pn,mn;function gn(){return pn=hn({format:i.format,formatPrefix:i.formatPrefix})}function yn(e){return hn(i.formatLocale(e))}function vn(e){return arguments.length?pn=yn(e):pn}function bn(e,t,n){I(n=n||{})||E(`Invalid time multi-format specifier: ${n}`);const r=t(dt),i=t(ct),a=t(lt),o=t(ot),s=t(at),u=t(it),l=t(rt),c=t(nt),d=e(n[ft]||".%L"),f=e(n[dt]||":%S"),h=e(n[ct]||"%I:%M"),p=e(n[lt]||"%I %p"),m=e(n[ot]||n[st]||"%a %d"),g=e(n[at]||"%b %d"),y=e(n[it]||"%B"),v=e(n[rt]||"%B"),b=e(n[nt]||"%Y");return e=>(r(e)Ne(e)?t(e):bn(t,jt,e),utcFormat:e=>Ne(e)?n(e):bn(n,It,e),timeParse:fn(e.parse),utcParse:fn(e.utcParse)}}function _n(){return mn=xn({format:o.timeFormat,parse:o.timeParse,utcFormat:o.utcFormat,utcParse:o.utcParse})}function An(e){return xn(o.timeFormatLocale(e))}function kn(e){return arguments.length?mn=An(e):mn}gn(),_n();const wn=(e,t)=>we({},e,t);function Dn(e,t){const n=e?yn(e):vn(),r=t?An(t):kn();return wn(n,r)}function En(e,t){const n=arguments.length;return n&&2!==n&&E("defaultLocale expects either zero or two arguments."),n?wn(vn(e),kn(t)):wn(vn(),kn())}const Cn=/^(data:|([A-Za-z]+:)?\/\/)/,Fn=/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,Mn=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g,Sn="file://";async function Bn(e,t){const n=await this.sanitize(e,t),r=n.href;return n.localFile?this.file(r):this.http(r,t)}async function On(e,t){t=we({},this.options,t);const n=this.fileAccess,r={href:null};let i,a,o;const s=Fn.test(e.replace(Mn,""));null!=e&&"string"==typeof e&&s||E("Sanitize failure, invalid URI: "+Ye(e));const u=Cn.test(e);return(o=t.baseURL)&&!u&&(e.startsWith("/")||o.endsWith("/")||(e="/"+e),e=o+e),a=(i=e.startsWith(Sn))||"file"===t.mode||"http"!==t.mode&&!u&&n,i?e=e.slice(Sn.length):e.startsWith("//")&&("file"===t.defaultProtocol?(e=e.slice(2),a=!0):e=(t.defaultProtocol||"http")+":"+e),Object.defineProperty(r,"localFile",{value:!!a}),r.href=e,t.target&&(r.target=t.target+""),t.rel&&(r.rel=t.rel+""),"image"===t.context&&t.crossOrigin&&(r.crossOrigin=t.crossOrigin+""),r}function zn(e){return e?t=>new Promise(((n,r)=>{e.readFile(t,((e,t)=>{e?r(e):n(t)}))})):Rn}async function Rn(){E("No file system access.")}function $n(e){return e?async function(t,n){const r=we({},this.options.http,n),i=n&&n.response,a=await e(t,r);return a.ok?me(a[i])?a[i]():a.text():E(a.status+""+a.statusText)}:qn}async function qn(){E("No HTTP fetch method available.")}const Ln=e=>null!=e&&e==e,Tn=e=>!(Number.isNaN(+e)||e instanceof Date),Nn={boolean:Xe,integer:X,number:X,date:Qe,string:Ke,unknown:S},Pn=[e=>"true"===e||"false"===e||!0===e||!1===e,e=>Tn(e)&&Number.isInteger(+e),Tn,e=>!Number.isNaN(Date.parse(e))],Un=["boolean","integer","number","date"];function jn(e,t){if(!e||!e.length)return"unknown";const n=e.length,r=Pn.length,i=Pn.map(((e,t)=>t+1));for(let a,o,s=0,u=0;s0===e?t:e),0)-1]}function In(e,t){return t.reduce(((t,n)=>(t[n]=jn(e,n),t)),{})}function Wn(e){const t=function(t,n){const r={delimiter:e};return Gn(t,n?we(n,r):r)};return t.responseType="text",t}function Gn(e,n){return n.header&&(e=n.header.map(Ye).join(n.delimiter)+"\n"+e),t.dsvFormat(n.delimiter).parse(e+"")}function Hn(e,t){const n=t&&t.property?F(t.property):S;return!I(e)||(r=e,"function"==typeof Buffer&&me(Buffer.isBuffer)&&Buffer.isBuffer(r))?n(JSON.parse(e)):function(e,t){!j(e)&&qe(e)&&(e=[...e]);return t&&t.copy?JSON.parse(JSON.stringify(e)):e}(n(e),t);var r}Gn.responseType="text",Hn.responseType="json";const Vn={interior:(e,t)=>e!==t,exterior:(e,t)=>e===t};function Yn(e,t){let r,i,a,o;return e=Hn(e,t),t&&t.feature?(r=n.feature,a=t.feature):t&&t.mesh?(r=n.mesh,a=t.mesh,o=Vn[t.filter]):E("Missing TopoJSON feature or mesh parameter."),i=(i=e.objects[a])?r(e,i,o):E("Invalid TopoJSON object: "+a),i&&i.features||[i]}Yn.responseType="json";const Xn={dsv:Gn,csv:Wn(","),tsv:Wn("\t"),json:Hn,topojson:Yn};function Jn(e,t){return arguments.length>1?(Xn[e]=t,this):Fe(Xn,e)?Xn[e]:null}function Qn(e){const t=Jn(e);return t&&t.responseType||"text"}function Kn(e,t,n,r){const i=Jn((t=t||{}).type||"json");return i||E("Unknown data format type: "+t.type),e=i(e,t),t.parse&&function(e,t,n,r){if(!e.length)return;const i=kn();n=n||i.timeParse,r=r||i.utcParse;let a,o,s,u,l,c,d=e.columns||Object.keys(e[0]);"auto"===t&&(t=In(e,d));d=Object.keys(t);const f=d.map((e=>{const i=t[e];let a,o;if(i&&(i.startsWith("date:")||i.startsWith("utc:"))){a=i.split(/:(.+)?/,2),o=a[1],("'"===o[0]&&"'"===o[o.length-1]||'"'===o[0]&&'"'===o[o.length-1])&&(o=o.slice(1,-1));return("utc"===a[0]?r:n)(o)}if(!Nn[i])throw Error("Illegal format pattern: "+e+":"+i);return Nn[i]}));for(s=0,l=e.length,c=d.length;s({options:n||{},sanitize:On,load:Bn,fileAccess:!!t,file:zn(t),http:$n(e)})}("undefined"!=typeof fetch&&fetch,null);function er(e){const t=e||S,n=[],r={};return n.add=e=>{const i=t(e);return r[i]||(r[i]=1,n.push(e)),n},n.remove=e=>{const i=t(e);if(r[i]){r[i]=0;const t=n.indexOf(e);t>=0&&n.splice(t,1)}return n},n}async function tr(e,t){try{await t(e)}catch(t){e.error(t)}}const nr=Symbol("vega_id");let rr=1;function ir(e){return!(!e||!ar(e))}function ar(e){return e[nr]}function or(e,t){return e[nr]=t,e}function sr(e){const t=e===Object(e)?e:{data:e};return ar(t)?t:or(t,rr++)}function ur(e){return lr(e,sr({}))}function lr(e,t){for(const n in e)t[n]=e[n];return t}function cr(e,t){return or(t,ar(e))}function dr(e,t){return e?t?(n,r)=>e(n,r)||ar(t(n))-ar(t(r)):(t,n)=>e(t,n)||ar(t)-ar(n):null}function fr(e){return e&&e.constructor===hr}function hr(){const e=[],t=[],n=[],r=[],i=[];let a=null,o=!1;return{constructor:hr,insert(t){const n=he(t),r=n.length;for(let t=0;t{p(e)&&(l[ar(e)]=-1)}));for(d=0,f=e.length;d0&&(y(m,p,h.value),s.modifies(p));for(d=0,f=i.length;d{p(e)&&l[ar(e)]>0&&y(e,h.field,h.value)})),s.modifies(h.field);if(o)s.mod=t.length||r.length?u.filter((e=>l[ar(e)]>0)):u.slice();else for(g in c)s.mod.push(c[g]);return(a||null==a&&(t.length||r.length))&&s.clean(!0),s}}}const pr="_:mod:_";function mr(){Object.defineProperty(this,pr,{writable:!0,value:{}})}mr.prototype={set(e,t,n,r){const i=this,a=i[e],o=i[pr];return null!=t&&t>=0?(a[t]!==n||r)&&(a[t]=n,o[t+":"+e]=-1,o[e]=-1):(a!==n||r)&&(i[e]=n,o[e]=j(n)?1+n.length:-1),i},modified(e,t){const n=this[pr];if(!arguments.length){for(const e in n)if(n[e])return!0;return!1}if(j(e)){for(let t=0;t=0?t+1{o instanceof vr?(o!==this&&(t&&o.targets().add(this),a.push(o)),i.push({op:o,name:e,index:n})):r.set(e,n,o)};for(o in e)if(s=e[o],"pulse"===o)he(s).forEach((e=>{e instanceof vr?e!==this&&(e.targets().add(this),a.push(e)):E("Pulse parameters must be operator instances.")})),this.source=s;else if(j(s))for(r.set(o,-1,Array(u=s.length)),l=0;l{const n=Date.now();return n-t>e?(t=n,1):0}))},debounce(e){const t=Ar();return this.targets().add(Ar(null,null,ke(e,(e=>{const n=e.dataflow;t.receive(e),n&&n.run&&n.run()})))),t},between(e,t){let n=!1;return e.targets().add(Ar(null,null,(()=>n=!0))),t.targets().add(Ar(null,null,(()=>n=!1))),this.filter((()=>n))},detach(){this._filter=z,this._targets=null}};const kr={skip:!0};function wr(e,t,n,r,i,a){const o=we({},a,kr);let s,u;me(n)||(n=Ae(n)),void 0===r?s=t=>e.touch(n(t)):me(r)?(u=new vr(null,r,i,!1),s=t=>{u.evaluate(t);const r=n(t),i=u.value;fr(i)?e.pulse(r,i,a):e.update(r,i,o)}):s=t=>e.update(n(t),r,o),t.apply(s)}function Dr(e,t,n,r,i,a){if(void 0===r)t.targets().add(n);else{const o=a||{},s=new vr(null,function(e,t){return t=me(t)?t:Ae(t),e?function(n,r){const i=t(n,r);return e.skip()||(e.skip(i!==this.value).value=i),i}:t}(n,r),i,!1);s.modified(o.force),s.rank=t.rank,t.targets().add(s),n&&(s.skip(!0),s.value=n.value,s.targets().add(n),e.connect(n,[s]))}}const Er={};function Cr(e,t,n){this.dataflow=e,this.stamp=null==t?-1:t,this.add=[],this.rem=[],this.mod=[],this.fields=null,this.encode=n||null}function Fr(e,t){const n=[];return tt(e,t,(e=>n.push(e))),n}function Mr(e,t){const n={};return e.visit(t,(e=>{n[ar(e)]=1})),e=>n[ar(e)]?null:e}function Sr(e,t){return e?(n,r)=>e(n,r)&&t(n,r):t}function Br(e,t,n,r){const i=this;let a=0;this.dataflow=e,this.stamp=t,this.fields=null,this.encode=r||null,this.pulses=n;for(const e of n)if(e.stamp===t){if(e.fields){const t=i.fields||(i.fields={});for(const n in e.fields)t[n]=1}e.changed(i.ADD)&&(a|=i.ADD),e.changed(i.REM)&&(a|=i.REM),e.changed(i.MOD)&&(a|=i.MOD)}this.changes=a}function Or(e){return e.error("Dataflow already running. Use runAsync() to chain invocations."),e}Cr.prototype={StopPropagation:Er,ADD:1,REM:2,MOD:4,ADD_REM:3,ADD_MOD:5,ALL:7,REFLOW:8,SOURCE:16,NO_SOURCE:32,NO_FIELDS:64,fork(e){return new Cr(this.dataflow).init(this,e)},clone(){const e=this.fork(7);return e.add=e.add.slice(),e.rem=e.rem.slice(),e.mod=e.mod.slice(),e.source&&(e.source=e.source.slice()),e.materialize(23)},addAll(){let e=this;return!e.source||e.add===e.rem||!e.rem.length&&e.source.length===e.add.length||(e=new Cr(this.dataflow).init(this),e.add=e.source,e.rem=[]),e},init(e,t){const n=this;return n.stamp=e.stamp,n.encode=e.encode,!e.fields||64&t||(n.fields=e.fields),1&t?(n.addF=e.addF,n.add=e.add):(n.addF=null,n.add=[]),2&t?(n.remF=e.remF,n.rem=e.rem):(n.remF=null,n.rem=[]),4&t?(n.modF=e.modF,n.mod=e.mod):(n.modF=null,n.mod=[]),32&t?(n.srcF=null,n.source=null):(n.srcF=e.srcF,n.source=e.source,e.cleans&&(n.cleans=e.cleans)),n},runAfter(e){this.dataflow.runAfter(e)},changed(e){const t=e||7;return 1&t&&this.add.length||2&t&&this.rem.length||4&t&&this.mod.length},reflow(e){if(e)return this.fork(7).reflow();const t=this.add.length,n=this.source&&this.source.length;return n&&n!==t&&(this.mod=this.source,t&&this.filter(4,Mr(this,1))),this},clean(e){return arguments.length?(this.cleans=!!e,this):this.cleans},modifies(e){const t=this.fields||(this.fields={});return j(e)?e.forEach((e=>t[e]=!0)):t[e]=!0,this},modified(e,t){const n=this.fields;return!(!t&&!this.mod.length||!n)&&(arguments.length?j(e)?e.some((e=>n[e])):n[e]:!!n)},filter(e,t){const n=this;return 1&e&&(n.addF=Sr(n.addF,t)),2&e&&(n.remF=Sr(n.remF,t)),4&e&&(n.modF=Sr(n.modF,t)),16&e&&(n.srcF=Sr(n.srcF,t)),n},materialize(e){const t=this;return 1&(e=e||7)&&t.addF&&(t.add=Fr(t.add,t.addF),t.addF=null),2&e&&t.remF&&(t.rem=Fr(t.rem,t.remF),t.remF=null),4&e&&t.modF&&(t.mod=Fr(t.mod,t.modF),t.modF=null),16&e&&t.srcF&&(t.source=t.source.filter(t.srcF),t.srcF=null),t},visit(e,t){const n=this,r=t;if(16&e)return tt(n.source,n.srcF,r),n;1&e&&tt(n.add,n.addF,r),2&e&&tt(n.rem,n.remF,r),4&e&&tt(n.mod,n.modF,r);const i=n.source;if(8&e&&i){const e=n.add.length+n.mod.length;e===i.length||tt(i,e?Mr(n,5):n.srcF,r)}return n}},Oe(Br,Cr,{fork(e){const t=new Cr(this.dataflow).init(this,e&this.NO_FIELDS);return void 0!==e&&(e&t.ADD&&this.visit(t.ADD,(e=>t.add.push(e))),e&t.REM&&this.visit(t.REM,(e=>t.rem.push(e))),e&t.MOD&&this.visit(t.MOD,(e=>t.mod.push(e)))),t},changed(e){return this.changes&e},modified(e){const t=this,n=t.fields;return n&&t.changes&t.MOD?j(e)?e.some((e=>n[e])):n[e]:0},filter(){E("MultiPulse does not support filtering.")},materialize(){E("MultiPulse does not support materialization.")},visit(e,t){const n=this,r=n.pulses,i=r.length;let a=0;if(e&n.SOURCE)for(;at=[],size:()=>t.length,peek:()=>t[0],push:n=>(t.push(n),$r(t,0,t.length-1,e)),pop:()=>{const n=t.pop();let r;return t.length?(r=t[0],t[0]=n,function(e,t,n){const r=t,i=e.length,a=e[t];let o,s=1+(t<<1);for(;s=0&&(s=o),e[t]=e[s],s=1+((t=s)<<1);e[t]=a,$r(e,r,t,n)}(t,0,e)):r=n,r}}}function $r(e,t,n,r){let i,a;const o=e[n];for(;n>t&&(a=n-1>>1,i=e[a],r(o,i)<0);)e[n]=i,n=a;return e[n]=o}function qr(){this.logger(U()),this.logLevel(L),this._clock=0,this._rank=0,this._locale=En();try{this._loader=Zn()}catch(e){}this._touched=er(M),this._input={},this._pulse=null,this._heap=Rr(((e,t)=>e.qrank-t.qrank)),this._postrun=[]}function Lr(e){return function(){return this._log[e].apply(this,arguments)}}function Tr(e,t){vr.call(this,e,null,t)}qr.prototype={stamp(){return this._clock},loader(e){return arguments.length?(this._loader=e,this):this._loader},locale(e){return arguments.length?(this._locale=e,this):this._locale},logger(e){return arguments.length?(this._log=e,this):this._log},error:Lr("error"),warn:Lr("warn"),info:Lr("info"),debug:Lr("debug"),logLevel:Lr("level"),cleanThreshold:1e4,add:function(e,t,n,r){let i,a=1;return e instanceof vr?i=e:e&&e.prototype instanceof vr?i=new e:me(e)?i=new vr(null,e):(a=0,i=new vr(e,t)),this.rank(i),a&&(r=n,n=t),n&&this.connect(i,i.parameters(n,r)),this.touch(i),i},connect:function(e,t){const n=e.rank,r=t.length;for(let i=0;i=0;)t.push(n=r[i]),n===e&&E("Cycle detected in dataflow graph.")},pulse:function(e,t,n){this.touch(e,n||zr);const r=new Cr(this,this._clock+(this._pulse?0:1)),i=e.pulse&&e.pulse.source||[];return r.target=e,this._input[e.id]=t.pulse(r,i),this},touch:function(e,t){const n=t||zr;return this._pulse?this._enqueue(e):this._touched.add(e),n.skip&&e.skip(!0),this},update:function(e,t,n){const r=n||zr;return(e.set(t)||r.force)&&this.touch(e,r),this},changeset:hr,ingest:function(e,t,n){return t=this.parse(t,n),this.pulse(e,this.changeset().insert(t))},parse:function(e,t){const n=this.locale();return Kn(e,t,n.timeParse,n.utcParse)},preload:async function(e,t,n){const r=this,i=r._pending||function(e){let t;const n=new Promise((e=>t=e));return n.requests=0,n.done=()=>{0==--n.requests&&(e._pending=null,t(e))},e._pending=n}(r);i.requests+=1;const a=await r.request(t,n);return r.pulse(e,r.changeset().remove(z).insert(a.data||[])),i.done(),a},request:async function(e,t){const n=this;let r,i=0;try{r=await n.loader().load(e,{context:"dataflow",response:Qn(t&&t.type)});try{r=n.parse(r,t)}catch(t){i=-2,n.warn("Data ingestion failed",e,t)}}catch(t){i=-1,n.warn("Loading failed",e,t)}return{data:r,status:i}},events:function(e,t,n,r){const i=this,a=Ar(n,r),o=function(e){e.dataflow=i;try{a.receive(e)}catch(e){i.error(e)}finally{i.run()}};let s;s="string"==typeof e&&"undefined"!=typeof document?document.querySelectorAll(e):he(e);const u=s.length;for(let e=0;er._enqueue(e,!0))),r._touched=er(M);let o,s,u,l=0;try{for(;r._heap.size()>0;)o=r._heap.pop(),o.rank===o.qrank?(s=o.run(r._getPulse(o,e)),s.then?s=await s:s.async&&(i.push(s.async),s=Er),s!==Er&&o._targets&&o._targets.forEach((e=>r._enqueue(e))),++l):r._enqueue(o,!0)}catch(e){r._heap.clear(),u=e}if(r._input={},r._pulse=null,r.debug(`Pulse ${a}: ${l} operators`),u&&(r._postrun=[],r.error(u)),r._postrun.length){const e=r._postrun.sort(((e,t)=>t.priority-e.priority));r._postrun=[];for(let t=0;tr.runAsync(null,(()=>{e.forEach((e=>{try{e(r)}catch(e){r.error(e)}}))})))),r},run:function(e,t,n){return this._pulse?Or(this):(this.evaluate(e,t,n),this)},runAsync:async function(e,t,n){for(;this._running;)await this._running;const r=()=>this._running=null;return(this._running=this.evaluate(e,t,n)).then(r,r),this._running},runAfter:function(e,t,n){if(this._pulse||t)this._postrun.push({priority:n||0,callback:e});else try{e(this)}catch(e){this.error(e)}},_enqueue:function(e,t){const n=e.stampe.pulse)),t):this._input[e.id]||function(e,t){if(t&&t.stamp===e.stamp)return t;e=e.fork(),t&&t!==Er&&(e.source=t.source);return e}(this._pulse,n&&n.pulse)}},Oe(Tr,vr,{run(e){if(e.stampthis.pulse=e)):t!==e.StopPropagation&&(this.pulse=t),t},evaluate(e){const t=this.marshall(e.stamp),n=this.transform(t,e);return t.clear(),n},transform(){}});const Nr={};function Pr(e){const t=Ur(e);return t&&t.Definition||null}function Ur(e){return e=e&&e.toLowerCase(),Fe(Nr,e)?Nr[e]:null}function*jr(e,t){if(null==t)for(let t of e)null!=t&&""!==t&&(t=+t)>=t&&(yield t);else{let n=-1;for(let r of e)r=t(r,++n,e),null!=r&&""!==r&&(r=+r)>=r&&(yield r)}}function Ir(e,t,n){const i=Float64Array.from(jr(e,n));return i.sort(r.ascending),t.map((e=>r.quantileSorted(i,e)))}function Wr(e,t){return Ir(e,[.25,.5,.75],t)}function Gr(e,t){const n=e.length,i=r.deviation(e,t),a=Wr(e,t),o=(a[2]-a[0])/1.34;return 1.06*(Math.min(i,o)||i||Math.abs(a[0])||1)*Math.pow(n,-.2)}function Hr(e){const t=e.maxbins||20,n=e.base||10,r=Math.log(n),i=e.divide||[5,2];let a,o,s,u,l,c,d=e.extent[0],f=e.extent[1];const h=e.span||f-d||Math.abs(d)||1;if(e.step)a=e.step;else if(e.steps){for(u=h/t,l=0,c=e.steps.length;lt;)a*=n;for(l=0,c=i.length;l=s&&h/u<=t&&(a=u)}u=Math.log(a);const p=u>=0?0:1+~~(-u/r),m=Math.pow(n,-p-1);return(e.nice||void 0===e.nice)&&(u=Math.floor(d/a+m)*a,d=de);const i=e.length,a=new Float64Array(i);let o,s=0,u=1,l=r(e[0]),c=l,d=l+t;for(;u=d){for(c=(l+c)/2;s>1);io;)e[i--]=e[a]}a=o,o=r}return e}(a,t+t/4):a}e.random=Math.random;const Xr=Math.sqrt(2*Math.PI),Jr=Math.SQRT2;let Qr=NaN;function Kr(t,n){t=t||0,n=null==n?1:n;let r,i,a=0,o=0;if(Qr==Qr)a=Qr,Qr=NaN;else{do{a=2*e.random()-1,o=2*e.random()-1,r=a*a+o*o}while(0===r||r>1);i=Math.sqrt(-2*Math.log(r)/r),a*=i,Qr=o*i}return t+a*n}function Zr(e,t,n){const r=(e-(t||0))/(n=null==n?1:n);return Math.exp(-.5*r*r)/(n*Xr)}function ei(e,t,n){const r=(e-(t=t||0))/(n=null==n?1:n),i=Math.abs(r);let a;if(i>37)a=0;else{const e=Math.exp(-i*i/2);let t;i<7.07106781186547?(t=.0352624965998911*i+.700383064443688,t=t*i+6.37396220353165,t=t*i+33.912866078383,t=t*i+112.079291497871,t=t*i+221.213596169931,t=t*i+220.206867912376,a=e*t,t=.0883883476483184*i+1.75566716318264,t=t*i+16.064177579207,t=t*i+86.7807322029461,t=t*i+296.564248779674,t=t*i+637.333633378831,t=t*i+793.826512519948,t=t*i+440.413735824752,a/=t):(t=i+.65,t=i+4/t,t=i+3/t,t=i+2/t,t=i+1/t,a=e/t/2.506628274631)}return r>0?1-a:a}function ti(e,t,n){return e<0||e>1?NaN:(t||0)+(null==n?1:n)*Jr*function(e){let t,n=-Math.log((1-e)*(1+e));n<6.25?(n-=3.125,t=-364441206401782e-35,t=t*n-16850591381820166e-35,t=128584807152564e-32+t*n,t=11157877678025181e-33+t*n,t=t*n-1333171662854621e-31,t=20972767875968562e-33+t*n,t=6637638134358324e-30+t*n,t=t*n-4054566272975207e-29,t=t*n-8151934197605472e-29,t=26335093153082323e-28+t*n,t=t*n-12975133253453532e-27,t=t*n-5415412054294628e-26,t=1.0512122733215323e-9+t*n,t=t*n-4.112633980346984e-9,t=t*n-2.9070369957882005e-8,t=4.2347877827932404e-7+t*n,t=t*n-13654692000834679e-22,t=t*n-13882523362786469e-21,t=.00018673420803405714+t*n,t=t*n-.000740702534166267,t=t*n-.006033670871430149,t=.24015818242558962+t*n,t=1.6536545626831027+t*n):n<16?(n=Math.sqrt(n)-3.25,t=2.2137376921775787e-9,t=9.075656193888539e-8+t*n,t=t*n-2.7517406297064545e-7,t=1.8239629214389228e-8+t*n,t=15027403968909828e-22+t*n,t=t*n-4013867526981546e-21,t=29234449089955446e-22+t*n,t=12475304481671779e-21+t*n,t=t*n-47318229009055734e-21,t=6828485145957318e-20+t*n,t=24031110387097894e-21+t*n,t=t*n-.0003550375203628475,t=.0009532893797373805+t*n,t=t*n-.0016882755560235047,t=.002491442096107851+t*n,t=t*n-.003751208507569241,t=.005370914553590064+t*n,t=1.0052589676941592+t*n,t=3.0838856104922208+t*n):Number.isFinite(n)?(n=Math.sqrt(n)-5,t=-27109920616438573e-27,t=t*n-2.555641816996525e-10,t=1.5076572693500548e-9+t*n,t=t*n-3.789465440126737e-9,t=7.61570120807834e-9+t*n,t=t*n-1.496002662714924e-8,t=2.914795345090108e-8+t*n,t=t*n-6.771199775845234e-8,t=2.2900482228026655e-7+t*n,t=t*n-9.9298272942317e-7,t=4526062597223154e-21+t*n,t=t*n-1968177810553167e-20,t=7599527703001776e-20+t*n,t=t*n-.00021503011930044477,t=t*n-.00013871931833623122,t=1.0103004648645344+t*n,t=4.849906401408584+t*n):t=1/0;return t*e}(2*e-1)}function ni(e,t){let n,r;const i={mean(e){return arguments.length?(n=e||0,i):n},stdev(e){return arguments.length?(r=null==e?1:e,i):r},sample:()=>Kr(n,r),pdf:e=>Zr(e,n,r),cdf:e=>ei(e,n,r),icdf:e=>ti(e,n,r)};return i.mean(e).stdev(t)}function ri(t,n){const r=ni();let i=0;const a={data(e){return arguments.length?(t=e,i=e?e.length:0,a.bandwidth(n)):t},bandwidth(e){return arguments.length?(!(n=e)&&t&&(n=Gr(t)),a):n},sample:()=>t[~~(e.random()*i)]+n*r.sample(),pdf(e){let a=0,o=0;for(;oii(n,r),pdf:e=>ai(e,n,r),cdf:e=>oi(e,n,r),icdf:e=>si(e,n,r)};return i.mean(e).stdev(t)}function li(t,n){let r,i=0;const a={weights(e){return arguments.length?(r=function(e){const t=[];let n,r=0;for(n=0;n=t&&e<=n?1/(n-t):0}function fi(e,t,n){return null==n&&(n=null==t?1:t,t=0),en?1:(e-t)/(n-t)}function hi(e,t,n){return null==n&&(n=null==t?1:t,t=0),e>=0&&e<=1?t+e*(n-t):NaN}function pi(e,t){let n,r;const i={min(e){return arguments.length?(n=e||0,i):n},max(e){return arguments.length?(r=null==e?1:e,i):r},sample:()=>ci(n,r),pdf:e=>di(e,n,r),cdf:e=>fi(e,n,r),icdf:e=>hi(e,n,r)};return null==t&&(t=null==e?1:e,e=0),i.min(e).max(t)}function mi(e,t,n){let r=0,i=0;for(const a of e){const e=n(a);null==t(a)||null==e||isNaN(e)||(r+=(e-r)/++i)}return{coef:[r],predict:()=>r,rSquared:0}}function gi(e,t,n,r){const i=r-e*e,a=Math.abs(i)<1e-24?0:(n-e*t)/i;return[t-a*e,a]}function yi(e,t,n,r){e=e.filter((e=>{let r=t(e),i=n(e);return null!=r&&(r=+r)>=r&&null!=i&&(i=+i)>=i})),r&&e.sort(((e,n)=>t(e)-t(n)));const i=e.length,a=new Float64Array(i),o=new Float64Array(i);let s,u,l,c=0,d=0,f=0;for(l of e)a[c]=s=+t(l),o[c]=u=+n(l),++c,d+=(s-d)/c,f+=(u-f)/c;for(c=0;c=i&&null!=a&&(a=+a)>=a&&r(i,a,++o)}function bi(e,t,n,r,i){let a=0,o=0;return vi(e,t,n,((e,t)=>{const n=t-i(e),s=t-r;a+=n*n,o+=s*s})),1-a/o}function xi(e,t,n){let r=0,i=0,a=0,o=0,s=0;vi(e,t,n,((e,t)=>{++s,r+=(e-r)/s,i+=(t-i)/s,a+=(e*t-a)/s,o+=(e*e-o)/s}));const u=gi(r,i,a,o),l=e=>u[0]+u[1]*e;return{coef:u,predict:l,rSquared:bi(e,t,n,i,l)}}function _i(e,t,n){let r=0,i=0,a=0,o=0,s=0;vi(e,t,n,((e,t)=>{++s,e=Math.log(e),r+=(e-r)/s,i+=(t-i)/s,a+=(e*t-a)/s,o+=(e*e-o)/s}));const u=gi(r,i,a,o),l=e=>u[0]+u[1]*Math.log(e);return{coef:u,predict:l,rSquared:bi(e,t,n,i,l)}}function Ai(e,t,n){const[r,i,a,o]=yi(e,t,n);let s,u,l,c=0,d=0,f=0,h=0,p=0;vi(e,t,n,((e,t)=>{s=r[p++],u=Math.log(t),l=s*t,c+=(t*u-c)/p,d+=(l-d)/p,f+=(l*u-f)/p,h+=(s*l-h)/p}));const[m,g]=gi(d/o,c/o,f/o,h/o),y=e=>Math.exp(m+g*(e-a));return{coef:[Math.exp(m-g*a),g],predict:y,rSquared:bi(e,t,n,o,y)}}function ki(e,t,n){let r=0,i=0,a=0,o=0,s=0,u=0;vi(e,t,n,((e,t)=>{const n=Math.log(e),l=Math.log(t);++u,r+=(n-r)/u,i+=(l-i)/u,a+=(n*l-a)/u,o+=(n*n-o)/u,s+=(t-s)/u}));const l=gi(r,i,a,o),c=e=>l[0]*Math.pow(e,l[1]);return l[0]=Math.exp(l[0]),{coef:l,predict:c,rSquared:bi(e,t,n,s,c)}}function wi(e,t,n){const[r,i,a,o]=yi(e,t,n),s=r.length;let u,l,c,d,f=0,h=0,p=0,m=0,g=0;for(u=0;ub*(e-=a)*e+x*e+_+o;return{coef:[_-x*a+b*a*a+o,x-2*b*a,b],predict:A,rSquared:bi(e,t,n,o,A)}}function Di(e,t,n,r){if(0===r)return mi(e,t,n);if(1===r)return xi(e,t,n);if(2===r)return wi(e,t,n);const[i,a,o,s]=yi(e,t,n),u=i.length,l=[],c=[],d=r+1;let f,h,p,m,g;for(f=0;fMath.abs(e[r][o])&&(o=i);for(a=r;a=r;a--)e[a][i]-=e[a][r]*e[r][i]/e[r][r]}for(i=t-1;i>=0;--i){for(s=0,a=i+1;a{e-=o;let t=s+y[0]+y[1]*e+y[2]*e*e;for(f=3;f=0;--a)for(s=t[a],u=1,i[a]+=s,o=1;o<=a;++o)u*=(a+1-o)/o,i[a-o]+=s*Math.pow(n,o)*u;return i[0]+=r,i}const Ci=2,Fi=1e-12;function Mi(e,t,n,i){const[a,o,s,u]=yi(e,t,n,!0),l=a.length,c=Math.max(2,~~(i*l)),d=new Float64Array(l),f=new Float64Array(l),h=new Float64Array(l).fill(1);for(let e=-1;++e<=Ci;){const t=[0,c-1];for(let e=0;ea[i]-n?r:i;let u=0,l=0,c=0,p=0,m=0;const g=1/Math.abs(a[s]-n||1);for(let e=r;e<=i;++e){const t=a[e],r=o[e],i=Si(Math.abs(n-t)*g)*h[e],s=t*i;u+=i,l+=s,c+=r*i,p+=r*s,m+=t*s}const[y,v]=gi(l/u,c/u,p/u,m/u);d[e]=y+v*n,f[e]=Math.abs(o[e]-d[e]),Bi(a,e+1,t)}if(e===Ci)break;const n=r.median(f);if(Math.abs(n)=1?Fi:(t=1-e*e)*t}return function(e,t,n,r){const i=e.length,a=[];let o,s=0,u=0,l=[];for(;s=e.length))for(;t>i&&e[a]-r<=r-e[i];)n[0]=++i,n[1]=a,++a}const Oi=.5*Math.PI/180;function zi(e,t,n,r){n=n||25,r=Math.max(n,r||200);const i=t=>[t,e(t)],a=t[0],o=t[1],s=o-a,u=s/r,l=[i(a)],c=[];if(n===r){for(let e=1;e0;)c.push(i(a+e/n*s));let d=l[0],f=c[c.length-1];const h=1/s,p=function(e,t){let n=e,r=e;const i=t.length;for(let e=0;er&&(r=i)}return 1/(r-n)}(d[1],c);for(;f;){const e=i((d[0]+f[0])/2);e[0]-d[0]>=u&&Ri(d,e,f,h,p)>Oi?c.push(e):(d=f,l.push(f),c.pop()),f=c[c.length-1]}return l}function Ri(e,t,n,r,i){const a=Math.atan2(i*(n[1]-e[1]),r*(n[0]-e[0])),o=Math.atan2(i*(t[1]-e[1]),r*(t[0]-e[0]));return Math.abs(a-o)}function $i(e){return e&&e.length?1===e.length?e[0]:(t=e,e=>{const n=t.length;let r=1,i=String(t[0](e));for(;r{},Ti={init:Li,add:Li,rem:Li,idx:0},Ni={values:{init:e=>e.cell.store=!0,value:e=>e.cell.data.values(),idx:-1},count:{value:e=>e.cell.num},__count__:{value:e=>e.missing+e.valid},missing:{value:e=>e.missing},valid:{value:e=>e.valid},sum:{init:e=>e.sum=0,value:e=>e.sum,add:(e,t)=>e.sum+=+t,rem:(e,t)=>e.sum-=t},product:{init:e=>e.product=1,value:e=>e.valid?e.product:void 0,add:(e,t)=>e.product*=t,rem:(e,t)=>e.product/=t},mean:{init:e=>e.mean=0,value:e=>e.valid?e.mean:void 0,add:(e,t)=>(e.mean_d=t-e.mean,e.mean+=e.mean_d/e.valid),rem:(e,t)=>(e.mean_d=t-e.mean,e.mean-=e.valid?e.mean_d/e.valid:e.mean)},average:{value:e=>e.valid?e.mean:void 0,req:["mean"],idx:1},variance:{init:e=>e.dev=0,value:e=>e.valid>1?e.dev/(e.valid-1):void 0,add:(e,t)=>e.dev+=e.mean_d*(t-e.mean),rem:(e,t)=>e.dev-=e.mean_d*(t-e.mean),req:["mean"],idx:1},variancep:{value:e=>e.valid>1?e.dev/e.valid:void 0,req:["variance"],idx:2},stdev:{value:e=>e.valid>1?Math.sqrt(e.dev/(e.valid-1)):void 0,req:["variance"],idx:2},stdevp:{value:e=>e.valid>1?Math.sqrt(e.dev/e.valid):void 0,req:["variance"],idx:2},stderr:{value:e=>e.valid>1?Math.sqrt(e.dev/(e.valid*(e.valid-1))):void 0,req:["variance"],idx:2},distinct:{value:e=>e.cell.data.distinct(e.get),req:["values"],idx:3},ci0:{value:e=>e.cell.data.ci0(e.get),req:["values"],idx:3},ci1:{value:e=>e.cell.data.ci1(e.get),req:["values"],idx:3},median:{value:e=>e.cell.data.q2(e.get),req:["values"],idx:3},q1:{value:e=>e.cell.data.q1(e.get),req:["values"],idx:3},q3:{value:e=>e.cell.data.q3(e.get),req:["values"],idx:3},min:{init:e=>e.min=void 0,value:e=>e.min=Number.isNaN(e.min)?e.cell.data.min(e.get):e.min,add:(e,t)=>{(t{t<=e.min&&(e.min=NaN)},req:["values"],idx:4},max:{init:e=>e.max=void 0,value:e=>e.max=Number.isNaN(e.max)?e.cell.data.max(e.get):e.max,add:(e,t)=>{(t>e.max||void 0===e.max)&&(e.max=t)},rem:(e,t)=>{t>=e.max&&(e.max=NaN)},req:["values"],idx:4},argmin:{init:e=>e.argmin=void 0,value:e=>e.argmin||e.cell.data.argmin(e.get),add:(e,t,n)=>{t{t<=e.min&&(e.argmin=void 0)},req:["min","values"],idx:3},argmax:{init:e=>e.argmax=void 0,value:e=>e.argmax||e.cell.data.argmax(e.get),add:(e,t,n)=>{t>e.max&&(e.argmax=n)},rem:(e,t)=>{t>=e.max&&(e.argmax=void 0)},req:["max","values"],idx:3}},Pi=Object.keys(Ni).filter((e=>"__count__"!==e));function Ui(e,t){return Ni[e](t)}function ji(e,t){return e.idx-t.idx}function Ii(){this.valid=0,this.missing=0,this._ops.forEach((e=>e.init(this)))}function Wi(e,t){null!=e&&""!==e?e==e&&(++this.valid,this._ops.forEach((n=>n.add(this,e,t)))):++this.missing}function Gi(e,t){null!=e&&""!==e?e==e&&(--this.valid,this._ops.forEach((n=>n.rem(this,e,t)))):--this.missing}function Hi(e){return this._out.forEach((t=>e[t.out]=t.value(this))),e}function Vi(e,t){const n=t||S,r=function(e){const t={};e.forEach((e=>t[e.name]=e));const n=e=>{e.req&&e.req.forEach((e=>{t[e]||n(t[e]=Ni[e]())}))};return e.forEach(n),Object.values(t).sort(ji)}(e),i=e.slice().sort(ji);function a(e){this._ops=r,this._out=i,this.cell=e,this.init()}return a.prototype.init=Ii,a.prototype.add=Wi,a.prototype.rem=Gi,a.prototype.set=Hi,a.prototype.get=n,a.fields=e.map((e=>e.out)),a}function Yi(e){this._key=e?F(e):ar,this.reset()}[...Pi,"__count__"].forEach((e=>{Ni[e]=function(e,t){return n=>we({name:e,out:n||e},Ti,t)}(e,Ni[e])}));const Xi=Yi.prototype;function Ji(e){Tr.call(this,null,e),this._adds=[],this._mods=[],this._alen=0,this._mlen=0,this._drop=!0,this._cross=!1,this._dims=[],this._dnames=[],this._measures=[],this._countOnly=!1,this._counts=null,this._prev=null,this._inputs=null,this._outputs=null}Xi.reset=function(){this._add=[],this._rem=[],this._ext=null,this._get=null,this._q=null},Xi.add=function(e){this._add.push(e)},Xi.rem=function(e){this._rem.push(e)},Xi.values=function(){if(this._get=null,0===this._rem.length)return this._add;const e=this._add,t=this._rem,n=this._key,r=e.length,i=t.length,a=Array(r-i),o={};let s,u,l;for(s=0;s=0;)r=e(t[i])+"",Fe(n,r)||(n[r]=1,++a);return a},Xi.extent=function(e){if(this._get!==e||!this._ext){const t=this.values(),n=Ee(t,e);this._ext=[t[n[0]],t[n[1]]],this._get=e}return this._ext},Xi.argmin=function(e){return this.extent(e)[0]||{}},Xi.argmax=function(e){return this.extent(e)[1]||{}},Xi.min=function(e){const t=this.extent(e)[0];return null!=t?e(t):void 0},Xi.max=function(e){const t=this.extent(e)[1];return null!=t?e(t):void 0},Xi.quartile=function(e){return this._get===e&&this._q||(this._q=Wr(this.values(),e),this._get=e),this._q},Xi.q1=function(e){return this.quartile(e)[0]},Xi.q2=function(e){return this.quartile(e)[1]},Xi.q3=function(e){return this.quartile(e)[2]},Xi.ci=function(e){return this._get===e&&this._ci||(this._ci=Vr(this.values(),1e3,.05,e),this._get=e),this._ci},Xi.ci0=function(e){return this.ci(e)[0]},Xi.ci1=function(e){return this.ci(e)[1]},Ji.Definition={type:"Aggregate",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"ops",type:"enum",array:!0,values:Pi},{name:"fields",type:"field",null:!0,array:!0},{name:"as",type:"string",null:!0,array:!0},{name:"drop",type:"boolean",default:!0},{name:"cross",type:"boolean",default:!1},{name:"key",type:"field"}]},Oe(Ji,Tr,{transform(e,t){const n=this,r=t.fork(t.NO_SOURCE|t.NO_FIELDS),i=e.modified();return n.stamp=r.stamp,n.value&&(i||t.modified(n._inputs,!0))?(n._prev=n.value,n.value=i?n.init(e):Object.create(null),t.visit(t.SOURCE,(e=>n.add(e)))):(n.value=n.value||n.init(e),t.visit(t.REM,(e=>n.rem(e))),t.visit(t.ADD,(e=>n.add(e)))),r.modifies(n._outputs),n._drop=!1!==e.drop,e.cross&&n._dims.length>1&&(n._drop=!1,n.cross()),t.clean()&&n._drop&&r.clean(!0).runAfter((()=>this.clean())),n.changes(r)},cross(){const e=this,t=e.value,n=e._dnames,r=n.map((()=>({}))),i=n.length;function a(e){let t,a,o,s;for(t in e)for(o=e[t].tuple,a=0;a{const t=_(e);return i(e),n.push(t),t})),this.cellkey=e.key?e.key:$i(this._dims),this._countOnly=!0,this._counts=[],this._measures=[];const a=e.fields||[null],o=e.ops||["count"],s=e.as||[],u=a.length,l={};let c,d,f,h,p,m;for(u!==o.length&&E("Unmatched number of fields and aggregate ops."),m=0;mVi(e,e.field))),Object.create(null)},cellkey:$i(),cell(e,t){let n=this.value[e];return n?0===n.num&&this._drop&&n.stampa.push(e),remove:e=>o[r(e)]=++s,size:()=>i.length,data:(e,t)=>(s&&(i=i.filter((e=>!o[r(e)])),o={},s=0),t&&e&&i.sort(e),a.length&&(i=e?We(e,i,a.sort(e)):i.concat(a),a=[]),i)}}function Zi(e){Tr.call(this,[],e)}function ea(e){vr.call(this,null,ta,e)}function ta(e){return this.value&&!e.modified()?this.value:ye(e.fields,e.orders)}function na(e){Tr.call(this,null,e)}function ra(e){Tr.call(this,null,e)}Qi.Definition={type:"Bin",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"interval",type:"boolean",default:!0},{name:"anchor",type:"number"},{name:"maxbins",type:"number",default:20},{name:"base",type:"number",default:10},{name:"divide",type:"number",array:!0,default:[5,2]},{name:"extent",type:"number",array:!0,length:2,required:!0},{name:"span",type:"number"},{name:"step",type:"number"},{name:"steps",type:"number",array:!0},{name:"minstep",type:"number",default:0},{name:"nice",type:"boolean",default:!0},{name:"name",type:"string"},{name:"as",type:"string",array:!0,length:2,default:["bin0","bin1"]}]},Oe(Qi,Tr,{transform(e,t){const n=!1!==e.interval,r=this._bins(e),i=r.start,a=r.step,o=e.as||["bin0","bin1"],s=o[0],u=o[1];let l;return l=e.modified()?(t=t.reflow(!0)).SOURCE:t.modified(A(e.field))?t.ADD_MOD:t.ADD,t.visit(l,n?e=>{const t=r(e);e[s]=t,e[u]=null==t?null:i+a*(1+(t-i)/a)}:e=>e[s]=r(e)),t.modifies(n?o:s)},_bins(e){if(this.value&&!e.modified())return this.value;const t=e.field,n=Hr(e),r=n.step;let i,a,o=n.start,s=o+Math.ceil((n.stop-o)/r)*r;null!=(i=e.anchor)&&(a=i-(o+r*Math.floor((i-o)/r)),o+=a,s+=a);const u=function(e){let n=X(t(e));return null==n?null:ns?1/0:(n=Math.max(o,Math.min(n,s-r)),o+r*Math.floor(1e-14+(n-o)/r))};return u.start=o,u.stop=n.stop,u.step=r,this.value=x(u,A(t),e.name||"bin_"+_(t))}}),Zi.Definition={type:"Collect",metadata:{source:!0},params:[{name:"sort",type:"compare"}]},Oe(Zi,Tr,{transform(e,t){const n=t.fork(t.ALL),r=Ki(ar,this.value,n.materialize(n.ADD).add),i=e.sort,a=t.changed()||i&&(e.modified("sort")||t.modified(i.fields));return n.visit(n.REM,r.remove),this.modified(a),this.value=n.source=r.data(dr(i),a),t.source&&t.source.root&&(this.value.root=t.source.root),n}}),Oe(ea,vr),na.Definition={type:"CountPattern",metadata:{generates:!0,changes:!0},params:[{name:"field",type:"field",required:!0},{name:"case",type:"enum",values:["upper","lower","mixed"],default:"mixed"},{name:"pattern",type:"string",default:'[\\w"]+'},{name:"stopwords",type:"string",default:""},{name:"as",type:"string",array:!0,length:2,default:["text","count"]}]},Oe(na,Tr,{transform(e,t){const n=t=>n=>{for(var r,i=function(e,t,n){switch(t){case"upper":e=e.toUpperCase();break;case"lower":e=e.toLowerCase()}return e.match(n)}(s(n),e.case,a)||[],u=0,l=i.length;ui[e]=1+(i[e]||0))),c=n((e=>i[e]-=1));return r?t.visit(t.SOURCE,l):(t.visit(t.ADD,l),t.visit(t.REM,c)),this._finish(t,u)},_parameterCheck(e,t){let n=!1;return!e.modified("stopwords")&&this._stop||(this._stop=new RegExp("^"+(e.stopwords||"")+"$","i"),n=!0),!e.modified("pattern")&&this._match||(this._match=new RegExp(e.pattern||"[\\w']+","g"),n=!0),(e.modified("field")||t.modified(e.field.fields))&&(n=!0),n&&(this._counts={}),n},_finish(e,t){const n=this._counts,r=this._tuples||(this._tuples={}),i=t[0],a=t[1],o=e.fork(e.NO_SOURCE|e.NO_FIELDS);let s,u,l;for(s in n)u=r[s],l=n[s]||0,!u&&l?(r[s]=u=sr({}),u[i]=s,u[a]=l,o.add.push(u)):0===l?(u&&o.rem.push(u),n[s]=null,r[s]=null):u[a]!==l&&(u[a]=l,o.mod.push(u));return o.modifies(t)}}),ra.Definition={type:"Cross",metadata:{generates:!0},params:[{name:"filter",type:"expr"},{name:"as",type:"string",array:!0,length:2,default:["a","b"]}]},Oe(ra,Tr,{transform(e,t){const n=t.fork(t.NO_SOURCE),r=e.as||["a","b"],i=r[0],a=r[1],o=!this.value||t.changed(t.ADD_REM)||e.modified("as")||e.modified("filter");let s=this.value;return o?(s&&(n.rem=s),s=t.materialize(t.SOURCE).source,n.add=this.value=function(e,t,n,r){for(var i,a,o=[],s={},u=e.length,l=0;lua(e,t)))):typeof r[n]===oa&&r[n](e[n]);return r}function la(e){Tr.call(this,null,e)}const ca=[{key:{function:"normal"},params:[{name:"mean",type:"number",default:0},{name:"stdev",type:"number",default:1}]},{key:{function:"lognormal"},params:[{name:"mean",type:"number",default:0},{name:"stdev",type:"number",default:1}]},{key:{function:"uniform"},params:[{name:"min",type:"number",default:0},{name:"max",type:"number",default:1}]},{key:{function:"kde"},params:[{name:"field",type:"field",required:!0},{name:"from",type:"data"},{name:"bandwidth",type:"number",default:0}]}],da={key:{function:"mixture"},params:[{name:"distributions",type:"param",array:!0,params:ca},{name:"weights",type:"number",array:!0}]};function fa(e,t){return e?e.map(((e,n)=>t[n]||_(e))):null}function ha(e,t,n){const r=[],i=e=>e(u);let a,o,s,u,l,c;if(null==t)r.push(e.map(n));else for(a={},o=0,s=e.length;oe.materialize(e.SOURCE).source}(t)),i=e.steps||e.minsteps||25,a=e.steps||e.maxsteps||200;let o=e.method||"pdf";"pdf"!==o&&"cdf"!==o&&E("Invalid density method: "+o),e.extent||r.data||E("Missing density extent parameter."),o=r[o];const s=e.as||["value","density"],u=zi(o,e.extent||De(r.data()),i,a).map((e=>{const t={};return t[s[0]]=e[0],t[s[1]]=e[1],sr(t)}));this.value&&(n.rem=this.value),this.value=n.add=n.source=u}return n}});function pa(e){Tr.call(this,null,e)}pa.Definition={type:"DotBin",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"groupby",type:"field",array:!0},{name:"step",type:"number"},{name:"smooth",type:"boolean",default:!1},{name:"as",type:"string",default:"bin"}]};function ma(e){vr.call(this,null,ga,e),this.modified(!0)}function ga(e){const t=e.expr;return this.value&&!e.modified("expr")?this.value:x((n=>t(n,e)),A(t),_(t))}function ya(e){Tr.call(this,[void 0,void 0],e)}function va(e,t){vr.call(this,e),this.parent=t,this.count=0}function ba(e){Tr.call(this,{},e),this._keys=Se();const t=this._targets=[];t.active=0,t.forEach=e=>{for(let n=0,r=t.active;nF(e))):F(e.name,e.as)}function Aa(e){Tr.call(this,Se(),e)}function ka(e){Tr.call(this,[],e)}function wa(e){Tr.call(this,[],e)}function Da(e){Tr.call(this,null,e)}function Ea(e){Tr.call(this,[],e)}Oe(pa,Tr,{transform(e,t){if(this.value&&!e.modified()&&!t.changed())return t;const n=t.materialize(t.SOURCE).source,r=ha(t.source,e.groupby,S),i=e.smooth||!1,a=e.field,o=e.step||((e,t)=>Ve(De(e,t))/30)(n,a),s=dr(((e,t)=>a(e)-a(t))),u=e.as||"bin",l=r.length;let c,d=1/0,f=-1/0,h=0;for(;hf&&(f=t),e[++c][u]=t}return this.value={start:d,stop:f,step:o},t.reflow(!0).modifies(u)}}),Oe(ma,vr),ya.Definition={type:"Extent",metadata:{},params:[{name:"field",type:"field",required:!0}]},Oe(ya,Tr,{transform(e,t){const n=this.value,r=e.field,i=t.changed()||t.modified(r.fields)||e.modified("field");let a=n[0],o=n[1];if((i||null==a)&&(a=1/0,o=-1/0),t.visit(i?t.SOURCE:t.ADD,(e=>{const t=X(r(e));null!=t&&(to&&(o=t))})),!Number.isFinite(a)||!Number.isFinite(o)){let e=_(r);e&&(e=` for field "${e}"`),t.dataflow.warn(`Infinite extent${e}: [${a}, ${o}]`),a=o=void 0}this.value=[a,o]}}),Oe(va,vr,{connect(e){return this.detachSubflow=e.detachSubflow,this.targets().add(e),e.source=this},add(e){this.count+=1,this.value.add.push(e)},rem(e){this.count-=1,this.value.rem.push(e)},mod(e){this.value.mod.push(e)},init(e){this.value.init(e,e.NO_SOURCE)},evaluate(){return this.value}}),Oe(ba,Tr,{activate(e){this._targets[this._targets.active++]=e},subflow(e,t,n,r){const i=this.value;let a,o,s=Fe(i,e)&&i[e];return s?s.value.stampe&&e.count>0));this.initTargets(e)}},initTargets(e){const t=this._targets,n=t.length,r=e?e.length:0;let i=0;for(;ithis.subflow(e,i,t);return this._group=e.group||{},this.initTargets(),t.visit(t.REM,(e=>{const t=ar(e),n=a.get(t);void 0!==n&&(a.delete(t),s(n).rem(e))})),t.visit(t.ADD,(e=>{const t=r(e);a.set(ar(e),t),s(t).add(e)})),o||t.modified(r.fields)?t.visit(t.MOD,(e=>{const t=ar(e),n=a.get(t),i=r(e);n===i?s(i).mod(e):(a.set(t,i),s(n).rem(e),s(i).add(e))})):t.changed(t.MOD)&&t.visit(t.MOD,(e=>{s(a.get(ar(e))).mod(e)})),o&&t.visit(t.REFLOW,(e=>{const t=ar(e),n=a.get(t),i=r(e);n!==i&&(a.set(t,i),s(n).rem(e),s(i).add(e))})),t.clean()?n.runAfter((()=>{this.clean(),a.clean()})):a.empty>n.cleanThreshold&&n.runAfter(a.clean),t}}),Oe(xa,vr),Aa.Definition={type:"Filter",metadata:{changes:!0},params:[{name:"expr",type:"expr",required:!0}]},Oe(Aa,Tr,{transform(e,t){const n=t.dataflow,r=this.value,i=t.fork(),a=i.add,o=i.rem,s=i.mod,u=e.expr;let l=!0;function c(t){const n=ar(t),i=u(t,e),c=r.get(n);i&&c?(r.delete(n),a.push(t)):i||c?l&&i&&!c&&s.push(t):(r.set(n,1),o.push(t))}return t.visit(t.REM,(e=>{const t=ar(e);r.has(t)?r.delete(t):o.push(e)})),t.visit(t.ADD,(t=>{u(t,e)?a.push(t):r.set(ar(t),1)})),t.visit(t.MOD,c),e.modified()&&(l=!1,t.visit(t.REFLOW,c)),r.empty>n.cleanThreshold&&n.runAfter(r.clean),i}}),ka.Definition={type:"Flatten",metadata:{generates:!0},params:[{name:"fields",type:"field",array:!0,required:!0},{name:"index",type:"string"},{name:"as",type:"string",array:!0}]},Oe(ka,Tr,{transform(e,t){const n=t.fork(t.NO_SOURCE),r=e.fields,i=fa(r,e.as||[]),a=e.index||null,o=i.length;return n.rem=this.value,t.visit(t.SOURCE,(e=>{const t=r.map((t=>t(e))),s=t.reduce(((e,t)=>Math.max(e,t.length)),0);let u,l,c,d=0;for(;d{for(let t,a=0;at[r]=n(t,e)))}}),Oe(Ea,Tr,{transform(e,t){const n=t.fork(t.ALL),r=e.generator;let i,a,o,s=this.value,u=e.size-s.length;if(u>0){for(i=[];--u>=0;)i.push(o=sr(r(e))),s.push(o);n.add=n.add.length?n.materialize(n.ADD).add.concat(i):i}else a=s.slice(0,-u),n.rem=n.rem.length?n.materialize(n.REM).rem.concat(a):a,s=s.slice(-u);return n.source=this.value=s,n}});const Ca={value:"value",median:r.median,mean:r.mean,min:r.min,max:r.max},Fa=[];function Ma(e){Tr.call(this,[],e)}function Sa(e){Ji.call(this,e)}function Ba(e){Tr.call(this,null,e)}function Oa(e){vr.call(this,null,za,e)}function za(e){return this.value&&!e.modified()?this.value:Pe(e.fields,e.flat)}function Ra(e){Tr.call(this,[],e),this._pending=null}function $a(e,t,n){n.forEach(sr);const r=t.fork(t.NO_FIELDS&t.NO_SOURCE);return r.rem=e.value,e.value=r.source=r.add=n,e._pending=null,r.rem.length&&r.clean(!0),r}function qa(e){Tr.call(this,{},e)}function La(e){vr.call(this,null,Ta,e)}function Ta(e){if(this.value&&!e.modified())return this.value;const t=e.extents,n=t.length;let r,i,a=1/0,o=-1/0;for(r=0;ro&&(o=i[1]);return[a,o]}function Na(e){vr.call(this,null,Pa,e)}function Pa(e){return this.value&&!e.modified()?this.value:e.values.reduce(((e,t)=>e.concat(t)),[])}function Ua(e){Tr.call(this,null,e)}function ja(e){Ji.call(this,e)}function Ia(e){ba.call(this,e)}function Wa(e){Tr.call(this,null,e)}function Ga(e){Tr.call(this,null,e)}function Ha(e){Tr.call(this,null,e)}Ma.Definition={type:"Impute",metadata:{changes:!0},params:[{name:"field",type:"field",required:!0},{name:"key",type:"field",required:!0},{name:"keyvals",array:!0},{name:"groupby",type:"field",array:!0},{name:"method",type:"enum",default:"value",values:["value","mean","median","max","min"]},{name:"value",default:0}]},Oe(Ma,Tr,{transform(e,t){var n,r,i,a,o,s,u,l,c,d,f=t.fork(t.ALL),h=function(e){var t,n=e.method||Ca.value;if(null!=Ca[n])return n===Ca.value?(t=void 0!==e.value?e.value:0,()=>t):Ca[n];E("Unrecognized imputation method: "+n)}(e),p=function(e){const t=e.field;return e=>e?t(e):NaN}(e),m=_(e.field),g=_(e.key),y=(e.groupby||[]).map(_),v=function(e,t,n,r){var i,a,o,s,u,l,c,d,f=e=>e(d),h=[],p=r?r.slice():[],m={},g={};for(p.forEach(((e,t)=>m[e]=t+1)),s=0,c=e.length;sn.add(e)))):(i=n.value=n.value||this.init(e),t.visit(t.REM,(e=>n.rem(e))),t.visit(t.ADD,(e=>n.add(e)))),n.changes(),t.visit(t.SOURCE,(e=>{we(e,i[n.cellkey(e)].tuple)})),t.reflow(r).modifies(this._outputs)},changes(){const e=this._adds,t=this._mods;let n,r;for(n=0,r=this._alen;n{const n=ri(t,o)[s],r=e.counts?t.length:1;zi(n,c||De(t),d,f).forEach((e=>{const n={};for(let e=0;e(this._pending=he(e.data),e=>e.touch(this))));return{async:t}}return n.request(e.url,e.format).then((e=>$a(this,t,he(e.data))))}}),qa.Definition={type:"Lookup",metadata:{modifies:!0},params:[{name:"index",type:"index",params:[{name:"from",type:"data",required:!0},{name:"key",type:"field",required:!0}]},{name:"values",type:"field",array:!0},{name:"fields",type:"field",array:!0,required:!0},{name:"as",type:"string",array:!0},{name:"default",default:null}]},Oe(qa,Tr,{transform(e,t){const n=e.fields,r=e.index,i=e.values,a=null==e.default?null:e.default,o=e.modified(),s=n.length;let u,l,c,d=o?t.SOURCE:t.ADD,f=t,h=e.as;return i?(l=i.length,s>1&&!h&&E('Multi-field lookup requires explicit "as" parameter.'),h&&h.length!==s*l&&E('The "as" parameter has too few output field names.'),h=h||i.map(_),u=function(e){for(var t,o,u=0,c=0;ut.modified(e.fields))),d|=c?t.MOD:0),t.visit(d,u),f.modifies(h)}}),Oe(La,vr),Oe(Na,vr),Oe(Ua,Tr,{transform(e,t){return this.modified(e.modified()),this.value=e,t.fork(t.NO_SOURCE|t.NO_FIELDS)}}),ja.Definition={type:"Pivot",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"field",type:"field",required:!0},{name:"value",type:"field",required:!0},{name:"op",type:"enum",values:Pi,default:"sum"},{name:"limit",type:"number",default:0},{name:"key",type:"field"}]},Oe(ja,Ji,{_transform:Ji.prototype.transform,transform(e,t){return this._transform(function(e,t){const n=e.field,r=e.value,i=("count"===e.op?"__count__":e.op)||"sum",a=A(n).concat(A(r)),o=function(e,t,n){const r={},i=[];return n.visit(n.SOURCE,(t=>{const n=e(t);r[n]||(r[n]=1,i.push(n))})),i.sort(ve),t?i.slice(0,t):i}(n,e.limit||0,t);t.changed()&&e.set("__pivot__",null,null,!0);return{key:e.key,groupby:e.groupby,ops:o.map((()=>i)),fields:o.map((e=>function(e,t,n,r){return x((r=>t(r)===e?n(r):NaN),r,e+"")}(e,n,r,a))),as:o.map((e=>e+"")),modified:e.modified.bind(e)}}(e,t),t)}}),Oe(Ia,ba,{transform(e,t){const n=e.subflow,r=e.field,i=e=>this.subflow(ar(e),n,t,e);return(e.modified("field")||r&&t.modified(A(r)))&&E("PreFacet does not support field modification."),this.initTargets(),r?(t.visit(t.MOD,(e=>{const t=i(e);r(e).forEach((e=>t.mod(e)))})),t.visit(t.ADD,(e=>{const t=i(e);r(e).forEach((e=>t.add(sr(e))))})),t.visit(t.REM,(e=>{const t=i(e);r(e).forEach((e=>t.rem(e)))}))):(t.visit(t.MOD,(e=>i(e).mod(e))),t.visit(t.ADD,(e=>i(e).add(e))),t.visit(t.REM,(e=>i(e).rem(e)))),t.clean()&&t.runAfter((()=>this.clean())),t}}),Wa.Definition={type:"Project",metadata:{generates:!0,changes:!0},params:[{name:"fields",type:"field",array:!0},{name:"as",type:"string",null:!0,array:!0}]},Oe(Wa,Tr,{transform(e,t){const n=t.fork(t.NO_SOURCE),r=e.fields,i=fa(e.fields,e.as||[]),a=r?(e,t)=>function(e,t,n,r){for(let i=0,a=n.length;i{const t=ar(e);n.rem.push(o[t]),o[t]=null})),t.visit(t.ADD,(e=>{const t=a(e,sr({}));o[ar(e)]=t,n.add.push(t)})),t.visit(t.MOD,(e=>{n.mod.push(a(e,o[ar(e)]))})),n}}),Oe(Ga,Tr,{transform(e,t){return this.value=e.value,e.modified("value")?t.fork(t.NO_SOURCE|t.NO_FIELDS):t.StopPropagation}}),Ha.Definition={type:"Quantile",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"field",type:"field",required:!0},{name:"probs",type:"number",array:!0},{name:"step",type:"number",default:.01},{name:"as",type:"string",array:!0,default:["prob","value"]}]};function Va(e){Tr.call(this,null,e)}function Ya(e){Tr.call(this,[],e),this.count=0}function Xa(e){Tr.call(this,null,e)}function Ja(e){Tr.call(this,null,e),this.modified(!0)}function Qa(e){Tr.call(this,null,e)}Oe(Ha,Tr,{transform(e,t){const n=t.fork(t.NO_SOURCE|t.NO_FIELDS),i=e.as||["prob","value"];if(this.value&&!e.modified()&&!t.changed())return n.source=this.value,n;const a=ha(t.materialize(t.SOURCE).source,e.groupby,e.field),o=(e.groupby||[]).map(_),s=[],u=e.step||.01,l=e.probs||r.range(u/2,1-1e-14,u),c=l.length;return a.forEach((e=>{const t=Ir(e,l);for(let n=0;n{const t=ar(e);n.rem.push(r[t]),r[t]=null})),t.visit(t.ADD,(e=>{const t=ur(e);r[ar(e)]=t,n.add.push(t)})),t.visit(t.MOD,(e=>{const t=r[ar(e)];for(const r in e)t[r]=e[r],n.modifies(r);n.mod.push(t)}))),n}}),Ya.Definition={type:"Sample",metadata:{},params:[{name:"size",type:"number",default:1e3}]},Oe(Ya,Tr,{transform(t,n){const r=n.fork(n.NO_SOURCE),i=t.modified("size"),a=t.size,o=this.value.reduce(((e,t)=>(e[ar(t)]=1,e)),{});let s=this.value,u=this.count,l=0;function c(t){let n,i;s.length=l&&(n=s[i],o[ar(n)]&&r.rem.push(n),s[i]=t)),++u}if(n.rem.length&&(n.visit(n.REM,(e=>{const t=ar(e);o[t]&&(o[t]=-1,r.rem.push(e)),--u})),s=s.filter((e=>-1!==o[ar(e)]))),(n.rem.length||i)&&s.length{o[ar(e)]||c(e)})),l=-1),i&&s.length>a){const e=s.length-a;for(let t=0;t{o[ar(e)]&&r.mod.push(e)})),n.add.length&&n.visit(n.ADD,c),(n.add.length||l<0)&&(r.add=s.filter((e=>!o[ar(e)]))),this.count=u,this.value=r.source=s,r}}),Xa.Definition={type:"Sequence",metadata:{generates:!0,changes:!0},params:[{name:"start",type:"number",required:!0},{name:"stop",type:"number",required:!0},{name:"step",type:"number",default:1},{name:"as",type:"string",default:"data"}]},Oe(Xa,Tr,{transform(e,t){if(this.value&&!e.modified())return;const n=t.materialize().fork(t.MOD),i=e.as||"data";return n.rem=this.value?t.rem.concat(this.value):t.rem,this.value=r.range(e.start,e.stop,e.step||1).map((e=>{const t={};return t[i]=e,sr(t)})),n.add=t.add.concat(this.value),n}}),Oe(Ja,Tr,{transform(e,t){return this.value=t.source,t.changed()?t.fork(t.NO_SOURCE|t.NO_FIELDS):t.StopPropagation}});const Ka=["unit0","unit1"];function Za(e){Tr.call(this,Se(),e)}function eo(e){Tr.call(this,null,e)}Qa.Definition={type:"TimeUnit",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"interval",type:"boolean",default:!0},{name:"units",type:"enum",values:ht,array:!0},{name:"step",type:"number",default:1},{name:"maxbins",type:"number",default:40},{name:"extent",type:"date",array:!0},{name:"timezone",type:"enum",default:"local",values:["local","utc"]},{name:"as",type:"string",array:!0,length:2,default:Ka}]},Oe(Qa,Tr,{transform(e,t){const n=e.field,r=!1!==e.interval,i="utc"===e.timezone,a=this._floor(e,t),o=(i?It:jt)(a.unit).offset,s=e.as||Ka,u=s[0],l=s[1],c=a.step;let d=a.start||1/0,f=a.stop||-1/0,h=t.ADD;return(e.modified()||t.changed(t.REM)||t.modified(A(n)))&&(h=(t=t.reflow(!0)).SOURCE,d=1/0,f=-1/0),t.visit(h,(e=>{const t=n(e);let i,s;null==t?(e[u]=null,r&&(e[l]=null)):(e[u]=i=s=a(t),r&&(e[l]=s=o(i,c)),if&&(f=s))})),a.start=d,a.stop=f,t.modifies(r?s:u)},_floor(e,t){const n="utc"===e.timezone,{units:r,step:i}=e.units?{units:e.units,step:e.step||1}:dn({extent:e.extent||De(t.materialize(t.SOURCE).source,e.field),maxbins:e.maxbins}),a=mt(r),o=this.value||{},s=(n?Nt:qt)(a,i);return s.unit=Y(a),s.units=a,s.step=i,s.start=o.start,s.stop=o.stop,this.value=s}}),Oe(Za,Tr,{transform(e,t){const n=t.dataflow,r=e.field,i=this.value,a=e=>i.set(r(e),e);let o=!0;return e.modified("field")||t.modified(r.fields)?(i.clear(),t.visit(t.SOURCE,a)):t.changed()?(t.visit(t.REM,(e=>i.delete(r(e)))),t.visit(t.ADD,a)):o=!1,this.modified(o),i.empty>n.cleanThreshold&&n.runAfter(i.clean),t.fork()}}),Oe(eo,Tr,{transform(e,t){(!this.value||e.modified("field")||e.modified("sort")||t.changed()||e.sort&&t.modified(e.sort.fields))&&(this.value=(e.sort?t.source.slice().sort(dr(e.sort)):t.source).map(e.field))}});const to={row_number:function(){return{next:e=>e.index+1}},rank:function(){let e;return{init:()=>e=1,next:t=>{const n=t.index,r=t.data;return n&&t.compare(r[n-1],r[n])?e=n+1:e}}},dense_rank:function(){let e;return{init:()=>e=1,next:t=>{const n=t.index,r=t.data;return n&&t.compare(r[n-1],r[n])?++e:e}}},percent_rank:function(){const e=to.rank(),t=e.next;return{init:e.init,next:e=>(t(e)-1)/(e.data.length-1)}},cume_dist:function(){let e;return{init:()=>e=0,next:t=>{const n=t.data,r=t.compare;let i=t.index;if(e0||E("ntile num must be greater than zero.");const n=to.cume_dist(),r=n.next;return{init:n.init,next:e=>Math.ceil(t*r(e))}},lag:function(e,t){return t=+t||1,{next:n=>{const r=n.index-t;return r>=0?e(n.data[r]):null}}},lead:function(e,t){return t=+t||1,{next:n=>{const r=n.index+t,i=n.data;return re(t.data[t.i0])}},last_value:function(e){return{next:t=>e(t.data[t.i1-1])}},nth_value:function(e,t){return(t=+t)>0||E("nth_value nth must be greater than zero."),{next:n=>{const r=n.i0+(t-1);return rt=null,next:n=>{const r=e(n.data[n.index]);return null!=r?t=r:t}}},next_value:function(e){let t,n;return{init:()=>(t=null,n=-1),next:r=>{const i=r.data;return r.index<=n?t:(n=function(e,t,n){for(let r=t.length;ns[e]=1))}f(e.sort),t.forEach(((e,t)=>{const s=n[t],h=_(s),p=qi(e,h,i[t]);if(f(s),a.push(p),Fe(to,e))o.push(function(e,t,n,r){const i=to[e](t,n);return{init:i.init||B,update:function(e,t){t[r]=i.next(e)}}}(e,n[t],r[t],p));else{if(null==s&&"count"!==e&&E("Null aggregate field specified."),"count"===e)return void l.push(p);d=!1;let t=u[h];t||(t=u[h]=[],t.field=s,c.push(t)),t.push(Ui(e,p))}})),(l.length||c.length)&&(this.cell=function(e,t,n){e=e.map((e=>Vi(e,e.field)));const r={num:0,agg:null,store:!1,count:t};if(!n)for(var i=e.length,a=r.agg=Array(i),o=0;o0&&!i(a[n],a[n-1])&&(e.i0=t.left(a,a[n])),re.init())),this.cell&&this.cell.init()},io.update=function(e,t){const n=this.cell,r=this.windows,i=e.data,a=r&&r.length;let o;if(n){for(o=e.p0;othis.group(i(e));let o=this.state;o&&!n||(o=this.state=new ro(e)),n||t.modified(o.inputs)?(this.value={},t.visit(t.SOURCE,(e=>a(e).add(e)))):(t.visit(t.REM,(e=>a(e).remove(e))),t.visit(t.ADD,(e=>a(e).add(e))));for(let t=0,n=this._mlen;t"undefined"!=typeof Image?Image:null;function ho(e,t,n){const r=e-t+2*n;return e?r>0?r:1:0}const po="linear",mo="log",go="pow",yo="sqrt",vo="symlog",bo="time",xo="utc",_o="sequential",Ao="diverging",ko="quantile",wo="quantize",Do="threshold",Eo="ordinal",Co="point",Fo="band",Mo="bin-ordinal",So="continuous",Bo="discrete",Oo="discretizing",zo="interpolating",Ro="temporal";function $o(){const e=l.scaleOrdinal().unknown(void 0),t=e.domain,n=e.range;let i,a,o=[0,1],s=!1,u=0,c=0,d=.5;function f(){const e=t().length,l=o[1]p+i*e));return n(l?m.reverse():m)}return delete e.unknown,e.domain=function(e){return arguments.length?(t(e),f()):t()},e.range=function(e){return arguments.length?(o=[+e[0],+e[1]],f()):o.slice()},e.rangeRound=function(e){return o=[+e[0],+e[1]],s=!0,f()},e.bandwidth=function(){return a},e.step=function(){return i},e.round=function(e){return arguments.length?(s=!!e,f()):s},e.padding=function(e){return arguments.length?(c=Math.max(0,Math.min(1,e)),u=c,f()):u},e.paddingInner=function(e){return arguments.length?(u=Math.max(0,Math.min(1,e)),f()):u},e.paddingOuter=function(e){return arguments.length?(c=Math.max(0,Math.min(1,e)),f()):c},e.align=function(e){return arguments.length?(d=Math.max(0,Math.min(1,e)),f()):d},e.invertRange=function(e){if(null==e[0]||null==e[1])return;const i=o[1]o[1-i])?void 0:(l=Math.max(0,r.bisectRight(s,f)-1),c=f===h?l:r.bisectRight(s,h)-1,f-s[l]>a+1e-10&&++l,i&&(d=l,l=u-c,c=u-d),l>c?void 0:t().slice(l,c+1))},e.invert=function(t){const n=e.invertRange([t,t]);return n?n[0]:n},e.copy=function(){return $o().domain(t()).range(o).round(s).paddingInner(u).paddingOuter(c).align(d)},f()}function qo(e){const t=e.copy;return e.padding=e.paddingOuter,delete e.paddingInner,e.copy=function(){return qo(t())},e}var Lo=Array.prototype.map;const To=Array.prototype.slice;const No=new Map,Po=Symbol("vega_scale");function Uo(e){return e[Po]=!0,e}function jo(e,t,n){return arguments.length>1?(No.set(e,function(e,t,n){const r=function(){const n=t();return n.invertRange||(n.invertRange=n.invert?function(e){return function(t){let n,r=t[0],i=t[1];return i=s&&n[a]<=u&&(l<0&&(l=a),r=a);if(!(l<0))return s=e.invertExtent(n[l]),u=e.invertExtent(n[r]),[void 0===s[0]?s[1]:s[0],void 0===u[1]?u[0]:u[1]]}}(n):void 0),n.type=e,Uo(n)};return r.metadata=Ze(he(n)),r}(e,t,n)),this):Io(e)?No.get(e):void 0}function Io(e){return No.has(e)}function Wo(e,t){const n=No.get(e);return n&&n.metadata[t]}function Go(e){return Wo(e,So)}function Ho(e){return Wo(e,Bo)}function Vo(e){return Wo(e,Oo)}function Yo(e){return Wo(e,mo)}function Xo(e){return Wo(e,zo)}function Jo(e){return Wo(e,ko)}jo("identity",v.scaleIdentity),jo(po,v.scaleLinear,So),jo(mo,v.scaleLog,[So,mo]),jo(go,v.scalePow,So),jo(yo,v.scaleSqrt,So),jo(vo,v.scaleSymlog,So),jo(bo,v.scaleTime,[So,Ro]),jo(xo,v.scaleUtc,[So,Ro]),jo(_o,v.scaleSequential,[So,zo]),jo(`${_o}-${po}`,v.scaleSequential,[So,zo]),jo(`${_o}-${mo}`,v.scaleSequentialLog,[So,zo,mo]),jo(`${_o}-${go}`,v.scaleSequentialPow,[So,zo]),jo(`${_o}-${yo}`,v.scaleSequentialSqrt,[So,zo]),jo(`${_o}-${vo}`,v.scaleSequentialSymlog,[So,zo]),jo(`${Ao}-${po}`,v.scaleDiverging,[So,zo]),jo(`${Ao}-${mo}`,v.scaleDivergingLog,[So,zo,mo]),jo(`${Ao}-${go}`,v.scaleDivergingPow,[So,zo]),jo(`${Ao}-${yo}`,v.scaleDivergingSqrt,[So,zo]),jo(`${Ao}-${vo}`,v.scaleDivergingSymlog,[So,zo]),jo(ko,v.scaleQuantile,[Oo,ko]),jo(wo,v.scaleQuantize,Oo),jo(Do,v.scaleThreshold,Oo),jo(Mo,(function e(){let t=[],n=[];function i(e){return null==e||e!=e?void 0:n[(r.bisect(t,e)-1)%n.length]}return i.domain=function(e){return arguments.length?(t=function(e){return Lo.call(e,X)}(e),i):t.slice()},i.range=function(e){return arguments.length?(n=To.call(e),i):n.slice()},i.tickFormat=function(e,n){return l.tickFormat(t[0],Y(t),null==e?10:e,n)},i.copy=function(){return e().domain(i.domain()).range(i.range())},i}),[Bo,Oo]),jo(Eo,v.scaleOrdinal,Bo),jo(Fo,$o,Bo),jo(Co,(function(){return qo($o().paddingInner(1))}),Bo);const Qo=["clamp","base","constant","exponent"];function Ko(e,t){const n=t[0],r=Y(t)-n;return function(t){return e(n+t*r)}}function Zo(e,t,n){return b.piecewise(ns(t||"rgb",n),e)}function es(e,t){const n=new Array(t),r=t+1;for(let i=0;ie[t]?o[t](e[t]()):0)),o):Ae(.5)}function ns(e,t){const n=b[function(e){return"interpolate"+e.toLowerCase().split("-").map((e=>e[0].toUpperCase()+e.slice(1))).join("")}(e)];return null!=t&&n&&n.gamma?n.gamma(t):n}function rs(e){const t=e.length/6|0,n=new Array(t);for(let r=0;r1?(as[e]=t,this):as[e]}is({category10:"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf",category20:"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5",category20b:"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6",category20c:"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9",tableau10:"4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac",tableau20:"4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5",accent:"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666",dark2:"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666",paired:"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928",pastel1:"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2",pastel2:"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc",set1:"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999",set2:"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3",set3:"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"},rs),is({blues:"cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90",greens:"d3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429",greys:"e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e",oranges:"fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303",purples:"e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c",reds:"fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13",blueGreen:"d5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429",bluePurple:"ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71",greenBlue:"d3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1",orangeRed:"fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403",purpleBlue:"dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281",purpleBlueGreen:"dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353",purpleRed:"dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a",redPurple:"fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174",yellowGreen:"e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034",yellowOrangeBrown:"feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204",yellowOrangeRed:"fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225",blueOrange:"134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07",brownBlueGreen:"704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147",purpleGreen:"5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29",purpleOrange:"4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07",redBlue:"8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85",redGrey:"8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434",yellowGreenBlue:"eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185",redYellowBlue:"a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695",redYellowGreen:"a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837",pinkYellowGreen:"8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419",spectral:"9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2",viridis:"440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725",magma:"0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf",inferno:"0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4",plasma:"0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921",cividis:"00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647",rainbow:"6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa",sinebow:"ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040",turbo:"23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00",browns:"eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632",tealBlues:"bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985",teals:"bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667",warmGreys:"dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e",goldGreen:"f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36",goldOrange:"f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26",goldRed:"f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e",lightGreyRed:"efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b",lightGreyTeal:"e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc",lightMulti:"e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c",lightOrange:"f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b",lightTealBlue:"e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988",darkBlue:"3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff",darkGold:"3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff",darkGreen:"3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa",darkMulti:"3737371f5287197d8c29a86995ce3fffe800ffffff",darkRed:"3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c"},(e=>Zo(rs(e))));const ss="symbol",us="discrete",ls=e=>j(e)?e.map((e=>String(e))):String(e),cs=(e,t)=>e[1]-t[1],ds=(e,t)=>t[1]-e[1];function fs(e,t,n){let r;return Le(t)&&(e.bins&&(t=Math.max(t,e.bins.length)),null!=n&&(t=Math.min(t,Math.floor(Ve(e.domain())/n||1)))),I(t)&&(r=t.step,t=t.interval),Ne(t)&&(t=e.type===bo?jt(t):e.type==xo?It(t):E("Only time and utc scales accept interval strings."),r&&(t=t.every(r))),t}function hs(e,t,n){let r=e.range(),i=r[0],a=Y(r),o=cs;if(i>a&&(r=a,a=i,i=r,o=ds),i=Math.floor(i),a=Math.ceil(a),t=t.map((t=>[t,e(t)])).filter((e=>i<=e[1]&&e[1]<=a)).sort(o).map((e=>e[0])),n>0&&t.length>1){const e=[t[0],Y(t)];for(;t.length>n&&t.length>=3;)t=t.filter(((e,t)=>!(t%2)));t.length<3&&(t=e)}return t}function ps(e,t){return e.bins?hs(e,e.bins):e.ticks?e.ticks(t):e.domain()}function ms(e,t,n,r,i,a){const o=t.type;let s=ls;if(o===bo||i===bo)s=e.timeFormat(r);else if(o===xo||i===xo)s=e.utcFormat(r);else if(Yo(o)){const i=e.formatFloat(r);if(a||t.bins)s=i;else{const e=gs(t,n,!1);s=t=>e(t)?i(t):""}}else if(t.tickFormat){const i=t.domain();s=e.formatSpan(i[0],i[i.length-1],n,r)}else r&&(s=e.format(r));return s}function gs(e,t,n){const r=ps(e,t),i=e.base(),a=Math.log(i),o=Math.max(1,i*t/r.length),s=e=>{let t=e/Math.pow(i,Math.round(Math.log(e)/a));return t*iys[e.type]||e.bins;function _s(e,t,n,r,i,a,o){const s=vs[t.type]&&a!==bo&&a!==xo?function(e,t,n){const r=t[vs[t.type]](),i=r.length;let a,o=i>1?r[1]-r[0]:r[0];for(a=1;a(t,n,r)=>{const i=ks(r[n+1],ks(r.max,1/0)),a=Es(t,e),o=Es(i,e);return a&&o?a+" – "+o:o?"< "+o:"≥ "+a},ks=(e,t)=>null!=e?e:t,ws=e=>(t,n)=>n?e(t):null,Ds=e=>t=>e(t),Es=(e,t)=>Number.isFinite(e)?t(e):null;function Cs(e,t,n,r){const i=r||t.type;return Ne(n)&&function(e){return Wo(e,Ro)}(i)&&(n=n.replace(/%a/g,"%A").replace(/%b/g,"%B")),n||i!==bo?n||i!==xo?_s(e,t,5,null,n,r,!0):e.utcFormat("%A, %d %B %Y, %X UTC"):e.timeFormat("%A, %d %B %Y, %X")}function Fs(e,t,n){n=n||{};const r=Math.max(3,n.maxlen||7),i=Cs(e,t,n.format,n.formatType);if(Vo(t.type)){const e=bs(t).slice(1).map(i),n=e.length;return`${n} boundar${1===n?"y":"ies"}: ${e.join(", ")}`}if(Ho(t.type)){const e=t.domain(),n=e.length;return`${n} value${1===n?"":"s"}: ${n>r?e.slice(0,r-2).map(i).join(", ")+", ending with "+e.slice(-1).map(i):e.map(i).join(", ")}`}{const e=t.domain();return`values from ${i(e[0])} to ${i(Y(e))}`}}let Ms=0;const Ss="p_";function Bs(e){return e&&e.gradient}function Os(e,t,n){const r=e.gradient;let i=e.id,a="radial"===r?Ss:"";return i||(i=e.id="gradient_"+Ms++,"radial"===r?(e.x1=zs(e.x1,.5),e.y1=zs(e.y1,.5),e.r1=zs(e.r1,0),e.x2=zs(e.x2,.5),e.y2=zs(e.y2,.5),e.r2=zs(e.r2,.5),a=Ss):(e.x1=zs(e.x1,0),e.y1=zs(e.y1,0),e.x2=zs(e.x2,1),e.y2=zs(e.y2,0))),t[i]=e,"url("+(n||"")+"#"+a+i+")"}function zs(e,t){return null!=e?e:t}function Rs(e,t){var n,r=[];return n={gradient:"linear",x1:e?e[0]:0,y1:e?e[1]:0,x2:t?t[0]:1,y2:t?t[1]:0,stops:r,stop:function(e,t){return r.push({offset:e,color:t}),n}}}const $s={basis:{curve:s.curveBasis},"basis-closed":{curve:s.curveBasisClosed},"basis-open":{curve:s.curveBasisOpen},bundle:{curve:s.curveBundle,tension:"beta",value:.85},cardinal:{curve:s.curveCardinal,tension:"tension",value:0},"cardinal-open":{curve:s.curveCardinalOpen,tension:"tension",value:0},"cardinal-closed":{curve:s.curveCardinalClosed,tension:"tension",value:0},"catmull-rom":{curve:s.curveCatmullRom,tension:"alpha",value:.5},"catmull-rom-closed":{curve:s.curveCatmullRomClosed,tension:"alpha",value:.5},"catmull-rom-open":{curve:s.curveCatmullRomOpen,tension:"alpha",value:.5},linear:{curve:s.curveLinear},"linear-closed":{curve:s.curveLinearClosed},monotone:{horizontal:s.curveMonotoneY,vertical:s.curveMonotoneX},natural:{curve:s.curveNatural},step:{curve:s.curveStep},"step-after":{curve:s.curveStepAfter},"step-before":{curve:s.curveStepBefore}};function qs(e,t,n){var r=Fe($s,e)&&$s[e],i=null;return r&&(i=r.curve||r[t||"vertical"],r.tension&&null!=n&&(i=i[r.tension](n))),i}const Ls={m:2,l:2,h:1,v:1,z:0,c:6,s:4,q:4,t:2,a:7},Ts=/[mlhvzcsqta]([^mlhvzcsqta]+|$)/gi,Ns=/^[+-]?(([0-9]*\.[0-9]+)|([0-9]+\.)|([0-9]+))([eE][+-]?[0-9]+)?/,Ps=/^((\s+,?\s*)|(,\s*))/,Us=/^[01]/;function js(e){const t=[];return(e.match(Ts)||[]).forEach((e=>{let n=e[0];const r=n.toLowerCase(),i=Ls[r],a=function(e,t,n){const r=[];for(let i=0;t&&i1&&(m=Math.sqrt(m),n*=m,r*=m);const g=f/n,y=d/n,v=-d/r,b=f/r,x=g*s+y*u,_=v*s+b*u,A=g*e+y*t,k=v*e+b*t;let w=1/((A-x)*(A-x)+(k-_)*(k-_))-.25;w<0&&(w=0);let D=Math.sqrt(w);a==i&&(D=-D);const E=.5*(x+A)-D*(k-_),C=.5*(_+k)+D*(A-x),F=Math.atan2(_-C,x-E);let M=Math.atan2(k-C,A-E)-F;M<0&&1===a?M+=Hs:M>0&&0===a&&(M-=Hs);const S=Math.ceil(Math.abs(M/(Gs+.001))),B=[];for(let e=0;e+e}function fu(e,t,n){return Math.max(t,Math.min(e,n))}function hu(){var e=su,t=uu,n=lu,r=cu,i=du(0),a=i,o=i,s=i,l=null;function c(c,d,f){var h,p=null!=d?d:+e.call(this,c),m=null!=f?f:+t.call(this,c),g=+n.call(this,c),y=+r.call(this,c),v=Math.min(g,y)/2,b=fu(+i.call(this,c),0,v),x=fu(+a.call(this,c),0,v),_=fu(+o.call(this,c),0,v),A=fu(+s.call(this,c),0,v);if(l||(l=h=u.path()),b<=0&&x<=0&&_<=0&&A<=0)l.rect(p,m,g,y);else{var k=p+g,w=m+y;l.moveTo(p+b,m),l.lineTo(k-x,m),l.bezierCurveTo(k-ou*x,m,k,m+ou*x,k,m+x),l.lineTo(k,w-A),l.bezierCurveTo(k,w-ou*A,k-ou*A,w,k-A,w),l.lineTo(p+_,w),l.bezierCurveTo(p+ou*_,w,p,w-ou*_,p,w-_),l.lineTo(p,m+b),l.bezierCurveTo(p,m+ou*b,p+ou*b,m,p+b,m),l.closePath()}if(h)return l=null,h+""||null}return c.x=function(t){return arguments.length?(e=du(t),c):e},c.y=function(e){return arguments.length?(t=du(e),c):t},c.width=function(e){return arguments.length?(n=du(e),c):n},c.height=function(e){return arguments.length?(r=du(e),c):r},c.cornerRadius=function(e,t,n,r){return arguments.length?(i=du(e),a=null!=t?du(t):i,s=null!=n?du(n):i,o=null!=r?du(r):a,c):i},c.context=function(e){return arguments.length?(l=null==e?null:e,c):l},c}function pu(){var e,t,n,r,i,a,o,s,l=null;function c(e,t,n){const r=n/2;if(i){var u=o-t,c=e-a;if(u||c){var d=Math.hypot(u,c),f=(u/=d)*s,h=(c/=d)*s,p=Math.atan2(c,u);l.moveTo(a-f,o-h),l.lineTo(e-u*r,t-c*r),l.arc(e,t,r,p-Math.PI,p),l.lineTo(a+f,o+h),l.arc(a,o,s,p,p+Math.PI)}else l.arc(e,t,r,0,Hs);l.closePath()}else i=1;a=e,o=t,s=r}function d(a){var o,s,d,f=a.length,h=!1;for(null==l&&(l=d=u.path()),o=0;o<=f;++o)!(oe.x||0,yu=e=>e.y||0,vu=e=>!(!1===e.defined),bu=s.arc().startAngle((e=>e.startAngle||0)).endAngle((e=>e.endAngle||0)).padAngle((e=>e.padAngle||0)).innerRadius((e=>e.innerRadius||0)).outerRadius((e=>e.outerRadius||0)).cornerRadius((e=>e.cornerRadius||0)),xu=s.area().x(gu).y1(yu).y0((e=>(e.y||0)+(e.height||0))).defined(vu),_u=s.area().y(yu).x1(gu).x0((e=>(e.x||0)+(e.width||0))).defined(vu),Au=s.line().x(gu).y(yu).defined(vu),ku=hu().x(gu).y(yu).width((e=>e.width||0)).height((e=>e.height||0)).cornerRadius((e=>mu(e.cornerRadiusTopLeft,e.cornerRadius)||0),(e=>mu(e.cornerRadiusTopRight,e.cornerRadius)||0),(e=>mu(e.cornerRadiusBottomRight,e.cornerRadius)||0),(e=>mu(e.cornerRadiusBottomLeft,e.cornerRadius)||0)),wu=s.symbol().type((e=>iu(e.shape||"circle"))).size((e=>mu(e.size,64))),Du=pu().x(gu).y(yu).defined(vu).size((e=>e.size||1));function Eu(e){return e.cornerRadius||e.cornerRadiusTopLeft||e.cornerRadiusTopRight||e.cornerRadiusBottomRight||e.cornerRadiusBottomLeft}function Cu(e,t,n,r){return ku.context(e)(t,n,r)}var Fu=1;function Mu(){Fu=1}function Su(e,t,n){var r=t.clip,i=e._defs,a=t.clip_id||(t.clip_id="clip"+Fu++),o=i.clipping[a]||(i.clipping[a]={id:a});return me(r)?o.path=r(null):Eu(n)?o.path=Cu(null,n,0,0):(o.width=n.width||0,o.height=n.height||0),"url(#"+a+")"}function Bu(e){this.clear(),e&&this.union(e)}function Ou(e){this.mark=e,this.bounds=this.bounds||new Bu}function zu(e){Ou.call(this,e),this.items=this.items||[]}function Ru(e){this._pending=0,this._loader=e||Zn()}function $u(e){e._pending+=1}function qu(e){e._pending-=1}function Lu(e,t,n){if(t.stroke&&0!==t.opacity&&0!==t.strokeOpacity){const r=null!=t.strokeWidth?+t.strokeWidth:1;e.expand(r+(n?function(e,t){return e.strokeJoin&&"miter"!==e.strokeJoin?0:t}(t,r):0))}return e}Bu.prototype={clone(){return new Bu(this)},clear(){return this.x1=+Number.MAX_VALUE,this.y1=+Number.MAX_VALUE,this.x2=-Number.MAX_VALUE,this.y2=-Number.MAX_VALUE,this},empty(){return this.x1===+Number.MAX_VALUE&&this.y1===+Number.MAX_VALUE&&this.x2===-Number.MAX_VALUE&&this.y2===-Number.MAX_VALUE},equals(e){return this.x1===e.x1&&this.y1===e.y1&&this.x2===e.x2&&this.y2===e.y2},set(e,t,n,r){return nthis.x2&&(this.x2=e),t>this.y2&&(this.y2=t),this},expand(e){return this.x1-=e,this.y1-=e,this.x2+=e,this.y2+=e,this},round(){return this.x1=Math.floor(this.x1),this.y1=Math.floor(this.y1),this.x2=Math.ceil(this.x2),this.y2=Math.ceil(this.y2),this},scale(e){return this.x1*=e,this.y1*=e,this.x2*=e,this.y2*=e,this},translate(e,t){return this.x1+=e,this.x2+=e,this.y1+=t,this.y2+=t,this},rotate(e,t,n){const r=this.rotatedPoints(e,t,n);return this.clear().add(r[0],r[1]).add(r[2],r[3]).add(r[4],r[5]).add(r[6],r[7])},rotatedPoints(e,t,n){var{x1:r,y1:i,x2:a,y2:o}=this,s=Math.cos(e),u=Math.sin(e),l=t-t*s+n*u,c=n-t*u-n*s;return[s*r-u*i+l,u*r+s*i+c,s*r-u*o+l,u*r+s*o+c,s*a-u*i+l,u*a+s*i+c,s*a-u*o+l,u*a+s*o+c]},union(e){return e.x1this.x2&&(this.x2=e.x2),e.y2>this.y2&&(this.y2=e.y2),this},intersect(e){return e.x1>this.x1&&(this.x1=e.x1),e.y1>this.y1&&(this.y1=e.y1),e.x2=e.x2&&this.y1<=e.y1&&this.y2>=e.y2},alignsWith(e){return e&&(this.x1==e.x1||this.x2==e.x2||this.y1==e.y1||this.y2==e.y2)},intersects(e){return e&&!(this.x2e.x2||this.y2e.y2)},contains(e,t){return!(ethis.x2||tthis.y2)},width(){return this.x2-this.x1},height(){return this.y2-this.y1}},Oe(zu,Ou),Ru.prototype={pending(){return this._pending},sanitizeURL(e){const t=this;return $u(t),t._loader.sanitize(e,{context:"href"}).then((e=>(qu(t),e))).catch((()=>(qu(t),null)))},loadImage(e){const t=this,n=fo();return $u(t),t._loader.sanitize(e,{context:"image"}).then((e=>{const r=e.href;if(!r||!n)throw{url:r};const i=new n,a=Fe(e,"crossOrigin")?e.crossOrigin:"anonymous";return null!=a&&(i.crossOrigin=a),i.onload=()=>qu(t),i.onerror=()=>qu(t),i.src=r,i})).catch((e=>(qu(t),{complete:!1,width:0,height:0,src:e&&e.url||""})))},ready(){const e=this;return new Promise((t=>{!function n(r){e.pending()?setTimeout((()=>{n(!0)}),10):t(r)}(!1)}))}};const Tu=Hs-1e-8;let Nu,Pu,Uu,ju,Iu,Wu,Gu,Hu;const Vu=(e,t)=>Nu.add(e,t),Yu=(e,t)=>Vu(Pu=e,Uu=t),Xu=e=>Vu(e,Nu.y1),Ju=e=>Vu(Nu.x1,e),Qu=(e,t)=>Iu*e+Gu*t,Ku=(e,t)=>Wu*e+Hu*t,Zu=(e,t)=>Vu(Qu(e,t),Ku(e,t)),el=(e,t)=>Yu(Qu(e,t),Ku(e,t));function tl(e,t){return Nu=e,t?(ju=t*Is,Iu=Hu=Math.cos(ju),Wu=Math.sin(ju),Gu=-Wu):(Iu=Hu=1,ju=Wu=Gu=0),nl}const nl={beginPath(){},closePath(){},moveTo:el,lineTo:el,rect(e,t,n,r){ju?(Zu(e+n,t),Zu(e+n,t+r),Zu(e,t+r),el(e,t)):(Vu(e+n,t+r),Yu(e,t))},quadraticCurveTo(e,t,n,r){const i=Qu(e,t),a=Ku(e,t),o=Qu(n,r),s=Ku(n,r);rl(Pu,i,o,Xu),rl(Uu,a,s,Ju),Yu(o,s)},bezierCurveTo(e,t,n,r,i,a){const o=Qu(e,t),s=Ku(e,t),u=Qu(n,r),l=Ku(n,r),c=Qu(i,a),d=Ku(i,a);il(Pu,o,u,c,Xu),il(Uu,s,l,d,Ju),Yu(c,d)},arc(e,t,n,r,i,a){if(r+=ju,i+=ju,Pu=n*Math.cos(i)+e,Uu=n*Math.sin(i)+t,Math.abs(i-r)>Tu)Vu(e-n,t-n),Vu(e+n,t+n);else{const o=r=>Vu(n*Math.cos(r)+e,n*Math.sin(r)+t);let s,u;if(o(r),o(i),i!==r)if((r%=Hs)<0&&(r+=Hs),(i%=Hs)<0&&(i+=Hs),ii;++u,s-=Gs)o(s);else for(s=r-r%Gs+Gs,u=0;u<4&&sWs?(u=o*o+s*a,u>=0&&(u=Math.sqrt(u),l=(-o+u)/a,c=(-o-u)/a)):l=.5*s/o,0g)return!1;h>m&&(m=h)}else if(d>0){if(h0&&(e.globalAlpha=n,e.fillStyle=gl(e,t,t.fill),!0)}var vl=[];function bl(e,t,n){var r=null!=(r=t.strokeWidth)?r:1;return!(r<=0)&&((n*=null==t.strokeOpacity?1:t.strokeOpacity)>0&&(e.globalAlpha=n,e.strokeStyle=gl(e,t,t.stroke),e.lineWidth=r,e.lineCap=t.strokeCap||"butt",e.lineJoin=t.strokeJoin||"miter",e.miterLimit=t.strokeMiterLimit||10,e.setLineDash&&(e.setLineDash(t.strokeDash||vl),e.lineDashOffset=t.strokeDashOffset||0),!0))}function xl(e,t){return e.zindex-t.zindex||e.index-t.index}function _l(e){if(!e.zdirty)return e.zitems;var t,n,r,i=e.items,a=[];for(n=0,r=i.length;n=0;)if(n=t(i[r]))return n;if(i===a)for(r=(i=e.items).length;--r>=0;)if(!i[r].zindex&&(n=t(i[r])))return n;return null}function wl(e){return function(t,n,r){Al(n,(n=>{r&&!r.intersects(n.bounds)||El(e,t,n,n)}))}}function Dl(e){return function(t,n,r){!n.items.length||r&&!r.intersects(n.bounds)||El(e,t,n.items[0],n.items)}}function El(e,t,n,r){var i=null==n.opacity?1:n.opacity;0!==i&&(e(t,r)||(hl(t,n),n.fill&&yl(t,n,i)&&t.fill(),n.stroke&&bl(t,n,i)&&t.stroke()))}function Cl(e){return e=e||z,function(t,n,r,i,a,o){return r*=t.pixelRatio,i*=t.pixelRatio,kl(n,(n=>{const s=n.bounds;if((!s||s.contains(a,o))&&s)return e(t,n,r,i,a,o)?n:void 0}))}}function Fl(e,t){return function(n,r,i,a){var o,s,u=Array.isArray(r)?r[0]:r,l=null==t?u.fill:t,c=u.stroke&&n.isPointInStroke;return c&&(o=u.strokeWidth,s=u.strokeCap,n.lineWidth=null!=o?o:1,n.lineCap=null!=s?s:"butt"),!e(n,r)&&(l&&n.isPointInPath(i,a)||c&&n.isPointInStroke(i,a))}}function Ml(e){return Cl(Fl(e))}function Sl(e,t){return"translate("+e+","+t+")"}function Bl(e){return"rotate("+e+")"}function Ol(e){return Sl(e.x||0,e.y||0)}function zl(e,t,n){function r(e,n){var r=n.x||0,i=n.y||0,a=n.angle||0;e.translate(r,i),a&&e.rotate(a*=Is),e.beginPath(),t(e,n),a&&e.rotate(-a),e.translate(-r,-i)}return{type:e,tag:"path",nested:!1,attr:function(e,n){e("transform",function(e){return Sl(e.x||0,e.y||0)+(e.angle?" "+Bl(e.angle):"")}(n)),e("d",t(null,n))},bound:function(e,n){return t(tl(e,n.angle),n),Lu(e,n).translate(n.x||0,n.y||0)},draw:wl(r),pick:Ml(r),isect:n||ul(r)}}var Rl=zl("arc",(function(e,t){return bu.context(e)(t)}));function $l(e,t,n){function r(e,n){e.beginPath(),t(e,n)}const i=Fl(r);return{type:e,tag:"path",nested:!0,attr:function(e,n){var r=n.mark.items;r.length&&e("d",t(null,r))},bound:function(e,n){var r=n.items;return 0===r.length?e:(t(tl(e),r),Lu(e,r[0]))},draw:Dl(r),pick:function(e,t,n,r,a,o){var s=t.items,u=t.bounds;return!s||!s.length||u&&!u.contains(a,o)?null:(n*=e.pixelRatio,r*=e.pixelRatio,i(e,s,n,r)?s[0]:null)},isect:ll,tip:n}}var ql=$l("area",(function(e,t){const n=t[0],r=n.interpolate||"linear";return("horizontal"===n.orient?_u:xu).curve(qs(r,n.orient,n.tension)).context(e)(t)}),(function(e,t){for(var n,r,i="horizontal"===e[0].orient?t[1]:t[0],a="horizontal"===e[0].orient?"y":"x",o=e.length,s=1/0;--o>=0;)!1!==e[o].defined&&(r=Math.abs(e[o][a]-i)).5&&t<1.5?.5-Math.abs(t-1):0}function Nl(e,t){const n=Tl(t);e("d",Cu(null,t,n,n))}function Pl(e,t,n,r){const i=Tl(t);e.beginPath(),Cu(e,t,(n||0)+i,(r||0)+i)}const Ul=Fl(Pl),jl=Fl(Pl,!1),Il=Fl(Pl,!0);var Wl={type:"group",tag:"g",nested:!1,attr:function(e,t){e("transform",Ol(t))},bound:function(e,t){if(!t.clip&&t.items){const n=t.items,r=n.length;for(let t=0;t{const r=t.x||0,i=t.y||0,a=t.strokeForeground,o=null==t.opacity?1:t.opacity;(t.stroke||t.fill)&&o&&(Pl(e,t,r,i),hl(e,t),t.fill&&yl(e,t,o)&&e.fill(),t.stroke&&!a&&bl(e,t,o)&&e.stroke()),e.save(),e.translate(r,i),t.clip&&Ll(e,t),n&&n.translate(-r,-i),Al(t,(t=>{this.draw(e,t,n)})),n&&n.translate(r,i),e.restore(),a&&t.stroke&&o&&(Pl(e,t,r,i),hl(e,t),bl(e,t,o)&&e.stroke())}))},pick:function(e,t,n,r,i,a){if(t.bounds&&!t.bounds.contains(i,a)||!t.items)return null;const o=n*e.pixelRatio,s=r*e.pixelRatio;return kl(t,(u=>{let l,c,d;const f=u.bounds;if(f&&!f.contains(i,a))return;c=u.x||0,d=u.y||0;const h=c+(u.width||0),p=d+(u.height||0),m=u.clip;if(m&&(ih||ap))return;if(e.save(),e.translate(c,d),c=i-c,d=a-d,m&&Eu(u)&&!Il(e,u,o,s))return e.restore(),null;const g=u.strokeForeground,y=!1!==t.interactive;return y&&g&&u.stroke&&jl(e,u,o,s)?(e.restore(),u):(l=kl(u,(e=>function(e,t,n){return(!1!==e.interactive||"group"===e.marktype)&&e.bounds&&e.bounds.contains(t,n)}(e,c,d)?this.pick(e,n,r,c,d):null)),!l&&y&&(u.fill||!g&&u.stroke)&&Ul(e,u,o,s)&&(l=u),e.restore(),l||null)}))},isect:cl,content:function(e,t,n){e("clip-path",t.clip?Su(n,t,t):null)},background:function(e,t){e("class","background"),e("aria-hidden",!0),Nl(e,t)},foreground:function(e,t){e("class","foreground"),e("aria-hidden",!0),t.strokeForeground?Nl(e,t):e("d","")}},Gl={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",version:"1.1"};function Hl(e,t){var n=e.image;return(!n||e.url&&e.url!==n.url)&&(n={complete:!1,width:0,height:0},t.loadImage(e.url).then((t=>{e.image=t,e.image.url=e.url}))),n}function Vl(e,t){return null!=e.width?e.width:t&&t.width?!1!==e.aspect&&e.height?e.height*t.width/t.height:t.width:0}function Yl(e,t){return null!=e.height?e.height:t&&t.height?!1!==e.aspect&&e.width?e.width*t.height/t.width:t.height:0}function Xl(e,t){return"center"===e?t/2:"right"===e?t:0}function Jl(e,t){return"middle"===e?t/2:"bottom"===e?t:0}var Ql={type:"image",tag:"image",nested:!1,attr:function(e,t,n){const r=Hl(t,n),i=Vl(t,r),a=Yl(t,r),o=(t.x||0)-Xl(t.align,i),s=(t.y||0)-Jl(t.baseline,a);e("href",!r.src&&r.toDataURL?r.toDataURL():r.src||"",Gl["xmlns:xlink"],"xlink:href"),e("transform",Sl(o,s)),e("width",i),e("height",a),e("preserveAspectRatio",!1===t.aspect?"none":"xMidYMid")},bound:function(e,t){const n=t.image,r=Vl(t,n),i=Yl(t,n),a=(t.x||0)-Xl(t.align,r),o=(t.y||0)-Jl(t.baseline,i);return e.set(a,o,a+r,o+i)},draw:function(e,t,n){Al(t,(t=>{if(n&&!n.intersects(t.bounds))return;const r=Hl(t,this);let i=Vl(t,r),a=Yl(t,r);if(0===i||0===a)return;let o,s,u,l,c=(t.x||0)-Xl(t.align,i),d=(t.y||0)-Jl(t.baseline,a);!1!==t.aspect&&(s=r.width/r.height,u=t.width/t.height,s==s&&u==u&&s!==u&&(u=0;)if(!1!==e[a].defined&&(n=e[a].x-t[0])*n+(r=e[a].y-t[1])*r{if(!n||n.intersects(t.bounds)){var r=null==t.opacity?1:t.opacity;r&&rc(e,t,r)&&(hl(e,t),e.stroke())}}))},pick:Cl((function(e,t,n,r){return!!e.isPointInStroke&&(rc(e,t,1)&&e.isPointInStroke(n,r))})),isect:dl},ac=zl("shape",(function(e,t){return(t.mark.shape||t.shape).context(e)(t)})),oc=zl("symbol",(function(e,t){return wu.context(e)(t)}),ll);const sc=Ie();var uc={height:pc,measureWidth:fc,estimateWidth:cc,width:cc,canvas:lc};function lc(e){uc.width=e&&ol?fc:cc}function cc(e,t){return dc(vc(e,t),pc(e))}function dc(e,t){return~~(.8*e.length*t)}function fc(e,t){return pc(e)<=0||!(t=vc(e,t))?0:hc(t,xc(e))}function hc(e,t){const n=`(${t}) ${e}`;let r=sc.get(n);return void 0===r&&(ol.font=t,r=ol.measureText(e).width,sc.set(n,r)),r}function pc(e){return null!=e.fontSize?+e.fontSize||0:11}function mc(e){return null!=e.lineHeight?e.lineHeight:pc(e)+2}function gc(e){return t=e.lineBreak&&e.text&&!j(e.text)?e.text.split(e.lineBreak):e.text,j(t)?t.length>1?t:t[0]:t;var t}function yc(e){const t=gc(e);return(j(t)?t.length-1:0)*mc(e)}function vc(e,t){const n=null==t?"":(t+"").trim();return e.limit>0&&n.length?function(e,t){var n=+e.limit,r=function(e){if(uc.width===fc){const t=xc(e);return e=>hc(e,t)}{const t=pc(e);return e=>dc(e,t)}}(e);if(r(t)>>1,r(t.slice(i))>n?s=i+1:u=i;return a+t.slice(s)}for(;s>>1),r(t.slice(0,i))Math.max(e,uc.width(t,n))),0)):r=uc.width(t,d),"center"===a?l-=r/2:"right"===a&&(l-=r),e.set(l+=s,c+=u,l+r,c+i),t.angle&&!n)e.rotate(t.angle*Is,s,u);else if(2===n)return e.rotatedPoints(t.angle*Is,s,u);return e}var Ec={type:"text",tag:"text",nested:!1,attr:function(e,t){var n,r=t.dx||0,i=(t.dy||0)+_c(t),a=wc(t),o=a.x1,s=a.y1,u=t.angle||0;e("text-anchor",Ac[t.align]||"start"),u?(n=Sl(o,s)+" "+Bl(u),(r||i)&&(n+=" "+Sl(r,i))):n=Sl(o+r,s+i),e("transform",n)},bound:Dc,draw:function(e,t,n){Al(t,(t=>{var r,i,a,o,s,u,l,c=null==t.opacity?1:t.opacity;if(!(n&&!n.intersects(t.bounds)||0===c||t.fontSize<=0||null==t.text||0===t.text.length)){if(e.font=xc(t),e.textAlign=t.align||"left",i=(r=wc(t)).x1,a=r.y1,t.angle&&(e.save(),e.translate(i,a),e.rotate(t.angle*Is),i=a=0),i+=t.dx||0,a+=(t.dy||0)+_c(t),u=gc(t),hl(e,t),j(u))for(s=mc(t),o=0;o=0;)if(!1!==e[i].defined&&(n=e[i].x-t[0])*n+(r=e[i].y-t[1])*r<(n=e[i].size||1)*n)return e[i];return null})),Fc={arc:Rl,area:ql,group:Wl,image:Ql,line:Kl,path:ec,rect:nc,rule:ic,shape:ac,symbol:oc,text:Ec,trail:Cc};function Mc(e,t,n){var r=Fc[e.mark.marktype],i=t||r.bound;return r.nested&&(e=e.mark),i(e.bounds||(e.bounds=new Bu),e,n)}var Sc={mark:null};function Bc(e,t,n){var r,i,a,o,s=Fc[e.marktype],u=s.bound,l=e.items,c=l&&l.length;if(s.nested)return c?a=l[0]:(Sc.mark=e,a=Sc),o=Mc(a,u,n),t=t&&t.union(o)||o;if(t=t||e.bounds&&e.bounds.clear()||new Bu,c)for(r=0,i=l.length;rt;)e.removeChild(n[--r]);return e}function jc(e){return"mark-"+e.marktype+(e.role?" role-"+e.role:"")+(e.name?" "+e.name:"")}function Ic(e,t){const n=t.getBoundingClientRect();return[e.clientX-n.left-(t.clientLeft||0),e.clientY-n.top-(t.clientTop||0)]}function Wc(e,t){this._active=null,this._handlers={},this._loader=e||Zn(),this._tooltip=t||Gc}function Gc(e,t,n,r){e.element().setAttribute("title",r||"")}function Hc(e){this._el=null,this._bgcolor=null,this._loader=new Ru(e)}qc.prototype={toJSON(e){return zc(this.root,e||0)},mark(e,t,n){const r=Lc(e,t=t||this.root.items[0]);return t.items[n]=r,r.zindex&&(r.group.zdirty=!0),r}},Wc.prototype={initialize(e,t,n){return this._el=e,this._obj=n||null,this.origin(t)},element(){return this._el},canvas(){return this._el&&this._el.firstChild},origin(e){return arguments.length?(this._origin=e||[0,0],this):this._origin.slice()},scene(e){return arguments.length?(this._scene=e,this):this._scene},on(){},off(){},_handlerIndex(e,t,n){for(let r=e?e.length:0;--r>=0;)if(e[r].type===t&&(!n||e[r].handler===n))return r;return-1},handlers(e){const t=this._handlers,n=[];if(e)n.push(...t[this.eventName(e)]);else for(const e in t)n.push(...t[e]);return n},eventName(e){const t=e.indexOf(".");return t<0?e:e.slice(0,t)},handleHref(e,t,n){this._loader.sanitize(n,{context:"href"}).then((t=>{const n=new MouseEvent(e.type,e),r=Tc(null,"a");for(const e in t)r.setAttribute(e,t[e]);r.dispatchEvent(n)})).catch((()=>{}))},handleTooltip(e,t,n){if(t&&null!=t.tooltip){t=function(e,t,n,r){var i,a,o=e&&e.mark;if(o&&(i=Fc[o.marktype]).tip){for((a=Ic(t,n))[0]-=r[0],a[1]-=r[1];e=e.mark.group;)a[0]-=e.x||0,a[1]-=e.y||0;e=i.tip(o.items,a)}return e}(t,e,this.canvas(),this._origin);const r=n&&t&&t.tooltip||null;this._tooltip.call(this._obj,this,e,t,r)}},getItemBoundingClientRect(e){const t=this.canvas();if(!t)return;const n=t.getBoundingClientRect(),r=this._origin,i=e.bounds,a=i.width(),o=i.height();let s=i.x1+r[0]+n.left,u=i.y1+r[1]+n.top;for(;e.mark&&(e=e.mark.group);)s+=e.x||0,u+=e.y||0;return{x:s,y:u,width:a,height:o,left:s,top:u,right:s+a,bottom:u+o}}},Hc.prototype={initialize(e,t,n,r,i){return this._el=e,this.resize(t,n,r,i)},element(){return this._el},canvas(){return this._el&&this._el.firstChild},background(e){return 0===arguments.length?this._bgcolor:(this._bgcolor=e,this)},resize(e,t,n,r){return this._width=e,this._height=t,this._origin=n||[0,0],this._scale=r||1,this},dirty(){},render(e){const t=this;return t._call=function(){t._render(e)},t._call(),t._call=null,t},_render(){},renderAsync(e){const t=this.render(e);return this._ready?this._ready.then((()=>t)):Promise.resolve(t)},_load(e,t){var n=this,r=n._loader[e](t);if(!n._ready){const e=n._call;n._ready=n._loader.ready().then((t=>{t&&e(),n._ready=null}))}return r},sanitizeURL(e){return this._load("sanitizeURL",e)},loadImage(e){return this._load("loadImage",e)}};const Vc="dragenter",Yc="dragleave",Xc="dragover",Jc="mousedown",Qc="mousemove",Kc="mouseout",Zc="mouseover",ed="click",td="mousewheel",nd="touchstart",rd="touchmove",id="touchend",ad=Qc,od=Kc,sd=ed;function ud(e,t){Wc.call(this,e,t),this._down=null,this._touch=null,this._first=!0,this._events={}}const ld=e=>e===nd||e===rd||e===id?[nd,rd,id]:[e];function cd(e,t){ld(t).forEach((t=>function(e,t){const n=e.canvas();n&&!e._events[t]&&(e._events[t]=1,n.addEventListener(t,e[t]?n=>e[t](n):n=>e.fire(t,n)))}(e,t)))}function dd(e,t,n){return function(r){const i=this._active,a=this.pickEvent(r);a===i||(i&&i.exit||this.fire(n,r),this._active=a,this.fire(t,r)),this.fire(e,r)}}function fd(e){return function(t){this.fire(e,t),this._active=null}}Oe(ud,Wc,{initialize(e,t,n){return this._canvas=e&&Nc(e,"canvas"),[ed,Jc,Qc,Kc,Yc].forEach((e=>cd(this,e))),Wc.prototype.initialize.call(this,e,t,n)},canvas(){return this._canvas},context(){return this._canvas.getContext("2d")},events:["keydown","keypress","keyup",Vc,Yc,Xc,Jc,"mouseup",Qc,Kc,Zc,ed,"dblclick","wheel",td,nd,rd,id],DOMMouseScroll(e){this.fire(td,e)},mousemove:dd(Qc,Zc,Kc),dragover:dd(Xc,Vc,Yc),mouseout:fd(Kc),dragleave:fd(Yc),mousedown(e){this._down=this._active,this.fire(Jc,e)},click(e){this._down===this._active&&(this.fire(ed,e),this._down=null)},touchstart(e){this._touch=this.pickEvent(e.changedTouches[0]),this._first&&(this._active=this._touch,this._first=!1),this.fire(nd,e,!0)},touchmove(e){this.fire(rd,e,!0)},touchend(e){this.fire(id,e,!0),this._touch=null},fire(e,t,n){const r=n?this._touch:this._active,i=this._handlers[e];if(t.vegaType=e,e===sd&&r&&r.href?this.handleHref(t,r,r.href):e!==ad&&e!==od||this.handleTooltip(t,r,e!==od),i)for(let e=0,n=i.length;e=0&&r.splice(i,1),this},pickEvent(e){const t=Ic(e,this._canvas),n=this._origin;return this.pick(this._scene,t[0],t[1],t[0]-n[0],t[1]-n[1])},pick(e,t,n,r,i){const a=this.context();return Fc[e.marktype].pick.call(this,a,e,t,n,r,i)}});var hd="undefined"!=typeof window&&window.devicePixelRatio||1;function pd(e){Hc.call(this,e),this._options={},this._redraw=!1,this._dirty=new Bu,this._tempb=new Bu}const md=Hc.prototype;function gd(e,t){Wc.call(this,e,t);const n=this;n._hrefHandler=yd(n,((e,t)=>{t&&t.href&&n.handleHref(e,t,t.href)})),n._tooltipHandler=yd(n,((e,t)=>{n.handleTooltip(e,t,e.type!==od)}))}Oe(pd,Hc,{initialize(e,t,n,r,i,a){return this._options=a||{},this._canvas=this._options.externalContext?null:co(1,1,this._options.type),e&&this._canvas&&(Uc(e,0).appendChild(this._canvas),this._canvas.setAttribute("class","marks")),md.initialize.call(this,e,t,n,r,i)},resize(e,t,n,r){if(md.resize.call(this,e,t,n,r),this._canvas)!function(e,t,n,r,i,a){const o="undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&null!=e.parentNode,s=e.getContext("2d"),u=o?hd:i;e.width=t*u,e.height=n*u;for(const e in a)s[e]=a[e];o&&1!==u&&(e.style.width=t+"px",e.style.height=n+"px"),s.pixelRatio=u,s.setTransform(u,0,0,u,u*r[0],u*r[1])}(this._canvas,this._width,this._height,this._origin,this._scale,this._options.context);else{const e=this._options.externalContext;e||E("CanvasRenderer is missing a valid canvas or context"),e.scale(this._scale,this._scale),e.translate(this._origin[0],this._origin[1])}return this._redraw=!0,this},canvas(){return this._canvas},context(){return this._options.externalContext||(this._canvas?this._canvas.getContext("2d"):null)},dirty(e){const t=this._tempb.clear().union(e.bounds);let n=e.mark.group;for(;n;)t.translate(n.x||0,n.y||0),n=n.mark.group;this._dirty.union(t)},_render(e){const t=this.context(),n=this._origin,r=this._width,i=this._height,a=this._dirty,o=((e,t,n)=>(new Bu).set(0,0,t,n).translate(-e[0],-e[1]))(n,r,i);t.save();const s=this._redraw||a.empty()?(this._redraw=!1,o.expand(1)):function(e,t,n){return t.expand(1).round(),e.pixelRatio%1&&t.scale(e.pixelRatio).round().scale(1/e.pixelRatio),t.translate(-n[0]%1,-n[1]%1),e.beginPath(),e.rect(t.x1,t.y1,t.width(),t.height()),e.clip(),t}(t,o.intersect(a),n);return this.clear(-n[0],-n[1],r,i),this.draw(t,e,s),t.restore(),a.clear(),this},draw(e,t,n){const r=Fc[t.marktype];t.clip&&function(e,t){var n=t.clip;e.save(),me(n)?(e.beginPath(),n(e),e.clip()):Ll(e,t.group)}(e,t),r.draw.call(this,e,t,n),t.clip&&e.restore()},clear(e,t,n,r){const i=this._options,a=this.context();"pdf"===i.type||i.externalContext||a.clearRect(e,t,n,r),null!=this._bgcolor&&(a.fillStyle=this._bgcolor,a.fillRect(e,t,n,r))}});const yd=(e,t)=>n=>{let r=n.target.__data__;r=Array.isArray(r)?r[0]:r,n.vegaType=n.type,t.call(e._obj,n,r)};Oe(gd,Wc,{initialize(e,t,n){let r=this._svg;return r&&(r.removeEventListener(sd,this._hrefHandler),r.removeEventListener(ad,this._tooltipHandler),r.removeEventListener(od,this._tooltipHandler)),this._svg=r=e&&Nc(e,"svg"),r&&(r.addEventListener(sd,this._hrefHandler),r.addEventListener(ad,this._tooltipHandler),r.addEventListener(od,this._tooltipHandler)),Wc.prototype.initialize.call(this,e,t,n)},canvas(){return this._svg},on(e,t){const n=this.eventName(e),r=this._handlers;if(this._handlerIndex(r[n],e,t)<0){const i={type:e,handler:t,listener:yd(this,t)};(r[n]||(r[n]=[])).push(i),this._svg&&this._svg.addEventListener(n,i.listener)}return this},off(e,t){const n=this.eventName(e),r=this._handlers[n],i=this._handlerIndex(r,e,t);return i>=0&&(this._svg&&this._svg.removeEventListener(n,r[i].listener),r.splice(i,1)),this}});const vd="aria-hidden",bd="aria-label",xd="role",_d="aria-roledescription",Ad="graphics-object",kd="graphics-symbol",wd=(e,t,n)=>({[xd]:e,[_d]:t,[bd]:n||void 0}),Dd=Ze(["axis-domain","axis-grid","axis-label","axis-tick","axis-title","legend-band","legend-entry","legend-gradient","legend-label","legend-title","legend-symbol","title"]),Ed={axis:{desc:"axis",caption:function(e){const t=e.datum,n=e.orient,r=t.title?Bd(e):null,i=e.context,a=i.scales[t.scale].value,o=i.dataflow.locale(),s=a.type;return("left"===n||"right"===n?"Y":"X")+"-axis"+(r?` titled '${r}'`:"")+` for a ${Ho(s)?"discrete":s} scale`+` with ${Fs(o,a,e)}`}},legend:{desc:"legend",caption:function(e){const t=e.datum,n=t.title?Bd(e):null,r=`${t.type||""} legend`.trim(),i=t.scales,a=Object.keys(i),o=e.context,s=o.scales[i[a[0]]].value,u=o.dataflow.locale();return l=r,(l.length?l[0].toUpperCase()+l.slice(1):l)+(n?` titled '${n}'`:"")+` for ${function(e){return e=e.map((e=>e+("fill"===e||"stroke"===e?" color":""))),e.length<2?e[0]:e.slice(0,-1).join(", ")+" and "+Y(e)}(a)}`+` with ${Fs(u,s,e)}`;var l}},"title-text":{desc:"title",caption:e=>`Title text '${Sd(e)}'`},"title-subtitle":{desc:"subtitle",caption:e=>`Subtitle text '${Sd(e)}'`}},Cd={ariaRole:xd,ariaRoleDescription:_d,description:bd};function Fd(e,t){const n=!1===t.aria;if(e(vd,n||void 0),n||null==t.description)for(const t in Cd)e(Cd[t],void 0);else{const n=t.mark.marktype;e(bd,t.description),e(xd,t.ariaRole||("group"===n?Ad:kd)),e(_d,t.ariaRoleDescription||`${n} mark`)}}function Md(e){return!1===e.aria?{[vd]:!0}:Dd[e.role]?null:Ed[e.role]?function(e,t){try{const n=e.items[0],r=t.caption||(()=>"");return wd(t.role||kd,t.desc,n.description||r(n))}catch(e){return null}}(e,Ed[e.role]):function(e){const t=e.marktype,n="group"===t||"text"===t||e.items.some((e=>null!=e.description&&!1!==e.aria));return wd(n?Ad:kd,`${t} mark container`,e.description)}(e)}function Sd(e){return he(e.text).join(" ")}function Bd(e){try{return he(Y(e.items).items[0].text).join(" ")}catch(e){return null}}const Od=e=>(e+"").replace(/&/g,"&").replace(//g,">"),zd=e=>Od(e).replace(/"/g,""").replace(/\t/g," ").replace(/\n/g," ").replace(/\r/g," ");function Rd(){let e="",t="",n="";const r=[],i=()=>t=n="",a=(e,n)=>(null!=n&&(t+=` ${e}="${zd(n)}"`),o),o={open(s){(a=>{t&&(e+=`${t}>${n}`,i()),r.push(a)})(s),t="<"+s;for(var u=arguments.length,l=new Array(u>1?u-1:0),c=1;c${n}`:"/>"):``,i(),o},attr:a,text:e=>(n+=Od(e),o),toString:()=>e};return o}const $d=e=>qd(Rd(),e)+"";function qd(e,t){if(e.open(t.tagName),t.hasAttributes()){const n=t.attributes,r=n.length;for(let t=0;t1&&e.previousSibling!=t}(o,n))&&t.insertBefore(o,n?n.nextSibling:t.firstChild),o}Oe(jd,Hc,{initialize(e,t,n,r,i){return this._defs={},this._clearDefs(),e&&(this._svg=Pc(e,0,"svg",Ud),this._svg.setAttributeNS(Pd,"xmlns",Ud),this._svg.setAttributeNS(Pd,"xmlns:xlink",Gl["xmlns:xlink"]),this._svg.setAttribute("version",Gl.version),this._svg.setAttribute("class","marks"),Uc(e,1),this._root=Pc(this._svg,0,"g",Ud),Zd(this._root,Nd),Uc(this._svg,1)),this.background(this._bgcolor),Id.initialize.call(this,e,t,n,r,i)},background(e){return arguments.length&&this._svg&&this._svg.style.setProperty("background-color",e),Id.background.apply(this,arguments)},resize(e,t,n,r){return Id.resize.call(this,e,t,n,r),this._svg&&(Zd(this._svg,{width:this._width*this._scale,height:this._height*this._scale,viewBox:`0 0 ${this._width} ${this._height}`}),this._root.setAttribute("transform",`translate(${this._origin})`)),this._dirty=[],this},canvas(){return this._svg},svg(){const e=this._svg,t=this._bgcolor;if(!e)return null;let n;t&&(e.removeAttribute("style"),n=Pc(e,0,"rect",Ud),Zd(n,{width:this._width,height:this._height,fill:t}));const r=$d(e);return t&&(e.removeChild(n),this._svg.style.setProperty("background-color",t)),r},_render(e){return this._dirtyCheck()&&(this._dirtyAll&&this._clearDefs(),this.mark(this._root,e),Uc(this._root,1)),this.defs(),this._dirty=[],++this._dirtyID,this},dirty(e){e.dirty!==this._dirtyID&&(e.dirty=this._dirtyID,this._dirty.push(e))},isDirty(e){return this._dirtyAll||!e._svg||!e._svg.ownerSVGElement||e.dirty===this._dirtyID},_dirtyCheck(){this._dirtyAll=!0;const e=this._dirty;if(!e.length||!this._dirtyID)return!0;const t=++this._dirtyID;let n,r,i,a,o,s,u;for(o=0,s=e.length;o{e.dirty=t}))),r.zdirty||(n.exit?(a.nested&&r.items.length?(u=r.items[0],u._svg&&this._update(a,u._svg,u)):n._svg&&(u=n._svg.parentNode,u&&u.removeChild(n._svg)),n._svg=null):(n=a.nested?r.items[0]:n,n._update!==t&&(n._svg&&n._svg.ownerSVGElement?this._update(a,n._svg,n):(this._dirtyAll=!1,Wd(n,t)),n._update=t)));return!this._dirtyAll},mark(e,t,n){if(!this.isDirty(t))return t._svg;const r=this._svg,i=Fc[t.marktype],a=!1===t.interactive?"none":null,o="g"===i.tag,s=Vd(t,e,n,"g",r);s.setAttribute("class",jc(t));const u=Md(t);for(const e in u)ef(s,e,u[e]);o||ef(s,"pointer-events",a),ef(s,"clip-path",t.clip?Su(this,t,t.group):null);let l=null,c=0;const d=e=>{const t=this.isDirty(e),n=Vd(e,s,l,i.tag,r);t&&(this._update(i,n,e),o&&function(e,t,n){t=t.lastChild.previousSibling;let r,i=0;Al(n,(n=>{r=e.mark(t,n,r),++i})),Uc(t,1+i)}(this,n,e)),l=n,++c};return i.nested?t.items.length&&d(t.items[0]):Al(t,d),Uc(s,c),s},_update(e,t,n){Yd=t,Xd=t.__values__,Fd(Qd,n),e.attr(Qd,n,this);const r=Jd[e.type];r&&r.call(this,e,t,n),Yd&&this.style(Yd,n)},style(e,t){if(null!=t){for(const n in Ld){let r="font"===n?bc(t):t[n];if(r===Xd[n])continue;const i=Ld[n];null==r?e.removeAttribute(i):(Bs(r)&&(r=Os(r,this._defs.gradient,tf())),e.setAttribute(i,r+"")),Xd[n]=r}for(const n in Td)Kd(e,Td[n],t[n])}},defs(){const e=this._svg,t=this._defs;let n=t.el,r=0;for(const i in t.gradient)n||(t.el=n=Pc(e,1,"defs",Ud)),r=Gd(n,t.gradient[i],r);for(const i in t.clipping)n||(t.el=n=Pc(e,1,"defs",Ud)),r=Hd(n,t.clipping[i],r);n&&(0===r?(e.removeChild(n),t.el=null):Uc(n,r))},_clearDefs(){const e=this._defs;e.gradient={},e.clipping={}}});let Yd=null,Xd=null;const Jd={group(e,t,n){const r=Yd=t.childNodes[2];Xd=r.__values__,e.foreground(Qd,n,this),Xd=t.__values__,Yd=t.childNodes[1],e.content(Qd,n,this);const i=Yd=t.childNodes[0];e.background(Qd,n,this);const a=!1===n.mark.interactive?"none":null;if(a!==Xd.events&&(ef(r,"pointer-events",a),ef(i,"pointer-events",a),Xd.events=a),n.strokeForeground&&n.stroke){const e=n.fill;ef(r,"display",null),this.style(i,n),ef(i,"stroke",null),e&&(n.fill=null),Xd=r.__values__,this.style(r,n),e&&(n.fill=e),Yd=null}else ef(r,"display","none")},image(e,t,n){!1===n.smooth?(Kd(t,"image-rendering","optimizeSpeed"),Kd(t,"image-rendering","pixelated")):Kd(t,"image-rendering",null)},text(e,t,n){const r=gc(n);let i,a,o,s;j(r)?(a=r.map((e=>vc(n,e))),i=a.join("\n"),i!==Xd.text&&(Uc(t,0),o=t.ownerDocument,s=mc(n),a.forEach(((e,r)=>{const i=Tc(o,"tspan",Ud);i.__data__=n,i.textContent=e,r&&(i.setAttribute("x",0),i.setAttribute("dy",s)),t.appendChild(i)})),Xd.text=i)):(a=vc(n,r),a!==Xd.text&&(t.textContent=a,Xd.text=a)),ef(t,"font-family",bc(n)),ef(t,"font-size",pc(n)+"px"),ef(t,"font-style",n.fontStyle),ef(t,"font-variant",n.fontVariant),ef(t,"font-weight",n.fontWeight)}};function Qd(e,t,n){t!==Xd[e]&&(n?function(e,t,n,r){null!=n?e.setAttributeNS(r,t,n):e.removeAttributeNS(r,t)}(Yd,e,t,n):ef(Yd,e,t),Xd[e]=t)}function Kd(e,t,n){n!==Xd[t]&&(null==n?e.style.removeProperty(t):e.style.setProperty(t,n+""),Xd[t]=n)}function Zd(e,t){for(const n in t)ef(e,n,t[n])}function ef(e,t,n){null!=n?e.setAttribute(t,n):e.removeAttribute(t)}function tf(){let e;return"undefined"==typeof window?"":(e=window.location).hash?e.href.slice(0,-e.hash.length):e.href}function nf(e){Hc.call(this,e),this._text=null,this._defs={gradient:{},clipping:{}}}Oe(nf,Hc,{svg(){return this._text},_render(e){const t=Rd();t.open("svg",we({},Gl,{class:"marks",width:this._width*this._scale,height:this._height*this._scale,viewBox:`0 0 ${this._width} ${this._height}`}));const n=this._bgcolor;return n&&"transparent"!==n&&"none"!==n&&t.open("rect",{width:this._width,height:this._height,fill:n}).close(),t.open("g",Nd,{transform:"translate("+this._origin+")"}),this.mark(t,e),t.close(),this.defs(t),this._text=t.close()+"",this},mark(e,t){const n=Fc[t.marktype],r=n.tag,i=[Fd,n.attr];e.open("g",{class:jc(t),"clip-path":t.clip?Su(this,t,t.group):null},Md(t),{"pointer-events":"g"!==r&&!1===t.interactive?"none":null});const a=a=>{const o=this.href(a);if(o&&e.open("a",o),e.open(r,this.attr(t,a,i,"g"!==r?r:null)),"text"===r){const t=gc(a);if(j(t)){const n={x:0,dy:mc(a)};for(let r=0;rthis.mark(e,t))),e.close(),r&&o?(i&&(a.fill=null),a.stroke=o,e.open("path",this.attr(t,a,n.foreground,"bgrect")).close(),i&&(a.fill=i)):e.open("path",this.attr(t,a,n.foreground,"bgfore")).close()}e.close(),o&&e.close()};return n.nested?t.items&&t.items.length&&a(t.items[0]):Al(t,a),e.close()},href(e){const t=e.href;let n;if(t){if(n=this._hrefs&&this._hrefs[t])return n;this.sanitizeURL(t).then((e=>{e["xlink:href"]=e.href,e.href=null,(this._hrefs||(this._hrefs={}))[t]=e}))}return null},attr(e,t,n,r){const i={},a=(e,t,n,r)=>{i[r||e]=t};return Array.isArray(n)?n.forEach((e=>e(a,t,this))):n(a,t,this),r&&function(e,t,n,r,i){let a;if(null==t)return e;"bgrect"===r&&!1===n.interactive&&(e["pointer-events"]="none");if("bgfore"===r&&(!1===n.interactive&&(e["pointer-events"]="none"),e.display="none",null!==t.fill))return e;"image"===r&&!1===t.smooth&&(a=["image-rendering: optimizeSpeed;","image-rendering: pixelated;"]);"text"===r&&(e["font-family"]=bc(t),e["font-size"]=pc(t)+"px",e["font-style"]=t.fontStyle,e["font-variant"]=t.fontVariant,e["font-weight"]=t.fontWeight);for(const n in Ld){let r=t[n];const a=Ld[n];("transparent"!==r||"fill"!==a&&"stroke"!==a)&&null!=r&&(Bs(r)&&(r=Os(r,i.gradient,"")),e[a]=r)}for(const e in Td){const n=t[e];null!=n&&(a=a||[],a.push(`${Td[e]}: ${n};`))}a&&(e.style=a.join(" "))}(i,t,e,r,this._defs),i},defs(e){const t=this._defs.gradient,n=this._defs.clipping;if(0!==Object.keys(t).length+Object.keys(n).length){e.open("defs");for(const n in t){const r=t[n],i=r.stops;"radial"===r.gradient?(e.open("pattern",{id:Ss+n,viewBox:"0,0,1,1",width:"100%",height:"100%",preserveAspectRatio:"xMidYMid slice"}),e.open("rect",{width:"1",height:"1",fill:"url(#"+n+")"}).close(),e.close(),e.open("radialGradient",{id:n,fx:r.x1,fy:r.y1,fr:r.r1,cx:r.x2,cy:r.y2,r:r.r2})):e.open("linearGradient",{id:n,x1:r.x1,x2:r.x2,y1:r.y1,y2:r.y2});for(let t=0;t1?(sf[e]=t,this):sf[e]}function lf(e,t,n){const r=[],i=(new Bu).union(t),a=e.marktype;return a?cf(e,i,n,r):"group"===a?df(e,i,n,r):E("Intersect scene must be mark node or group item.")}function cf(e,t,n,r){if(function(e,t,n){return e.bounds&&t.intersects(e.bounds)&&("group"===e.marktype||!1!==e.interactive&&(!n||n(e)))}(e,t,n)){const i=e.items,a=e.marktype,o=i.length;let s=0;if("group"===a)for(;s=0;r--)if(i[r]!=a[r])return!1;for(r=i.length-1;r>=0;r--)if(!gf(e[n=i[r]],t[n],n))return!1;return typeof e==typeof t}(e,t):e==t)}function yf(e,t){return gf(js(e),js(t))}const vf="top",bf="left",xf="right",_f="bottom",Af="top-left",kf="top-right",wf="bottom-left",Df="bottom-right",Ef="start",Cf="middle",Ff="end",Mf="x",Sf="y",Bf="group",Of="axis",zf="title",Rf="frame",$f="scope",qf="legend",Lf="row-header",Tf="row-footer",Nf="row-title",Pf="column-header",Uf="column-footer",jf="column-title",If="padding",Wf="symbol",Gf="fit",Hf="fit-x",Vf="fit-y",Yf="pad",Xf="none",Jf="all",Qf="each",Kf="flush",Zf="column",eh="row";function th(e){Tr.call(this,null,e)}function nh(e,t,n){return t(e.bounds.clear(),e,n)}Oe(th,Tr,{transform(e,t){const n=t.dataflow,r=e.mark,i=r.marktype,a=Fc[i],o=a.bound;let s,u=r.bounds;if(a.nested)r.items.length&&n.dirty(r.items[0]),u=nh(r,o),r.items.forEach((e=>{e.bounds.clear().union(u)}));else if(i===Bf||e.modified())switch(t.visit(t.MOD,(e=>n.dirty(e))),u.clear(),r.items.forEach((e=>u.union(nh(e,o)))),r.role){case Of:case qf:case zf:t.reflow()}else s=t.changed(t.REM),t.visit(t.ADD,(e=>{u.union(nh(e,o))})),t.visit(t.MOD,(e=>{s=s||u.alignsWith(e.bounds),n.dirty(e),u.union(nh(e,o))})),s&&(u.clear(),r.items.forEach((e=>u.union(e.bounds))));return pf(r),t.modifies("bounds")}});const rh=":vega_identifier:";function ih(e){Tr.call(this,0,e)}function ah(e){Tr.call(this,null,e)}function oh(e){Tr.call(this,null,e)}ih.Definition={type:"Identifier",metadata:{modifies:!0},params:[{name:"as",type:"string",required:!0}]},Oe(ih,Tr,{transform(e,t){const n=(i=t.dataflow)._signals[rh]||(i._signals[rh]=i.add(0)),r=e.as;var i;let a=n.value;return t.visit(t.ADD,(e=>e[r]=e[r]||++a)),n.set(this.value=a),t}}),Oe(ah,Tr,{transform(e,t){let n=this.value;n||(n=t.dataflow.scenegraph().mark(e.markdef,function(e){const t=e.groups,n=e.parent;return t&&1===t.size?t.get(Object.keys(t.object)[0]):t&&n?t.lookup(n):null}(e),e.index),n.group.context=e.context,e.context.group||(e.context.group=n.group),n.source=this.source,n.clip=e.clip,n.interactive=e.interactive,this.value=n);const r=n.marktype===Bf?zu:Ou;return t.visit(t.ADD,(e=>r.call(e,n))),(e.modified("clip")||e.modified("interactive"))&&(n.clip=e.clip,n.interactive=!!e.interactive,n.zdirty=!0,t.reflow()),n.items=t.source,t}});const sh={parity:e=>e.filter(((e,t)=>t%2?e.opacity=0:1)),greedy:(e,t)=>{let n;return e.filter(((e,r)=>r&&uh(n.bounds,e.bounds,t)?e.opacity=0:(n=e,1)))}},uh=(e,t,n)=>n>Math.max(t.x1-e.x2,e.x1-t.x2,t.y1-e.y2,e.y1-t.y2),lh=(e,t)=>{for(var n,r=1,i=e.length,a=e[0].bounds;r{const t=e.bounds;return t.width()>1&&t.height()>1},dh=e=>(e.forEach((e=>e.opacity=1)),e),fh=(e,t)=>e.reflow(t.modified()).modifies("opacity");function hh(e){Tr.call(this,null,e)}Oe(oh,Tr,{transform(e,t){const n=sh[e.method]||sh.parity,r=e.separation||0;let i,a,o=t.materialize(t.SOURCE).source;if(!o||!o.length)return;if(!e.method)return e.modified("method")&&(dh(o),t=fh(t,e)),t;if(o=o.filter(ch),!o.length)return;if(e.sort&&(o=o.slice().sort(e.sort)),i=dh(o),t=fh(t,e),i.length>=3&&lh(i,r)){do{i=n(i,r)}while(i.length>=3&&lh(i,r));i.length<3&&!Y(o).opacity&&(i.length>1&&(Y(i).opacity=0),Y(o).opacity=1)}e.boundScale&&e.boundTolerance>=0&&(a=((e,t,n)=>{var r=e.range(),i=new Bu;return t===vf||t===_f?i.set(r[0],-1/0,r[1],1/0):i.set(-1/0,r[0],1/0,r[1]),i.expand(n||1),e=>i.encloses(e.bounds)})(e.boundScale,e.boundOrient,+e.boundTolerance),o.forEach((e=>{a(e)||(e.opacity=0)})));const s=i[0].mark.bounds.clear();return o.forEach((e=>{e.opacity&&s.union(e.bounds)})),t}}),Oe(hh,Tr,{transform(e,t){const n=t.dataflow;if(t.visit(t.ALL,(e=>n.dirty(e))),t.fields&&t.fields.zindex){const e=t.source&&t.source[0];e&&(e.mark.zdirty=!0)}}});const ph=new Bu;function mh(e,t,n){return e[t]===n?0:(e[t]=n,1)}function gh(e){var t=e.items[0].orient;return t===bf||t===xf}function yh(e,t,n,r){var i,a,o=t.items[0],s=o.datum,u=null!=o.translate?o.translate:.5,l=o.orient,c=function(e){let t=+e.grid;return[e.ticks?t++:-1,e.labels?t++:-1,t+ +e.domain]}(s),d=o.range,f=o.offset,h=o.position,p=o.minExtent,m=o.maxExtent,g=s.title&&o.items[c[2]].items[0],y=o.titlePadding,v=o.bounds,b=g&&yc(g),x=0,_=0;switch(ph.clear().union(v),v.clear(),(i=c[0])>-1&&v.union(o.items[i].bounds),(i=c[1])>-1&&v.union(o.items[i].bounds),l){case vf:x=h||0,_=-f,a=Math.max(p,Math.min(m,-v.y1)),v.add(0,-a).add(d,0),g&&vh(e,g,a,y,b,0,-1,v);break;case bf:x=-f,_=h||0,a=Math.max(p,Math.min(m,-v.x1)),v.add(-a,0).add(0,d),g&&vh(e,g,a,y,b,1,-1,v);break;case xf:x=n+f,_=h||0,a=Math.max(p,Math.min(m,v.x2)),v.add(0,0).add(a,d),g&&vh(e,g,a,y,b,1,1,v);break;case _f:x=h||0,_=r+f,a=Math.max(p,Math.min(m,v.y2)),v.add(0,0).add(d,a),g&&vh(e,g,a,y,0,0,1,v);break;default:x=o.x,_=o.y}return Lu(v.translate(x,_),o),mh(o,"x",x+u)|mh(o,"y",_+u)&&(o.bounds=ph,e.dirty(o),o.bounds=v,e.dirty(o)),o.mark.bounds.clear().union(v)}function vh(e,t,n,r,i,a,o,s){const u=t.bounds;if(t.auto){const s=o*(n+i+r);let l=0,c=0;e.dirty(t),a?l=(t.x||0)-(t.x=s):c=(t.y||0)-(t.y=s),t.mark.bounds.clear().union(u.translate(-l,-c)),e.dirty(t)}s.union(u)}const bh=(e,t)=>Math.floor(Math.min(e,t)),xh=(e,t)=>Math.ceil(Math.max(e,t));function _h(e){return(new Bu).set(0,0,e.width||0,e.height||0)}function Ah(e){const t=e.bounds.clone();return t.empty()?t.set(0,0,0,0):t.translate(-(e.x||0),-(e.y||0))}function kh(e,t,n){const r=I(e)?e[t]:e;return null!=r?r:void 0!==n?n:0}function wh(e){return e<0?Math.ceil(-e):0}function Dh(e,t,n){var r,i,a,o,s,u,l,c,d,f,h,p=!n.nodirty,m=n.bounds===Kf?_h:Ah,g=ph.set(0,0,0,0),y=kh(n.align,Zf),v=kh(n.align,eh),b=kh(n.padding,Zf),x=kh(n.padding,eh),_=n.columns||t.length,A=_<=0?1:Math.ceil(t.length/_),k=t.length,w=Array(k),D=Array(_),E=0,C=Array(k),F=Array(A),M=0,S=Array(k),B=Array(k),O=Array(k);for(i=0;i<_;++i)D[i]=0;for(i=0;i1)for(i=0;i0&&(S[i]+=d/2);if(v&&kh(n.center,eh)&&1!==_)for(i=0;i0&&(B[i]+=f/2);for(i=0;ii&&(e.warn("Grid headers exceed limit: "+i),t=t.slice(0,i)),w+=a,m=0,y=t.length;m=0&&null==(x=n[g]);g-=f);s?(_=null==h?x.x:Math.round(x.bounds.x1+h*x.bounds.width()),A=w):(_=w,A=null==h?x.y:Math.round(x.bounds.y1+h*x.bounds.height())),v.union(b.bounds.translate(_-(b.x||0),A-(b.y||0))),b.x=_,b.y=A,e.dirty(b),D=o(D,v[l])}return D}function Sh(e,t,n,r,i,a){if(t){e.dirty(t);var o=n,s=n;r?o=Math.round(i.x1+a*i.width()):s=Math.round(i.y1+a*i.height()),t.bounds.translate(o-(t.x||0),s-(t.y||0)),t.mark.bounds.clear().union(t.bounds),t.x=o,t.y=s,e.dirty(t)}}function Bh(e,t,n,r,i,a,o){const s=function(e,t){const n=e[t]||{};return(t,r)=>null!=n[t]?n[t]:null!=e[t]?e[t]:r}(n,t),u=function(e,t){let n=-1/0;return e.forEach((e=>{null!=e.offset&&(n=Math.max(n,e.offset))})),n>-1/0?n:t}(e,s("offset",0)),l=s("anchor",Ef),c=l===Ff?1:l===Cf?.5:0,d={align:Qf,bounds:s("bounds",Kf),columns:"vertical"===s("direction")?1:e.length,padding:s("margin",8),center:s("center"),nodirty:!0};switch(t){case bf:d.anchor={x:Math.floor(r.x1)-u,column:Ff,y:c*(o||r.height()+2*r.y1),row:l};break;case xf:d.anchor={x:Math.ceil(r.x2)+u,y:c*(o||r.height()+2*r.y1),row:l};break;case vf:d.anchor={y:Math.floor(i.y1)-u,row:Ff,x:c*(a||i.width()+2*i.x1),column:l};break;case _f:d.anchor={y:Math.ceil(i.y2)+u,x:c*(a||i.width()+2*i.x1),column:l};break;case Af:d.anchor={x:u,y:u};break;case kf:d.anchor={x:a-u,y:u,column:Ff};break;case wf:d.anchor={x:u,y:o-u,row:Ff};break;case Df:d.anchor={x:a-u,y:o-u,column:Ff,row:Ff}}return d}function Oh(e,t){var n,r,i=t.items[0],a=i.datum,o=i.orient,s=i.bounds,u=i.x,l=i.y;return i._bounds?i._bounds.clear().union(s):i._bounds=s.clone(),s.clear(),function(e,t,n){var r=t.padding,i=r-n.x,a=r-n.y;if(t.datum.title){var o=t.items[1].items[0],s=o.anchor,u=t.titlePadding||0,l=r-o.x,c=r-o.y;switch(o.orient){case bf:i+=Math.ceil(o.bounds.width())+u;break;case xf:case _f:break;default:a+=o.bounds.height()+u}switch((i||a)&&Rh(e,n,i,a),o.orient){case bf:c+=zh(t,n,o,s,1,1);break;case xf:l+=zh(t,n,o,Ff,0,0)+u,c+=zh(t,n,o,s,1,1);break;case _f:l+=zh(t,n,o,s,0,0),c+=zh(t,n,o,Ff,-1,0,1)+u;break;default:l+=zh(t,n,o,s,0,0)}(l||c)&&Rh(e,o,l,c),(l=Math.round(o.bounds.x1-r))<0&&(Rh(e,n,-l,0),Rh(e,o,-l,0))}else(i||a)&&Rh(e,n,i,a)}(e,i,i.items[0].items[0]),s=function(e,t){return e.items.forEach((e=>t.union(e.bounds))),t.x1=e.padding,t.y1=e.padding,t}(i,s),n=2*i.padding,r=2*i.padding,s.empty()||(n=Math.ceil(s.width()+n),r=Math.ceil(s.height()+r)),a.type===Wf&&function(e){const t=e.reduce(((e,t)=>(e[t.column]=Math.max(t.bounds.x2-t.x,e[t.column]||0),e)),{});e.forEach((e=>{e.width=t[e.column],e.height=e.bounds.y2-e.y}))}(i.items[0].items[0].items[0].items),o!==Xf&&(i.x=u=0,i.y=l=0),i.width=n,i.height=r,Lu(s.set(u,l,u+n,l+r),i),i.mark.bounds.clear().union(s),i}function zh(e,t,n,r,i,a,o){const s="symbol"!==e.datum.type,u=n.datum.vgrad,l=(!s||!a&&u||o?t:t.items[0]).bounds[i?"y2":"x2"]-e.padding,c=u&&a?l:0,d=u&&a?0:l,f=i<=0?0:yc(n);return Math.round(r===Ef?c:r===Ff?d-f:.5*(l-f))}function Rh(e,t,n,r){t.x+=n,t.y+=r,t.bounds.translate(n,r),t.mark.bounds.translate(n,r),e.dirty(t)}function $h(e){Tr.call(this,null,e)}Oe($h,Tr,{transform(e,t){const n=t.dataflow;return e.mark.items.forEach((t=>{e.layout&&Eh(n,t,e.layout),function(e,t,n){var r,i,a,o,s,u=t.items,l=Math.max(0,t.width||0),c=Math.max(0,t.height||0),d=(new Bu).set(0,0,l,c),f=d.clone(),h=d.clone(),p=[];for(o=0,s=u.length;o{(a=e.orient||xf)!==Xf&&(t[a]||(t[a]=[])).push(e)}));for(const r in t){const i=t[r];Dh(e,i,Bh(i,r,n.legends,f,h,l,c))}p.forEach((t=>{const r=t.bounds;if(r.equals(t._bounds)||(t.bounds=t._bounds,e.dirty(t),t.bounds=r,e.dirty(t)),!n.autosize||n.autosize.type!==Gf&&n.autosize.type!==Hf&&n.autosize.type!==Vf)d.union(r);else switch(t.orient){case bf:case xf:d.add(r.x1,0).add(r.x2,0);break;case vf:case _f:d.add(0,r.y1).add(0,r.y2)}}))}d.union(f).union(h),r&&d.union(function(e,t,n,r,i){var a,o=t.items[0],s=o.frame,u=o.orient,l=o.anchor,c=o.offset,d=o.padding,f=o.items[0].items[0],h=o.items[1]&&o.items[1].items[0],p=u===bf||u===xf?r:n,m=0,g=0,y=0,v=0,b=0;if(s!==Bf?u===bf?(m=i.y2,p=i.y1):u===xf?(m=i.y1,p=i.y2):(m=i.x1,p=i.x2):u===bf&&(m=r,p=0),a=l===Ef?m:l===Ff?p:(m+p)/2,h&&h.text){switch(u){case vf:case _f:b=f.bounds.height()+d;break;case bf:v=f.bounds.width()+d;break;case xf:v=-f.bounds.width()-d}ph.clear().union(h.bounds),ph.translate(v-(h.x||0),b-(h.y||0)),mh(h,"x",v)|mh(h,"y",b)&&(e.dirty(h),h.bounds.clear().union(ph),h.mark.bounds.clear().union(ph),e.dirty(h)),ph.clear().union(h.bounds)}else ph.clear();switch(ph.union(f.bounds),u){case vf:g=a,y=i.y1-ph.height()-c;break;case bf:g=i.x1-ph.width()-c,y=a;break;case xf:g=i.x2+ph.width()+c,y=a;break;case _f:g=a,y=i.y2+c;break;default:g=o.x,y=o.y}return mh(o,"x",g)|mh(o,"y",y)&&(ph.translate(g,y),e.dirty(o),o.bounds.clear().union(ph),t.bounds.clear().union(ph),e.dirty(o)),o.bounds}(e,r,l,c,d));t.clip&&d.set(0,0,t.width||0,t.height||0);!function(e,t,n,r){const i=r.autosize||{},a=i.type;if(e._autosize<1||!a)return;let o=e._width,s=e._height,u=Math.max(0,t.width||0),l=Math.max(0,Math.ceil(-n.x1)),c=Math.max(0,t.height||0),d=Math.max(0,Math.ceil(-n.y1));const f=Math.max(0,Math.ceil(n.x2-u)),h=Math.max(0,Math.ceil(n.y2-c));if(i.contains===If){const t=e.padding();o-=t.left+t.right,s-=t.top+t.bottom}a===Xf?(l=0,d=0,u=o,c=s):a===Gf?(u=Math.max(0,o-l-f),c=Math.max(0,s-d-h)):a===Hf?(u=Math.max(0,o-l-f),s=c+d+h):a===Vf?(o=u+l+f,c=Math.max(0,s-d-h)):a===Yf&&(o=u+l+f,s=c+d+h);e._resizeView(o,s,u,c,[l,d],i.resize)}(e,t,d,n)}(n,t,e)})),function(e){return e&&"legend-entry"!==e.mark.role}(e.mark.group)?t.reflow():t}});var qh=Object.freeze({__proto__:null,bound:th,identifier:ih,mark:ah,overlap:oh,render:hh,viewlayout:$h});function Lh(e){Tr.call(this,null,e)}function Th(e){Tr.call(this,null,e)}function Nh(){return sr({})}function Ph(e){Tr.call(this,null,e)}function Uh(e){Tr.call(this,[],e)}Oe(Lh,Tr,{transform(e,t){if(this.value&&!e.modified())return t.StopPropagation;var n=t.dataflow.locale(),r=t.fork(t.NO_SOURCE|t.NO_FIELDS),i=this.value,a=e.scale,o=fs(a,null==e.count?e.values?e.values.length:10:e.count,e.minstep),s=e.format||ms(n,a,o,e.formatSpecifier,e.formatType,!!e.values),u=e.values?hs(a,e.values,o):ps(a,o);return i&&(r.rem=i),i=u.map(((e,t)=>sr({index:t/(u.length-1||1),value:e,label:s(e)}))),e.extra&&i.length&&i.push(sr({index:-1,extra:{value:i[0].value},label:""})),r.source=i,r.add=i,this.value=i,r}}),Oe(Th,Tr,{transform(e,t){var n=t.dataflow,r=t.fork(t.NO_SOURCE|t.NO_FIELDS),i=e.item||Nh,a=e.key||ar,o=this.value;return j(r.encode)&&(r.encode=null),o&&(e.modified("key")||t.modified(a))&&E("DataJoin does not support modified key function or fields."),o||(t=t.addAll(),this.value=o=function(e){const t=Se().test((e=>e.exit));return t.lookup=n=>t.get(e(n)),t}(a)),t.visit(t.ADD,(e=>{const t=a(e);let n=o.get(t);n?n.exit?(o.empty--,r.add.push(n)):r.mod.push(n):(n=i(e),o.set(t,n),r.add.push(n)),n.datum=e,n.exit=!1})),t.visit(t.MOD,(e=>{const t=a(e),n=o.get(t);n&&(n.datum=e,r.mod.push(n))})),t.visit(t.REM,(e=>{const t=a(e),n=o.get(t);e!==n.datum||n.exit||(r.rem.push(n),n.exit=!0,++o.empty)})),t.changed(t.ADD_MOD)&&r.modifies("datum"),(t.clean()||e.clean&&o.empty>n.cleanThreshold)&&n.runAfter(o.clean),r}}),Oe(Ph,Tr,{transform(e,t){var n=t.fork(t.ADD_REM),r=e.mod||!1,i=e.encoders,a=t.encode;if(j(a)){if(!n.changed()&&!a.every((e=>i[e])))return t.StopPropagation;a=a[0],n.encode=null}var o="enter"===a,s=i.update||R,u=i.enter||R,l=i.exit||R,c=(a&&!o?i[a]:s)||R;if(t.changed(t.ADD)&&(t.visit(t.ADD,(t=>{u(t,e),s(t,e)})),n.modifies(u.output),n.modifies(s.output),c!==R&&c!==s&&(t.visit(t.ADD,(t=>{c(t,e)})),n.modifies(c.output))),t.changed(t.REM)&&l!==R&&(t.visit(t.REM,(t=>{l(t,e)})),n.modifies(l.output)),o||c!==R){const i=t.MOD|(e.modified()?t.REFLOW:0);o?(t.visit(i,(t=>{const i=u(t,e)||r;(c(t,e)||i)&&n.mod.push(t)})),n.mod.length&&n.modifies(u.output)):t.visit(i,(t=>{(c(t,e)||r)&&n.mod.push(t)})),n.mod.length&&n.modifies(c.output)}return n.changed()?n:t.StopPropagation}}),Oe(Uh,Tr,{transform(e,t){if(null!=this.value&&!e.modified())return t.StopPropagation;var n,r,i,a,o,s=t.dataflow.locale(),u=t.fork(t.NO_SOURCE|t.NO_FIELDS),l=this.value,c=e.type||ss,d=e.scale,f=+e.limit,h=fs(d,null==e.count?5:e.count,e.minstep),p=!!e.values||c===ss,m=e.format||_s(s,d,h,c,e.formatSpecifier,e.formatType,p),g=e.values||bs(d,h);return l&&(u.rem=l),c===ss?(f&&g.length>f?(t.dataflow.warn("Symbol legend count exceeds limit, filtering items."),l=g.slice(0,f-1),o=!0):l=g,me(i=e.size)?(e.values||0!==d(l[0])||(l=l.slice(1)),a=l.reduce(((t,n)=>Math.max(t,i(n,e))),0)):i=Ae(a=i||8),l=l.map(((t,n)=>sr({index:n,label:m(t,n,l),value:t,offset:a,size:i(t,e)}))),o&&(o=g[l.length],l.push(sr({index:l.length,label:`…${g.length-l.length} entries`,value:o,offset:a,size:i(o,e)})))):"gradient"===c?(n=d.domain(),r=ts(d,n[0],Y(n)),g.length<3&&!e.values&&n[0]!==Y(n)&&(g=[n[0],Y(n)]),l=g.map(((e,t)=>sr({index:t,label:m(e,t,g),value:e,perc:r(e)})))):(i=g.length-1,r=function(e){const t=e.domain(),n=t.length-1;let r=+t[0],i=+Y(t),a=i-r;if(e.type===Do){const e=n?a/n:.1;r-=e,i+=e,a=i-r}return e=>(e-r)/a}(d),l=g.map(((e,t)=>sr({index:t,label:m(e,t,g),value:e,perc:t?r(e):0,perc2:t===i?1:r(g[t+1])})))),u.source=l,u.add=l,this.value=l,u}});const jh=e=>e.source.x,Ih=e=>e.source.y,Wh=e=>e.target.x,Gh=e=>e.target.y;function Hh(e){Tr.call(this,{},e)}Hh.Definition={type:"LinkPath",metadata:{modifies:!0},params:[{name:"sourceX",type:"field",default:"source.x"},{name:"sourceY",type:"field",default:"source.y"},{name:"targetX",type:"field",default:"target.x"},{name:"targetY",type:"field",default:"target.y"},{name:"orient",type:"enum",default:"vertical",values:["horizontal","vertical","radial"]},{name:"shape",type:"enum",default:"line",values:["line","arc","curve","diagonal","orthogonal"]},{name:"require",type:"signal"},{name:"as",type:"string",default:"path"}]},Oe(Hh,Tr,{transform(e,t){var n=e.sourceX||jh,r=e.sourceY||Ih,i=e.targetX||Wh,a=e.targetY||Gh,o=e.as||"path",s=e.orient||"vertical",u=e.shape||"line",l=Jh.get(u+"-"+s)||Jh.get(u);return l||E("LinkPath unsupported type: "+e.shape+(e.orient?"-"+e.orient:"")),t.visit(t.SOURCE,(e=>{e[o]=l(n(e),r(e),i(e),a(e))})),t.reflow(e.modified()).modifies(o)}});const Vh=(e,t,n,r)=>"M"+e+","+t+"L"+n+","+r,Yh=(e,t,n,r)=>{var i=n-e,a=r-t,o=Math.hypot(i,a)/2;return"M"+e+","+t+"A"+o+","+o+" "+180*Math.atan2(a,i)/Math.PI+" 0 1 "+n+","+r},Xh=(e,t,n,r)=>{const i=n-e,a=r-t,o=.2*(i+a),s=.2*(a-i);return"M"+e+","+t+"C"+(e+o)+","+(t+s)+" "+(n+s)+","+(r-o)+" "+n+","+r},Jh=Se({line:Vh,"line-radial":(e,t,n,r)=>Vh(t*Math.cos(e),t*Math.sin(e),r*Math.cos(n),r*Math.sin(n)),arc:Yh,"arc-radial":(e,t,n,r)=>Yh(t*Math.cos(e),t*Math.sin(e),r*Math.cos(n),r*Math.sin(n)),curve:Xh,"curve-radial":(e,t,n,r)=>Xh(t*Math.cos(e),t*Math.sin(e),r*Math.cos(n),r*Math.sin(n)),"orthogonal-horizontal":(e,t,n,r)=>"M"+e+","+t+"V"+r+"H"+n,"orthogonal-vertical":(e,t,n,r)=>"M"+e+","+t+"H"+n+"V"+r,"orthogonal-radial":(e,t,n,r)=>{const i=Math.cos(e),a=Math.sin(e),o=Math.cos(n),s=Math.sin(n);return"M"+t*i+","+t*a+"A"+t+","+t+" 0 0,"+((Math.abs(n-e)>Math.PI?n<=e:n>e)?1:0)+" "+t*o+","+t*s+"L"+r*o+","+r*s},"diagonal-horizontal":(e,t,n,r)=>{const i=(e+n)/2;return"M"+e+","+t+"C"+i+","+t+" "+i+","+r+" "+n+","+r},"diagonal-vertical":(e,t,n,r)=>{const i=(t+r)/2;return"M"+e+","+t+"C"+e+","+i+" "+n+","+i+" "+n+","+r},"diagonal-radial":(e,t,n,r)=>{const i=Math.cos(e),a=Math.sin(e),o=Math.cos(n),s=Math.sin(n),u=(t+r)/2;return"M"+t*i+","+t*a+"C"+u*i+","+u*a+" "+u*o+","+u*s+" "+r*o+","+r*s}});function Qh(e){Tr.call(this,null,e)}Qh.Definition={type:"Pie",metadata:{modifies:!0},params:[{name:"field",type:"field"},{name:"startAngle",type:"number",default:0},{name:"endAngle",type:"number",default:6.283185307179586},{name:"sort",type:"boolean",default:!1},{name:"as",type:"string",array:!0,length:2,default:["startAngle","endAngle"]}]},Oe(Qh,Tr,{transform(e,t){var n,i,a,o=e.as||["startAngle","endAngle"],s=o[0],u=o[1],l=e.field||O,c=e.startAngle||0,d=null!=e.endAngle?e.endAngle:2*Math.PI,f=t.source,h=f.map(l),p=h.length,m=c,g=(d-c)/r.sum(h),y=r.range(p);for(e.sort&&y.sort(((e,t)=>h[e]-h[t])),n=0;ne+(t<0?-1:t>0?1:0)),0))!==t.length&&n.warn("Log scale domain includes zero: "+Ye(t)));return t}function rp(e,t,n){return me(e)&&(t||n)?Ko(e,ip(t||[0,1],n)):e}function ip(e,t){return t?e.slice().reverse():e}function ap(e){Tr.call(this,null,e)}Oe(tp,Tr,{transform(e,t){var n=t.dataflow,i=this.value,a=function(e){var t,n=e.type,r="";if(n===_o)return _o+"-"+po;(function(e){const t=e.type;return Go(t)&&t!==bo&&t!==xo&&(e.scheme||e.range&&e.range.length&&e.range.every(Ne))})(e)&&(r=2===(t=e.rawDomain?e.rawDomain.length:e.domain?e.domain.length+ +(null!=e.domainMid):0)?_o+"-":3===t?Ao+"-":"");return(r+n||po).toLowerCase()}(e);for(a in i&&a===i.type||(this.value=i=jo(a)()),e)if(!ep[a]){if("padding"===a&&Zh(i.type))continue;me(i[a])?i[a](e[a]):n.warn("Unsupported scale property: "+a)}return function(e,t,n){var r=e.type,i=t.round||!1,a=t.range;if(null!=t.rangeStep)a=function(e,t,n){e!==Fo&&e!==Co&&E("Only band and point scales support rangeStep.");var r=(null!=t.paddingOuter?t.paddingOuter:t.padding)||0,i=e===Co?1:(null!=t.paddingInner?t.paddingInner:t.padding)||0;return[0,t.rangeStep*ho(n,i,r)]}(r,t,n);else if(t.scheme&&(a=function(e,t,n){var r,i=t.schemeExtent;j(t.scheme)?r=Zo(t.scheme,t.interpolate,t.interpolateGamma):(r=os(t.scheme.toLowerCase()))||E(`Unrecognized scheme name: ${t.scheme}`);return n=e===Do?n+1:e===Mo?n-1:e===ko||e===wo?+t.schemeCount||Kh:n,Xo(e)?rp(r,i,t.reverse):me(r)?es(rp(r,i),n):e===Eo?r:r.slice(0,n)}(r,t,n),me(a))){if(e.interpolator)return e.interpolator(a);E(`Scale type ${r} does not support interpolating color schemes.`)}if(a&&Xo(r))return e.interpolator(Zo(ip(a,t.reverse),t.interpolate,t.interpolateGamma));a&&t.interpolate&&e.interpolate?e.interpolate(ns(t.interpolate,t.interpolateGamma)):me(e.round)?e.round(i):me(e.rangeRound)&&e.interpolate(i?c.interpolateRound:c.interpolate);a&&e.range(ip(a,t.reverse))}(i,e,function(e,t,n){let i=t.bins;if(i&&!j(i)){const t=e.domain(),n=t[0],a=Y(t),o=i.step;let s=null==i.start?n:i.start,u=null==i.stop?a:i.stop;o||E("Scale bins parameter missing step property."),sa&&(u=o*Math.floor(a/o)),i=r.range(s,u+o/2,o)}i?e.bins=i:e.bins&&delete e.bins;e.type===Mo&&(i?t.domain||t.domainRaw||(e.domain(i),n=i.length):e.bins=e.domain());return n}(i,e,function(e,t,n){const r=function(e,t,n){return t?(e.domain(np(e.type,t,n)),t.length):-1}(e,t.domainRaw,n);if(r>-1)return r;var i,a,o=t.domain,s=e.type,u=t.zero||void 0===t.zero&&function(e){const t=e.type;return!e.bins&&(t===po||t===go||t===yo)}(e);if(!o)return 0;Zh(s)&&t.padding&&o[0]!==Y(o)&&(o=function(e,t,n,r,i,a){var o=Math.abs(Y(n)-n[0]),s=o/(o-2*r),u=e===mo?ue(t,null,s):e===yo?le(t,null,s,.5):e===go?le(t,null,s,i||1):e===vo?ce(t,null,s,a||1):se(t,null,s);return t=t.slice(),t[0]=u[0],t[t.length-1]=u[1],t}(s,o,t.range,t.padding,t.exponent,t.constant));if((u||null!=t.domainMin||null!=t.domainMax||null!=t.domainMid)&&(i=(o=o.slice()).length-1||1,u&&(o[0]>0&&(o[0]=0),o[i]<0&&(o[i]=0)),null!=t.domainMin&&(o[0]=t.domainMin),null!=t.domainMax&&(o[i]=t.domainMax),null!=t.domainMid)){const e=(a=t.domainMid)>o[i]?i+1:ae(u);if(null==t)h.push(e.slice());else for(i={},a=0,o=e.length;af&&(f=d),n&&c.sort(n)}return h.max=f,h}(t.source,e.groupby,l,c),r=0,i=n.length,a=n.max;r0?Math.sqrt(e):0}(2);function Ap(e){return e>1?xp:e<-1?-xp:Math.asin(e)}function kp(e,t){var n,r=e*yp(t),i=30;do{t-=n=(t+yp(t)-r)/(1+gp(t))}while(mp(n)>vp&&--i>0);return t/2}var wp=function(e,t,n){function r(r,i){return[e*r*gp(i=kp(n,i)),t*yp(i)]}return r.invert=function(r,i){return i=Ap(i/t),[r/(e*gp(i)),Ap((2*i+yp(2*i))/n)]},r}(_p/xp,_p,bp);const Dp=d.geoPath(),Ep=["clipAngle","clipExtent","scale","translate","center","rotate","parallels","precision","reflectX","reflectY","coefficient","distance","fraction","lobes","parallel","radius","ratio","spacing","tilt"];function Cp(e,t){if(!e||"string"!=typeof e)throw new Error("Projection type must be a name string.");return e=e.toLowerCase(),arguments.length>1?(Mp[e]=function(e,t){return function n(){const r=t();return r.type=e,r.path=d.geoPath().projection(r),r.copy=r.copy||function(){const e=n();return Ep.forEach((t=>{r[t]&&e[t](r[t]())})),e.path.pointRadius(r.path.pointRadius()),e},Uo(r)}}(e,t),this):Mp[e]||null}function Fp(e){return e&&e.path||Dp}const Mp={albers:d.geoAlbers,albersusa:d.geoAlbersUsa,azimuthalequalarea:d.geoAzimuthalEqualArea,azimuthalequidistant:d.geoAzimuthalEquidistant,conicconformal:d.geoConicConformal,conicequalarea:d.geoConicEqualArea,conicequidistant:d.geoConicEquidistant,equalEarth:d.geoEqualEarth,equirectangular:d.geoEquirectangular,gnomonic:d.geoGnomonic,identity:d.geoIdentity,mercator:d.geoMercator,mollweide:function(){return d.geoProjection(wp).scale(169.529)},naturalEarth1:d.geoNaturalEarth1,orthographic:d.geoOrthographic,stereographic:d.geoStereographic,transversemercator:d.geoTransverseMercator};for(const e in Mp)Cp(e,Mp[e]);function Sp(){}const Bp=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]];function Op(){var e=1,t=1,n=o;function r(e,t){return t.map((t=>i(e,t)))}function i(r,i){var o=[],s=[];return function(n,r,i){var o,s,u,l,c,d,f=new Array,h=new Array;o=s=-1,l=n[0]>=r,Bp[l<<1].forEach(p);for(;++o=r,Bp[u|l<<1].forEach(p);Bp[l<<0].forEach(p);for(;++s=r,c=n[s*e]>=r,Bp[l<<1|c<<2].forEach(p);++o=r,d=c,c=n[s*e+o+1]>=r,Bp[u|l<<1|c<<2|d<<3].forEach(p);Bp[l|c<<3].forEach(p)}o=-1,c=n[s*e]>=r,Bp[c<<2].forEach(p);for(;++o=r,Bp[c<<2|d<<3].forEach(p);function p(e){var t,n,r=[e[0][0]+o,e[0][1]+s],u=[e[1][0]+o,e[1][1]+s],l=a(r),c=a(u);(t=h[l])?(n=f[c])?(delete h[t.end],delete f[n.start],t===n?(t.ring.push(u),i(t.ring)):f[t.start]=h[n.end]={start:t.start,end:n.end,ring:t.ring.concat(n.ring)}):(delete h[t.end],t.ring.push(u),h[t.end=c]=t):(t=f[c])?(n=h[l])?(delete f[t.start],delete h[n.end],t===n?(t.ring.push(u),i(t.ring)):f[n.start]=h[t.end]={start:n.start,end:t.end,ring:n.ring.concat(t.ring)}):(delete f[t.start],t.ring.unshift(r),f[t.start=l]=t):f[l]=h[c]={start:l,end:c,ring:[r,u]}}Bp[c<<3].forEach(p)}(r,i,(e=>{n(e,r,i),function(e){var t=0,n=e.length,r=e[n-1][1]*e[0][0]-e[n-1][0]*e[0][1];for(;++t0?o.push([e]):s.push(e)})),s.forEach((e=>{for(var t,n=0,r=o.length;n{var a,o=n[0],s=n[1],u=0|o,l=0|s,c=r[l*e+u];o>0&&o0&&s=0&&a>=0||E("invalid size"),e=i,t=a,r},r.smooth=function(e){return arguments.length?(n=e?o:Sp,r):n===o},r}function zp(e,t){for(var n,r=-1,i=t.length;++rr!=h>r&&n<(f-l)*(r-c)/(h-c)+l&&(i=-i)}return i}function $p(e,t,n){var r,i,a,o;return function(e,t,n){return(t[0]-e[0])*(n[1]-e[1])==(n[0]-e[0])*(t[1]-e[1])}(e,t,n)&&(i=e[r=+(e[0]===t[0])],a=n[r],o=t[r],i<=a&&a<=o||o<=a&&a<=i)}function qp(e,t,n){return function(i){var a=De(i),o=n?Math.min(a[0],0):a[0],s=a[1],u=s-o,l=t?r.tickStep(o,s,e):u/(e+1);return r.range(o+l,s,l)}}function Lp(e){Tr.call(this,null,e)}function Tp(e,t,n,r,i){const a=e.x1||0,o=e.y1||0,s=t*n<0;function u(e){e.forEach(l)}function l(e){s&&e.reverse(),e.forEach(c)}function c(e){e[0]=(e[0]-a)*t+r,e[1]=(e[1]-o)*n+i}return function(e){return e.coordinates.forEach(u),e}}function Np(e,t,n){const r=e>=0?e:Gr(t,n);return Math.round((Math.sqrt(4*r*r+1)-1)/2)}function Pp(e){return me(e)?e:Ae(+e)}function Up(){var e=e=>e[0],t=e=>e[1],n=O,i=[-1,-1],a=960,o=500,s=2;function u(u,l){const c=Np(i[0],u,e)>>s,d=Np(i[1],u,t)>>s,f=c?c+2:0,h=d?d+2:0,p=2*f+(a>>s),m=2*h+(o>>s),g=new Float32Array(p*m),y=new Float32Array(p*m);let v=g;u.forEach((r=>{const i=f+(+e(r)>>s),a=h+(+t(r)>>s);i>=0&&i=0&&a0&&d>0?(jp(p,m,g,y,c),Ip(p,m,y,g,d),jp(p,m,g,y,c),Ip(p,m,y,g,d),jp(p,m,g,y,c),Ip(p,m,y,g,d)):c>0?(jp(p,m,g,y,c),jp(p,m,y,g,c),jp(p,m,g,y,c),v=y):d>0&&(Ip(p,m,g,y,d),Ip(p,m,y,g,d),Ip(p,m,g,y,d),v=y);const b=l?Math.pow(2,-2*s):1/r.sum(v);for(let e=0,t=p*m;e>s),y2:h+(o>>s)}}return u.x=function(t){return arguments.length?(e=Pp(t),u):e},u.y=function(e){return arguments.length?(t=Pp(e),u):t},u.weight=function(e){return arguments.length?(n=Pp(e),u):n},u.size=function(e){if(!arguments.length)return[a,o];var t=+e[0],n=+e[1];return t>=0&&n>=0||E("invalid size"),a=t,o=n,u},u.cellSize=function(e){return arguments.length?((e=+e)>=1||E("invalid cell size"),s=Math.floor(Math.log(e)/Math.LN2),u):1<=i&&(t>=a&&(s-=n[t-a+o*e]),r[t-i+o*e]=s/Math.min(t+1,e-1+a-t,a))}function Ip(e,t,n,r,i){const a=1+(i<<1);for(let o=0;o=i&&(s>=a&&(u-=n[o+(s-a)*e]),r[o+(s-i)*e]=u/Math.min(s+1,t-1+a-s,a))}function Wp(e){Tr.call(this,null,e)}Lp.Definition={type:"Isocontour",metadata:{generates:!0},params:[{name:"field",type:"field"},{name:"thresholds",type:"number",array:!0},{name:"levels",type:"number"},{name:"nice",type:"boolean",default:!1},{name:"resolve",type:"enum",values:["shared","independent"],default:"independent"},{name:"zero",type:"boolean",default:!0},{name:"smooth",type:"boolean",default:!0},{name:"scale",type:"number",expr:!0},{name:"translate",type:"number",array:!0,expr:!0},{name:"as",type:"string",null:!0,default:"contour"}]},Oe(Lp,Tr,{transform(e,t){if(this.value&&!t.changed()&&!e.modified())return t.StopPropagation;var n=t.fork(t.NO_SOURCE|t.NO_FIELDS),i=t.materialize(t.SOURCE).source,a=e.field||S,o=Op().smooth(!1!==e.smooth),s=e.thresholds||function(e,t,n){const i=qp(n.levels||10,n.nice,!1!==n.zero);return"shared"!==n.resolve?i:i(e.map((e=>r.max(t(e).values))))}(i,a,e),u=null===e.as?null:e.as||"contour",l=[];return i.forEach((t=>{const n=a(t),r=o.size([n.width,n.height])(n.values,j(s)?s:s(n.values));!function(e,t,n,r){let i=r.scale||t.scale,a=r.translate||t.translate;me(i)&&(i=i(n,r));me(a)&&(a=a(n,r));if((1===i||null==i)&&!a)return;const o=(Le(i)?i:i[0])||1,s=(Le(i)?i:i[1])||1,u=a&&a[0]||0,l=a&&a[1]||0;e.forEach(Tp(t,o,s,u,l))}(r,n,t,e),r.forEach((e=>{l.push(lr(t,sr(null!=u?{[u]:e}:e)))}))})),this.value&&(n.rem=this.value),this.value=n.source=n.add=l,n}}),Wp.Definition={type:"KDE2D",metadata:{generates:!0},params:[{name:"size",type:"number",array:!0,length:2,required:!0},{name:"x",type:"field",required:!0},{name:"y",type:"field",required:!0},{name:"weight",type:"field"},{name:"groupby",type:"field",array:!0},{name:"cellSize",type:"number"},{name:"bandwidth",type:"number",array:!0,length:2},{name:"counts",type:"boolean",default:!1},{name:"as",type:"string",default:"grid"}]};const Gp=["x","y","weight","size","cellSize","bandwidth"];function Hp(e,t){return Gp.forEach((n=>null!=t[n]?e[n](t[n]):0)),e}function Vp(e){Tr.call(this,null,e)}Oe(Wp,Tr,{transform(e,t){if(this.value&&!t.changed()&&!e.modified())return t.StopPropagation;var n,r=t.fork(t.NO_SOURCE|t.NO_FIELDS),i=function(e,t){var n,r,i,a,o,s,u=[],l=e=>e(a);if(null==t)u.push(e);else for(n={},r=0,i=e.length;rsr(function(e,t){for(let n=0;nr.push(u(e)))),o&&s&&(t.visit(l,(e=>{var t=o(e),n=s(e);null!=t&&null!=n&&(t=+t)===t&&(n=+n)===n&&i.push([t,n])})),r=r.concat({type:Yp,geometry:{type:"MultiPoint",coordinates:i}})),this.value={type:Xp,features:r}}}),Qp.Definition={type:"GeoPath",metadata:{modifies:!0},params:[{name:"projection",type:"projection"},{name:"field",type:"field"},{name:"pointRadius",type:"number",expr:!0},{name:"as",type:"string",default:"path"}]},Oe(Qp,Tr,{transform(e,t){var n=t.fork(t.ALL),r=this.value,i=e.field||S,a=e.as||"path",o=n.SOURCE;!r||e.modified()?(this.value=r=Fp(e.projection),n.materialize().reflow()):o=i===S||t.modified(i.fields)?n.ADD_MOD:n.ADD;const s=function(e,t){const n=e.pointRadius();e.context(null),null!=t&&e.pointRadius(t);return n}(r,e.pointRadius);return n.visit(o,(e=>e[a]=r(i(e)))),r.pointRadius(s),n.modifies(a)}}),Kp.Definition={type:"GeoPoint",metadata:{modifies:!0},params:[{name:"projection",type:"projection",required:!0},{name:"fields",type:"field",array:!0,required:!0,length:2},{name:"as",type:"string",array:!0,length:2,default:["x","y"]}]},Oe(Kp,Tr,{transform(e,t){var n,r=e.projection,i=e.fields[0],a=e.fields[1],o=e.as||["x","y"],s=o[0],u=o[1];function l(e){const t=r([i(e),a(e)]);t?(e[s]=t[0],e[u]=t[1]):(e[s]=void 0,e[u]=void 0)}return e.modified()?t=t.materialize().reflow(!0).visit(t.SOURCE,l):(n=t.modified(i.fields)||t.modified(a.fields),t.visit(n?t.ADD_MOD:t.ADD,l)),t.modifies(o)}}),Zp.Definition={type:"GeoShape",metadata:{modifies:!0,nomod:!0},params:[{name:"projection",type:"projection"},{name:"field",type:"field",default:"datum"},{name:"pointRadius",type:"number",expr:!0},{name:"as",type:"string",default:"shape"}]},Oe(Zp,Tr,{transform(e,t){var n=t.fork(t.ALL),r=this.value,i=e.as||"shape",a=n.ADD;return r&&!e.modified()||(this.value=r=function(e,t,n){const r=null==n?n=>e(t(n)):r=>{var i=e.pointRadius(),a=e.pointRadius(n)(t(r));return e.pointRadius(i),a};return r.context=t=>(e.context(t),r),r}(Fp(e.projection),e.field||F("datum"),e.pointRadius),n.materialize().reflow(),a=n.SOURCE),n.visit(a,(e=>e[i]=r)),n.modifies(i)}}),em.Definition={type:"Graticule",metadata:{changes:!0,generates:!0},params:[{name:"extent",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"extentMajor",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"extentMinor",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"step",type:"number",array:!0,length:2},{name:"stepMajor",type:"number",array:!0,length:2,default:[90,360]},{name:"stepMinor",type:"number",array:!0,length:2,default:[10,10]},{name:"precision",type:"number",default:2.5}]},Oe(em,Tr,{transform(e,t){var n,r=this.value,i=this.generator;if(!r.length||e.modified())for(const t in e)me(i[t])&&i[t](e[t]);return n=i(),r.length?t.mod.push(cr(r[0],n)):t.add.push(sr(n)),r[0]=n,t}}),tm.Definition={type:"heatmap",metadata:{modifies:!0},params:[{name:"field",type:"field"},{name:"color",type:"string",expr:!0},{name:"opacity",type:"number",expr:!0},{name:"resolve",type:"enum",values:["shared","independent"],default:"independent"},{name:"as",type:"string",default:"image"}]},Oe(tm,Tr,{transform(e,t){if(!t.changed()&&!e.modified())return t.StopPropagation;var n=t.materialize(t.SOURCE).source,i="shared"===e.resolve,a=e.field||S,o=function(e,t){let n;me(e)?(n=n=>e(n,t),n.dep=nm(e)):e?n=Ae(e):(n=e=>e.$value/e.$max||0,n.dep=!0);return n}(e.opacity,e),s=function(e,t){let n;me(e)?(n=n=>f.rgb(e(n,t)),n.dep=nm(e)):n=Ae(f.rgb(e||"#888"));return n}(e.color,e),u=e.as||"image",l={$x:0,$y:0,$value:0,$max:i?r.max(n.map((e=>r.max(a(e).values)))):0};return n.forEach((e=>{const t=a(e),n=we({},e,l);i||(n.$max=r.max(t.values||[])),e[u]=function(e,t,n,r){const i=e.width,a=e.height,o=e.x1||0,s=e.y1||0,u=e.x2||i,l=e.y2||a,c=e.values,d=c?e=>c[e]:B,f=co(u-o,l-s),h=f.getContext("2d"),p=h.getImageData(0,0,u-o,l-s),m=p.data;for(let e=s,a=0;e{null!=e[t]&&im(n,t,e[t])}))):Ep.forEach((t=>{e.modified(t)&&im(n,t,e[t])})),null!=e.pointRadius&&n.path.pointRadius(e.pointRadius),e.fit&&function(e,t){const n=function(e){return e=he(e),1===e.length?e[0]:{type:Xp,features:e.reduce(((e,t)=>e.concat(function(e){return e.type===Xp?e.features:he(e).filter((e=>null!=e)).map((e=>e.type===Yp?e:{type:Yp,geometry:e}))}(t))),[])}}(t.fit);t.extent?e.fitExtent(t.extent,n):t.size&&e.fitSize(t.size,n)}(n,e),t.fork(t.NO_SOURCE|t.NO_FIELDS)}});var am=Object.freeze({__proto__:null,contour:Vp,geojson:Jp,geopath:Qp,geopoint:Kp,geoshape:Zp,graticule:em,heatmap:tm,isocontour:Lp,kde2d:Wp,projection:rm});const om={center:h.forceCenter,collide:h.forceCollide,nbody:h.forceManyBody,link:h.forceLink,x:h.forceX,y:h.forceY},sm="forces",um=["alpha","alphaMin","alphaTarget","velocityDecay","forces"],lm=["static","iterations"],cm=["x","y","vx","vy"];function dm(e){Tr.call(this,null,e)}function fm(e,t,n,r){var i,a,o,s,u=he(t.forces);for(i=0,a=um.length;it(e,n):t)}dm.Definition={type:"Force",metadata:{modifies:!0},params:[{name:"static",type:"boolean",default:!1},{name:"restart",type:"boolean",default:!1},{name:"iterations",type:"number",default:300},{name:"alpha",type:"number",default:1},{name:"alphaMin",type:"number",default:.001},{name:"alphaTarget",type:"number",default:0},{name:"velocityDecay",type:"number",default:.4},{name:"forces",type:"param",array:!0,params:[{key:{force:"center"},params:[{name:"x",type:"number",default:0},{name:"y",type:"number",default:0}]},{key:{force:"collide"},params:[{name:"radius",type:"number",expr:!0},{name:"strength",type:"number",default:.7},{name:"iterations",type:"number",default:1}]},{key:{force:"nbody"},params:[{name:"strength",type:"number",default:-30,expr:!0},{name:"theta",type:"number",default:.9},{name:"distanceMin",type:"number",default:1},{name:"distanceMax",type:"number"}]},{key:{force:"link"},params:[{name:"links",type:"data"},{name:"id",type:"field"},{name:"distance",type:"number",default:30,expr:!0},{name:"strength",type:"number",expr:!0},{name:"iterations",type:"number",default:1}]},{key:{force:"x"},params:[{name:"strength",type:"number",default:.1},{name:"x",type:"field"}]},{key:{force:"y"},params:[{name:"strength",type:"number",default:.1},{name:"y",type:"field"}]}]},{name:"as",type:"string",array:!0,modify:!1,default:cm}]},Oe(dm,Tr,{transform(e,t){var n,r,i=this.value,a=t.changed(t.ADD_REM),o=e.modified(um),s=e.iterations||300;if(i?(a&&(t.modifies("index"),i.nodes(t.source)),(o||t.changed(t.MOD))&&fm(i,e,0,t)):(this.value=i=function(e,t){const n=h.forceSimulation(e),r=n.stop,i=n.restart;let a=!1;return n.stopped=()=>a,n.restart=()=>(a=!1,i()),n.stop=()=>(a=!0,r()),fm(n,t,!0).on("end",(()=>a=!0))}(t.source,e),i.on("tick",(n=t.dataflow,r=this,()=>n.touch(r).run())),e.static||(a=!0,i.tick()),t.modifies("index")),o||a||e.modified(lm)||t.changed()&&e.restart)if(i.alpha(Math.max(i.alpha(),e.alpha||1)).alphaDecay(1-Math.pow(i.alphaMin(),1/s)),e.static)for(i.stop();--s>=0;)i.tick();else if(i.stopped()&&i.restart(),!a)return t.StopPropagation;return this.finish(e,t)},finish(e,t){const n=t.dataflow;for(let e,t=this._argops,s=0,u=t.length;s{const i=e.data;n(i)&&(r[t(i)]=e)})),e.lookup=r,e}function vm(e){Tr.call(this,null,e)}vm.Definition={type:"Nest",metadata:{treesource:!0,changes:!0},params:[{name:"keys",type:"field",array:!0},{name:"generate",type:"boolean"}]};const bm=e=>e.values;function xm(){const e=[],t={entries:e=>r(n(e,0),0),key:n=>(e.push(n),t)};function n(t,r){if(r>=e.length)return t;const i=t.length,a=e[r++],o={},s={};let u,l,c,d=-1;for(;++de.length)return t;const i=[];for(const e in t)i.push({key:e,values:r(t[e],n)});return i}return t}function _m(e){Tr.call(this,null,e)}Oe(vm,Tr,{transform(e,t){t.source||E("Nest transform requires an upstream data source.");var n=e.generate,r=e.modified(),i=t.clone(),a=this.value;return(!a||r||t.changed())&&(a&&a.each((e=>{e.children&&ir(e.data)&&i.rem.push(e.data)})),this.value=a=p.hierarchy({values:he(e.keys).reduce(((e,t)=>(e.key(t),e)),xm()).entries(i.source)},bm),n&&a.each((e=>{e.children&&(e=sr(e.data),i.add.push(e),i.source.push(e))})),ym(a,ar,ar)),i.source.root=a,i}});const Am=(e,t)=>e.parent===t.parent?1:2;Oe(_m,Tr,{transform(e,t){t.source&&t.source.root||E(this.constructor.name+" transform requires a backing tree data source.");const n=this.layout(e.method),r=this.fields,i=t.source.root,a=e.as||r;e.field?i.sum(e.field):i.count(),e.sort&&i.sort(dr(e.sort,(e=>e.data))),function(e,t,n){for(let r,i=0,a=t.length;ifunction(e,t,n){const r=e.data,i=t.length-1;for(let a=0;aa[ar(e)]=1)),r.each((e=>{const t=e.data,n=e.parent&&e.parent.data;n&&a[ar(t)]&&a[ar(n)]&&i.add.push(sr({source:n,target:t}))})),this.value=i.add):t.changed(t.MOD)&&(t.visit(t.MOD,(e=>a[ar(e)]=1)),n.forEach((e=>{(a[ar(e.source)]||a[ar(e.target)])&&i.mod.push(e)}))),i}});const Om={binary:p.treemapBinary,dice:p.treemapDice,slice:p.treemapSlice,slicedice:p.treemapSliceDice,squarify:p.treemapSquarify,resquarify:p.treemapResquarify},zm=["x0","y0","x1","y1","depth","children"];function Rm(e){_m.call(this,e)}Rm.Definition={type:"Treemap",metadata:{tree:!0,modifies:!0},params:[{name:"field",type:"field"},{name:"sort",type:"compare"},{name:"method",type:"enum",default:"squarify",values:["squarify","resquarify","binary","dice","slice","slicedice"]},{name:"padding",type:"number",default:0},{name:"paddingInner",type:"number",default:0},{name:"paddingOuter",type:"number",default:0},{name:"paddingTop",type:"number",default:0},{name:"paddingRight",type:"number",default:0},{name:"paddingBottom",type:"number",default:0},{name:"paddingLeft",type:"number",default:0},{name:"ratio",type:"number",default:1.618033988749895},{name:"round",type:"boolean",default:!1},{name:"size",type:"number",array:!0,length:2},{name:"as",type:"string",array:!0,length:zm.length,default:zm}]},Oe(Rm,_m,{layout(){const e=p.treemap();return e.ratio=t=>{const n=e.tile();n.ratio&&e.tile(n.ratio(t))},e.method=t=>{Fe(Om,t)?e.tile(Om[t]):E("Unrecognized Treemap layout method: "+t)},e},params:["method","ratio","size","round","padding","paddingInner","paddingOuter","paddingTop","paddingRight","paddingBottom","paddingLeft"],fields:zm});var $m=Object.freeze({__proto__:null,nest:vm,pack:wm,partition:Em,stratify:Cm,tree:Sm,treelinks:Bm,treemap:Rm});const qm=4278190080;function Lm(e,t,n){return new Uint32Array(e.getImageData(0,0,t,n).data.buffer)}function Tm(e,t,n){if(!t.length)return;const r=t[0].mark.marktype;"group"===r?t.forEach((t=>{t.items.forEach((t=>Tm(e,t.items,n)))})):Fc[r].draw(e,{items:n?t.map(Nm):t})}function Nm(e){const t=lr(e,{});return t.stroke&&0!==t.strokeOpacity||t.fill&&0!==t.fillOpacity?{...t,strokeOpacity:1,stroke:"#000",fillOpacity:0}:t}const Pm=5,Um=31,jm=32,Im=new Uint32Array(jm+1),Wm=new Uint32Array(jm+1);Wm[0]=0,Im[0]=~Wm[0];for(let e=1;e<=jm;++e)Wm[e]=Wm[e-1]<<1|1,Im[e]=~Wm[e];function Gm(e,t,n){const r=Math.max(1,Math.sqrt(e*t/1e6)),i=~~((e+2*n+r)/r),a=~~((t+2*n+r)/r),o=e=>~~((e+n)/r);return o.invert=e=>e*r-n,o.bitmap=()=>function(e,t){const n=new Uint32Array(~~((e*t+jm)/jm));function r(e,t){n[e]|=t}function i(e,t){n[e]&=t}return{array:n,get:(t,r)=>{const i=r*e+t;return n[i>>>Pm]&1<<(i&Um)},set:(t,n)=>{const i=n*e+t;r(i>>>Pm,1<<(i&Um))},clear:(t,n)=>{const r=n*e+t;i(r>>>Pm,~(1<<(r&Um)))},getRange:(t,r,i,a)=>{let o,s,u,l,c=a;for(;c>=r;--c)if(o=c*e+t,s=c*e+i,u=o>>>Pm,l=s>>>Pm,u===l){if(n[u]&Im[o&Um]&Wm[1+(s&Um)])return!0}else{if(n[u]&Im[o&Um])return!0;if(n[l]&Wm[1+(s&Um)])return!0;for(let e=u+1;e{let o,s,u,l,c;for(;n<=a;++n)if(o=n*e+t,s=n*e+i,u=o>>>Pm,l=s>>>Pm,u===l)r(u,Im[o&Um]&Wm[1+(s&Um)]);else for(r(u,Im[o&Um]),r(l,Wm[1+(s&Um)]),c=u+1;c{let o,s,u,l,c;for(;n<=a;++n)if(o=n*e+t,s=n*e+r,u=o>>>Pm,l=s>>>Pm,u===l)i(u,Wm[o&Um]|Im[1+(s&Um)]);else for(i(u,Wm[o&Um]),i(l,Im[1+(s&Um)]),c=u+1;cn<0||r<0||a>=t||i>=e}}(i,a),o.ratio=r,o.padding=n,o.width=e,o.height=t,o}function Hm(e,t,n,r,i,a){let o=n/2;return e-o<0||e+o>i||t-(o=r/2)<0||t+o>a}function Vm(e,t,n,r,i,a,o,s){const u=i*a/(2*r),l=e(t-u),c=e(t+u),d=e(n-(a/=2)),f=e(n+a);return o.outOfBounds(l,d,c,f)||o.getRange(l,d,c,f)||s&&s.getRange(l,d,c,f)}const Ym=[-1,-1,1,1],Xm=[-1,1,-1,1];const Jm=["right","center","left"],Qm=["bottom","middle","top"];function Km(e,t,n,r,i,a,o,s,u,l,c,d){return!(i.outOfBounds(e,n,t,r)||(d&&a||i).getRange(e,n,t,r))}const Zm={"top-left":0,top:1,"top-right":2,left:4,middle:5,right:6,"bottom-left":8,bottom:9,"bottom-right":10},eg={naive:function(e,t,n,r){const i=e.width,a=e.height;return function(e){const t=e.datum.datum.items[r].items,n=t.length,o=e.datum.fontSize,s=uc.width(e.datum,e.datum.text);let u,l,c,d,f,h,p,m=0;for(let r=0;r=m&&(m=p,e.x=f,e.y=h);return f=s/2,h=o/2,u=e.x-f,l=e.x+f,c=e.y-h,d=e.y+h,e.align="center",u<0&&l<=i?e.align="left":0<=u&&i=1;)f=(h+p)/2,Vm(e,c,d,l,u,f,o,s)?p=f:h=f;if(h>r)return[c,d,h,!0]}}return function(t){const s=t.datum.datum.items[r].items,l=s.length,c=t.datum.fontSize,d=uc.width(t.datum,t.datum.text);let f,h,p,m,g,y,v,b,x,_,A,k,w,D,E,C,F,M=n?c:0,S=!1,B=!1,O=0;for(let r=0;rh&&(F=f,f=h,h=F),p>m&&(F=p,p=m,m=F),x=e(f),A=e(h),_=~~((x+A)/2),k=e(p),D=e(m),w=~~((k+D)/2),v=_;v>=x;--v)for(b=w;b>=k;--b)C=u(v,b,M,d,c),C&&([t.x,t.y,M,S]=C);for(v=_;v<=A;++v)for(b=w;b<=D;++b)C=u(v,b,M,d,c),C&&([t.x,t.y,M,S]=C);S||n||(E=Math.abs(h-f+m-p),g=(f+h)/2,y=(p+m)/2,E>=O&&!Hm(g,y,d,c,i,a)&&!Vm(e,g,y,c,d,c,o,null)&&(O=E,t.x=g,t.y=y,B=!0))}return!(!S&&!B)&&(g=d/2,y=c/2,o.setRange(e(t.x-g),e(t.y-y),e(t.x+g),e(t.y+y)),t.align="center",t.baseline="middle",!0)}},floodfill:function(e,t,n,r){const i=e.width,a=e.height,o=t[0],s=t[1],u=e.bitmap();return function(t){const l=t.datum.datum.items[r].items,c=l.length,d=t.datum.fontSize,f=uc.width(t.datum,t.datum.text),h=[];let p,m,g,y,v,b,x,_,A,k,w,D,E=n?d:0,C=!1,F=!1,M=0;for(let r=0;r=1;)w=(A+k)/2,Vm(e,v,b,d,f,w,o,s)?k=w:A=w;A>E&&(t.x=v,t.y=b,E=A,C=!0)}}C||n||(D=Math.abs(m-p+y-g),v=(p+m)/2,b=(g+y)/2,D>=M&&!Hm(v,b,f,d,i,a)&&!Vm(e,v,b,d,f,d,o,null)&&(M=D,t.x=v,t.y=b,F=!0))}return!(!C&&!F)&&(v=f/2,b=d/2,o.setRange(e(t.x-v),e(t.y-b),e(t.x+v),e(t.y+b)),t.align="center",t.baseline="middle",!0)}}};function tg(e,t,n,r,i,a,o,s,u,l,c){if(!e.length)return e;const d=Math.max(r.length,i.length),f=function(e,t){const n=new Float64Array(t),r=e.length;for(let t=0;t[e.x,e.x,e.x,e.y,e.y,e.y];return e?"line"===e||"area"===e?e=>i(e.datum):"line"===t?e=>{const t=e.datum.items[r].items;return i(t.length?t["start"===n?0:t.length-1]:{x:NaN,y:NaN})}:e=>{const t=e.datum.bounds;return[t.x1,(t.x1+t.x2)/2,t.x2,t.y1,(t.y1+t.y2)/2,t.y2]}:i}(p,m,s,u),v=null===l||l===1/0,b=g&&"naive"===c;var x;let _=-1,A=-1;const k=e.map((e=>{const t=v?uc.width(e,e.text):void 0;return _=Math.max(_,t),A=Math.max(A,e.fontSize),{datum:e,opacity:0,x:void 0,y:void 0,align:void 0,baseline:void 0,boundary:y(e),textWidth:t}}));l=null===l||l===1/0?Math.max(_,A)+Math.max(...r):l;const w=Gm(t[0],t[1],l);let D;if(!b){n&&k.sort(((e,t)=>n(e.datum,t.datum)));let t=!1;for(let e=0;ee.datum));D=a.length||r?function(e,t,n,r,i){const a=e.width,o=e.height,s=r||i,u=co(a,o).getContext("2d"),l=co(a,o).getContext("2d"),c=s&&co(a,o).getContext("2d");n.forEach((e=>Tm(u,e,!1))),Tm(l,t,!1),s&&Tm(c,t,!0);const d=Lm(u,a,o),f=Lm(l,a,o),h=s&&Lm(c,a,o),p=e.bitmap(),m=s&&e.bitmap();let g,y,v,b,x,_,A,k;for(y=0;yn.set(e(t.boundary[0]),e(t.boundary[3])))),[n,void 0]}(w,o&&k)}const E=g?eg[c](w,D,o,u):function(e,t,n,r){const i=e.width,a=e.height,o=t[0],s=t[1],u=r.length;return function(t){const l=t.boundary,c=t.datum.fontSize;if(l[2]<0||l[5]<0||l[0]>i||l[3]>a)return!1;let d,f,h,p,m,g,y,v,b,x,_,A,k,w,D,E=t.textWidth??0;for(let i=0;i>>2&3)-1,h=0===d&&0===f||r[i]<0,p=d&&f?Math.SQRT1_2:1,m=r[i]<0?-1:1,g=l[1+d]+r[i]*d*p,_=l[4+f]+m*c*f/2+r[i]*f*p,v=_-c/2,b=_+c/2,A=e(g),w=e(v),D=e(b),!E){if(!Km(A,A,w,D,o,s,0,0,0,0,0,h))continue;E=uc.width(t.datum,t.datum.text)}if(x=g+m*E*d/2,g=x-E/2,y=x+E/2,A=e(g),k=e(y),Km(A,k,w,D,o,s,0,0,0,0,0,h))return t.x=d?d*m<0?y:g:x,t.y=f?f*m<0?b:v:_,t.align=Jm[d*m+1],t.baseline=Qm[f*m+1],o.setRange(A,w,k,D),!0}return!1}}(w,D,h,f);return k.forEach((e=>e.opacity=+E(e))),k}const ng=["x","y","opacity","align","baseline"],rg=["top-left","left","bottom-left","top","bottom","top-right","right","bottom-right"];function ig(e){Tr.call(this,null,e)}ig.Definition={type:"Label",metadata:{modifies:!0},params:[{name:"size",type:"number",array:!0,length:2,required:!0},{name:"sort",type:"compare"},{name:"anchor",type:"string",array:!0,default:rg},{name:"offset",type:"number",array:!0,default:[1]},{name:"padding",type:"number",default:0,null:!0},{name:"lineAnchor",type:"string",values:["start","end"],default:"end"},{name:"markIndex",type:"number",default:0},{name:"avoidBaseMark",type:"boolean",default:!0},{name:"avoidMarks",type:"data",array:!0},{name:"method",type:"string",default:"naive"},{name:"as",type:"string",array:!0,length:ng.length,default:ng}]},Oe(ig,Tr,{transform(e,t){const n=e.modified();if(!(n||t.changed(t.ADD_REM)||function(n){const r=e[n];return me(r)&&t.modified(r.fields)}("sort")))return;e.size&&2===e.size.length||E("Size parameter should be specified as a [width, height] array.");const r=e.as||ng;return tg(t.materialize(t.SOURCE).source||[],e.size,e.sort,he(null==e.offset?1:e.offset),he(e.anchor||rg),e.avoidMarks||[],!1!==e.avoidBaseMark,e.lineAnchor||"end",e.markIndex||0,void 0===e.padding?0:e.padding,e.method||"naive").forEach((e=>{const t=e.datum;t[r[0]]=e.x,t[r[1]]=e.y,t[r[2]]=e.opacity,t[r[3]]=e.align,t[r[4]]=e.baseline})),t.reflow(n).modifies(r)}});var ag=Object.freeze({__proto__:null,label:ig});function og(e,t){var n,r,i,a,o,s,u=[],l=function(e){return e(a)};if(null==t)u.push(e);else for(n={},r=0,i=e.length;r{Mi(t,e.x,e.y,e.bandwidth||.3).forEach((e=>{const n={};for(let e=0;e"poly"===e?t:"quad"===e?2:1)(a,o),u=e.as||[_(e.x),_(e.y)],l=ug[a],c=[];let d=e.extent;Fe(ug,a)||E("Invalid regression method: "+a),null!=d&&"log"===a&&d[0]<=0&&(t.dataflow.warn("Ignoring extent with values <= 0 for log regression."),d=null),r.forEach((n=>{if(n.length<=s)return void t.dataflow.warn("Skipping regression with more parameters than data points.");const r=l(n,e.x,e.y,o);if(e.params)return void c.push(sr({keys:n.dims,coef:r.coef,rSquared:r.rSquared}));const f=d||De(n,e.x),h=e=>{const t={};for(let e=0;eh([e,r.predict(e)]))):zi(r.predict,f,25,200).forEach(h)})),this.value&&(n.rem=this.value),this.value=n.add=n.source=c}return n}});var cg=Object.freeze({__proto__:null,loess:sg,regression:lg});function dg(e){Tr.call(this,null,e)}dg.Definition={type:"Voronoi",metadata:{modifies:!0},params:[{name:"x",type:"field",required:!0},{name:"y",type:"field",required:!0},{name:"size",type:"number",array:!0,length:2},{name:"extent",type:"array",array:!0,length:2,default:[[-1e5,-1e5],[1e5,1e5]],content:{type:"number",array:!0,length:2}},{name:"as",type:"string",default:"path"}]};const fg=[-1e5,-1e5,1e5,1e5];function hg(e){const t=e[0][0],n=e[0][1];let r=e.length-1;for(;e[r][0]===t&&e[r][1]===n;--r);return"M"+e.slice(0,r+1).join("L")+"Z"}Oe(dg,Tr,{transform(e,t){const n=e.as||"path",r=t.source;if(!r||!r.length)return t;let i=e.size;i=i?[0,0,i[0],i[1]]:(i=e.extent)?[i[0][0],i[0][1],i[1][0],i[1][1]]:fg;const a=this.value=m.Delaunay.from(r,e.x,e.y).voronoi(i);for(let e=0,t=r.length;e=d));)if(t.x=o+i,t.y=l+a,!(t.x+t.x0<0||t.y+t.y0<0||t.x+t.x1>s[0]||t.y+t.y1>s[1])&&(!n||!xg(t,e,s[0]))&&(!n||Ag(t,n))){for(var m,g=t.sprite,y=t.width>>5,v=s[0]>>5,b=t.x-(y<<4),x=127&b,_=32-x,A=t.y1-t.y0,k=(t.y+t.y0)*v+(b>>5),w=0;w>>x:0);k+=v}return t.sprite=null,!0}return!1}return d.layout=function(){for(var u=function(e){e.width=e.height=1;var t=Math.sqrt(e.getContext("2d").getImageData(0,0,1,1).data.length>>2);e.width=(gg<<5)/t,e.height=yg/t;var n=e.getContext("2d");return n.fillStyle=n.strokeStyle="red",n.textAlign="center",{context:n,ratio:t}}(co()),d=function(e){var t=[],n=-1;for(;++n>5)*s[1]),h=null,p=l.length,m=-1,g=[],y=l.map((s=>({text:e(s),font:t(s),style:r(s),weight:i(s),rotate:a(s),size:~~(n(s)+1e-14),padding:o(s),xoff:0,yoff:0,x1:0,y1:0,x0:0,y0:0,hasText:!1,sprite:null,datum:s}))).sort(((e,t)=>t.size-e.size));++m>1,v.y=s[1]*(c()+.5)>>1,bg(u,v,y,m),v.hasText&&f(d,v,h)&&(g.push(v),h?_g(h,v):h=[{x:v.x+v.x0,y:v.y+v.y0},{x:v.x+v.x1,y:v.y+v.y1}],v.x-=s[0]>>1,v.y-=s[1]>>1)}return g},d.words=function(e){return arguments.length?(l=e,d):l},d.size=function(e){return arguments.length?(s=[+e[0],+e[1]],d):s},d.font=function(e){return arguments.length?(t=wg(e),d):t},d.fontStyle=function(e){return arguments.length?(r=wg(e),d):r},d.fontWeight=function(e){return arguments.length?(i=wg(e),d):i},d.rotate=function(e){return arguments.length?(a=wg(e),d):a},d.text=function(t){return arguments.length?(e=wg(t),d):e},d.spiral=function(e){return arguments.length?(u=Dg[e]||e,d):u},d.fontSize=function(e){return arguments.length?(n=wg(e),d):n},d.padding=function(e){return arguments.length?(o=wg(e),d):o},d.random=function(e){return arguments.length?(c=e,d):c},d}function bg(e,t,n,r){if(!t.sprite){var i=e.context,a=e.ratio;i.clearRect(0,0,(gg<<5)/a,yg/a);var o,s,u,l,c,d=0,f=0,h=0,p=n.length;for(--r;++r>5<<5,u=~~Math.max(Math.abs(v+b),Math.abs(v-b))}else o=o+31>>5<<5;if(u>h&&(h=u),d+o>=gg<<5&&(d=0,f+=h,h=0),f+u>=yg)break;i.translate((d+(o>>1))/a,(f+(u>>1))/a),t.rotate&&i.rotate(t.rotate*mg),i.fillText(t.text,0,0),t.padding&&(i.lineWidth=2*t.padding,i.strokeText(t.text,0,0)),i.restore(),t.width=o,t.height=u,t.xoff=d,t.yoff=f,t.x1=o>>1,t.y1=u>>1,t.x0=-t.x1,t.y0=-t.y1,t.hasText=!0,d+=o}for(var _=i.getImageData(0,0,(gg<<5)/a,yg/a).data,A=[];--r>=0;)if((t=n[r]).hasText){for(s=(o=t.width)>>5,u=t.y1-t.y0,l=0;l>5),E=_[(f+c)*(gg<<5)+(d+l)<<2]?1<<31-l%32:0;A[D]|=E,k|=E}k?w=c:(t.y0++,u--,c--,f++)}t.y1=t.y0+w,t.sprite=A.slice(0,(t.y1-t.y0)*s)}}}function xg(e,t,n){n>>=5;for(var r,i=e.sprite,a=e.width>>5,o=e.x-(a<<4),s=127&o,u=32-s,l=e.y1-e.y0,c=(e.y+e.y0)*n+(o>>5),d=0;d>>s:0))&t[c+f])return!0;c+=n}return!1}function _g(e,t){var n=e[0],r=e[1];t.x+t.x0r.x&&(r.x=t.x+t.x1),t.y+t.y1>r.y&&(r.y=t.y+t.y1)}function Ag(e,t){return e.x+e.x1>t[0].x&&e.x+e.x0t[0].y&&e.y+e.y0t(e(n))}i.forEach((e=>{e[o[0]]=NaN,e[o[1]]=NaN,e[o[3]]=0}));const l=a.words(i).text(t.text).size(t.size||[500,500]).padding(t.padding||1).spiral(t.spiral||"archimedean").rotate(t.rotate||0).font(t.font||"sans-serif").fontStyle(t.fontStyle||"normal").fontWeight(t.fontWeight||"normal").fontSize(u).random(e.random).layout(),c=a.size(),d=c[0]>>1,f=c[1]>>1,h=l.length;for(let e,t,n=0;nnew Uint8Array(e),Bg=e=>new Uint16Array(e),Og=e=>new Uint32Array(e);function zg(e,t,n){const r=(t<257?Sg:t<65537?Bg:Og)(e);return n&&r.set(n),r}function Rg(e,t,n){const r=1<{const r=e[t],i=e[n];return ri?1:0})),r.permute(e,t)}(h,l),s)c=t,d=e,t=Array(s+u),e=Og(s+u),function(e,t,n,r,i,a,o,s,u){let l,c=0,d=0;for(l=0;c0)for(f=0;fe,size:()=>n}}function qg(e){Tr.call(this,function(){let e=8,t=[],n=Og(0),r=zg(0,e),i=zg(0,e);return{data:()=>t,seen:()=>n=function(e,t,n){return e.length>=t?e:((n=n||new e.constructor(t)).set(e),n)}(n,t.length),add(e){for(let n,r=0,i=t.length,a=e.length;rt.length,curr:()=>r,prev:()=>i,reset:e=>i[e]=r[e],all:()=>e<257?255:e<65537?65535:4294967295,set(e,t){r[e]|=t},clear(e,t){r[e]&=~t},resize(t,n){(t>r.length||n>e)&&(e=Math.max(n,e),r=zg(t,e,r),i=zg(t,e))}}}(),e),this._indices=null,this._dims=null}function Lg(e){Tr.call(this,null,e)}qg.Definition={type:"CrossFilter",metadata:{},params:[{name:"fields",type:"field",array:!0,required:!0},{name:"query",type:"array",array:!0,required:!0,content:{type:"number",array:!0,length:2}}]},Oe(qg,Tr,{transform(e,t){return this._dims?e.modified("fields")||e.fields.some((e=>t.modified(e.fields)))?this.reinit(e,t):this.eval(e,t):this.init(e,t)},init(e,t){const n=e.fields,r=e.query,i=this._indices={},a=this._dims=[],o=r.length;let s,u,l=0;for(;l{const e=i.remove(t,n);for(const t in r)r[t].reindex(e)}))},update(e,t,n){const r=this._dims,i=e.query,a=t.stamp,o=r.length;let s,u,l=0;for(n.filters=0,u=0;uh)for(g=h,y=Math.min(d,p);gp)for(g=Math.max(d,p),y=f;gc)for(h=c,p=Math.min(u,d);hd)for(h=Math.max(u,d),p=l;hs[e]&n?null:o[e];return a.filter(a.MOD,l),i&i-1?(a.filter(a.ADD,(e=>{const t=s[e]&n;return!t&&t^u[e]&n?o[e]:null})),a.filter(a.REM,(e=>{const t=s[e]&n;return t&&!(t^t^u[e]&n)?o[e]:null}))):(a.filter(a.ADD,l),a.filter(a.REM,(e=>(s[e]&n)===i?o[e]:null))),a.filter(a.SOURCE,(e=>l(e._index)))}});var Tg=Object.freeze({__proto__:null,crossfilter:qg,resolvefilter:Lg});const Ng="Literal",Pg="Property",Ug="ArrayExpression",jg="BinaryExpression",Ig="CallExpression",Wg="ConditionalExpression",Gg="LogicalExpression",Hg="MemberExpression",Vg="ObjectExpression",Yg="UnaryExpression";function Xg(e){this.type=e}var Jg,Qg,Kg,Zg,ey;Xg.prototype.visit=function(e){let t,n,r;if(e(this))return 1;for(t=function(e){switch(e.type){case Ug:return e.elements;case jg:case Gg:return[e.left,e.right];case Ig:return[e.callee].concat(e.arguments);case Wg:return[e.test,e.consequent,e.alternate];case Hg:return[e.object,e.property];case Vg:return e.properties;case Pg:return[e.key,e.value];case Yg:return[e.argument];default:return[]}}(this),n=0,r=t.length;n",Jg[ry]="Identifier",Jg[iy]="Keyword",Jg[ay]="Null",Jg[oy]="Numeric",Jg[sy]="Punctuator",Jg[uy]="String",Jg[9]="RegularExpression";var ly="ArrayExpression",cy="BinaryExpression",dy="CallExpression",fy="ConditionalExpression",hy="Identifier",py="Literal",my="LogicalExpression",gy="MemberExpression",yy="ObjectExpression",vy="Property",by="UnaryExpression",xy="Unexpected token %0",_y="Unexpected number",Ay="Unexpected string",ky="Unexpected identifier",wy="Unexpected reserved word",Dy="Unexpected end of input",Ey="Invalid regular expression",Cy="Invalid regular expression: missing /",Fy="Octal literals are not allowed in strict mode.",My="Duplicate data property in object literal not allowed in strict mode",Sy="ILLEGAL",By="Disabled.",Oy=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),zy=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]");function Ry(e,t){if(!e)throw new Error("ASSERT: "+t)}function $y(e){return e>=48&&e<=57}function qy(e){return"0123456789abcdefABCDEF".indexOf(e)>=0}function Ly(e){return"01234567".indexOf(e)>=0}function Ty(e){return 32===e||9===e||11===e||12===e||160===e||e>=5760&&[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(e)>=0}function Ny(e){return 10===e||13===e||8232===e||8233===e}function Py(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||92===e||e>=128&&Oy.test(String.fromCharCode(e))}function Uy(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||92===e||e>=128&&zy.test(String.fromCharCode(e))}const jy={if:1,in:1,do:1,var:1,for:1,new:1,try:1,let:1,this:1,else:1,case:1,void:1,with:1,enum:1,while:1,break:1,catch:1,throw:1,const:1,yield:1,class:1,super:1,return:1,typeof:1,delete:1,switch:1,export:1,import:1,public:1,static:1,default:1,finally:1,extends:1,package:1,private:1,function:1,continue:1,debugger:1,interface:1,protected:1,instanceof:1,implements:1};function Iy(){for(;Kg1114111||"}"!==e)&&ov({},xy,Sy),t<=65535?String.fromCharCode(t):(n=55296+(t-65536>>10),r=56320+(t-65536&1023),String.fromCharCode(n,r))}function Hy(){var e,t;for(e=Qg.charCodeAt(Kg++),t=String.fromCharCode(e),92===e&&(117!==Qg.charCodeAt(Kg)&&ov({},xy,Sy),++Kg,(e=Wy("u"))&&"\\"!==e&&Py(e.charCodeAt(0))||ov({},xy,Sy),t=e);Kg>>="===(r=Qg.substr(Kg,4))?{type:sy,value:r,start:i,end:Kg+=4}:">>>"===(n=r.substr(0,3))||"<<="===n||">>="===n?{type:sy,value:n,start:i,end:Kg+=3}:o===(t=n.substr(0,2))[1]&&"+-<>&|".indexOf(o)>=0||"=>"===t?{type:sy,value:t,start:i,end:Kg+=2}:("//"===t&&ov({},xy,Sy),"<>=!+-*%&|^/".indexOf(o)>=0?(++Kg,{type:sy,value:o,start:i,end:Kg}):void ov({},xy,Sy))}function Xy(){var e,t,n;if(Ry($y((n=Qg[Kg]).charCodeAt(0))||"."===n,"Numeric literal must start with a decimal digit or a decimal point"),t=Kg,e="","."!==n){if(e=Qg[Kg++],n=Qg[Kg],"0"===e){if("x"===n||"X"===n)return++Kg,function(e){let t="";for(;Kg=0&&ov({},Ey,n),{value:n,literal:t}}(),r=function(e,t){let n=e;t.indexOf("u")>=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}/g,((e,t)=>{if(parseInt(t,16)<=1114111)return"x";ov({},Ey)})).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"x"));try{new RegExp(n)}catch(e){ov({},Ey)}try{return new RegExp(e,t)}catch(e){return null}}(t.value,n.value),{literal:t.literal+n.literal,value:r,regex:{pattern:t.value,flags:n.value},start:e,end:Kg}}function Qy(){if(Iy(),Kg>=Zg)return{type:ny,start:Kg,end:Kg};const e=Qg.charCodeAt(Kg);return Py(e)?Vy():40===e||41===e||59===e?Yy():39===e||34===e?function(){var e,t,n,r,i="",a=!1;for(Ry("'"===(e=Qg[Kg])||'"'===e,"String literal must starts with a quote"),t=Kg,++Kg;Kg=0&&Kg(Ry(t":case"<=":case">=":case"instanceof":case"in":t=7;break;case"<<":case">>":case">>>":t=8;break;case"+":case"-":t=9;break;case"*":case"/":case"%":t=11}return t}function kv(){var e,t;return e=function(){var e,t,n,r,i,a,o,s,u,l;if(e=ey,u=_v(),0===(i=Av(r=ey)))return u;for(r.prec=i,Ky(),t=[e,ey],a=[u,r,o=_v()];(i=Av(ey))>0;){for(;a.length>2&&i<=a[a.length-2].prec;)o=a.pop(),s=a.pop().value,u=a.pop(),t.pop(),n=ev(s,u,o),a.push(n);(r=Ky()).prec=i,a.push(r),t.push(ey),n=_v(),a.push(n)}for(n=a[l=a.length-1],t.pop();l>1;)t.pop(),n=ev(a[l-1].value,a[l-2],n),l-=2;return n}(),lv("?")&&(Ky(),t=kv(),uv(":"),e=function(e,t,n){const r=new Xg(fy);return r.test=e,r.consequent=t,r.alternate=n,r}(e,t,kv())),e}function wv(){const e=kv();if(lv(","))throw new Error(By);return e}function Dv(e){Kg=0,Zg=(Qg=e).length,ey=null,Zy();const t=wv();if(ey.type!==ny)throw new Error("Unexpect token after expression.");return t}var Ev={NaN:"NaN",E:"Math.E",LN2:"Math.LN2",LN10:"Math.LN10",LOG2E:"Math.LOG2E",LOG10E:"Math.LOG10E",PI:"Math.PI",SQRT1_2:"Math.SQRT1_2",SQRT2:"Math.SQRT2",MIN_VALUE:"Number.MIN_VALUE",MAX_VALUE:"Number.MAX_VALUE"};function Cv(e){function t(t,n,r){return i=>function(t,n,r,i){let a=e(n[0]);return r&&(a=r+"("+a+")",0===r.lastIndexOf("new ",0)&&(a="("+a+")")),a+"."+t+(i<0?"":0===i?"()":"("+n.slice(1).map(e).join(",")+")")}(t,i,n,r)}const n="new Date",r="String",i="RegExp";return{isNaN:"Number.isNaN",isFinite:"Number.isFinite",abs:"Math.abs",acos:"Math.acos",asin:"Math.asin",atan:"Math.atan",atan2:"Math.atan2",ceil:"Math.ceil",cos:"Math.cos",exp:"Math.exp",floor:"Math.floor",hypot:"Math.hypot",log:"Math.log",max:"Math.max",min:"Math.min",pow:"Math.pow",random:"Math.random",round:"Math.round",sin:"Math.sin",sqrt:"Math.sqrt",tan:"Math.tan",clamp:function(t){t.length<3&&E("Missing arguments to clamp function."),t.length>3&&E("Too many arguments to clamp function.");const n=t.map(e);return"Math.max("+n[1]+", Math.min("+n[2]+","+n[0]+"))"},now:"Date.now",utc:"Date.UTC",datetime:n,date:t("getDate",n,0),day:t("getDay",n,0),year:t("getFullYear",n,0),month:t("getMonth",n,0),hours:t("getHours",n,0),minutes:t("getMinutes",n,0),seconds:t("getSeconds",n,0),milliseconds:t("getMilliseconds",n,0),time:t("getTime",n,0),timezoneoffset:t("getTimezoneOffset",n,0),utcdate:t("getUTCDate",n,0),utcday:t("getUTCDay",n,0),utcyear:t("getUTCFullYear",n,0),utcmonth:t("getUTCMonth",n,0),utchours:t("getUTCHours",n,0),utcminutes:t("getUTCMinutes",n,0),utcseconds:t("getUTCSeconds",n,0),utcmilliseconds:t("getUTCMilliseconds",n,0),length:t("length",null,-1),parseFloat:"parseFloat",parseInt:"parseInt",upper:t("toUpperCase",r,0),lower:t("toLowerCase",r,0),substring:t("substring",r),split:t("split",r),trim:t("trim",r,0),regexp:i,test:t("test",i),if:function(t){t.length<3&&E("Missing arguments to if function."),t.length>3&&E("Too many arguments to if function.");const n=t.map(e);return"("+n[0]+"?"+n[1]+":"+n[2]+")"}}}function Fv(e){const t=(e=e||{}).allowed?Ze(e.allowed):{},n=e.forbidden?Ze(e.forbidden):{},r=e.constants||Ev,i=(e.functions||Cv)(d),a=e.globalvar,o=e.fieldvar,s=me(a)?a:e=>`${a}["${e}"]`;let u={},l={},c=0;function d(e){if(Ne(e))return e;const t=f[e.type];return null==t&&E("Unsupported type: "+e.type),t(e)}const f={Literal:e=>e.raw,Identifier:e=>{const i=e.name;return c>0?i:Fe(n,i)?E("Illegal identifier: "+i):Fe(r,i)?r[i]:Fe(t,i)?i:(u[i]=1,s(i))},MemberExpression:e=>{const t=!e.computed,n=d(e.object);t&&(c+=1);const r=d(e.property);return n===o&&(l[function(e){const t=e&&e.length-1;return t&&('"'===e[0]&&'"'===e[t]||"'"===e[0]&&"'"===e[t])?e.slice(1,-1):e}(r)]=1),t&&(c-=1),n+(t?"."+r:"["+r+"]")},CallExpression:e=>{"Identifier"!==e.callee.type&&E("Illegal callee type: "+e.callee.type);const t=e.callee.name,n=e.arguments,r=Fe(i,t)&&i[t];return r||E("Unrecognized function: "+t),me(r)?r(n):r+"("+n.map(d).join(",")+")"},ArrayExpression:e=>"["+e.elements.map(d).join(",")+"]",BinaryExpression:e=>"("+d(e.left)+" "+e.operator+" "+d(e.right)+")",UnaryExpression:e=>"("+e.operator+d(e.argument)+")",ConditionalExpression:e=>"("+d(e.test)+"?"+d(e.consequent)+":"+d(e.alternate)+")",LogicalExpression:e=>"("+d(e.left)+e.operator+d(e.right)+")",ObjectExpression:e=>"{"+e.properties.map(d).join(",")+"}",Property:e=>{c+=1;const t=d(e.key);return c-=1,t+":"+d(e.value)}};function h(e){const t={code:d(e),globals:Object.keys(u),fields:Object.keys(l)};return u={},l={},t}return h.functions=i,h.constants=r,h}const Mv="intersect",Sv="union",Bv="vlMulti",Ov="vlPoint",zv="or",Rv="and",$v="_vgsid_",qv=F($v),Lv="E",Tv="R",Nv="R-E",Pv="R-LE",Uv="R-RE",jv="index:unit";function Iv(e,t){for(var n,r,i=t.fields,a=t.values,o=i.length,s=0;st.indexOf(e)>=0)):t},R_union:function(e,t){var n=X(t[0]),r=X(t[1]);return n>r&&(n=t[1],r=t[0]),e.length?(e[0]>n&&(e[0]=n),e[1]r&&(n=t[1],r=t[0]),e.length?rr&&(e[1]=r),e):[n,r]}};const Yv=":",Xv="@";function Jv(e,t,n,r){t[0].type!==Ng&&E("First argument to selection functions must be a string literal.");const i=t[0].value,a=t.length>=2&&Y(t).value,o="unit",s=Xv+o,u=Yv+i;a!==Mv||Fe(r,s)||(r[s]=n.getData(i).indataRef(n,o)),Fe(r,u)||(r[u]=n.getData(i).tuplesRef())}function Qv(e){const t=this.context.data[e];return t?t.values.value:[]}const Kv=e=>function(t,n){return this.context.dataflow.locale()[e](n)(t)},Zv=Kv("format"),eb=Kv("timeFormat"),tb=Kv("utcFormat"),nb=Kv("timeParse"),rb=Kv("utcParse"),ib=new Date(2e3,0,1);function ab(e,t,n){return Number.isInteger(e)&&Number.isInteger(t)?(ib.setYear(2e3),ib.setMonth(e),ib.setDate(t),eb.call(this,ib,n)):""}const ob=":",sb="@",ub="%",lb="$";function cb(e,t,n,r){t[0].type!==Ng&&E("First argument to data functions must be a string literal.");const i=t[0].value,a=ob+i;if(!Fe(a,r))try{r[a]=n.getData(i).tuplesRef()}catch(e){}}function db(e,t,n,r){if(t[0].type===Ng)fb(n,r,t[0].value);else for(e in n.scales)fb(n,r,e)}function fb(e,t,n){const r=ub+n;if(!Fe(t,r))try{t[r]=e.scaleRef(n)}catch(e){}}function hb(e,t){if(me(e))return e;if(Ne(e)){const n=t.scales[e];return n&&function(e){return e&&!0===e[Po]}(n.value)?n.value:void 0}}function pb(e,t,n){t.__bandwidth=e=>e&&e.bandwidth?e.bandwidth():0,n._bandwidth=db,n._range=db,n._scale=db;const r=t=>"_["+(t.type===Ng?Ye(ub+t.value):Ye(ub)+"+"+e(t))+"]";return{_bandwidth:e=>`this.__bandwidth(${r(e[0])})`,_range:e=>`${r(e[0])}.range()`,_scale:t=>`${r(t[0])}(${e(t[1])})`}}function mb(e,t){return function(n,r,i){if(n){const t=hb(n,(i||this).context);return t&&t.path[e](r)}return t(r)}}const gb=mb("area",d.geoArea),yb=mb("bounds",d.geoBounds),vb=mb("centroid",d.geoCentroid);function bb(e,t,n){try{e[t].apply(e,["EXPRESSION"].concat([].slice.call(n)))}catch(t){e.warn(t)}return n[n.length-1]}function xb(e){const t=e/255;return t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4)}function _b(e){const t=f.rgb(e);return.2126*xb(t.r)+.7152*xb(t.g)+.0722*xb(t.b)}function Ab(e,t){return e===t||e!=e&&t!=t||(j(e)?!(!j(t)||e.length!==t.length)&&function(e,t){for(let n=0,r=e.length;nkb(e,t)}const Db={};function Eb(e){return j(e)||ArrayBuffer.isView(e)?e:null}function Cb(e){return Eb(e)||(Ne(e)?e:null)}const Fb=e=>e.data;function Mb(e,t){const n=Qv.call(t,e);return n.root&&n.root.lookup||{}}const Sb=()=>"undefined"!=typeof window&&window||null;function Bb(e,t,n){if(!e)return[];const[r,i]=e,a=(new Bu).set(r[0],r[1],i[0],i[1]);return lf(n||this.context.dataflow.scenegraph().root,a,function(e){let t=null;if(e){const n=he(e.marktype),r=he(e.markname);t=e=>(!n.length||n.some((t=>e.marktype===t)))&&(!r.length||r.some((t=>e.name===t)))}return t}(t))}const Ob={random:()=>e.random(),cumulativeNormal:ei,cumulativeLogNormal:oi,cumulativeUniform:fi,densityNormal:Zr,densityLogNormal:ai,densityUniform:di,quantileNormal:ti,quantileLogNormal:si,quantileUniform:hi,sampleNormal:Kr,sampleLogNormal:ii,sampleUniform:ci,isArray:j,isBoolean:Re,isDate:$e,isDefined:e=>void 0!==e,isNumber:Le,isObject:I,isRegExp:Te,isString:Ne,isTuple:ir,isValid:e=>null!=e&&e==e,toBoolean:Xe,toDate:e=>Qe(e),toNumber:X,toString:Ke,indexof:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r1?t-1:0),r=1;r1?t-1:0),r=1;r1?t-1:0),r=1;rDe(e),inScope:function(e){const t=this.context.group;let n=!1;if(t)for(;e;){if(e===t){n=!0;break}e=e.mark.group}return n},intersect:Bb,clampRange:pe,pinchDistance:function(e){const t=e.touches,n=t[0].clientX-t[1].clientX,r=t[0].clientY-t[1].clientY;return Math.hypot(n,r)},pinchAngle:function(e){const t=e.touches;return Math.atan2(t[0].clientY-t[1].clientY,t[0].clientX-t[1].clientX)},screen:function(){const e=Sb();return e?e.screen:{}},containerSize:function(){const e=this.context.dataflow,t=e.container&&e.container();return t?[t.clientWidth,t.clientHeight]:[void 0,void 0]},windowSize:function(){const e=Sb();return e?[e.innerWidth,e.innerHeight]:[void 0,void 0]},bandspace:function(e,t,n){return ho(e||0,t||0,n||0)},setdata:function(e,t){const n=this.context.dataflow,r=this.context.data[e].input;return n.pulse(r,n.changeset().remove(z).insert(t)),1},pathShape:function(e){let t=null;return function(n){return n?eu(n,t=t||js(e)):e}},panLinear:ne,panLog:re,panPow:ie,panSymlog:ae,zoomLinear:se,zoomLog:ue,zoomPow:le,zoomSymlog:ce,encode:function(e,t,n){if(e){const n=this.context.dataflow,r=e.mark.source;n.pulse(r,n.changeset().encode(e,t))}return void 0!==n?n:e},modify:function(e,t,n,r,i,a){const o=this.context.dataflow,s=this.context.data[e],u=s.input,l=o.stamp();let c,d,f=s.changes;if(!1===o._trigger||!(u.value.length||t||r))return 0;if((!f||f.stamp{s.modified=!0,o.pulse(u,f).run()}),!0,1)),n&&(c=!0===n?z:j(n)||ir(n)?n:wb(n),f.remove(c)),t&&f.insert(t),r&&(c=wb(r),u.value.some(c)?f.remove(c):f.insert(r)),i)for(d in a)f.modify(i,d,a[d]);return 1},lassoAppend:function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5;const i=(e=he(e))[e.length-1];return void 0===i||Math.hypot(i[0]-t,i[1]-n)>r?[...e,[t,n]]:e},lassoPath:function(e){return he(e).reduce(((t,n,r)=>{let[i,a]=n;return t+(0==r?`M ${i},${a} `:r===e.length-1?" Z":`L ${i},${a} `)}),"")},intersectLasso:function(e,t,n){const{x:r,y:i,mark:a}=n,o=(new Bu).set(Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER,Number.MIN_SAFE_INTEGER);for(const[e,n]of t)eo.x2&&(o.x2=e),no.y2&&(o.y2=n);return o.translate(r,i),Bb([[o.x1,o.y1],[o.x2,o.y2]],e,a).filter((e=>function(e,t,n){let r=0;for(let i=0,a=n.length-1;it!=s>t&&e<(o-u)*(t-l)/(s-l)+u&&r++}return 1&r}(e.x,e.y,t)))}},zb=["view","item","group","xy","x","y"],Rb="event.vega.",$b="this.",qb={},Lb={forbidden:["_"],allowed:["datum","event","item"],fieldvar:"datum",globalvar:e=>`_[${Ye(lb+e)}]`,functions:function(e){const t=Cv(e);zb.forEach((e=>t[e]=Rb+e));for(const e in Ob)t[e]=$b+e;return we(t,pb(e,Ob,qb)),t},constants:Ev,visitors:qb},Tb=Fv(Lb);function Nb(e,t,n){return 1===arguments.length?Ob[e]:(Ob[e]=t,n&&(qb[e]=n),Tb&&(Tb.functions[e]=$b+e),this)}function Pb(e,t){const n={};let r;try{r=Dv(e=Ne(e)?e:Ye(e)+"")}catch(t){E("Expression parse error: "+e)}r.visit((e=>{if(e.type!==Ig)return;const r=e.callee.name,i=Lb.visitors[r];i&&i(r,e.arguments,t,n)}));const i=Tb(r);return i.globals.forEach((e=>{const r=lb+e;!Fe(n,r)&&t.getSignal(e)&&(n[r]=t.signalRef(e))})),{$expr:we({code:i.code},t.options.ast?{ast:r}:null),$fields:i.fields,$params:n}}Nb("bandwidth",(function(e,t){const n=hb(e,(t||this).context);return n&&n.bandwidth?n.bandwidth():0}),db),Nb("copy",(function(e,t){const n=hb(e,(t||this).context);return n?n.copy():void 0}),db),Nb("domain",(function(e,t){const n=hb(e,(t||this).context);return n?n.domain():[]}),db),Nb("range",(function(e,t){const n=hb(e,(t||this).context);return n&&n.range?n.range():[]}),db),Nb("invert",(function(e,t,n){const r=hb(e,(n||this).context);return r?j(t)?(r.invertRange||r.invert)(t):(r.invert||r.invertExtent)(t):void 0}),db),Nb("scale",(function(e,t,n){const r=hb(e,(n||this).context);return r?r(t):void 0}),db),Nb("gradient",(function(e,t,n,r,i){e=hb(e,(i||this).context);const a=Rs(t,n);let o=e.domain(),s=o[0],u=Y(o),l=S;return u-s?l=ts(e,s,u):e=(e.interpolator?jo("sequential")().interpolator(e.interpolator()):jo("linear")().interpolate(e.interpolate()).range(e.range())).domain([s=0,u=1]),e.ticks&&(o=e.ticks(+r||15),s!==o[0]&&o.unshift(s),u!==Y(o)&&o.push(u)),o.forEach((t=>a.stop(l(t),e(t)))),a}),db),Nb("geoArea",gb,db),Nb("geoBounds",yb,db),Nb("geoCentroid",vb,db),Nb("geoShape",(function(e,t,n){const r=hb(e,(n||this).context);return function(e){return r?r.path.context(e)(t):""}}),db),Nb("indata",(function(e,t,n){const r=this.context.data[e]["index:"+t],i=r?r.value.get(n):void 0;return i?i.count:i}),(function(e,t,n,r){t[0].type!==Ng&&E("First argument to indata must be a string literal."),t[1].type!==Ng&&E("Second argument to indata must be a string literal.");const i=t[0].value,a=t[1].value,o=sb+a;Fe(o,r)||(r[o]=n.getData(i).indataRef(n,a))})),Nb("data",Qv,cb),Nb("treePath",(function(e,t,n){const r=Mb(e,this),i=r[t],a=r[n];return i&&a?i.path(a).map(Fb):void 0}),cb),Nb("treeAncestors",(function(e,t){const n=Mb(e,this)[t];return n?n.ancestors().map(Fb):void 0}),cb),Nb("vlSelectionTest",(function(e,t,n){for(var r,i,a,o,s,u=this.context.data[e],l=u?u.values.value:[],c=u?u[jv]&&u[jv].value:void 0,d=n===Mv,f=l.length,h=0;h(e[a[n].field]=t,e)),{}))}else u=$v,l=qv(i),(d=(c=v[u]||(v[u]={}))[s]||(c[s]=[])).push(l),n&&(d=b[s]||(b[s]=[])).push({[$v]:l});if(t=t||Sv,v[$v]?v[$v]=Vv[`${$v}_${t}`](...Object.values(v[$v])):Object.keys(v).forEach((e=>{v[e]=Object.keys(v[e]).map((t=>v[e][t])).reduce(((n,r)=>void 0===n?r:Vv[`${x[e]}_${t}`](n,r)))})),y=Object.keys(b),n&&y.length){v[r?Ov:Bv]=t===Sv?{[zv]:y.reduce(((e,t)=>(e.push(...b[t]),e)),[])}:{[Rv]:y.map((e=>({[zv]:b[e]})))}}return v}),Jv),Nb("vlSelectionTuples",(function(e,t){return e.map((e=>we(t.fields?{values:t.fields.map((t=>(t.getter||(t.getter=F(t.field)))(e.datum)))}:{[$v]:qv(e.datum)},t)))}));const Ub=Ze(["rule"]),jb=Ze(["group","image","rect"]);function Ib(e){return(e+"").toLowerCase()}function Wb(e,t,n){n.endsWith(";")||(n="return("+n+");");const r=Function(...t.concat(n));return e&&e.functions?r.bind(e.functions):r}var Gb={operator:(e,t)=>Wb(e,["_"],t.code),parameter:(e,t)=>Wb(e,["datum","_"],t.code),event:(e,t)=>Wb(e,["event"],t.code),handler:(e,t)=>Wb(e,["_","event"],`var datum=event.item&&event.item.datum;return ${t.code};`),encode:(e,t)=>{const{marktype:n,channels:r}=t;let i="var o=item,datum=o.datum,m=0,$;";for(const e in r){const t="o["+Ye(e)+"]";i+=`$=${r[e].code};if(${t}!==$)${t}=$,m=1;`}return i+=function(e,t){let n="";return Ub[t]||(e.x2&&(e.x?(jb[t]&&(n+="if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;"),n+="o.width=o.x2-o.x;"):n+="o.x=o.x2-(o.width||0);"),e.xc&&(n+="o.x=o.xc-(o.width||0)/2;"),e.y2&&(e.y?(jb[t]&&(n+="if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;"),n+="o.height=o.y2-o.y;"):n+="o.y=o.y2-(o.height||0);"),e.yc&&(n+="o.y=o.yc-(o.height||0)/2;")),n}(r,n),i+="return m;",Wb(e,["item","_"],i)},codegen:{get(e){const t=`[${e.map(Ye).join("][")}]`,n=Function("_",`return _${t};`);return n.path=t,n},comparator(e,t){let n;const r=Function("a","b","var u, v; return "+e.map(((e,r)=>{const i=t[r];let a,o;return e.path?(a=`a${e.path}`,o=`b${e.path}`):((n=n||{})["f"+r]=e,a=`this.f${r}(a)`,o=`this.f${r}(b)`),function(e,t,n,r){return`((u = ${e}) < (v = ${t}) || u == null) && v != null ? ${n}\n : (u > v || v == null) && u != null ? ${r}\n : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? ${n}\n : v !== v && u === u ? ${r} : `}(a,o,-i,i)})).join("")+"0;");return n?r.bind(n):r}}};function Hb(e,t,n){if(!e||!I(e))return e;for(let r,i=0,a=Vb.length;ie&&e.$tupleid?ar:e));return t.fn[n]||(t.fn[n]=ye(r,e.$order,t.expr.codegen))}},{key:"$context",parse:function(e,t){return t}},{key:"$subflow",parse:function(e,t){const n=e.$subflow;return function(e,r,i){const a=t.fork().parse(n),o=a.get(n.operators[0].id),s=a.signals.parent;return s&&s.set(i),o.detachSubflow=()=>t.detach(a),o}}},{key:"$tupleid",parse:function(){return ar}}];const Yb={skip:!0};function Xb(e,t,n,r){return new Jb(e,t,n,r)}function Jb(e,t,n,r){this.dataflow=e,this.transforms=t,this.events=e.events.bind(e),this.expr=r||Gb,this.signals={},this.scales={},this.nodes={},this.data={},this.fn={},n&&(this.functions=Object.create(n),this.functions.context=this)}function Qb(e){this.dataflow=e.dataflow,this.transforms=e.transforms,this.events=e.events,this.expr=e.expr,this.signals=Object.create(e.signals),this.scales=Object.create(e.scales),this.nodes=Object.create(e.nodes),this.data=Object.create(e.data),this.fn=Object.create(e.fn),e.functions&&(this.functions=Object.create(e.functions),this.functions.context=this)}function Kb(e,t){e&&(null==t?e.removeAttribute("aria-label"):e.setAttribute("aria-label",t))}Jb.prototype=Qb.prototype={fork(){const e=new Qb(this);return(this.subcontext||(this.subcontext=[])).push(e),e},detach(e){this.subcontext=this.subcontext.filter((t=>t!==e));const t=Object.keys(e.nodes);for(const n of t)e.nodes[n]._targets=null;for(const n of t)e.nodes[n].detach();e.nodes=null},get(e){return this.nodes[e]},set(e,t){return this.nodes[e]=t},add(e,t){const n=this,r=n.dataflow,i=e.value;if(n.set(e.id,t),function(e){return"collect"===Ib(e)}(e.type)&&i&&(i.$ingest?r.ingest(t,i.$ingest,i.$format):i.$request?r.preload(t,i.$request,i.$format):r.pulse(t,r.changeset().insert(i))),e.root&&(n.root=t),e.parent){let i=n.get(e.parent.$ref);i?(r.connect(i,[t]),t.targets().add(i)):(n.unresolved=n.unresolved||[]).push((()=>{i=n.get(e.parent.$ref),r.connect(i,[t]),t.targets().add(i)}))}if(e.signal&&(n.signals[e.signal]=t),e.scale&&(n.scales[e.scale]=t),e.data)for(const r in e.data){const i=n.data[r]||(n.data[r]={});e.data[r].forEach((e=>i[e]=t))}},resolve(){return(this.unresolved||[]).forEach((e=>e())),delete this.unresolved,this},operator(e,t){this.add(e,this.dataflow.add(e.value,t))},transform(e,t){this.add(e,this.dataflow.add(this.transforms[Ib(t)]))},stream(e,t){this.set(e.id,t)},update(e,t,n,r,i){this.dataflow.on(t,n,r,i,e.options)},operatorExpression(e){return this.expr.operator(this,e)},parameterExpression(e){return this.expr.parameter(this,e)},eventExpression(e){return this.expr.event(this,e)},handlerExpression(e){return this.expr.handler(this,e)},encodeExpression(e){return this.expr.encode(this,e)},parse:function(e){const t=this,n=e.operators||[];return e.background&&(t.background=e.background),e.eventConfig&&(t.eventConfig=e.eventConfig),e.locale&&(t.locale=e.locale),n.forEach((e=>t.parseOperator(e))),n.forEach((e=>t.parseOperatorParameters(e))),(e.streams||[]).forEach((e=>t.parseStream(e))),(e.updates||[]).forEach((e=>t.parseUpdate(e))),t.resolve()},parseOperator:function(e){const t=this;!function(e){return"operator"===Ib(e)}(e.type)&&e.type?t.transform(e,e.type):t.operator(e,e.update?t.operatorExpression(e.update):null)},parseOperatorParameters:function(e){const t=this;if(e.params){const n=t.get(e.id);n||E("Invalid operator id: "+e.id),t.dataflow.connect(n,n.parameters(t.parseParameters(e.params),e.react,e.initonly))}},parseParameters:function(e,t){t=t||{};const n=this;for(const r in e){const i=e[r];t[r]=j(i)?i.map((e=>Hb(e,n,t))):Hb(i,n,t)}return t},parseStream:function(e){var t,n=this,r=null!=e.filter?n.eventExpression(e.filter):void 0,i=null!=e.stream?n.get(e.stream):void 0;e.source?i=n.events(e.source,e.type,r):e.merge&&(i=(t=e.merge.map((e=>n.get(e))))[0].merge.apply(t[0],t.slice(1))),e.between&&(t=e.between.map((e=>n.get(e))),i=i.between(t[0],t[1])),e.filter&&(i=i.filter(r)),null!=e.throttle&&(i=i.throttle(+e.throttle)),null!=e.debounce&&(i=i.debounce(+e.debounce)),null==i&&E("Invalid stream definition: "+JSON.stringify(e)),e.consume&&i.consume(!0),n.stream(e,i)},parseUpdate:function(e){var t,n=this,r=I(r=e.source)?r.$ref:r,i=n.get(r),a=e.update,o=void 0;i||E("Source not defined: "+e.source),t=e.target&&e.target.$expr?n.eventExpression(e.target.$expr):n.get(e.target),a&&a.$expr&&(a.$params&&(o=n.parseParameters(a.$params)),a=n.handlerExpression(a.$expr)),n.update(e,i,t,a,o)},getState:function(e){var t=this,n={};if(e.signals){var r=n.signals={};Object.keys(t.signals).forEach((n=>{const i=t.signals[n];e.signals(n,i)&&(r[n]=i.value)}))}if(e.data){var i=n.data={};Object.keys(t.data).forEach((n=>{const r=t.data[n];e.data(n,r)&&(i[n]=r.input.value)}))}return t.subcontext&&!1!==e.recurse&&(n.subcontext=t.subcontext.map((t=>t.getState(e)))),n},setState:function(e){var t=this,n=t.dataflow,r=e.data,i=e.signals;Object.keys(i||{}).forEach((e=>{n.update(t.signals[e],i[e],Yb)})),Object.keys(r||{}).forEach((e=>{n.pulse(t.data[e].input,n.changeset().remove(z).insert(r[e]))})),(e.subcontext||[]).forEach(((e,n)=>{const r=t.subcontext[n];r&&r.setState(e)}))}};const Zb="default";function ex(e,t){const n=e.globalCursor()?"undefined"!=typeof document&&document.body:e.container();if(n)return null==t?n.style.removeProperty("cursor"):n.style.cursor=t}function tx(e,t){var n=e._runtime.data;return Fe(n,t)||E("Unrecognized data set: "+t),n[t]}function nx(e,t){fr(t)||E("Second argument to changes must be a changeset.");const n=tx(this,e);return n.modified=!0,this.pulse(n.input,t)}function rx(e){var t=e.padding();return Math.max(0,e._viewWidth+t.left+t.right)}function ix(e){var t=e.padding();return Math.max(0,e._viewHeight+t.top+t.bottom)}function ax(e){var t=e.padding(),n=e._origin;return[t.left+n[0],t.top+n[1]]}function ox(e,t,n){var r,i,a=e._renderer,o=a&&a.canvas();return o&&(i=ax(e),(r=Ic(t.changedTouches?t.changedTouches[0]:t,o))[0]-=i[0],r[1]-=i[1]),t.dataflow=e,t.item=n,t.vega=function(e,t,n){const r=t?"group"===t.mark.marktype?t:t.mark.group:null;function i(e){var n,i=r;if(e)for(n=t;n;n=n.mark.group)if(n.mark.name===e){i=n;break}return i&&i.mark&&i.mark.interactive?i:{}}function a(e){if(!e)return n;Ne(e)&&(e=i(e));const t=n.slice();for(;e;)t[0]-=e.x||0,t[1]-=e.y||0,e=e.mark&&e.mark.group;return t}return{view:Ae(e),item:Ae(t||{}),group:i,xy:a,x:e=>a(e)[0],y:e=>a(e)[1]}}(e,n,r),t}const sx="view",ux="timer",lx="window",cx={trap:!1};function dx(e,t,n,r){e._eventListeners.push({type:n,sources:he(t),handler:r})}function fx(e,t,n){const r=e._eventConfig&&e._eventConfig[t];return!(!1===r||I(r)&&!r[n])||(e.warn(`Blocked ${t} ${n} event listener.`),!1)}function hx(e){return e.item}function px(e){return e.item.mark.source}function mx(e){return function(t,n){return n.vega.view().changeset().encode(n.item,e)}}function gx(e,t,n){const r=document.createElement(e);for(const e in t)r.setAttribute(e,t[e]);return null!=n&&(r.textContent=n),r}const yx="vega-bind",vx="vega-bind-name",bx="vega-bind-radio";function xx(e,t,n,r){const i=n.event||"input",a=()=>e.update(t.value);r.signal(n.signal,t.value),t.addEventListener(i,a),dx(r,t,i,a),e.set=e=>{t.value=e,t.dispatchEvent(function(e){return"undefined"!=typeof Event?new Event(e):{type:e}}(i))}}function _x(e,t,n,r){const i=r.signal(n.signal),a=gx("div",{class:yx}),o="radio"===n.input?a:a.appendChild(gx("label"));o.appendChild(gx("span",{class:vx},n.name||n.signal)),t.appendChild(a);let s=Ax;switch(n.input){case"checkbox":s=kx;break;case"select":s=wx;break;case"radio":s=Dx;break;case"range":s=Ex}s(e,o,n,i)}function Ax(e,t,n,r){const i=gx("input");for(const e in n)"signal"!==e&&"element"!==e&&i.setAttribute("input"===e?"type":e,n[e]);i.setAttribute("name",n.signal),i.value=r,t.appendChild(i),i.addEventListener("input",(()=>e.update(i.value))),e.elements=[i],e.set=e=>i.value=e}function kx(e,t,n,r){const i={type:"checkbox",name:n.signal};r&&(i.checked=!0);const a=gx("input",i);t.appendChild(a),a.addEventListener("change",(()=>e.update(a.checked))),e.elements=[a],e.set=e=>a.checked=!!e||null}function wx(e,t,n,r){const i=gx("select",{name:n.signal}),a=n.labels||[];n.options.forEach(((e,t)=>{const n={value:e};Cx(e,r)&&(n.selected=!0),i.appendChild(gx("option",n,(a[t]||e)+""))})),t.appendChild(i),i.addEventListener("change",(()=>{e.update(n.options[i.selectedIndex])})),e.elements=[i],e.set=e=>{for(let t=0,r=n.options.length;t{const s={type:"radio",name:n.signal,value:t};Cx(t,r)&&(s.checked=!0);const u=gx("input",s);u.addEventListener("change",(()=>e.update(t)));const l=gx("label",{},(a[o]||t)+"");return l.prepend(u),i.appendChild(l),u})),e.set=t=>{const n=e.elements,r=n.length;for(let e=0;e{l.textContent=u.value,e.update(+u.value)};u.addEventListener("input",c),u.addEventListener("change",c),e.elements=[u],e.set=e=>{u.value=e,l.textContent=e}}function Cx(e,t){return e===t||e+""==t+""}function Fx(e,t,n,r,i,a){return(t=t||new r(e.loader())).initialize(n,rx(e),ix(e),ax(e),i,a).background(e.background())}function Mx(e,t){return t?function(){try{t.apply(this,arguments)}catch(t){e.error(t)}}:null}function Sx(e,t,n){if("string"==typeof t){if("undefined"==typeof document)return e.error("DOM document instance not found."),null;if(!(t=document.querySelector(t)))return e.error("Signal bind element not found: "+t),null}if(t&&n)try{t.textContent=""}catch(n){t=null,e.error(n)}return t}const Bx=e=>+e||0,Ox=e=>({top:e,bottom:e,left:e,right:e});function zx(e){return I(e)?{top:Bx(e.top),bottom:Bx(e.bottom),left:Bx(e.left),right:Bx(e.right)}:Ox(Bx(e))}async function Rx(e,t,n,r){const i=uf(t),a=i&&i.headless;return a||E("Unrecognized renderer type: "+t),await e.runAsync(),Fx(e,null,null,a,n,r).renderAsync(e._scenegraph.root)}var $x="width",qx="height",Lx="padding",Tx={skip:!0};function Nx(e,t){var n=e.autosize(),r=e.padding();return t-(n&&n.contains===Lx?r.left+r.right:0)}function Px(e,t){var n=e.autosize(),r=e.padding();return t-(n&&n.contains===Lx?r.top+r.bottom:0)}function Ux(e,t){return t.modified&&j(t.input.value)&&e.indexOf("_:vega:_")}function jx(e,t){return!("parent"===e||t instanceof Nr.proxy)}function Ix(e,t,n,r){const i=e.element();i&&i.setAttribute("title",function(e){return null==e?"":j(e)?Wx(e):I(e)&&!$e(e)?(t=e,Object.keys(t).map((e=>{const n=t[e];return e+": "+(j(n)?Wx(n):Gx(n))})).join("\n")):e+"";var t}(r))}function Wx(e){return"["+e.map(Gx).join(", ")+"]"}function Gx(e){return j(e)?"[…]":I(e)&&!$e(e)?"{…}":e}function Hx(e,t){const n=this;if(t=t||{},qr.call(n),t.loader&&n.loader(t.loader),t.logger&&n.logger(t.logger),null!=t.logLevel&&n.logLevel(t.logLevel),t.locale||e.locale){const r=we({},e.locale,t.locale);n.locale(Dn(r.number,r.time))}n._el=null,n._elBind=null,n._renderType=t.renderer||of.Canvas,n._scenegraph=new qc;const r=n._scenegraph.root;n._renderer=null,n._tooltip=t.tooltip||Ix,n._redraw=!0,n._handler=(new ud).scene(r),n._globalCursor=!1,n._preventDefault=!1,n._timers=[],n._eventListeners=[],n._resizeListeners=[],n._eventConfig=function(e){const t=we({defaults:{}},e),n=(e,t)=>{t.forEach((t=>{j(e[t])&&(e[t]=Ze(e[t]))}))};return n(t.defaults,["prevent","allow"]),n(t,["view","window","selector"]),t}(e.eventConfig),n.globalCursor(n._eventConfig.globalCursor);const i=function(e,t,n){return Xb(e,Nr,Ob,n).parse(t)}(n,e,t.expr);n._runtime=i,n._signals=i.signals,n._bind=(e.bindings||[]).map((e=>({state:null,param:we({},e)}))),i.root&&i.root.set(r),r.source=i.data.root.input,n.pulse(i.data.root.input,n.changeset().insert(r.items)),n._width=n.width(),n._height=n.height(),n._viewWidth=Nx(n,n._width),n._viewHeight=Px(n,n._height),n._origin=[0,0],n._resize=0,n._autosize=1,function(e){var t=e._signals,n=t[$x],r=t[qx],i=t[Lx];function a(){e._autosize=e._resize=1}e._resizeWidth=e.add(null,(t=>{e._width=t.size,e._viewWidth=Nx(e,t.size),a()}),{size:n}),e._resizeHeight=e.add(null,(t=>{e._height=t.size,e._viewHeight=Px(e,t.size),a()}),{size:r});const o=e.add(null,a,{pad:i});e._resizeWidth.rank=n.rank+1,e._resizeHeight.rank=r.rank+1,o.rank=i.rank+1}(n),function(e){e.add(null,(t=>(e._background=t.bg,e._resize=1,t.bg)),{bg:e._signals.background})}(n),function(e){const t=e._signals.cursor||(e._signals.cursor=e.add({user:Zb,item:null}));e.on(e.events("view","mousemove"),t,((e,n)=>{const r=t.value,i=r?Ne(r)?r:r.user:Zb,a=n.item&&n.item.cursor||null;return r&&i===r.user&&a==r.item?r:{user:i,item:a}})),e.add(null,(function(t){let n=t.cursor,r=this.value;return Ne(n)||(r=n.item,n=n.user),ex(e,n&&n!==Zb?n:r||n),r}),{cursor:t})}(n),n.description(e.description),t.hover&&n.hover(),t.container&&n.initialize(t.container,t.bind)}function Vx(e,t){return Fe(e._signals,t)?e._signals[t]:E("Unrecognized signal name: "+Ye(t))}function Yx(e,t){const n=(e._targets||[]).filter((e=>e._update&&e._update.handler===t));return n.length?n[0]:null}function Xx(e,t,n,r){let i=Yx(n,r);return i||(i=Mx(e,(()=>r(t,n.value))),i.handler=r,e.on(n,null,i)),e}function Jx(e,t,n){const r=Yx(t,n);return r&&t._targets.remove(r),e}Oe(Hx,qr,{async evaluate(e,t,n){if(await qr.prototype.evaluate.call(this,e,t),this._redraw||this._resize)try{this._renderer&&(this._resize&&(this._resize=0,function(e){var t=ax(e),n=rx(e),r=ix(e);e._renderer.background(e.background()),e._renderer.resize(n,r,t),e._handler.origin(t),e._resizeListeners.forEach((t=>{try{t(n,r)}catch(t){e.error(t)}}))}(this)),await this._renderer.renderAsync(this._scenegraph.root)),this._redraw=!1}catch(e){this.error(e)}return n&&tr(this,n),this},dirty(e){this._redraw=!0,this._renderer&&this._renderer.dirty(e)},description(e){if(arguments.length){const t=null!=e?e+"":null;return t!==this._desc&&Kb(this._el,this._desc=t),this}return this._desc},container(){return this._el},scenegraph(){return this._scenegraph},origin(){return this._origin.slice()},signal(e,t,n){const r=Vx(this,e);return 1===arguments.length?r.value:this.update(r,t,n)},width(e){return arguments.length?this.signal("width",e):this.signal("width")},height(e){return arguments.length?this.signal("height",e):this.signal("height")},padding(e){return arguments.length?this.signal("padding",zx(e)):zx(this.signal("padding"))},autosize(e){return arguments.length?this.signal("autosize",e):this.signal("autosize")},background(e){return arguments.length?this.signal("background",e):this.signal("background")},renderer(e){return arguments.length?(uf(e)||E("Unrecognized renderer type: "+e),e!==this._renderType&&(this._renderType=e,this._resetRenderer()),this):this._renderType},tooltip(e){return arguments.length?(e!==this._tooltip&&(this._tooltip=e,this._resetRenderer()),this):this._tooltip},loader(e){return arguments.length?(e!==this._loader&&(qr.prototype.loader.call(this,e),this._resetRenderer()),this):this._loader},resize(){return this._autosize=1,this.touch(Vx(this,"autosize"))},_resetRenderer(){this._renderer&&(this._renderer=null,this.initialize(this._el,this._elBind))},_resizeView:function(e,t,n,r,i,a){this.runAfter((o=>{let s=0;o._autosize=0,o.width()!==n&&(s=1,o.signal($x,n,Tx),o._resizeWidth.skip(!0)),o.height()!==r&&(s=1,o.signal(qx,r,Tx),o._resizeHeight.skip(!0)),o._viewWidth!==e&&(o._resize=1,o._viewWidth=e),o._viewHeight!==t&&(o._resize=1,o._viewHeight=t),o._origin[0]===i[0]&&o._origin[1]===i[1]||(o._resize=1,o._origin=i),s&&o.run("enter"),a&&o.runAfter((e=>e.resize()))}),!1,1)},addEventListener(e,t,n){let r=t;return n&&!1===n.trap||(r=Mx(this,t),r.raw=t),this._handler.on(e,r),this},removeEventListener(e,t){for(var n,r,i=this._handler.handlers(e),a=i.length;--a>=0;)if(r=i[a].type,n=i[a].handler,e===r&&(t===n||t===n.raw)){this._handler.off(r,n);break}return this},addResizeListener(e){const t=this._resizeListeners;return t.indexOf(e)<0&&t.push(e),this},removeResizeListener(e){var t=this._resizeListeners,n=t.indexOf(e);return n>=0&&t.splice(n,1),this},addSignalListener(e,t){return Xx(this,e,Vx(this,e),t)},removeSignalListener(e,t){return Jx(this,Vx(this,e),t)},addDataListener(e,t){return Xx(this,e,tx(this,e).values,t)},removeDataListener(e,t){return Jx(this,tx(this,e).values,t)},globalCursor(e){if(arguments.length){if(this._globalCursor!==!!e){const t=ex(this,null);this._globalCursor=!!e,t&&ex(this,t)}return this}return this._globalCursor},preventDefault(e){return arguments.length?(this._preventDefault=e,this):this._preventDefault},timer:function(e,t){this._timers.push(g.interval((function(t){e({timestamp:Date.now(),elapsed:t})}),t))},events:function(e,t,n){var r,i=this,a=new _r(n),o=function(n,r){i.runAsync(null,(()=>{e===sx&&function(e,t){var n=e._eventConfig.defaults,r=n.prevent,i=n.allow;return!1!==r&&!0!==i&&(!0===r||!1===i||(r?r[t]:i?!i[t]:e.preventDefault()))}(i,t)&&n.preventDefault(),a.receive(ox(i,n,r))}))};if(e===ux)fx(i,"timer",t)&&i.timer(o,t);else if(e===sx)fx(i,"view",t)&&i.addEventListener(t,o,cx);else if(e===lx?fx(i,"window",t)&&"undefined"!=typeof window&&(r=[window]):"undefined"!=typeof document&&fx(i,"selector",t)&&(r=Array.from(document.querySelectorAll(e))),r){for(var s=0,u=r.length;s=0;)i[e].stop();for(e=a.length;--e>=0;)for(t=(n=a[e]).sources.length;--t>=0;)n.sources[t].removeEventListener(n.type,n.handler);return r&&r.call(this,this._handler,null,null,null),this},hover:function(e,t){return t=[t||"update",(e=[e||"hover"])[0]],this.on(this.events("view","mouseover",hx),px,mx(e)),this.on(this.events("view","mouseout",hx),px,mx(t)),this},data:function(e,t){return arguments.length<2?tx(this,e).values.value:nx.call(this,e,hr().remove(z).insert(t))},change:nx,insert:function(e,t){return nx.call(this,e,hr().insert(t))},remove:function(e,t){return nx.call(this,e,hr().remove(t))},scale:function(e){var t=this._runtime.scales;return Fe(t,e)||E("Unrecognized scale or projection: "+e),t[e].value},initialize:function(e,t){const n=this,r=n._renderType,i=n._eventConfig.bind,a=uf(r);e=n._el=e?Sx(n,e,!0):null,function(e){const t=e.container();t&&(t.setAttribute("role","graphics-document"),t.setAttribute("aria-roleDescription","visualization"),Kb(t,e.description()))}(n),a||n.error("Unrecognized renderer type: "+r);const o=a.handler||ud,s=e?a.renderer:a.headless;return n._renderer=s?Fx(n,n._renderer,e,s):null,n._handler=function(e,t,n,r){const i=new r(e.loader(),Mx(e,e.tooltip())).scene(e.scenegraph().root).initialize(n,ax(e),e);return t&&t.handlers().forEach((e=>{i.on(e.type,e.handler)})),i}(n,n._handler,e,o),n._redraw=!0,e&&"none"!==i&&(t=t?n._elBind=Sx(n,t,!0):e.appendChild(gx("form",{class:"vega-bindings"})),n._bind.forEach((e=>{e.param.element&&"container"!==i&&(e.element=Sx(n,e.param.element,!!e.param.input))})),n._bind.forEach((e=>{!function(e,t,n){if(!t)return;const r=n.param;let i=n.state;i||(i=n.state={elements:null,active:!1,set:null,update:t=>{t!=e.signal(r.signal)&&e.runAsync(null,(()=>{i.source=!0,e.signal(r.signal,t)}))}},r.debounce&&(i.update=ke(r.debounce,i.update))),(null==r.input&&r.element?xx:_x)(i,t,r,e),i.active||(e.on(e._signals[r.signal],null,(()=>{i.source?i.source=!1:i.set(e.signal(r.signal))})),i.active=!0)}(n,e.element||t,e)}))),n},toImageURL:async function(e,t){e!==of.Canvas&&e!==of.SVG&&e!==of.PNG&&E("Unrecognized image type: "+e);const n=await Rx(this,e,t);return e===of.SVG?function(e,t){const n=new Blob([e],{type:t});return window.URL.createObjectURL(n)}(n.svg(),"image/svg+xml"):n.canvas().toDataURL("image/png")},toCanvas:async function(e,t){return(await Rx(this,of.Canvas,e,t)).canvas()},toSVG:async function(e){return(await Rx(this,of.SVG,e)).svg()},getState:function(e){return this._runtime.getState(e||{data:Ux,signals:jx,recurse:!0})},setState:function(e){return this.runAsync(null,(t=>{t._trigger=!1,t._runtime.setState(e)}),(e=>{e._trigger=!0})),this}});const Qx="view",Kx="[",Zx="]",e_="{",t_="}",n_=":",r_=",",i_="@",a_=">",o_=/[[\]{}]/,s_={"*":1,arc:1,area:1,group:1,image:1,line:1,path:1,rect:1,rule:1,shape:1,symbol:1,text:1,trail:1};let u_,l_;function c_(e,t,n){return u_=t||Qx,l_=n||s_,f_(e.trim()).map(h_)}function d_(e,t,n,r,i){const a=e.length;let o,s=0;for(;t=0?--s:r&&r.indexOf(o)>=0&&++s}return t}function f_(e){const t=[],n=e.length;let r=0,i=0;for(;i' after between selector: "+e;n=n.map(h_);const i=h_(e.slice(1).trim());if(i.between)return{between:n,stream:i};i.between=n;return i}(e):function(e){const t={source:u_},n=[];let r,i,a=[0,0],o=0,s=0,u=e.length,l=0;if(e[u-1]===t_){if(l=e.lastIndexOf(e_),!(l>=0))throw"Unmatched right brace: "+e;try{a=function(e){const t=e.split(r_);if(!e.length||t.length>2)throw e;return t.map((t=>{const n=+t;if(n!=n)throw e;return n}))}(e.substring(l+1,u-1))}catch(t){throw"Invalid throttle specification: "+e}u=(e=e.slice(0,l).trim()).length,l=0}if(!u)throw e;e[0]===i_&&(o=++l);r=d_(e,l,n_),r1?(t.type=n[1],o?t.markname=n[0].slice(1):!function(e){return l_[e]}(n[0])?t.source=n[0]:t.marktype=n[0]):t.type=n[0];"!"===t.type.slice(-1)&&(t.consume=!0,t.type=t.type.slice(0,-1));null!=i&&(t.filter=i);a[0]&&(t.throttle=a[0]);a[1]&&(t.debounce=a[1]);return t}(e)}function p_(e){return I(e)?e:{type:e||"pad"}}const m_=e=>+e||0,g_=e=>({top:e,bottom:e,left:e,right:e});function y_(e){return I(e)?e.signal?e:{top:m_(e.top),bottom:m_(e.bottom),left:m_(e.left),right:m_(e.right)}:g_(m_(e))}const v_=e=>I(e)&&!j(e)?we({},e):{value:e};function b_(e,t,n,r){if(null!=n){return I(n)&&!j(n)||j(n)&&n.length&&I(n[0])?e.update[t]=n:e[r||"enter"][t]={value:n},1}return 0}function x_(e,t,n){for(const n in t)b_(e,n,t[n]);for(const t in n)b_(e,t,n[t],"update")}function __(e,t,n){for(const r in t)n&&Fe(n,r)||(e[r]=we(e[r]||{},t[r]));return e}function A_(e,t){return t&&(t.enter&&t.enter[e]||t.update&&t.update[e])}const k_="mark",w_="frame",D_="scope",E_="axis",C_="axis-domain",F_="axis-grid",M_="axis-label",S_="axis-tick",B_="axis-title",O_="legend",z_="legend-band",R_="legend-entry",$_="legend-gradient",q_="legend-label",L_="legend-symbol",T_="legend-title",N_="title",P_="title-text",U_="title-subtitle";function j_(e,t,n){e[t]=n&&n.signal?{signal:n.signal}:{value:n}}const I_=e=>Ne(e)?Ye(e):e.signal?`(${e.signal})`:V_(e);function W_(e){if(null!=e.gradient)return function(e){const t=[e.start,e.stop,e.count].map((e=>null==e?null:Ye(e)));for(;t.length&&null==Y(t);)t.pop();return t.unshift(I_(e.gradient)),`gradient(${t.join(",")})`}(e);let t=e.signal?`(${e.signal})`:e.color?function(e){return e.c?G_("hcl",e.h,e.c,e.l):e.h||e.s?G_("hsl",e.h,e.s,e.l):e.l||e.a?G_("lab",e.l,e.a,e.b):e.r||e.g||e.b?G_("rgb",e.r,e.g,e.b):null}(e.color):null!=e.field?V_(e.field):void 0!==e.value?Ye(e.value):void 0;return null!=e.scale&&(t=function(e,t){const n=I_(e.scale);null!=e.range?t=`lerp(_range(${n}), ${+e.range})`:(void 0!==t&&(t=`_scale(${n}, ${t})`),e.band&&(t=(t?t+"+":"")+`_bandwidth(${n})`+(1==+e.band?"":"*"+H_(e.band)),e.extra&&(t=`(datum.extra ? _scale(${n}, datum.extra.value) : ${t})`)),null==t&&(t="0"));return t}(e,t)),void 0===t&&(t=null),null!=e.exponent&&(t=`pow(${t},${H_(e.exponent)})`),null!=e.mult&&(t+=`*${H_(e.mult)}`),null!=e.offset&&(t+=`+${H_(e.offset)}`),e.round&&(t=`round(${t})`),t}const G_=(e,t,n,r)=>`(${e}(${[t,n,r].map(W_).join(",")})+'')`;function H_(e){return I(e)?"("+W_(e)+")":e}function V_(e){return Y_(I(e)?e:{datum:e})}function Y_(e){let t,n,r;if(e.signal)t="datum",r=e.signal;else if(e.group||e.parent){for(n=Math.max(1,e.level||1),t="item";n-- >0;)t+=".mark.group";e.parent?(r=e.parent,t+=".datum"):r=e.group}else e.datum?(t="datum",r=e.datum):E("Invalid field reference: "+Ye(e));return e.signal||(r=Ne(r)?C(r).map(Ye).join("]["):Y_(r)),t+"["+r+"]"}function X_(e,t,n,r,i,a){const o={};(a=a||{}).encoders={$encode:o},e=function(e,t,n,r,i){const a={},o={};let s,u,l,c;for(u in u="lineBreak","text"!==t||null==i[u]||A_(u,e)||j_(a,u,i[u]),("legend"==n||String(n).startsWith("axis"))&&(n=null),c=n===w_?i.group:n===k_?we({},i.mark,i[t]):null,c)l=A_(u,e)||("fill"===u||"stroke"===u)&&(A_("fill",e)||A_("stroke",e)),l||j_(a,u,c[u]);for(u in he(r).forEach((t=>{const n=i.style&&i.style[t];for(const t in n)A_(t,e)||j_(a,t,n[t])})),e=we({},e),a)c=a[u],c.signal?(s=s||{})[u]=c:o[u]=c;return e.enter=we(o,e.enter),s&&(e.update=we(s,e.update)),e}(e,t,n,r,i.config);for(const n in e)o[n]=J_(e[n],t,a,i);return a}function J_(e,t,n,r){const i={},a={};for(const t in e)null!=e[t]&&(i[t]=Q_((o=e[t],j(o)?function(e){let t="";return e.forEach((e=>{const n=W_(e);t+=e.test?`(${e.test})?${n}:`:n})),":"===Y(t)&&(t+="null"),t}(o):W_(o)),r,n,a));var o;return{$expr:{marktype:t,channels:i},$fields:Object.keys(a),$output:Object.keys(e)}}function Q_(e,t,n,r){const i=Pb(e,t);return i.$fields.forEach((e=>r[e]=1)),we(n,i.$params),i.$expr}const K_="outer",Z_=["value","update","init","react","bind"];function eA(e,t){E(e+' for "outer" push: '+Ye(t))}function tA(e,t){const n=e.name;if(e.push===K_)t.signals[n]||eA("No prior signal definition",n),Z_.forEach((t=>{void 0!==e[t]&&eA("Invalid property ",t)}));else{const r=t.addSignal(n,e.value);!1===e.react&&(r.react=!1),e.bind&&t.addBinding(n,e.bind)}}function nA(e,t,n,r){this.id=-1,this.type=e,this.value=t,this.params=n,r&&(this.parent=r)}function rA(e,t,n,r){return new nA(e,t,n,r)}function iA(e,t){return rA("operator",e,t)}function aA(e){const t={$ref:e.id};return e.id<0&&(e.refs=e.refs||[]).push(t),t}function oA(e,t){return t?{$field:e,$name:t}:{$field:e}}const sA=oA("key");function uA(e,t){return{$compare:e,$order:t}}const lA="descending";function cA(e,t){return(e&&e.signal?"$"+e.signal:e||"")+(e&&t?"_":"")+(t&&t.signal?"$"+t.signal:t||"")}const dA="scope",fA="view";function hA(e){return e&&e.signal}function pA(e){if(hA(e))return!0;if(I(e))for(const t in e)if(pA(e[t]))return!0;return!1}function mA(e,t){return null!=e?e:t}function gA(e){return e&&e.signal||e}const yA="timer";function vA(e,t){return(e.merge?bA:e.stream?xA:e.type?_A:E("Invalid stream specification: "+Ye(e)))(e,t)}function bA(e,t){const n=AA({merge:e.merge.map((e=>vA(e,t)))},e,t);return t.addStream(n).id}function xA(e,t){const n=AA({stream:vA(e.stream,t)},e,t);return t.addStream(n).id}function _A(e,t){let n;e.type===yA?(n=t.event(yA,e.throttle),e={between:e.between,filter:e.filter}):n=t.event(function(e){return e===dA?fA:e||fA}(e.source),e.type);const r=AA({stream:n},e,t);return 1===Object.keys(r).length?n:t.addStream(r).id}function AA(e,t,n){let r=t.between;return r&&(2!==r.length&&E('Stream "between" parameter must have 2 entries: '+Ye(t)),e.between=[vA(r[0],n),vA(r[1],n)]),r=t.filter?[].concat(t.filter):[],(t.marktype||t.markname||t.markrole)&&r.push(function(e,t,n){const r="event.item";return r+(e&&"*"!==e?"&&"+r+".mark.marktype==='"+e+"'":"")+(n?"&&"+r+".mark.role==='"+n+"'":"")+(t?"&&"+r+".mark.name==='"+t+"'":"")}(t.marktype,t.markname,t.markrole)),t.source===dA&&r.push("inScope(event.item)"),r.length&&(e.filter=Pb("("+r.join(")&&(")+")",n).$expr),null!=(r=t.throttle)&&(e.throttle=+r),null!=(r=t.debounce)&&(e.debounce=+r),t.consume&&(e.consume=!0),e}const kA={code:"_.$value",ast:{type:"Identifier",value:"value"}};function wA(e,t,n){const r=e.encode,i={target:n};let a=e.events,o=e.update,s=[];a||E("Signal update missing events specification."),Ne(a)&&(a=c_(a,t.isSubscope()?dA:fA)),a=he(a).filter((e=>e.signal||e.scale?(s.push(e),0):1)),s.length>1&&(s=[DA(s)]),a.length&&s.push(a.length>1?{merge:a}:a[0]),null!=r&&(o&&E("Signal encode and update are mutually exclusive."),o="encode(item(),"+Ye(r)+")"),i.update=Ne(o)?Pb(o,t):null!=o.expr?Pb(o.expr,t):null!=o.value?o.value:null!=o.signal?{$expr:kA,$params:{$value:t.signalRef(o.signal)}}:E("Invalid signal update specification."),e.force&&(i.options={force:!0}),s.forEach((e=>t.addUpdate(we(function(e,t){return{source:e.signal?t.signalRef(e.signal):e.scale?t.scaleRef(e.scale):vA(e,t)}}(e,t),i))))}function DA(e){return{signal:"["+e.map((e=>e.scale?'scale("'+e.scale+'")':e.signal))+"]"}}const EA=e=>(t,n,r)=>rA(e,n,t||void 0,r),CA=EA("aggregate"),FA=EA("axisticks"),MA=EA("bound"),SA=EA("collect"),BA=EA("compare"),OA=EA("datajoin"),zA=EA("encode"),RA=EA("expression"),$A=EA("facet"),qA=EA("field"),LA=EA("key"),TA=EA("legendentries"),NA=EA("load"),PA=EA("mark"),UA=EA("multiextent"),jA=EA("multivalues"),IA=EA("overlap"),WA=EA("params"),GA=EA("prefacet"),HA=EA("projection"),VA=EA("proxy"),YA=EA("relay"),XA=EA("render"),JA=EA("scale"),QA=EA("sieve"),KA=EA("sortitems"),ZA=EA("viewlayout"),ek=EA("values");let tk=0;const nk={min:"min",max:"max",count:"sum"};function rk(e,t){const n=t.getScale(e.name).params;let r;var i;for(r in n.domain=sk(e.domain,e,t),null!=e.range&&(n.range=mk(e,t,n)),null!=e.interpolate&&function(e,t){t.interpolate=ik(e.type||e),null!=e.gamma&&(t.interpolateGamma=ik(e.gamma))}(e.interpolate,n),null!=e.nice&&(n.nice=I(i=e.nice)?{interval:ik(i.interval),step:ik(i.step)}:ik(i)),null!=e.bins&&(n.bins=function(e,t){return e.signal||j(e)?ak(e,t):t.objectProperty(e)}(e.bins,t)),e)Fe(n,r)||"name"===r||(n[r]=ik(e[r],t))}function ik(e,t){return I(e)?e.signal?t.signalRef(e.signal):E("Unsupported object: "+Ye(e)):e}function ak(e,t){return e.signal?t.signalRef(e.signal):e.map((e=>ik(e,t)))}function ok(e){E("Can not find data set: "+Ye(e))}function sk(e,t,n){if(e)return e.signal?n.signalRef(e.signal):(j(e)?uk:e.fields?ck:lk)(e,t,n);null==t.domainMin&&null==t.domainMax||E("No scale domain defined for domainMin/domainMax to override.")}function uk(e,t,n){return e.map((e=>ik(e,n)))}function lk(e,t,n){const r=n.getData(e.data);return r||ok(e.data),Ho(t.type)?r.valuesRef(n,e.field,fk(e.sort,!1)):Jo(t.type)?r.domainRef(n,e.field):r.extentRef(n,e.field)}function ck(e,t,n){const r=e.data,i=e.fields.reduce(((e,t)=>(t=Ne(t)?{data:r,field:t}:j(t)||t.signal?function(e,t){const n="_:vega:_"+tk++,r=SA({});if(j(e))r.value={$ingest:e};else if(e.signal){const i="setdata("+Ye(n)+","+e.signal+")";r.params.input=t.signalRef(i)}return t.addDataPipeline(n,[r,QA({})]),{data:n,field:"data"}}(t,n):t,e.push(t),e)),[]);return(Ho(t.type)?dk:Jo(t.type)?hk:pk)(e,n,i)}function dk(e,t,n){const r=fk(e.sort,!0);let i,a;const o=n.map((e=>{const n=t.getData(e.data);return n||ok(e.data),n.countsRef(t,e.field,r)})),s={groupby:sA,pulse:o};r&&(i=r.op||"count",a=r.field?cA(i,r.field):"count",s.ops=[nk[i]],s.fields=[t.fieldRef(a)],s.as=[a]),i=t.add(CA(s));const u=t.add(SA({pulse:aA(i)}));return a=t.add(ek({field:sA,sort:t.sortRef(r),pulse:aA(u)})),aA(a)}function fk(e,t){return e&&(e.field||e.op?e.field||"count"===e.op?t&&e.field&&e.op&&!nk[e.op]&&E("Multiple domain scales can not be sorted using "+e.op):E("No field provided for sort aggregate op: "+e.op):I(e)?e.field="key":e={field:"key"}),e}function hk(e,t,n){const r=n.map((e=>{const n=t.getData(e.data);return n||ok(e.data),n.domainRef(t,e.field)}));return aA(t.add(jA({values:r})))}function pk(e,t,n){const r=n.map((e=>{const n=t.getData(e.data);return n||ok(e.data),n.extentRef(t,e.field)}));return aA(t.add(UA({extents:r})))}function mk(e,t,n){const r=t.config.range;let i=e.range;if(i.signal)return t.signalRef(i.signal);if(Ne(i)){if(r&&Fe(r,i))return mk(e=we({},e,{range:r[i]}),t,n);"width"===i?i=[0,{signal:"width"}]:"height"===i?i=Ho(e.type)?[0,{signal:"height"}]:[{signal:"height"},0]:E("Unrecognized scale range value: "+Ye(i))}else{if(i.scheme)return n.scheme=j(i.scheme)?ak(i.scheme,t):ik(i.scheme,t),i.extent&&(n.schemeExtent=ak(i.extent,t)),void(i.count&&(n.schemeCount=ik(i.count,t)));if(i.step)return void(n.rangeStep=ik(i.step,t));if(Ho(e.type)&&!j(i))return sk(i,e,t);j(i)||E("Unsupported range type: "+Ye(i))}return i.map((e=>(j(e)?ak:ik)(e,t)))}function gk(e,t,n){return j(e)?e.map((e=>gk(e,t,n))):I(e)?e.signal?n.signalRef(e.signal):"fit"===t?e:E("Unsupported parameter object: "+Ye(e)):e}const yk="top",vk="left",bk="right",xk="bottom",_k="center",Ak="vertical",kk="start",wk="end",Dk="index",Ek="label",Ck="offset",Fk="perc",Mk="perc2",Sk="value",Bk="guide-label",Ok="guide-title",zk="group-title",Rk="group-subtitle",$k="symbol",qk="gradient",Lk="discrete",Tk="size",Nk=[Tk,"shape","fill","stroke","strokeWidth","strokeDash","opacity"],Pk={name:1,style:1,interactive:1},Uk={value:0},jk={value:1},Ik="group",Wk="rect",Gk="rule",Hk="symbol",Vk="text";function Yk(e){return e.type=Ik,e.interactive=e.interactive||!1,e}function Xk(e,t){const n=(n,r)=>mA(e[n],mA(t[n],r));return n.isVertical=n=>Ak===mA(e.direction,t.direction||(n?t.symbolDirection:t.gradientDirection)),n.gradientLength=()=>mA(e.gradientLength,t.gradientLength||t.gradientWidth),n.gradientThickness=()=>mA(e.gradientThickness,t.gradientThickness||t.gradientHeight),n.entryColumns=()=>mA(e.columns,mA(t.columns,+n.isVertical(!0))),n}function Jk(e,t){const n=t&&(t.update&&t.update[e]||t.enter&&t.enter[e]);return n&&n.signal?n:n?n.value:null}function Qk(e,t,n){return`item.anchor === '${kk}' ? ${e} : item.anchor === '${wk}' ? ${t} : ${n}`}const Kk=Qk(Ye(vk),Ye(bk),Ye(_k));function Zk(e,t){return t?e?I(e)?Object.assign({},e,{offset:Zk(e.offset,t)}):{value:e,offset:t}:t:e}function ew(e,t){return t?(e.name=t.name,e.style=t.style||e.style,e.interactive=!!t.interactive,e.encode=__(e.encode,t,Pk)):e.interactive=!1,e}function tw(e,t,n,r){const i=Xk(e,n),a=i.isVertical(),o=i.gradientThickness(),s=i.gradientLength();let u,l,c,d,f;a?(l=[0,1],c=[0,0],d=o,f=s):(l=[0,0],c=[1,0],d=s,f=o);const h={enter:u={opacity:Uk,x:Uk,y:Uk,width:v_(d),height:v_(f)},update:we({},u,{opacity:jk,fill:{gradient:t,start:l,stop:c}}),exit:{opacity:Uk}};return x_(h,{stroke:i("gradientStrokeColor"),strokeWidth:i("gradientStrokeWidth")},{opacity:i("gradientOpacity")}),ew({type:Wk,role:$_,encode:h},r)}function nw(e,t,n,r,i){const a=Xk(e,n),o=a.isVertical(),s=a.gradientThickness(),u=a.gradientLength();let l,c,d,f,h="";o?(l="y",d="y2",c="x",f="width",h="1-"):(l="x",d="x2",c="y",f="height");const p={opacity:Uk,fill:{scale:t,field:Sk}};p[l]={signal:h+"datum."+Fk,mult:u},p[c]=Uk,p[d]={signal:h+"datum."+Mk,mult:u},p[f]=v_(s);const m={enter:p,update:we({},p,{opacity:jk}),exit:{opacity:Uk}};return x_(m,{stroke:a("gradientStrokeColor"),strokeWidth:a("gradientStrokeWidth")},{opacity:a("gradientOpacity")}),ew({type:Wk,role:z_,key:Sk,from:i,encode:m},r)}const rw=`datum.${Fk}<=0?"${vk}":datum.${Fk}>=1?"${bk}":"${_k}"`,iw=`datum.${Fk}<=0?"${xk}":datum.${Fk}>=1?"${yk}":"middle"`;function aw(e,t,n,r){const i=Xk(e,t),a=i.isVertical(),o=v_(i.gradientThickness()),s=i.gradientLength();let u,l,c,d,f=i("labelOverlap"),h="";const p={enter:u={opacity:Uk},update:l={opacity:jk,text:{field:Ek}},exit:{opacity:Uk}};return x_(p,{fill:i("labelColor"),fillOpacity:i("labelOpacity"),font:i("labelFont"),fontSize:i("labelFontSize"),fontStyle:i("labelFontStyle"),fontWeight:i("labelFontWeight"),limit:mA(e.labelLimit,t.gradientLabelLimit)}),a?(u.align={value:"left"},u.baseline=l.baseline={signal:iw},c="y",d="x",h="1-"):(u.align=l.align={signal:rw},u.baseline={value:"top"},c="x",d="y"),u[c]=l[c]={signal:h+"datum."+Fk,mult:s},u[d]=l[d]=o,o.offset=mA(e.labelOffset,t.gradientLabelOffset)||0,f=f?{separation:i("labelSeparation"),method:f,order:"datum."+Dk}:void 0,ew({type:Vk,role:q_,style:Bk,key:Sk,from:r,encode:p,overlap:f},n)}function ow(e,t,n,r,i){const a=Xk(e,t),o=n.entries,s=!(!o||!o.interactive),u=o?o.name:void 0,l=a("clipHeight"),c=a("symbolOffset"),d={data:"value"},f=`(${i}) ? datum.${Ck} : datum.${Tk}`,h=l?v_(l):{field:Tk},p=`datum.${Dk}`,m=`max(1, ${i})`;let g,y,v,b,x;h.mult=.5,g={enter:y={opacity:Uk,x:{signal:f,mult:.5,offset:c},y:h},update:v={opacity:jk,x:y.x,y:y.y},exit:{opacity:Uk}};let _=null,A=null;e.fill||(_=t.symbolBaseFillColor,A=t.symbolBaseStrokeColor),x_(g,{fill:a("symbolFillColor",_),shape:a("symbolType"),size:a("symbolSize"),stroke:a("symbolStrokeColor",A),strokeDash:a("symbolDash"),strokeDashOffset:a("symbolDashOffset"),strokeWidth:a("symbolStrokeWidth")},{opacity:a("symbolOpacity")}),Nk.forEach((t=>{e[t]&&(v[t]=y[t]={scale:e[t],field:Sk})}));const k=ew({type:Hk,role:L_,key:Sk,from:d,clip:!!l||void 0,encode:g},n.symbols),w=v_(c);w.offset=a("labelOffset"),g={enter:y={opacity:Uk,x:{signal:f,offset:w},y:h},update:v={opacity:jk,text:{field:Ek},x:y.x,y:y.y},exit:{opacity:Uk}},x_(g,{align:a("labelAlign"),baseline:a("labelBaseline"),fill:a("labelColor"),fillOpacity:a("labelOpacity"),font:a("labelFont"),fontSize:a("labelFontSize"),fontStyle:a("labelFontStyle"),fontWeight:a("labelFontWeight"),limit:a("labelLimit")});const D=ew({type:Vk,role:q_,style:Bk,key:Sk,from:d,encode:g},n.labels);return g={enter:{noBound:{value:!l},width:Uk,height:l?v_(l):Uk,opacity:Uk},exit:{opacity:Uk},update:v={opacity:jk,row:{signal:null},column:{signal:null}}},a.isVertical(!0)?(b=`ceil(item.mark.items.length / ${m})`,v.row.signal=`${p}%${b}`,v.column.signal=`floor(${p} / ${b})`,x={field:["row",p]}):(v.row.signal=`floor(${p} / ${m})`,v.column.signal=`${p} % ${m}`,x={field:p}),v.column.signal=`(${i})?${v.column.signal}:${p}`,Yk({role:D_,from:r={facet:{data:r,name:"value",groupby:Dk}},encode:__(g,o,Pk),marks:[k,D],name:u,interactive:s,sort:x})}const sw='item.orient === "left"',uw='item.orient === "right"',lw=`(${sw} || ${uw})`,cw=`datum.vgrad && ${lw}`,dw=Qk('"top"','"bottom"','"middle"'),fw=`datum.vgrad && ${uw} ? (${Qk('"right"','"left"','"center"')}) : (${lw} && !(datum.vgrad && ${sw})) ? "left" : ${Kk}`,hw=`item._anchor || (${lw} ? "middle" : "start")`,pw=`${cw} ? (${sw} ? -90 : 90) : 0`,mw=`${lw} ? (datum.vgrad ? (${uw} ? "bottom" : "top") : ${dw}) : "top"`;function gw(e,t){let n;return I(e)&&(e.signal?n=e.signal:e.path?n="pathShape("+yw(e.path)+")":e.sphere&&(n="geoShape("+yw(e.sphere)+', {type: "Sphere"})')),n?t.signalRef(n):!!e}function yw(e){return I(e)&&e.signal?e.signal:Ye(e)}function vw(e){const t=e.role||"";return t.indexOf("axis")&&t.indexOf("legend")&&t.indexOf("title")?e.type===Ik?D_:t||k_:t}function bw(e){return{marktype:e.type,name:e.name||void 0,role:e.role||vw(e),zindex:+e.zindex||void 0,aria:e.aria,description:e.description}}function xw(e,t){return e&&e.signal?t.signalRef(e.signal):!1!==e}function _w(e,t){const n=Pr(e.type);n||E("Unrecognized transform type: "+Ye(e.type));const r=rA(n.type.toLowerCase(),null,Aw(n,e,t));return e.signal&&t.addSignal(e.signal,t.proxy(r)),r.metadata=n.metadata||{},r}function Aw(e,t,n){const r={},i=e.params.length;for(let a=0;aDw(e,t,n)))):Dw(e,r,n)}(e,t,n):"projection"===r?n.projectionRef(t[e.name]):e.array&&!hA(i)?i.map((t=>ww(e,t,n))):ww(e,i,n):void(e.required&&E("Missing required "+Ye(t.type)+" parameter: "+Ye(e.name)))}function ww(e,t,n){const r=e.type;if(hA(t))return Mw(r)?E("Expression references can not be signals."):Sw(r)?n.fieldRef(t):Bw(r)?n.compareRef(t):n.signalRef(t.signal);{const i=e.expr||Sw(r);return i&&Ew(t)?n.exprRef(t.expr,t.as):i&&Cw(t)?oA(t.field,t.as):Mw(r)?Pb(t,n):Fw(r)?aA(n.getData(t).values):Sw(r)?oA(t):Bw(r)?n.compareRef(t):t}}function Dw(e,t,n){const r=e.params.length;let i;for(let n=0;ne&&e.expr,Cw=e=>e&&e.field,Fw=e=>"data"===e,Mw=e=>"expr"===e,Sw=e=>"field"===e,Bw=e=>"compare"===e;function Ow(e,t){return e.$ref?e:e.data&&e.data.$ref?e.data:aA(t.getData(e.data).output)}function zw(e,t,n,r,i){this.scope=e,this.input=t,this.output=n,this.values=r,this.aggregate=i,this.index={}}function Rw(e){return Ne(e)?e:null}function $w(e,t,n){const r=cA(n.op,n.field);let i;if(t.ops){for(let e=0,n=t.as.length;enull==e?"null":e)).join(",")+"),0)",t);u.update=l.$expr,u.params=l.$params}function Tw(e,t){const n=vw(e),r=e.type===Ik,i=e.from&&e.from.facet,a=e.overlap;let o,s,u,l,c,d,f,h=e.layout||n===D_||n===w_;const p=n===k_||h||i,m=function(e,t,n){let r,i,a,o,s;return e?(r=e.facet)&&(t||E("Only group marks can be faceted."),null!=r.field?o=s=Ow(r,n):(e.data?s=aA(n.getData(e.data).aggregate):(a=_w(we({type:"aggregate",groupby:he(r.groupby)},r.aggregate),n),a.params.key=n.keyRef(r.groupby),a.params.pulse=Ow(r,n),o=s=aA(n.add(a))),i=n.keyRef(r.groupby,!0))):o=aA(n.add(SA(null,[{}]))),o||(o=Ow(e,n)),{key:i,pulse:o,parent:s}}(e.from,r,t);s=t.add(OA({key:m.key||(e.key?oA(e.key):void 0),pulse:m.pulse,clean:!r}));const g=aA(s);s=u=t.add(SA({pulse:g})),s=t.add(PA({markdef:bw(e),interactive:xw(e.interactive,t),clip:gw(e.clip,t),context:{$context:!0},groups:t.lookup(),parent:t.signals.parent?t.signalRef("parent"):null,index:t.markpath(),pulse:aA(s)}));const y=aA(s);s=l=t.add(zA(X_(e.encode,e.type,n,e.style,t,{mod:!1,pulse:y}))),s.params.parent=t.encode(),e.transform&&e.transform.forEach((e=>{const n=_w(e,t),r=n.metadata;(r.generates||r.changes)&&E("Mark transforms should not generate new data."),r.nomod||(l.params.mod=!0),n.params.pulse=aA(s),t.add(s=n)})),e.sort&&(s=t.add(KA({sort:t.compareRef(e.sort),pulse:aA(s)})));const v=aA(s);(i||h)&&(h=t.add(ZA({layout:t.objectProperty(e.layout),legends:t.legends,mark:y,pulse:v})),d=aA(h));const b=t.add(MA({mark:y,pulse:d||v}));f=aA(b),r&&(p&&(o=t.operators,o.pop(),h&&o.pop()),t.pushState(v,d||f,g),i?function(e,t,n){const r=e.from.facet,i=r.name,a=Ow(r,t);let o;r.name||E("Facet must have a name: "+Ye(r)),r.data||E("Facet must reference a data set: "+Ye(r)),r.field?o=t.add(GA({field:t.fieldRef(r.field),pulse:a})):r.groupby?o=t.add($A({key:t.keyRef(r.groupby),group:aA(t.proxy(n.parent)),pulse:a})):E("Facet must specify groupby or field: "+Ye(r));const s=t.fork(),u=s.add(SA()),l=s.add(QA({pulse:aA(u)}));s.addData(i,new zw(s,u,u,l)),s.addSignal("parent",null),o.params.subflow={$subflow:s.parse(e).toRuntime()}}(e,t,m):p?function(e,t,n){const r=t.add(GA({pulse:n.pulse})),i=t.fork();i.add(QA()),i.addSignal("parent",null),r.params.subflow={$subflow:i.parse(e).toRuntime()}}(e,t,m):t.parse(e),t.popState(),p&&(h&&o.push(h),o.push(b))),a&&(f=function(e,t,n){const r=e.method,i=e.bound,a=e.separation,o={separation:hA(a)?n.signalRef(a.signal):a,method:hA(r)?n.signalRef(r.signal):r,pulse:t};e.order&&(o.sort=n.compareRef({field:e.order}));if(i){const e=i.tolerance;o.boundTolerance=hA(e)?n.signalRef(e.signal):+e,o.boundScale=n.scaleRef(i.scale),o.boundOrient=i.orient}return aA(n.add(IA(o)))}(a,f,t));const x=t.add(XA({pulse:f})),_=t.add(QA({pulse:aA(x)},void 0,t.parent()));null!=e.name&&(c=e.name,t.addData(c,new zw(t,u,x,_)),e.on&&e.on.forEach((e=>{(e.insert||e.remove||e.toggle)&&E("Marks only support modify triggers."),Lw(e,t,c)})))}function Nw(e,t){const n=t.config.legend,r=e.encode||{},i=Xk(e,n),a=r.legend||{},o=a.name||void 0,s=a.interactive,u=a.style,l={};let c,d,f,h=0;Nk.forEach((t=>e[t]?(l[t]=e[t],h=h||e[t]):0)),h||E("Missing valid scale for legend.");const p=function(e,t){let n=e.type||$k;e.type||1!==function(e){return Nk.reduce(((t,n)=>t+(e[n]?1:0)),0)}(e)||!e.fill&&!e.stroke||(n=Go(t)?qk:Vo(t)?Lk:$k);return n!==qk?n:Vo(t)?Lk:qk}(e,t.scaleType(h)),m={title:null!=e.title,scales:l,type:p,vgrad:"symbol"!==p&&i.isVertical()},g=aA(t.add(SA(null,[m]))),y=aA(t.add(TA(d={type:p,scale:t.scaleRef(h),count:t.objectProperty(i("tickCount")),limit:t.property(i("symbolLimit")),values:t.objectProperty(e.values),minstep:t.property(e.tickMinStep),formatType:t.property(e.formatType),formatSpecifier:t.property(e.format)})));return p===qk?(f=[tw(e,h,n,r.gradient),aw(e,n,r.labels,y)],d.count=d.count||t.signalRef(`max(2,2*floor((${gA(i.gradientLength())})/100))`)):p===Lk?f=[nw(e,h,n,r.gradient,y),aw(e,n,r.labels,y)]:(c=function(e,t){const n=Xk(e,t);return{align:n("gridAlign"),columns:n.entryColumns(),center:{row:!0,column:!1},padding:{row:n("rowPadding"),column:n("columnPadding")}}}(e,n),f=[ow(e,n,r,y,gA(c.columns))],d.size=function(e,t,n){const r=gA(Uw("size",e,n)),i=gA(Uw("strokeWidth",e,n)),a=gA(function(e,t,n){return Jk("fontSize",e)||function(e,t,n){const r=t.config.style[n];return r&&r[e]}("fontSize",t,n)}(n[1].encode,t,Bk));return Pb(`max(ceil(sqrt(${r})+${i}),${a})`,t)}(e,t,f[0].marks)),f=[Yk({role:R_,from:g,encode:{enter:{x:{value:0},y:{value:0}}},marks:f,layout:c,interactive:s})],m.title&&f.push(function(e,t,n,r){const i=Xk(e,t),a={enter:{opacity:Uk},update:{opacity:jk,x:{field:{group:"padding"}},y:{field:{group:"padding"}}},exit:{opacity:Uk}};return x_(a,{orient:i("titleOrient"),_anchor:i("titleAnchor"),anchor:{signal:hw},angle:{signal:pw},align:{signal:fw},baseline:{signal:mw},text:e.title,fill:i("titleColor"),fillOpacity:i("titleOpacity"),font:i("titleFont"),fontSize:i("titleFontSize"),fontStyle:i("titleFontStyle"),fontWeight:i("titleFontWeight"),limit:i("titleLimit"),lineHeight:i("titleLineHeight")},{align:i("titleAlign"),baseline:i("titleBaseline")}),ew({type:Vk,role:T_,style:Ok,from:r,encode:a},n)}(e,n,r.title,g)),Tw(Yk({role:O_,from:g,encode:__(Pw(i,e,n),a,Pk),marks:f,aria:i("aria"),description:i("description"),zindex:i("zindex"),name:o,interactive:s,style:u}),t)}function Pw(e,t,n){const r={enter:{},update:{}};return x_(r,{orient:e("orient"),offset:e("offset"),padding:e("padding"),titlePadding:e("titlePadding"),cornerRadius:e("cornerRadius"),fill:e("fillColor"),stroke:e("strokeColor"),strokeWidth:n.strokeWidth,strokeDash:n.strokeDash,x:e("legendX"),y:e("legendY"),format:t.format,formatType:t.formatType}),r}function Uw(e,t,n){return t[e]?`scale("${t[e]}",datum)`:Jk(e,n[0].encode)}zw.fromEntries=function(e,t){const n=t.length,r=t[n-1],i=t[n-2];let a=t[0],o=null,s=1;for(a&&"load"===a.type&&(a=t[1]),e.add(t[0]);s{n.push(_w(e,t))})),e.on&&e.on.forEach((n=>{Lw(n,t,e.name)})),t.addDataPipeline(e.name,function(e,t,n){const r=[];let i,a,o,s,u,l=null,c=!1,d=!1;e.values?hA(e.values)||pA(e.format)?(r.push(Vw(t,e)),r.push(l=Hw())):r.push(l=Hw({$ingest:e.values,$format:e.format})):e.url?pA(e.url)||pA(e.format)?(r.push(Vw(t,e)),r.push(l=Hw())):r.push(l=Hw({$request:e.url,$format:e.format})):e.source&&(l=i=he(e.source).map((e=>aA(t.getData(e).output))),r.push(null));for(a=0,o=n.length;ae===xk||e===yk,Xw=(e,t,n)=>hA(e)?nD(e.signal,t,n):e===vk||e===yk?t:n,Jw=(e,t,n)=>hA(e)?eD(e.signal,t,n):Yw(e)?t:n,Qw=(e,t,n)=>hA(e)?tD(e.signal,t,n):Yw(e)?n:t,Kw=(e,t,n)=>hA(e)?rD(e.signal,t,n):e===yk?{value:t}:{value:n},Zw=(e,t,n)=>hA(e)?iD(e.signal,t,n):e===bk?{value:t}:{value:n},eD=(e,t,n)=>aD(`${e} === '${yk}' || ${e} === '${xk}'`,t,n),tD=(e,t,n)=>aD(`${e} !== '${yk}' && ${e} !== '${xk}'`,t,n),nD=(e,t,n)=>sD(`${e} === '${vk}' || ${e} === '${yk}'`,t,n),rD=(e,t,n)=>sD(`${e} === '${yk}'`,t,n),iD=(e,t,n)=>sD(`${e} === '${bk}'`,t,n),aD=(e,t,n)=>(t=null!=t?v_(t):t,n=null!=n?v_(n):n,oD(t)&&oD(n)?{signal:`${e} ? (${t=t?t.signal||Ye(t.value):null}) : (${n=n?n.signal||Ye(n.value):null})`}:[we({test:e},t)].concat(n||[])),oD=e=>null==e||1===Object.keys(e).length,sD=(e,t,n)=>({signal:`${e} ? (${lD(t)}) : (${lD(n)})`}),uD=(e,t,n,r,i)=>({signal:(null!=r?`${e} === '${vk}' ? (${lD(r)}) : `:"")+(null!=n?`${e} === '${xk}' ? (${lD(n)}) : `:"")+(null!=i?`${e} === '${bk}' ? (${lD(i)}) : `:"")+(null!=t?`${e} === '${yk}' ? (${lD(t)}) : `:"")+"(null)"}),lD=e=>hA(e)?e.signal:null==e?null:Ye(e),cD=(e,t)=>0===t?0:hA(e)?{signal:`(${e.signal}) * ${t}`}:{value:e*t},dD=(e,t)=>{const n=e.signal;return n&&n.endsWith("(null)")?{signal:n.slice(0,-6)+t.signal}:e};function fD(e,t,n,r){let i;if(t&&Fe(t,e))return t[e];if(Fe(n,e))return n[e];if(e.startsWith("title")){switch(e){case"titleColor":i="fill";break;case"titleFont":case"titleFontSize":case"titleFontWeight":i=e[5].toLowerCase()+e.slice(6)}return r[Ok][i]}if(e.startsWith("label")){switch(e){case"labelColor":i="fill";break;case"labelFont":case"labelFontSize":i=e[5].toLowerCase()+e.slice(6)}return r[Bk][i]}return null}function hD(e){const t={};for(const n of e)if(n)for(const e in n)t[e]=1;return Object.keys(t)}function pD(e,t){return{scale:e.scale,range:t}}function mD(e,t,n,r,i){const a=Xk(e,t),o=e.orient,s=e.gridScale,u=Xw(o,1,-1),l=function(e,t){if(1===t);else if(I(e)){let n=e=we({},e);for(;null!=n.mult;){if(!I(n.mult))return n.mult=hA(t)?{signal:`(${n.mult}) * (${t.signal})`}:n.mult*t,e;n=n.mult=we({},n.mult)}n.mult=t}else e=hA(t)?{signal:`(${t.signal}) * (${e||0})`}:t*(e||0);return e}(e.offset,u);let c,d,f;const h={enter:c={opacity:Uk},update:f={opacity:jk},exit:d={opacity:Uk}};x_(h,{stroke:a("gridColor"),strokeCap:a("gridCap"),strokeDash:a("gridDash"),strokeDashOffset:a("gridDashOffset"),strokeOpacity:a("gridOpacity"),strokeWidth:a("gridWidth")});const p={scale:e.scale,field:Sk,band:i.band,extra:i.extra,offset:i.offset,round:a("tickRound")},m=Jw(o,{signal:"height"},{signal:"width"}),g=s?{scale:s,range:0,mult:u,offset:l}:{value:0,offset:l},y=s?{scale:s,range:1,mult:u,offset:l}:we(m,{mult:u,offset:l});return c.x=f.x=Jw(o,p,g),c.y=f.y=Qw(o,p,g),c.x2=f.x2=Qw(o,y),c.y2=f.y2=Jw(o,y),d.x=Jw(o,p),d.y=Qw(o,p),ew({type:Gk,role:F_,key:Sk,from:r,encode:h},n)}function gD(e,t,n,r,i){return{signal:'flush(range("'+e+'"), scale("'+e+'", datum.value), '+t+","+n+","+r+","+i+")"}}function yD(e,t,n,r){const i=Xk(e,t),a=e.orient,o=Xw(a,-1,1);let s,u;const l={enter:s={opacity:Uk,anchor:v_(i("titleAnchor",null)),align:{signal:Kk}},update:u=we({},s,{opacity:jk,text:v_(e.title)}),exit:{opacity:Uk}},c={signal:`lerp(range("${e.scale}"), ${Qk(0,1,.5)})`};return u.x=Jw(a,c),u.y=Qw(a,c),s.angle=Jw(a,Uk,cD(o,90)),s.baseline=Jw(a,Kw(a,xk,yk),{value:xk}),u.angle=s.angle,u.baseline=s.baseline,x_(l,{fill:i("titleColor"),fillOpacity:i("titleOpacity"),font:i("titleFont"),fontSize:i("titleFontSize"),fontStyle:i("titleFontStyle"),fontWeight:i("titleFontWeight"),limit:i("titleLimit"),lineHeight:i("titleLineHeight")},{align:i("titleAlign"),angle:i("titleAngle"),baseline:i("titleBaseline")}),function(e,t,n,r){const i=(e,t)=>null!=e?(n.update[t]=dD(v_(e),n.update[t]),!1):!A_(t,r),a=i(e("titleX"),"x"),o=i(e("titleY"),"y");n.enter.auto=o===a?v_(o):Jw(t,v_(o),v_(a))}(i,a,l,n),l.update.align=dD(l.update.align,s.align),l.update.angle=dD(l.update.angle,s.angle),l.update.baseline=dD(l.update.baseline,s.baseline),ew({type:Vk,role:B_,style:Ok,from:r,encode:l},n)}function vD(e,t){const n=function(e,t){var n,r,i,a=t.config,o=a.style,s=a.axis,u="band"===t.scaleType(e.scale)&&a.axisBand,l=e.orient;if(hA(l)){const e=hD([a.axisX,a.axisY]),t=hD([a.axisTop,a.axisBottom,a.axisLeft,a.axisRight]);for(i of(n={},e))n[i]=Jw(l,fD(i,a.axisX,s,o),fD(i,a.axisY,s,o));for(i of(r={},t))r[i]=uD(l.signal,fD(i,a.axisTop,s,o),fD(i,a.axisBottom,s,o),fD(i,a.axisLeft,s,o),fD(i,a.axisRight,s,o))}else n=l===yk||l===xk?a.axisX:a.axisY,r=a["axis"+l[0].toUpperCase()+l.slice(1)];return n||r||u?we({},s,n,r,u):s}(e,t),r=e.encode||{},i=r.axis||{},a=i.name||void 0,o=i.interactive,s=i.style,u=Xk(e,n),l=function(e){const t=e("tickBand");let n,r,i=e("tickOffset");return t?t.signal?(n={signal:`(${t.signal}) === 'extent' ? 1 : 0.5`},r={signal:`(${t.signal}) === 'extent'`},I(i)||(i={signal:`(${t.signal}) === 'extent' ? 0 : ${i}`})):"extent"===t?(n=1,r=!0,i=0):(n=.5,r=!1):(n=e("bandPosition"),r=e("tickExtra")),{extra:r,band:n,offset:i}}(u),c={scale:e.scale,ticks:!!u("ticks"),labels:!!u("labels"),grid:!!u("grid"),domain:!!u("domain"),title:null!=e.title},d=aA(t.add(SA({},[c]))),f=aA(t.add(FA({scale:t.scaleRef(e.scale),extra:t.property(l.extra),count:t.objectProperty(e.tickCount),values:t.objectProperty(e.values),minstep:t.property(e.tickMinStep),formatType:t.property(e.formatType),formatSpecifier:t.property(e.format)}))),h=[];let p;return c.grid&&h.push(mD(e,n,r.grid,f,l)),c.ticks&&(p=u("tickSize"),h.push(function(e,t,n,r,i,a){const o=Xk(e,t),s=e.orient,u=Xw(s,-1,1);let l,c,d;const f={enter:l={opacity:Uk},update:d={opacity:jk},exit:c={opacity:Uk}};x_(f,{stroke:o("tickColor"),strokeCap:o("tickCap"),strokeDash:o("tickDash"),strokeDashOffset:o("tickDashOffset"),strokeOpacity:o("tickOpacity"),strokeWidth:o("tickWidth")});const h=v_(i);h.mult=u;const p={scale:e.scale,field:Sk,band:a.band,extra:a.extra,offset:a.offset,round:o("tickRound")};return d.y=l.y=Jw(s,Uk,p),d.y2=l.y2=Jw(s,h),c.x=Jw(s,p),d.x=l.x=Qw(s,Uk,p),d.x2=l.x2=Qw(s,h),c.y=Qw(s,p),ew({type:Gk,role:S_,key:Sk,from:r,encode:f},n)}(e,n,r.ticks,f,p,l))),c.labels&&(p=c.ticks?p:0,h.push(function(e,t,n,r,i,a){const o=Xk(e,t),s=e.orient,u=e.scale,l=Xw(s,-1,1),c=gA(o("labelFlush")),d=gA(o("labelFlushOffset")),f=o("labelAlign"),h=o("labelBaseline");let p,m=0===c||!!c;const g=v_(i);g.mult=l,g.offset=v_(o("labelPadding")||0),g.offset.mult=l;const y={scale:u,field:Sk,band:.5,offset:Zk(a.offset,o("labelOffset"))},v=Jw(s,m?gD(u,c,'"left"','"right"','"center"'):{value:"center"},Zw(s,"left","right")),b=Jw(s,Kw(s,"bottom","top"),m?gD(u,c,'"top"','"bottom"','"middle"'):{value:"middle"}),x=gD(u,c,`-(${d})`,d,0);m=m&&d;const _={opacity:Uk,x:Jw(s,y,g),y:Qw(s,y,g)},A={enter:_,update:p={opacity:jk,text:{field:Ek},x:_.x,y:_.y,align:v,baseline:b},exit:{opacity:Uk,x:_.x,y:_.y}};x_(A,{dx:!f&&m?Jw(s,x):null,dy:!h&&m?Qw(s,x):null}),x_(A,{angle:o("labelAngle"),fill:o("labelColor"),fillOpacity:o("labelOpacity"),font:o("labelFont"),fontSize:o("labelFontSize"),fontWeight:o("labelFontWeight"),fontStyle:o("labelFontStyle"),limit:o("labelLimit"),lineHeight:o("labelLineHeight")},{align:f,baseline:h});const k=o("labelBound");let w=o("labelOverlap");return w=w||k?{separation:o("labelSeparation"),method:w,order:"datum.index",bound:k?{scale:u,orient:s,tolerance:k}:null}:void 0,p.align!==v&&(p.align=dD(p.align,v)),p.baseline!==b&&(p.baseline=dD(p.baseline,b)),ew({type:Vk,role:M_,style:Bk,key:Sk,from:r,encode:A,overlap:w},n)}(e,n,r.labels,f,p,l))),c.domain&&h.push(function(e,t,n,r){const i=Xk(e,t),a=e.orient;let o,s;const u={enter:o={opacity:Uk},update:s={opacity:jk},exit:{opacity:Uk}};x_(u,{stroke:i("domainColor"),strokeCap:i("domainCap"),strokeDash:i("domainDash"),strokeDashOffset:i("domainDashOffset"),strokeWidth:i("domainWidth"),strokeOpacity:i("domainOpacity")});const l=pD(e,0),c=pD(e,1);return o.x=s.x=Jw(a,l,Uk),o.x2=s.x2=Jw(a,c),o.y=s.y=Qw(a,l,Uk),o.y2=s.y2=Qw(a,c),ew({type:Gk,role:C_,from:r,encode:u},n)}(e,n,r.domain,d)),c.title&&h.push(yD(e,n,r.title,d)),Tw(Yk({role:E_,from:d,encode:__(bD(u,e),i,Pk),marks:h,aria:u("aria"),description:u("description"),zindex:u("zindex"),name:a,interactive:o,style:s}),t)}function bD(e,t){const n={enter:{},update:{}};return x_(n,{orient:e("orient"),offset:e("offset")||0,position:mA(t.position,0),titlePadding:e("titlePadding"),minExtent:e("minExtent"),maxExtent:e("maxExtent"),range:{signal:`abs(span(range("${t.scale}")))`},translate:e("translate"),format:t.format,formatType:t.formatType}),n}function xD(e,t,n){const r=he(e.signals),i=he(e.scales);return n||r.forEach((e=>tA(e,t))),he(e.projections).forEach((e=>function(e,t){const n=t.config.projection||{},r={};for(const n in e)"name"!==n&&(r[n]=gk(e[n],n,t));for(const e in n)null==r[e]&&(r[e]=gk(n[e],e,t));t.addProjection(e.name,r)}(e,t))),i.forEach((e=>function(e,t){const n=e.type||"linear";Io(n)||E("Unrecognized scale type: "+Ye(n)),t.addScale(e.name,{type:n,domain:void 0})}(e,t))),he(e.data).forEach((e=>Gw(e,t))),i.forEach((e=>rk(e,t))),(n||r).forEach((e=>function(e,t){const n=t.getSignal(e.name);let r=e.update;e.init&&(r?E("Signals can not include both init and update expressions."):(r=e.init,n.initonly=!0)),r&&(r=Pb(r,t),n.update=r.$expr,n.params=r.$params),e.on&&e.on.forEach((e=>wA(e,t,n.id)))}(e,t))),he(e.axes).forEach((e=>vD(e,t))),he(e.marks).forEach((e=>Tw(e,t))),he(e.legends).forEach((e=>Nw(e,t))),e.title&&Iw(e.title,t),t.parseLambdas(),t}const _D=e=>__({enter:{x:{value:0},y:{value:0}},update:{width:{signal:"width"},height:{signal:"height"}}},e);function AD(e,t){const n=t.config,r=aA(t.root=t.add(iA())),i=function(e,t){const n=n=>mA(e[n],t[n]),r=[kD("background",n("background")),kD("autosize",p_(n("autosize"))),kD("padding",y_(n("padding"))),kD("width",n("width")||0),kD("height",n("height")||0)],i=r.reduce(((e,t)=>(e[t.name]=t,e)),{}),a={};return he(e.signals).forEach((e=>{Fe(i,e.name)?e=we(i[e.name],e):r.push(e),a[e.name]=e})),he(t.signals).forEach((e=>{Fe(a,e.name)||Fe(i,e.name)||r.push(e)})),r}(e,n);i.forEach((e=>tA(e,t))),t.description=e.description||n.description,t.eventConfig=n.events,t.legends=t.objectProperty(n.legend&&n.legend.layout),t.locale=n.locale;const a=t.add(SA()),o=t.add(zA(X_(_D(e.encode),Ik,w_,e.style,t,{pulse:aA(a)}))),s=t.add(ZA({layout:t.objectProperty(e.layout),legends:t.legends,autosize:t.signalRef("autosize"),mark:r,pulse:aA(o)}));t.operators.pop(),t.pushState(aA(o),aA(s),null),xD(e,t,i),t.operators.push(s);let u=t.add(MA({mark:r,pulse:aA(s)}));return u=t.add(XA({pulse:aA(u)})),u=t.add(QA({pulse:aA(u)})),t.addData("root",new zw(t,a,a,u)),t}function kD(e,t){return t&&t.signal?{name:e,update:t.signal}:{name:e,value:t}}function wD(e,t){this.config=e||{},this.options=t||{},this.bindings=[],this.field={},this.signals={},this.lambdas={},this.scales={},this.events={},this.data={},this.streams=[],this.updates=[],this.operators=[],this.eventConfig=null,this.locale=null,this._id=0,this._subid=0,this._nextsub=[0],this._parent=[],this._encode=[],this._lookup=[],this._markpath=[]}function DD(e){this.config=e.config,this.options=e.options,this.legends=e.legends,this.field=Object.create(e.field),this.signals=Object.create(e.signals),this.lambdas=Object.create(e.lambdas),this.scales=Object.create(e.scales),this.events=Object.create(e.events),this.data=Object.create(e.data),this.streams=[],this.updates=[],this.operators=[],this._id=0,this._subid=++e._nextsub[0],this._nextsub=e._nextsub,this._parent=e._parent.slice(),this._encode=e._encode.slice(),this._lookup=e._lookup.slice(),this._markpath=e._markpath}function ED(e){return(j(e)?CD:FD)(e)}function CD(e){const t=e.length;let n="[";for(let r=0;r0?",":"")+(I(t)?t.signal||ED(t):Ye(t))}return n+"]"}function FD(e){let t,n,r="{",i=0;for(t in e)n=e[t],r+=(++i>1?",":"")+Ye(t)+":"+(I(n)?n.signal||ED(n):Ye(n));return r+"}"}wD.prototype=DD.prototype={parse(e){return xD(e,this)},fork(){return new DD(this)},isSubscope(){return this._subid>0},toRuntime(){return this.finish(),{description:this.description,operators:this.operators,streams:this.streams,updates:this.updates,bindings:this.bindings,eventConfig:this.eventConfig,locale:this.locale}},id(){return(this._subid?this._subid+":":0)+this._id++},add(e){return this.operators.push(e),e.id=this.id(),e.refs&&(e.refs.forEach((t=>{t.$ref=e.id})),e.refs=null),e},proxy(e){const t=e instanceof nA?aA(e):e;return this.add(VA({value:t}))},addStream(e){return this.streams.push(e),e.id=this.id(),e},addUpdate(e){return this.updates.push(e),e},finish(){let e,t;for(e in this.root&&(this.root.root=!0),this.signals)this.signals[e].signal=e;for(e in this.scales)this.scales[e].scale=e;function n(e,t,n){let r,i;e&&(r=e.data||(e.data={}),i=r[t]||(r[t]=[]),i.push(n))}for(e in this.data){t=this.data[e],n(t.input,e,"input"),n(t.output,e,"output"),n(t.values,e,"values");for(const r in t.index)n(t.index[r],e,"index:"+r)}return this},pushState(e,t,n){this._encode.push(aA(this.add(QA({pulse:e})))),this._parent.push(t),this._lookup.push(n?aA(this.proxy(n)):null),this._markpath.push(-1)},popState(){this._encode.pop(),this._parent.pop(),this._lookup.pop(),this._markpath.pop()},parent(){return Y(this._parent)},encode(){return Y(this._encode)},lookup(){return Y(this._lookup)},markpath(){const e=this._markpath;return++e[e.length-1]},fieldRef(e,t){if(Ne(e))return oA(e,t);e.signal||E("Unsupported field reference: "+Ye(e));const n=e.signal;let r=this.field[n];if(!r){const e={name:this.signalRef(n)};t&&(e.as=t),this.field[n]=r=aA(this.add(qA(e)))}return r},compareRef(e){let t=!1;const n=e=>hA(e)?(t=!0,this.signalRef(e.signal)):function(e){return e&&e.expr}(e)?(t=!0,this.exprRef(e.expr)):e,r=he(e.field).map(n),i=he(e.order).map(n);return t?aA(this.add(BA({fields:r,orders:i}))):uA(r,i)},keyRef(e,t){let n=!1;const r=this.signals;return e=he(e).map((e=>hA(e)?(n=!0,aA(r[e.signal])):e)),n?aA(this.add(LA({fields:e,flat:t}))):function(e,t){const n={$key:e};return t&&(n.$flat=!0),n}(e,t)},sortRef(e){if(!e)return e;const t=cA(e.op,e.field),n=e.order||"ascending";return n.signal?aA(this.add(BA({fields:t,orders:this.signalRef(n.signal)}))):uA(t,n)},event(e,t){const n=e+":"+t;if(!this.events[n]){const r=this.id();this.streams.push({id:r,source:e,type:t}),this.events[n]=r}return this.events[n]},hasOwnSignal(e){return Fe(this.signals,e)},addSignal(e,t){this.hasOwnSignal(e)&&E("Duplicate signal name: "+Ye(e));const n=t instanceof nA?t:this.add(iA(t));return this.signals[e]=n},getSignal(e){return this.signals[e]||E("Unrecognized signal name: "+Ye(e)),this.signals[e]},signalRef(e){return this.signals[e]?aA(this.signals[e]):(Fe(this.lambdas,e)||(this.lambdas[e]=this.add(iA(null))),aA(this.lambdas[e]))},parseLambdas(){const e=Object.keys(this.lambdas);for(let t=0,n=e.length;tr+Math.floor(a*e.random()),pdf:e=>e===Math.floor(e)&&e>=r&&e=i?1:(t-r+1)/a},icdf:e=>e>=0&&e<=1?r-1+Math.floor(e*a):NaN};return o.min(t).max(n)},e.randomKDE=ri,e.randomLCG=function(e){return function(){return(e=(1103515245*e+12345)%2147483647)/2147483647}},e.randomLogNormal=ui,e.randomMixture=li,e.randomNormal=ni,e.randomUniform=pi,e.read=Kn,e.regressionConstant=mi,e.regressionExp=Ai,e.regressionLinear=xi,e.regressionLoess=Mi,e.regressionLog=_i,e.regressionPoly=Di,e.regressionPow=ki,e.regressionQuad=wi,e.renderModule=uf,e.repeat=Ge,e.resetDefaultLocale=function(){return gn(),_n(),En()},e.resetSVGClipId=Mu,e.resetSVGDefIds=function(){Mu(),Ms=0},e.responseType=Qn,e.runtimeContext=Xb,e.sampleCurve=zi,e.sampleLogNormal=ii,e.sampleNormal=Kr,e.sampleUniform=ci,e.scale=jo,e.sceneEqual=gf,e.sceneFromJSON=Rc,e.scenePickVisit=kl,e.sceneToJSON=zc,e.sceneVisit=Al,e.sceneZOrder=_l,e.scheme=os,e.serializeXML=$d,e.setRandom=function(t){e.random=t},e.span=Ve,e.splitAccessPath=C,e.stringValue=Ye,e.textMetrics=uc,e.timeBin=dn,e.timeFloor=qt,e.timeFormatLocale=kn,e.timeInterval=jt,e.timeOffset=Gt,e.timeSequence=Yt,e.timeUnitSpecifier=yt,e.timeUnits=mt,e.toBoolean=Xe,e.toDate=Qe,e.toNumber=X,e.toSet=Ze,e.toString=Ke,e.transform=Ur,e.transforms=Nr,e.truncate=et,e.truthy=z,e.tupleid=ar,e.typeParsers=Nn,e.utcFloor=Nt,e.utcInterval=It,e.utcOffset=Ht,e.utcSequence=Xt,e.utcdayofyear=Et,e.utcquarter=fe,e.utcweek=Ct,e.version="5.25.0",e.visitArray=tt,e.week=_t,e.writeConfig=H,e.zero=B,e.zoomLinear=se,e.zoomLog=ue,e.zoomPow=le,e.zoomSymlog=ce})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("d3-dsv"),require("topojson-client"),require("d3-array"),require("d3-format"),require("d3-time"),require("d3-time-format"),require("d3-shape"),require("d3-path"),require("d3-scale"),require("d3-interpolate"),require("d3-geo"),require("d3-color"),require("d3-force"),require("d3-hierarchy"),require("d3-delaunay"),require("d3-timer")):"function"==typeof define&&define.amd?define(["exports","d3-dsv","topojson-client","d3-array","d3-format","d3-time","d3-time-format","d3-shape","d3-path","d3-scale","d3-interpolate","d3-geo","d3-color","d3-force","d3-hierarchy","d3-delaunay","d3-timer"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).vega={},e.d3,e.topojson,e.d3,e.d3,e.d3,e.d3,e.d3,e.d3,e.d3,e.d3,e.d3,e.d3,e.d3,e.d3,e.d3,e.d3)}(this,(function(e,t,n,r,i,a,o,s,u,l,c,d,f,h,p,m,g){"use strict";function y(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var v=y(l),b=y(c);function x(e,t,n){return e.fields=t||[],e.fname=n,e}function _(e){return null==e?null:e.fname}function k(e){return null==e?null:e.fields}function A(e){return 1===e.length?w(e[0]):D(e)}const w=e=>function(t){return t[e]},D=e=>{const t=e.length;return function(n){for(let r=0;rr&&l(),s=r=i+1):"]"===a&&(s||E("Access path missing open bracket: "+e),s>0&&l(),s=0,r=i+1):i>r?l():r=i+1}return s&&E("Access path missing closing bracket: "+e),o&&E("Access path missing closing quote: "+e),i>r&&(i++,l()),t}function F(e,t,n){const r=C(e);return e=1===r.length?r[0]:e,x((n&&n.get||A)(r),[e],t||e)}const M=F("id"),S=x((e=>e),[],"identity"),B=x((()=>0),[],"zero"),O=x((()=>1),[],"one"),R=x((()=>!0),[],"true"),z=x((()=>!1),[],"false");function $(e,t,n){const r=[t].concat([].slice.call(n));console[e].apply(console,r)}const T=0,q=1,L=2,N=3,P=4;function U(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:$,r=e||T;return{level(e){return arguments.length?(r=+e,this):r},error(){return r>=q&&n(t||"error","ERROR",arguments),this},warn(){return r>=L&&n(t||"warn","WARN",arguments),this},info(){return r>=N&&n(t||"log","INFO",arguments),this},debug(){return r>=P&&n(t||"log","DEBUG",arguments),this}}}var j=Array.isArray;function I(e){return e===Object(e)}const W=e=>"__proto__"!==e;function G(){for(var e=arguments.length,t=new Array(e),n=0;n{for(const n in t)if("signals"===n)e.signals=V(e.signals,t.signals);else{const r="legend"===n?{layout:1}:"style"===n||null;H(e,n,t[n],r)}return e}),{})}function H(e,t,n,r){if(!W(t))return;let i,a;if(I(n)&&!j(n))for(i in a=I(e[t])?e[t]:e[t]={},n)r&&(!0===r||r[i])?H(a,i,n[i]):W(i)&&(a[i]=n[i]);else e[t]=n}function V(e,t){if(null==e)return t;const n={},r=[];function i(e){n[e.name]||(n[e.name]=1,r.push(e))}return t.forEach(i),e.forEach(i),r}function Y(e){return e[e.length-1]}function X(e){return null==e||""===e?null:+e}const J=e=>t=>e*Math.exp(t),Q=e=>t=>Math.log(e*t),K=e=>t=>Math.sign(t)*Math.log1p(Math.abs(t/e)),Z=e=>t=>Math.sign(t)*Math.expm1(Math.abs(t))*e,ee=e=>t=>t<0?-Math.pow(-t,e):Math.pow(t,e);function te(e,t,n,r){const i=n(e[0]),a=n(Y(e)),o=(a-i)*t;return[r(i-o),r(a-o)]}function ne(e,t){return te(e,t,X,S)}function re(e,t){var n=Math.sign(e[0]);return te(e,t,Q(n),J(n))}function ie(e,t,n){return te(e,t,ee(n),ee(1/n))}function ae(e,t,n){return te(e,t,K(n),Z(n))}function oe(e,t,n,r,i){const a=r(e[0]),o=r(Y(e)),s=null!=t?r(t):(a+o)/2;return[i(s+(a-s)*n),i(s+(o-s)*n)]}function se(e,t,n){return oe(e,t,n,X,S)}function ue(e,t,n){const r=Math.sign(e[0]);return oe(e,t,n,Q(r),J(r))}function le(e,t,n,r){return oe(e,t,n,ee(r),ee(1/r))}function ce(e,t,n,r){return oe(e,t,n,K(r),Z(r))}function de(e){return 1+~~(new Date(e).getMonth()/3)}function fe(e){return 1+~~(new Date(e).getUTCMonth()/3)}function he(e){return null!=e?j(e)?e:[e]:[]}function pe(e,t,n){let r,i=e[0],a=e[1];return a=n-t?[t,n]:[i=Math.min(Math.max(i,t),n-r),i+r]}function me(e){return"function"==typeof e}const ge="descending";function ye(e,t,n){n=n||{},t=he(t)||[];const r=[],i=[],a={},o=n.comparator||be;return he(e).forEach(((e,o)=>{null!=e&&(r.push(t[o]===ge?-1:1),i.push(e=me(e)?e:F(e,null,n)),(k(e)||[]).forEach((e=>a[e]=1)))})),0===i.length?null:x(o(i,r),Object.keys(a))}const ve=(e,t)=>(et||null==t)&&null!=e?1:(t=t instanceof Date?+t:t,(e=e instanceof Date?+e:e)!==e&&t==t?-1:t!=t&&e==e?1:0),be=(e,t)=>1===e.length?xe(e[0],t[0]):_e(e,t,e.length),xe=(e,t)=>function(n,r){return ve(e(n),e(r))*t},_e=(e,t,n)=>(t.push(0),function(r,i){let a,o=0,s=-1;for(;0===o&&++se}function Ae(e,t){let n;return r=>{n&&clearTimeout(n),n=setTimeout((()=>(t(r),n=null)),e)}}function we(e){for(let t,n,r=1,i=arguments.length;ra&&(a=r))}else{for(r=t(e[o]);oa&&(a=r))}return[i,a]}function Ee(e,t){const n=e.length;let r,i,a,o,s,u=-1;if(null==t){for(;++u=i){r=a=i;break}if(u===n)return[-1,-1];for(o=s=u;++ui&&(r=i,o=u),a=i){r=a=i;break}if(u===n)return[-1,-1];for(o=s=u;++ui&&(r=i,o=u),ar(e)?n[e]:void 0,set(e,t){return r(e)||(++i.size,n[e]===Me&&--i.empty),n[e]=t,this},delete(e){return r(e)&&(--i.size,++i.empty,n[e]=Me),this},clear(){i.size=i.empty=0,i.object=n={}},test(e){return arguments.length?(t=e,i):t},clean(){const e={};let r=0;for(const i in n){const a=n[i];a===Me||t&&t(a)||(e[i]=a,++r)}i.size=r,i.empty=0,i.object=n=e}};return e&&Object.keys(e).forEach((t=>{i.set(t,e[t])})),i}function Be(e,t,n,r,i,a){if(!n&&0!==n)return a;const o=+n;let s,u=e[0],l=Y(e);lo&&(i=a,a=o,o=i),r=void 0===r||r,((n=void 0===n||n)?a<=e:ae.replace(/\\(.)/g,"$1"))):he(e));const r=e&&e.length,i=n&&n.get||A,a=e=>i(t?[e]:C(e));let o;if(r)if(1===r){const t=a(e[0]);o=function(e){return""+t(e)}}else{const t=e.map(a);o=function(e){let n=""+t[0](e),i=0;for(;++i{t={},n={},r=0},a=(i,a)=>(++r>e&&(n=t,t={},r=1),t[i]=a);return i(),{clear:i,has:e=>Fe(t,e)||Fe(n,e),get:e=>Fe(t,e)?t[e]:Fe(n,e)?a(e,n[e]):void 0,set:(e,n)=>Fe(t,e)?t[e]=n:a(e,n)}}function Ie(e,t,n,r){const i=t.length,a=n.length;if(!a)return t;if(!i)return n;const o=r||new t.constructor(i+a);let s=0,u=0,l=0;for(;s0?n[u++]:t[s++];for(;s=0;)n+=e;return n}function Ge(e,t,n,r){const i=n||" ",a=e+"",o=t-a.length;return o<=0?a:"left"===r?We(i,o)+a:"center"===r?We(i,~~(o/2))+a+We(i,Math.ceil(o/2)):a+We(i,o)}function He(e){return e&&Y(e)-e[0]||0}function Ve(e){return j(e)?"["+e.map(Ve)+"]":I(e)||Ne(e)?JSON.stringify(e).replace("\u2028","\\u2028").replace("\u2029","\\u2029"):e}function Ye(e){return null==e||""===e?null:!(!e||"false"===e||"0"===e)&&!!e}const Xe=e=>qe(e)||$e(e)?e:Date.parse(e);function Je(e,t){return t=t||Xe,null==e||""===e?null:t(e)}function Qe(e){return null==e||""===e?null:e+""}function Ke(e){const t={},n=e.length;for(let r=0;r(e[t]=1+n,e)),{});function pt(e){const t=he(e).slice(),n={};t.length||E("Missing time unit."),t.forEach((e=>{Fe(ht,e)?n[e]=1:E(`Invalid time unit: ${e}.`)}));return(n[it]||n[ot]?1:0)+(n[nt]||n[rt]||n[at]?1:0)+(n[st]?1:0)>1&&E(`Incompatible time units: ${e}`),t.sort(((e,t)=>ht[e]-ht[t])),t}const mt={[tt]:"%Y ",[nt]:"Q%q ",[rt]:"%b ",[at]:"%d ",[it]:"W%U ",[ot]:"%a ",[st]:"%j ",[ut]:"%H:00",[lt]:"00:%M",[ct]:":%S",[dt]:".%L",[`${tt}-${rt}`]:"%Y-%m ",[`${tt}-${rt}-${at}`]:"%Y-%m-%d ",[`${ut}-${lt}`]:"%H:%M"};function gt(e,t){const n=we({},mt,t),r=pt(e),i=r.length;let a,o,s="",u=0;for(u=0;uu;--a)if(o=r.slice(u,a).join("-"),null!=n[o]){s+=n[o],u=a;break}return s.trim()}const yt=new Date;function vt(e){return yt.setFullYear(e),yt.setMonth(0),yt.setDate(1),yt.setHours(0,0,0,0),yt}function bt(e){return _t(new Date(e))}function xt(e){return kt(new Date(e))}function _t(e){return a.timeDay.count(vt(e.getFullYear())-1,e)}function kt(e){return a.timeWeek.count(vt(e.getFullYear())-1,e)}function At(e){return vt(e).getDay()}function wt(e,t,n,r,i,a,o){if(0<=e&&e<100){const s=new Date(-1,t,n,r,i,a,o);return s.setFullYear(e),s}return new Date(e,t,n,r,i,a,o)}function Dt(e){return Ct(new Date(e))}function Et(e){return Ft(new Date(e))}function Ct(e){const t=Date.UTC(e.getUTCFullYear(),0,1);return a.utcDay.count(t-1,e)}function Ft(e){const t=Date.UTC(e.getUTCFullYear(),0,1);return a.utcWeek.count(t-1,e)}function Mt(e){return yt.setTime(Date.UTC(e,0,1)),yt.getUTCDay()}function St(e,t,n,r,i,a,o){if(0<=e&&e<100){const e=new Date(Date.UTC(-1,t,n,r,i,a,o));return e.setUTCFullYear(n.y),e}return new Date(Date.UTC(e,t,n,r,i,a,o))}function Bt(e,t,n,r,i){const a=t||1,o=Y(e),s=(e,t,i)=>function(e,t,n,r){const i=n<=1?e:r?(t,i)=>r+n*Math.floor((e(t,i)-r)/n):(t,r)=>n*Math.floor(e(t,r)/n);return t?(e,n)=>t(i(e,n),n):i}(n[i=i||e],r[i],e===o&&a,t),u=new Date,l=Ke(e),c=l[tt]?s(tt):ke(2012),d=l[rt]?s(rt):l[nt]?s(nt):B,f=l[it]&&l[ot]?s(ot,1,it+ot):l[it]?s(it,1):l[ot]?s(ot,1):l[at]?s(at,1):l[st]?s(st,1):O,h=l[ut]?s(ut):B,p=l[lt]?s(lt):B,m=l[ct]?s(ct):B,g=l[dt]?s(dt):B;return function(e){u.setTime(+e);const t=c(u);return i(t,d(u),f(u,t),h(u),p(u),m(u),g(u))}}function Ot(e,t,n){return t+7*e-(n+6)%7}const Rt={[tt]:e=>e.getFullYear(),[nt]:e=>Math.floor(e.getMonth()/3),[rt]:e=>e.getMonth(),[at]:e=>e.getDate(),[ut]:e=>e.getHours(),[lt]:e=>e.getMinutes(),[ct]:e=>e.getSeconds(),[dt]:e=>e.getMilliseconds(),[st]:e=>_t(e),[it]:e=>kt(e),[it+ot]:(e,t)=>Ot(kt(e),e.getDay(),At(t)),[ot]:(e,t)=>Ot(1,e.getDay(),At(t))},zt={[nt]:e=>3*e,[it]:(e,t)=>Ot(e,0,At(t))};function $t(e,t){return Bt(e,t||1,Rt,zt,wt)}const Tt={[tt]:e=>e.getUTCFullYear(),[nt]:e=>Math.floor(e.getUTCMonth()/3),[rt]:e=>e.getUTCMonth(),[at]:e=>e.getUTCDate(),[ut]:e=>e.getUTCHours(),[lt]:e=>e.getUTCMinutes(),[ct]:e=>e.getUTCSeconds(),[dt]:e=>e.getUTCMilliseconds(),[st]:e=>Ct(e),[it]:e=>Ft(e),[ot]:(e,t)=>Ot(1,e.getUTCDay(),Mt(t)),[it+ot]:(e,t)=>Ot(Ft(e),e.getUTCDay(),Mt(t))},qt={[nt]:e=>3*e,[it]:(e,t)=>Ot(e,0,Mt(t))};function Lt(e,t){return Bt(e,t||1,Tt,qt,St)}const Nt={[tt]:a.timeYear,[nt]:a.timeMonth.every(3),[rt]:a.timeMonth,[it]:a.timeWeek,[at]:a.timeDay,[ot]:a.timeDay,[st]:a.timeDay,[ut]:a.timeHour,[lt]:a.timeMinute,[ct]:a.timeSecond,[dt]:a.timeMillisecond},Pt={[tt]:a.utcYear,[nt]:a.utcMonth.every(3),[rt]:a.utcMonth,[it]:a.utcWeek,[at]:a.utcDay,[ot]:a.utcDay,[st]:a.utcDay,[ut]:a.utcHour,[lt]:a.utcMinute,[ct]:a.utcSecond,[dt]:a.utcMillisecond};function Ut(e){return Nt[e]}function jt(e){return Pt[e]}function It(e,t,n){return e?e.offset(t,n):void 0}function Wt(e,t,n){return It(Ut(e),t,n)}function Gt(e,t,n){return It(jt(e),t,n)}function Ht(e,t,n,r){return e?e.range(t,n,r):void 0}function Vt(e,t,n,r){return Ht(Ut(e),t,n,r)}function Yt(e,t,n,r){return Ht(jt(e),t,n,r)}const Xt=1e3,Jt=6e4,Qt=36e5,Kt=864e5,Zt=2592e6,en=31536e6,tn=[tt,rt,at,ut,lt,ct,dt],nn=tn.slice(0,-1),rn=nn.slice(0,-1),an=rn.slice(0,-1),on=an.slice(0,-1),sn=[tt,rt],un=[tt],ln=[[nn,1,Xt],[nn,5,5e3],[nn,15,15e3],[nn,30,3e4],[rn,1,Jt],[rn,5,3e5],[rn,15,9e5],[rn,30,18e5],[an,1,Qt],[an,3,108e5],[an,6,216e5],[an,12,432e5],[on,1,Kt],[[tt,it],1,6048e5],[sn,1,Zt],[sn,3,7776e6],[un,1,en]];function cn(e){const t=e.extent,n=e.maxbins||40,i=Math.abs(He(t))/n;let a,o,s=r.bisector((e=>e[2])).right(ln,i);return s===ln.length?(a=un,o=r.tickStep(t[0]/en,t[1]/en,n)):s?(s=ln[i/ln[s-1][2]t[n]||(t[n]=e(n))}function fn(e){const t=dn(e.format),n=e.formatPrefix;return{format:t,formatPrefix:n,formatFloat(e){const n=i.formatSpecifier(e||",");if(null==n.precision){switch(n.precision=12,n.type){case"%":n.precision-=2;break;case"e":n.precision-=1}return r=t(n),a=t(".1f")(1)[1],e=>{const t=r(e),n=t.indexOf(a);if(n<0)return t;let i=function(e,t){let n,r=e.lastIndexOf("e");if(r>0)return r;for(r=e.length;--r>t;)if(n=e.charCodeAt(r),n>=48&&n<=57)return r+1}(t,n);const o=in;)if("0"!==t[i]){++i;break}return t.slice(0,i)+o}}return t(n);var r,a},formatSpan(e,a,o,s){s=i.formatSpecifier(null==s?",f":s);const u=r.tickStep(e,a,o),l=Math.max(Math.abs(e),Math.abs(a));let c;if(null==s.precision)switch(s.type){case"s":return isNaN(c=i.precisionPrefix(u,l))||(s.precision=c),n(s,l);case"":case"e":case"g":case"p":case"r":isNaN(c=i.precisionRound(u,l))||(s.precision=c-("e"===s.type));break;case"f":case"%":isNaN(c=i.precisionFixed(u))||(s.precision=c-2*("%"===s.type))}return t(s)}}}let hn,pn;function mn(){return hn=fn({format:i.format,formatPrefix:i.formatPrefix})}function gn(e){return fn(i.formatLocale(e))}function yn(e){return arguments.length?hn=gn(e):hn}function vn(e,t,n){I(n=n||{})||E(`Invalid time multi-format specifier: ${n}`);const r=t(ct),i=t(lt),a=t(ut),o=t(at),s=t(it),u=t(rt),l=t(nt),c=t(tt),d=e(n[dt]||".%L"),f=e(n[ct]||":%S"),h=e(n[lt]||"%I:%M"),p=e(n[ut]||"%I %p"),m=e(n[at]||n[ot]||"%a %d"),g=e(n[it]||"%b %d"),y=e(n[rt]||"%B"),v=e(n[nt]||"%B"),b=e(n[tt]||"%Y");return e=>(r(e)Ne(e)?t(e):vn(t,Ut,e),utcFormat:e=>Ne(e)?n(e):vn(n,jt,e),timeParse:dn(e.parse),utcParse:dn(e.utcParse)}}function xn(){return pn=bn({format:o.timeFormat,parse:o.timeParse,utcFormat:o.utcFormat,utcParse:o.utcParse})}function _n(e){return bn(o.timeFormatLocale(e))}function kn(e){return arguments.length?pn=_n(e):pn}mn(),xn();const An=(e,t)=>we({},e,t);function wn(e,t){const n=e?gn(e):yn(),r=t?_n(t):kn();return An(n,r)}function Dn(e,t){const n=arguments.length;return n&&2!==n&&E("defaultLocale expects either zero or two arguments."),n?An(yn(e),kn(t)):An(yn(),kn())}const En=/^(data:|([A-Za-z]+:)?\/\/)/,Cn=/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,Fn=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g,Mn="file://";async function Sn(e,t){const n=await this.sanitize(e,t),r=n.href;return n.localFile?this.file(r):this.http(r,t)}async function Bn(e,t){t=we({},this.options,t);const n=this.fileAccess,r={href:null};let i,a,o;const s=Cn.test(e.replace(Fn,""));null!=e&&"string"==typeof e&&s||E("Sanitize failure, invalid URI: "+Ve(e));const u=En.test(e);return(o=t.baseURL)&&!u&&(e.startsWith("/")||o.endsWith("/")||(e="/"+e),e=o+e),a=(i=e.startsWith(Mn))||"file"===t.mode||"http"!==t.mode&&!u&&n,i?e=e.slice(Mn.length):e.startsWith("//")&&("file"===t.defaultProtocol?(e=e.slice(2),a=!0):e=(t.defaultProtocol||"http")+":"+e),Object.defineProperty(r,"localFile",{value:!!a}),r.href=e,t.target&&(r.target=t.target+""),t.rel&&(r.rel=t.rel+""),"image"===t.context&&t.crossOrigin&&(r.crossOrigin=t.crossOrigin+""),r}function On(e){return e?t=>new Promise(((n,r)=>{e.readFile(t,((e,t)=>{e?r(e):n(t)}))})):Rn}async function Rn(){E("No file system access.")}function zn(e){return e?async function(t,n){const r=we({},this.options.http,n),i=n&&n.response,a=await e(t,r);return a.ok?me(a[i])?a[i]():a.text():E(a.status+""+a.statusText)}:$n}async function $n(){E("No HTTP fetch method available.")}const Tn=e=>null!=e&&e==e,qn=e=>!(Number.isNaN(+e)||e instanceof Date),Ln={boolean:Ye,integer:X,number:X,date:Je,string:Qe,unknown:S},Nn=[e=>"true"===e||"false"===e||!0===e||!1===e,e=>qn(e)&&Number.isInteger(+e),qn,e=>!Number.isNaN(Date.parse(e))],Pn=["boolean","integer","number","date"];function Un(e,t){if(!e||!e.length)return"unknown";const n=e.length,r=Nn.length,i=Nn.map(((e,t)=>t+1));for(let a,o,s=0,u=0;s0===e?t:e),0)-1]}function jn(e,t){return t.reduce(((t,n)=>(t[n]=Un(e,n),t)),{})}function In(e){const t=function(t,n){const r={delimiter:e};return Wn(t,n?we(n,r):r)};return t.responseType="text",t}function Wn(e,n){return n.header&&(e=n.header.map(Ve).join(n.delimiter)+"\n"+e),t.dsvFormat(n.delimiter).parse(e+"")}function Gn(e,t){const n=t&&t.property?F(t.property):S;return!I(e)||(r=e,"function"==typeof Buffer&&me(Buffer.isBuffer)&&Buffer.isBuffer(r))?n(JSON.parse(e)):function(e,t){!j(e)&&Te(e)&&(e=[...e]);return t&&t.copy?JSON.parse(JSON.stringify(e)):e}(n(e),t);var r}Wn.responseType="text",Gn.responseType="json";const Hn={interior:(e,t)=>e!==t,exterior:(e,t)=>e===t};function Vn(e,t){let r,i,a,o;return e=Gn(e,t),t&&t.feature?(r=n.feature,a=t.feature):t&&t.mesh?(r=n.mesh,a=t.mesh,o=Hn[t.filter]):E("Missing TopoJSON feature or mesh parameter."),i=(i=e.objects[a])?r(e,i,o):E("Invalid TopoJSON object: "+a),i&&i.features||[i]}Vn.responseType="json";const Yn={dsv:Wn,csv:In(","),tsv:In("\t"),json:Gn,topojson:Vn};function Xn(e,t){return arguments.length>1?(Yn[e]=t,this):Fe(Yn,e)?Yn[e]:null}function Jn(e){const t=Xn(e);return t&&t.responseType||"text"}function Qn(e,t,n,r){const i=Xn((t=t||{}).type||"json");return i||E("Unknown data format type: "+t.type),e=i(e,t),t.parse&&function(e,t,n,r){if(!e.length)return;const i=kn();n=n||i.timeParse,r=r||i.utcParse;let a,o,s,u,l,c,d=e.columns||Object.keys(e[0]);"auto"===t&&(t=jn(e,d));d=Object.keys(t);const f=d.map((e=>{const i=t[e];let a,o;if(i&&(i.startsWith("date:")||i.startsWith("utc:"))){a=i.split(/:(.+)?/,2),o=a[1],("'"===o[0]&&"'"===o[o.length-1]||'"'===o[0]&&'"'===o[o.length-1])&&(o=o.slice(1,-1));return("utc"===a[0]?r:n)(o)}if(!Ln[i])throw Error("Illegal format pattern: "+e+":"+i);return Ln[i]}));for(s=0,l=e.length,c=d.length;s({options:n||{},sanitize:Bn,load:Sn,fileAccess:!!t,file:On(t),http:zn(e)})}("undefined"!=typeof fetch&&fetch,null);function Zn(e){const t=e||S,n=[],r={};return n.add=e=>{const i=t(e);return r[i]||(r[i]=1,n.push(e)),n},n.remove=e=>{const i=t(e);if(r[i]){r[i]=0;const t=n.indexOf(e);t>=0&&n.splice(t,1)}return n},n}async function er(e,t){try{await t(e)}catch(t){e.error(t)}}const tr=Symbol("vega_id");let nr=1;function rr(e){return!(!e||!ir(e))}function ir(e){return e[tr]}function ar(e,t){return e[tr]=t,e}function or(e){const t=e===Object(e)?e:{data:e};return ir(t)?t:ar(t,nr++)}function sr(e){return ur(e,or({}))}function ur(e,t){for(const n in e)t[n]=e[n];return t}function lr(e,t){return ar(t,ir(e))}function cr(e,t){return e?t?(n,r)=>e(n,r)||ir(t(n))-ir(t(r)):(t,n)=>e(t,n)||ir(t)-ir(n):null}function dr(e){return e&&e.constructor===fr}function fr(){const e=[],t=[],n=[],r=[],i=[];let a=null,o=!1;return{constructor:fr,insert(t){const n=he(t),r=n.length;for(let t=0;t{p(e)&&(l[ir(e)]=-1)}));for(d=0,f=e.length;d0&&(y(m,p,h.value),s.modifies(p));for(d=0,f=i.length;d{p(e)&&l[ir(e)]>0&&y(e,h.field,h.value)})),s.modifies(h.field);if(o)s.mod=t.length||r.length?u.filter((e=>l[ir(e)]>0)):u.slice();else for(g in c)s.mod.push(c[g]);return(a||null==a&&(t.length||r.length))&&s.clean(!0),s}}}const hr="_:mod:_";function pr(){Object.defineProperty(this,hr,{writable:!0,value:{}})}pr.prototype={set(e,t,n,r){const i=this,a=i[e],o=i[hr];return null!=t&&t>=0?(a[t]!==n||r)&&(a[t]=n,o[t+":"+e]=-1,o[e]=-1):(a!==n||r)&&(i[e]=n,o[e]=j(n)?1+n.length:-1),i},modified(e,t){const n=this[hr];if(!arguments.length){for(const e in n)if(n[e])return!0;return!1}if(j(e)){for(let t=0;t=0?t+1{o instanceof yr?(o!==this&&(t&&o.targets().add(this),a.push(o)),i.push({op:o,name:e,index:n})):r.set(e,n,o)};for(o in e)if(s=e[o],"pulse"===o)he(s).forEach((e=>{e instanceof yr?e!==this&&(e.targets().add(this),a.push(e)):E("Pulse parameters must be operator instances.")})),this.source=s;else if(j(s))for(r.set(o,-1,Array(u=s.length)),l=0;l{const n=Date.now();return n-t>e?(t=n,1):0}))},debounce(e){const t=_r();return this.targets().add(_r(null,null,Ae(e,(e=>{const n=e.dataflow;t.receive(e),n&&n.run&&n.run()})))),t},between(e,t){let n=!1;return e.targets().add(_r(null,null,(()=>n=!0))),t.targets().add(_r(null,null,(()=>n=!1))),this.filter((()=>n))},detach(){this._filter=R,this._targets=null}};const kr={skip:!0};function Ar(e,t,n,r,i,a){const o=we({},a,kr);let s,u;me(n)||(n=ke(n)),void 0===r?s=t=>e.touch(n(t)):me(r)?(u=new yr(null,r,i,!1),s=t=>{u.evaluate(t);const r=n(t),i=u.value;dr(i)?e.pulse(r,i,a):e.update(r,i,o)}):s=t=>e.update(n(t),r,o),t.apply(s)}function wr(e,t,n,r,i,a){if(void 0===r)t.targets().add(n);else{const o=a||{},s=new yr(null,function(e,t){return t=me(t)?t:ke(t),e?function(n,r){const i=t(n,r);return e.skip()||(e.skip(i!==this.value).value=i),i}:t}(n,r),i,!1);s.modified(o.force),s.rank=t.rank,t.targets().add(s),n&&(s.skip(!0),s.value=n.value,s.targets().add(n),e.connect(n,[s]))}}const Dr={};function Er(e,t,n){this.dataflow=e,this.stamp=null==t?-1:t,this.add=[],this.rem=[],this.mod=[],this.fields=null,this.encode=n||null}function Cr(e,t){const n=[];return et(e,t,(e=>n.push(e))),n}function Fr(e,t){const n={};return e.visit(t,(e=>{n[ir(e)]=1})),e=>n[ir(e)]?null:e}function Mr(e,t){return e?(n,r)=>e(n,r)&&t(n,r):t}function Sr(e,t,n,r){const i=this;let a=0;this.dataflow=e,this.stamp=t,this.fields=null,this.encode=r||null,this.pulses=n;for(const e of n)if(e.stamp===t){if(e.fields){const t=i.fields||(i.fields={});for(const n in e.fields)t[n]=1}e.changed(i.ADD)&&(a|=i.ADD),e.changed(i.REM)&&(a|=i.REM),e.changed(i.MOD)&&(a|=i.MOD)}this.changes=a}function Br(e){return e.error("Dataflow already running. Use runAsync() to chain invocations."),e}Er.prototype={StopPropagation:Dr,ADD:1,REM:2,MOD:4,ADD_REM:3,ADD_MOD:5,ALL:7,REFLOW:8,SOURCE:16,NO_SOURCE:32,NO_FIELDS:64,fork(e){return new Er(this.dataflow).init(this,e)},clone(){const e=this.fork(7);return e.add=e.add.slice(),e.rem=e.rem.slice(),e.mod=e.mod.slice(),e.source&&(e.source=e.source.slice()),e.materialize(23)},addAll(){let e=this;return!e.source||e.add===e.rem||!e.rem.length&&e.source.length===e.add.length||(e=new Er(this.dataflow).init(this),e.add=e.source,e.rem=[]),e},init(e,t){const n=this;return n.stamp=e.stamp,n.encode=e.encode,!e.fields||64&t||(n.fields=e.fields),1&t?(n.addF=e.addF,n.add=e.add):(n.addF=null,n.add=[]),2&t?(n.remF=e.remF,n.rem=e.rem):(n.remF=null,n.rem=[]),4&t?(n.modF=e.modF,n.mod=e.mod):(n.modF=null,n.mod=[]),32&t?(n.srcF=null,n.source=null):(n.srcF=e.srcF,n.source=e.source,e.cleans&&(n.cleans=e.cleans)),n},runAfter(e){this.dataflow.runAfter(e)},changed(e){const t=e||7;return 1&t&&this.add.length||2&t&&this.rem.length||4&t&&this.mod.length},reflow(e){if(e)return this.fork(7).reflow();const t=this.add.length,n=this.source&&this.source.length;return n&&n!==t&&(this.mod=this.source,t&&this.filter(4,Fr(this,1))),this},clean(e){return arguments.length?(this.cleans=!!e,this):this.cleans},modifies(e){const t=this.fields||(this.fields={});return j(e)?e.forEach((e=>t[e]=!0)):t[e]=!0,this},modified(e,t){const n=this.fields;return!(!t&&!this.mod.length||!n)&&(arguments.length?j(e)?e.some((e=>n[e])):n[e]:!!n)},filter(e,t){const n=this;return 1&e&&(n.addF=Mr(n.addF,t)),2&e&&(n.remF=Mr(n.remF,t)),4&e&&(n.modF=Mr(n.modF,t)),16&e&&(n.srcF=Mr(n.srcF,t)),n},materialize(e){const t=this;return 1&(e=e||7)&&t.addF&&(t.add=Cr(t.add,t.addF),t.addF=null),2&e&&t.remF&&(t.rem=Cr(t.rem,t.remF),t.remF=null),4&e&&t.modF&&(t.mod=Cr(t.mod,t.modF),t.modF=null),16&e&&t.srcF&&(t.source=t.source.filter(t.srcF),t.srcF=null),t},visit(e,t){const n=this,r=t;if(16&e)return et(n.source,n.srcF,r),n;1&e&&et(n.add,n.addF,r),2&e&&et(n.rem,n.remF,r),4&e&&et(n.mod,n.modF,r);const i=n.source;if(8&e&&i){const e=n.add.length+n.mod.length;e===i.length||et(i,e?Fr(n,5):n.srcF,r)}return n}},Oe(Sr,Er,{fork(e){const t=new Er(this.dataflow).init(this,e&this.NO_FIELDS);return void 0!==e&&(e&t.ADD&&this.visit(t.ADD,(e=>t.add.push(e))),e&t.REM&&this.visit(t.REM,(e=>t.rem.push(e))),e&t.MOD&&this.visit(t.MOD,(e=>t.mod.push(e)))),t},changed(e){return this.changes&e},modified(e){const t=this,n=t.fields;return n&&t.changes&t.MOD?j(e)?e.some((e=>n[e])):n[e]:0},filter(){E("MultiPulse does not support filtering.")},materialize(){E("MultiPulse does not support materialization.")},visit(e,t){const n=this,r=n.pulses,i=r.length;let a=0;if(e&n.SOURCE)for(;at=[],size:()=>t.length,peek:()=>t[0],push:n=>(t.push(n),zr(t,0,t.length-1,e)),pop:()=>{const n=t.pop();let r;return t.length?(r=t[0],t[0]=n,function(e,t,n){const r=t,i=e.length,a=e[t];let o,s=1+(t<<1);for(;s=0&&(s=o),e[t]=e[s],s=1+((t=s)<<1);e[t]=a,zr(e,r,t,n)}(t,0,e)):r=n,r}}}function zr(e,t,n,r){let i,a;const o=e[n];for(;n>t&&(a=n-1>>1,i=e[a],r(o,i)<0);)e[n]=i,n=a;return e[n]=o}function $r(){this.logger(U()),this.logLevel(q),this._clock=0,this._rank=0,this._locale=Dn();try{this._loader=Kn()}catch(e){}this._touched=Zn(M),this._input={},this._pulse=null,this._heap=Rr(((e,t)=>e.qrank-t.qrank)),this._postrun=[]}function Tr(e){return function(){return this._log[e].apply(this,arguments)}}function qr(e,t){yr.call(this,e,null,t)}$r.prototype={stamp(){return this._clock},loader(e){return arguments.length?(this._loader=e,this):this._loader},locale(e){return arguments.length?(this._locale=e,this):this._locale},logger(e){return arguments.length?(this._log=e,this):this._log},error:Tr("error"),warn:Tr("warn"),info:Tr("info"),debug:Tr("debug"),logLevel:Tr("level"),cleanThreshold:1e4,add:function(e,t,n,r){let i,a=1;return e instanceof yr?i=e:e&&e.prototype instanceof yr?i=new e:me(e)?i=new yr(null,e):(a=0,i=new yr(e,t)),this.rank(i),a&&(r=n,n=t),n&&this.connect(i,i.parameters(n,r)),this.touch(i),i},connect:function(e,t){const n=e.rank,r=t.length;for(let i=0;i=0;)t.push(n=r[i]),n===e&&E("Cycle detected in dataflow graph.")},pulse:function(e,t,n){this.touch(e,n||Or);const r=new Er(this,this._clock+(this._pulse?0:1)),i=e.pulse&&e.pulse.source||[];return r.target=e,this._input[e.id]=t.pulse(r,i),this},touch:function(e,t){const n=t||Or;return this._pulse?this._enqueue(e):this._touched.add(e),n.skip&&e.skip(!0),this},update:function(e,t,n){const r=n||Or;return(e.set(t)||r.force)&&this.touch(e,r),this},changeset:fr,ingest:function(e,t,n){return t=this.parse(t,n),this.pulse(e,this.changeset().insert(t))},parse:function(e,t){const n=this.locale();return Qn(e,t,n.timeParse,n.utcParse)},preload:async function(e,t,n){const r=this,i=r._pending||function(e){let t;const n=new Promise((e=>t=e));return n.requests=0,n.done=()=>{0==--n.requests&&(e._pending=null,t(e))},e._pending=n}(r);i.requests+=1;const a=await r.request(t,n);return r.pulse(e,r.changeset().remove(R).insert(a.data||[])),i.done(),a},request:async function(e,t){const n=this;let r,i=0;try{r=await n.loader().load(e,{context:"dataflow",response:Jn(t&&t.type)});try{r=n.parse(r,t)}catch(t){i=-2,n.warn("Data ingestion failed",e,t)}}catch(t){i=-1,n.warn("Loading failed",e,t)}return{data:r,status:i}},events:function(e,t,n,r){const i=this,a=_r(n,r),o=function(e){e.dataflow=i;try{a.receive(e)}catch(e){i.error(e)}finally{i.run()}};let s;s="string"==typeof e&&"undefined"!=typeof document?document.querySelectorAll(e):he(e);const u=s.length;for(let e=0;er._enqueue(e,!0))),r._touched=Zn(M);let o,s,u,l=0;try{for(;r._heap.size()>0;)o=r._heap.pop(),o.rank===o.qrank?(s=o.run(r._getPulse(o,e)),s.then?s=await s:s.async&&(i.push(s.async),s=Dr),s!==Dr&&o._targets&&o._targets.forEach((e=>r._enqueue(e))),++l):r._enqueue(o,!0)}catch(e){r._heap.clear(),u=e}if(r._input={},r._pulse=null,r.debug(`Pulse ${a}: ${l} operators`),u&&(r._postrun=[],r.error(u)),r._postrun.length){const e=r._postrun.sort(((e,t)=>t.priority-e.priority));r._postrun=[];for(let t=0;tr.runAsync(null,(()=>{e.forEach((e=>{try{e(r)}catch(e){r.error(e)}}))})))),r},run:function(e,t,n){return this._pulse?Br(this):(this.evaluate(e,t,n),this)},runAsync:async function(e,t,n){for(;this._running;)await this._running;const r=()=>this._running=null;return(this._running=this.evaluate(e,t,n)).then(r,r),this._running},runAfter:function(e,t,n){if(this._pulse||t)this._postrun.push({priority:n||0,callback:e});else try{e(this)}catch(e){this.error(e)}},_enqueue:function(e,t){const n=e.stampe.pulse)),t):this._input[e.id]||function(e,t){if(t&&t.stamp===e.stamp)return t;e=e.fork(),t&&t!==Dr&&(e.source=t.source);return e}(this._pulse,n&&n.pulse)}},Oe(qr,yr,{run(e){if(e.stampthis.pulse=e)):t!==e.StopPropagation&&(this.pulse=t),t},evaluate(e){const t=this.marshall(e.stamp),n=this.transform(t,e);return t.clear(),n},transform(){}});const Lr={};function Nr(e){const t=Pr(e);return t&&t.Definition||null}function Pr(e){return e=e&&e.toLowerCase(),Fe(Lr,e)?Lr[e]:null}function*Ur(e,t){if(null==t)for(let t of e)null!=t&&""!==t&&(t=+t)>=t&&(yield t);else{let n=-1;for(let r of e)r=t(r,++n,e),null!=r&&""!==r&&(r=+r)>=r&&(yield r)}}function jr(e,t,n){const i=Float64Array.from(Ur(e,n));return i.sort(r.ascending),t.map((e=>r.quantileSorted(i,e)))}function Ir(e,t){return jr(e,[.25,.5,.75],t)}function Wr(e,t){const n=e.length,i=r.deviation(e,t),a=Ir(e,t),o=(a[2]-a[0])/1.34;return 1.06*(Math.min(i,o)||i||Math.abs(a[0])||1)*Math.pow(n,-.2)}function Gr(e){const t=e.maxbins||20,n=e.base||10,r=Math.log(n),i=e.divide||[5,2];let a,o,s,u,l,c,d=e.extent[0],f=e.extent[1];const h=e.span||f-d||Math.abs(d)||1;if(e.step)a=e.step;else if(e.steps){for(u=h/t,l=0,c=e.steps.length;lt;)a*=n;for(l=0,c=i.length;l=s&&h/u<=t&&(a=u)}u=Math.log(a);const p=u>=0?0:1+~~(-u/r),m=Math.pow(n,-p-1);return(e.nice||void 0===e.nice)&&(u=Math.floor(d/a+m)*a,d=de);const i=e.length,a=new Float64Array(i);let o,s=0,u=1,l=r(e[0]),c=l,d=l+t;for(;u=d){for(c=(l+c)/2;s>1);io;)e[i--]=e[a]}a=o,o=r}return e}(a,t+t/4):a}e.random=Math.random;const Yr=Math.sqrt(2*Math.PI),Xr=Math.SQRT2;let Jr=NaN;function Qr(t,n){t=t||0,n=null==n?1:n;let r,i,a=0,o=0;if(Jr==Jr)a=Jr,Jr=NaN;else{do{a=2*e.random()-1,o=2*e.random()-1,r=a*a+o*o}while(0===r||r>1);i=Math.sqrt(-2*Math.log(r)/r),a*=i,Jr=o*i}return t+a*n}function Kr(e,t,n){const r=(e-(t||0))/(n=null==n?1:n);return Math.exp(-.5*r*r)/(n*Yr)}function Zr(e,t,n){const r=(e-(t=t||0))/(n=null==n?1:n),i=Math.abs(r);let a;if(i>37)a=0;else{const e=Math.exp(-i*i/2);let t;i<7.07106781186547?(t=.0352624965998911*i+.700383064443688,t=t*i+6.37396220353165,t=t*i+33.912866078383,t=t*i+112.079291497871,t=t*i+221.213596169931,t=t*i+220.206867912376,a=e*t,t=.0883883476483184*i+1.75566716318264,t=t*i+16.064177579207,t=t*i+86.7807322029461,t=t*i+296.564248779674,t=t*i+637.333633378831,t=t*i+793.826512519948,t=t*i+440.413735824752,a/=t):(t=i+.65,t=i+4/t,t=i+3/t,t=i+2/t,t=i+1/t,a=e/t/2.506628274631)}return r>0?1-a:a}function ei(e,t,n){return e<0||e>1?NaN:(t||0)+(null==n?1:n)*Xr*function(e){let t,n=-Math.log((1-e)*(1+e));n<6.25?(n-=3.125,t=-364441206401782e-35,t=t*n-16850591381820166e-35,t=128584807152564e-32+t*n,t=11157877678025181e-33+t*n,t=t*n-1333171662854621e-31,t=20972767875968562e-33+t*n,t=6637638134358324e-30+t*n,t=t*n-4054566272975207e-29,t=t*n-8151934197605472e-29,t=26335093153082323e-28+t*n,t=t*n-12975133253453532e-27,t=t*n-5415412054294628e-26,t=1.0512122733215323e-9+t*n,t=t*n-4.112633980346984e-9,t=t*n-2.9070369957882005e-8,t=4.2347877827932404e-7+t*n,t=t*n-13654692000834679e-22,t=t*n-13882523362786469e-21,t=.00018673420803405714+t*n,t=t*n-.000740702534166267,t=t*n-.006033670871430149,t=.24015818242558962+t*n,t=1.6536545626831027+t*n):n<16?(n=Math.sqrt(n)-3.25,t=2.2137376921775787e-9,t=9.075656193888539e-8+t*n,t=t*n-2.7517406297064545e-7,t=1.8239629214389228e-8+t*n,t=15027403968909828e-22+t*n,t=t*n-4013867526981546e-21,t=29234449089955446e-22+t*n,t=12475304481671779e-21+t*n,t=t*n-47318229009055734e-21,t=6828485145957318e-20+t*n,t=24031110387097894e-21+t*n,t=t*n-.0003550375203628475,t=.0009532893797373805+t*n,t=t*n-.0016882755560235047,t=.002491442096107851+t*n,t=t*n-.003751208507569241,t=.005370914553590064+t*n,t=1.0052589676941592+t*n,t=3.0838856104922208+t*n):Number.isFinite(n)?(n=Math.sqrt(n)-5,t=-27109920616438573e-27,t=t*n-2.555641816996525e-10,t=1.5076572693500548e-9+t*n,t=t*n-3.789465440126737e-9,t=7.61570120807834e-9+t*n,t=t*n-1.496002662714924e-8,t=2.914795345090108e-8+t*n,t=t*n-6.771199775845234e-8,t=2.2900482228026655e-7+t*n,t=t*n-9.9298272942317e-7,t=4526062597223154e-21+t*n,t=t*n-1968177810553167e-20,t=7599527703001776e-20+t*n,t=t*n-.00021503011930044477,t=t*n-.00013871931833623122,t=1.0103004648645344+t*n,t=4.849906401408584+t*n):t=1/0;return t*e}(2*e-1)}function ti(e,t){let n,r;const i={mean(e){return arguments.length?(n=e||0,i):n},stdev(e){return arguments.length?(r=null==e?1:e,i):r},sample:()=>Qr(n,r),pdf:e=>Kr(e,n,r),cdf:e=>Zr(e,n,r),icdf:e=>ei(e,n,r)};return i.mean(e).stdev(t)}function ni(t,n){const r=ti();let i=0;const a={data(e){return arguments.length?(t=e,i=e?e.length:0,a.bandwidth(n)):t},bandwidth(e){return arguments.length?(!(n=e)&&t&&(n=Wr(t)),a):n},sample:()=>t[~~(e.random()*i)]+n*r.sample(),pdf(e){let a=0,o=0;for(;ori(n,r),pdf:e=>ii(e,n,r),cdf:e=>ai(e,n,r),icdf:e=>oi(e,n,r)};return i.mean(e).stdev(t)}function ui(t,n){let r,i=0;const a={weights(e){return arguments.length?(r=function(e){const t=[];let n,r=0;for(n=0;n=t&&e<=n?1/(n-t):0}function di(e,t,n){return null==n&&(n=null==t?1:t,t=0),en?1:(e-t)/(n-t)}function fi(e,t,n){return null==n&&(n=null==t?1:t,t=0),e>=0&&e<=1?t+e*(n-t):NaN}function hi(e,t){let n,r;const i={min(e){return arguments.length?(n=e||0,i):n},max(e){return arguments.length?(r=null==e?1:e,i):r},sample:()=>li(n,r),pdf:e=>ci(e,n,r),cdf:e=>di(e,n,r),icdf:e=>fi(e,n,r)};return null==t&&(t=null==e?1:e,e=0),i.min(e).max(t)}function pi(e,t,n){let r=0,i=0;for(const a of e){const e=n(a);null==t(a)||null==e||isNaN(e)||(r+=(e-r)/++i)}return{coef:[r],predict:()=>r,rSquared:0}}function mi(e,t,n,r){const i=r-e*e,a=Math.abs(i)<1e-24?0:(n-e*t)/i;return[t-a*e,a]}function gi(e,t,n,r){e=e.filter((e=>{let r=t(e),i=n(e);return null!=r&&(r=+r)>=r&&null!=i&&(i=+i)>=i})),r&&e.sort(((e,n)=>t(e)-t(n)));const i=e.length,a=new Float64Array(i),o=new Float64Array(i);let s,u,l,c=0,d=0,f=0;for(l of e)a[c]=s=+t(l),o[c]=u=+n(l),++c,d+=(s-d)/c,f+=(u-f)/c;for(c=0;c=i&&null!=a&&(a=+a)>=a&&r(i,a,++o)}function vi(e,t,n,r,i){let a=0,o=0;return yi(e,t,n,((e,t)=>{const n=t-i(e),s=t-r;a+=n*n,o+=s*s})),1-a/o}function bi(e,t,n){let r=0,i=0,a=0,o=0,s=0;yi(e,t,n,((e,t)=>{++s,r+=(e-r)/s,i+=(t-i)/s,a+=(e*t-a)/s,o+=(e*e-o)/s}));const u=mi(r,i,a,o),l=e=>u[0]+u[1]*e;return{coef:u,predict:l,rSquared:vi(e,t,n,i,l)}}function xi(e,t,n){let r=0,i=0,a=0,o=0,s=0;yi(e,t,n,((e,t)=>{++s,e=Math.log(e),r+=(e-r)/s,i+=(t-i)/s,a+=(e*t-a)/s,o+=(e*e-o)/s}));const u=mi(r,i,a,o),l=e=>u[0]+u[1]*Math.log(e);return{coef:u,predict:l,rSquared:vi(e,t,n,i,l)}}function _i(e,t,n){const[r,i,a,o]=gi(e,t,n);let s,u,l,c=0,d=0,f=0,h=0,p=0;yi(e,t,n,((e,t)=>{s=r[p++],u=Math.log(t),l=s*t,c+=(t*u-c)/p,d+=(l-d)/p,f+=(l*u-f)/p,h+=(s*l-h)/p}));const[m,g]=mi(d/o,c/o,f/o,h/o),y=e=>Math.exp(m+g*(e-a));return{coef:[Math.exp(m-g*a),g],predict:y,rSquared:vi(e,t,n,o,y)}}function ki(e,t,n){let r=0,i=0,a=0,o=0,s=0,u=0;yi(e,t,n,((e,t)=>{const n=Math.log(e),l=Math.log(t);++u,r+=(n-r)/u,i+=(l-i)/u,a+=(n*l-a)/u,o+=(n*n-o)/u,s+=(t-s)/u}));const l=mi(r,i,a,o),c=e=>l[0]*Math.pow(e,l[1]);return l[0]=Math.exp(l[0]),{coef:l,predict:c,rSquared:vi(e,t,n,s,c)}}function Ai(e,t,n){const[r,i,a,o]=gi(e,t,n),s=r.length;let u,l,c,d,f=0,h=0,p=0,m=0,g=0;for(u=0;ub*(e-=a)*e+x*e+_+o;return{coef:[_-x*a+b*a*a+o,x-2*b*a,b],predict:k,rSquared:vi(e,t,n,o,k)}}function wi(e,t,n,r){if(0===r)return pi(e,t,n);if(1===r)return bi(e,t,n);if(2===r)return Ai(e,t,n);const[i,a,o,s]=gi(e,t,n),u=i.length,l=[],c=[],d=r+1;let f,h,p,m,g;for(f=0;fMath.abs(e[r][o])&&(o=i);for(a=r;a=r;a--)e[a][i]-=e[a][r]*e[r][i]/e[r][r]}for(i=t-1;i>=0;--i){for(s=0,a=i+1;a{e-=o;let t=s+y[0]+y[1]*e+y[2]*e*e;for(f=3;f=0;--a)for(s=t[a],u=1,i[a]+=s,o=1;o<=a;++o)u*=(a+1-o)/o,i[a-o]+=s*Math.pow(n,o)*u;return i[0]+=r,i}function Ei(e,t,n,i){const[a,o,s,u]=gi(e,t,n,!0),l=a.length,c=Math.max(2,~~(i*l)),d=new Float64Array(l),f=new Float64Array(l),h=new Float64Array(l).fill(1);for(let e=-1;++e<=2;){const t=[0,c-1];for(let e=0;ea[i]-n?r:i;let u=0,l=0,c=0,p=0,m=0;const g=1/Math.abs(a[s]-n||1);for(let e=r;e<=i;++e){const t=a[e],r=o[e],i=Ci(Math.abs(n-t)*g)*h[e],s=t*i;u+=i,l+=s,c+=r*i,p+=r*s,m+=t*s}const[y,v]=mi(l/u,c/u,p/u,m/u);d[e]=y+v*n,f[e]=Math.abs(o[e]-d[e]),Fi(a,e+1,t)}if(2===e)break;const n=r.median(f);if(Math.abs(n)<1e-12)break;for(let e,t,r=0;r=1?1e-12:(t=1-e*e)*t}return function(e,t,n,r){const i=e.length,a=[];let o,s=0,u=0,l=[];for(;s=e.length))for(;t>i&&e[a]-r<=r-e[i];)n[0]=++i,n[1]=a,++a}const Mi=.5*Math.PI/180;function Si(e,t,n,r){n=n||25,r=Math.max(n,r||200);const i=t=>[t,e(t)],a=t[0],o=t[1],s=o-a,u=s/r,l=[i(a)],c=[];if(n===r){for(let e=1;e0;)c.push(i(a+e/n*s));let d=l[0],f=c[c.length-1];const h=1/s,p=function(e,t){let n=e,r=e;const i=t.length;for(let e=0;er&&(r=i)}return 1/(r-n)}(d[1],c);for(;f;){const e=i((d[0]+f[0])/2);e[0]-d[0]>=u&&Bi(d,e,f,h,p)>Mi?c.push(e):(d=f,l.push(f),c.pop()),f=c[c.length-1]}return l}function Bi(e,t,n,r,i){const a=Math.atan2(i*(n[1]-e[1]),r*(n[0]-e[0])),o=Math.atan2(i*(t[1]-e[1]),r*(t[0]-e[0]));return Math.abs(a-o)}function Oi(e){return e&&e.length?1===e.length?e[0]:(t=e,e=>{const n=t.length;let r=1,i=String(t[0](e));for(;r{},$i={init:zi,add:zi,rem:zi,idx:0},Ti={values:{init:e=>e.cell.store=!0,value:e=>e.cell.data.values(),idx:-1},count:{value:e=>e.cell.num},__count__:{value:e=>e.missing+e.valid},missing:{value:e=>e.missing},valid:{value:e=>e.valid},sum:{init:e=>e.sum=0,value:e=>e.sum,add:(e,t)=>e.sum+=+t,rem:(e,t)=>e.sum-=t},product:{init:e=>e.product=1,value:e=>e.valid?e.product:void 0,add:(e,t)=>e.product*=t,rem:(e,t)=>e.product/=t},mean:{init:e=>e.mean=0,value:e=>e.valid?e.mean:void 0,add:(e,t)=>(e.mean_d=t-e.mean,e.mean+=e.mean_d/e.valid),rem:(e,t)=>(e.mean_d=t-e.mean,e.mean-=e.valid?e.mean_d/e.valid:e.mean)},average:{value:e=>e.valid?e.mean:void 0,req:["mean"],idx:1},variance:{init:e=>e.dev=0,value:e=>e.valid>1?e.dev/(e.valid-1):void 0,add:(e,t)=>e.dev+=e.mean_d*(t-e.mean),rem:(e,t)=>e.dev-=e.mean_d*(t-e.mean),req:["mean"],idx:1},variancep:{value:e=>e.valid>1?e.dev/e.valid:void 0,req:["variance"],idx:2},stdev:{value:e=>e.valid>1?Math.sqrt(e.dev/(e.valid-1)):void 0,req:["variance"],idx:2},stdevp:{value:e=>e.valid>1?Math.sqrt(e.dev/e.valid):void 0,req:["variance"],idx:2},stderr:{value:e=>e.valid>1?Math.sqrt(e.dev/(e.valid*(e.valid-1))):void 0,req:["variance"],idx:2},distinct:{value:e=>e.cell.data.distinct(e.get),req:["values"],idx:3},ci0:{value:e=>e.cell.data.ci0(e.get),req:["values"],idx:3},ci1:{value:e=>e.cell.data.ci1(e.get),req:["values"],idx:3},median:{value:e=>e.cell.data.q2(e.get),req:["values"],idx:3},q1:{value:e=>e.cell.data.q1(e.get),req:["values"],idx:3},q3:{value:e=>e.cell.data.q3(e.get),req:["values"],idx:3},min:{init:e=>e.min=void 0,value:e=>e.min=Number.isNaN(e.min)?e.cell.data.min(e.get):e.min,add:(e,t)=>{(t{t<=e.min&&(e.min=NaN)},req:["values"],idx:4},max:{init:e=>e.max=void 0,value:e=>e.max=Number.isNaN(e.max)?e.cell.data.max(e.get):e.max,add:(e,t)=>{(t>e.max||void 0===e.max)&&(e.max=t)},rem:(e,t)=>{t>=e.max&&(e.max=NaN)},req:["values"],idx:4},argmin:{init:e=>e.argmin=void 0,value:e=>e.argmin||e.cell.data.argmin(e.get),add:(e,t,n)=>{t{t<=e.min&&(e.argmin=void 0)},req:["min","values"],idx:3},argmax:{init:e=>e.argmax=void 0,value:e=>e.argmax||e.cell.data.argmax(e.get),add:(e,t,n)=>{t>e.max&&(e.argmax=n)},rem:(e,t)=>{t>=e.max&&(e.argmax=void 0)},req:["max","values"],idx:3},exponential:{init:(e,t)=>{e.exp=0,e.exp_r=t},value:e=>e.valid?e.exp*(1-e.exp_r)/(1-e.exp_r**e.valid):void 0,add:(e,t)=>e.exp=e.exp_r*e.exp+t,rem:(e,t)=>e.exp=(e.exp-t/e.exp_r**(e.valid-1))/e.exp_r},exponentialb:{value:e=>e.valid?e.exp*(1-e.exp_r):void 0,req:["exponential"],idx:1}},qi=Object.keys(Ti).filter((e=>"__count__"!==e));function Li(e,t,n){return Ti[e](n,t)}function Ni(e,t){return e.idx-t.idx}function Pi(){this.valid=0,this.missing=0,this._ops.forEach((e=>null==e.aggregate_param?e.init(this):e.init(this,e.aggregate_param)))}function Ui(e,t){null!=e&&""!==e?e==e&&(++this.valid,this._ops.forEach((n=>n.add(this,e,t)))):++this.missing}function ji(e,t){null!=e&&""!==e?e==e&&(--this.valid,this._ops.forEach((n=>n.rem(this,e,t)))):--this.missing}function Ii(e){return this._out.forEach((t=>e[t.out]=t.value(this))),e}function Wi(e,t){const n=t||S,r=function(e){const t={};e.forEach((e=>t[e.name]=e));const n=e=>{e.req&&e.req.forEach((e=>{t[e]||n(t[e]=Ti[e]())}))};return e.forEach(n),Object.values(t).sort(Ni)}(e),i=e.slice().sort(Ni);function a(e){this._ops=r,this._out=i,this.cell=e,this.init()}return a.prototype.init=Pi,a.prototype.add=Ui,a.prototype.rem=ji,a.prototype.set=Ii,a.prototype.get=n,a.fields=e.map((e=>e.out)),a}function Gi(e){this._key=e?F(e):ir,this.reset()}[...qi,"__count__"].forEach((e=>{Ti[e]=function(e,t){return(n,r)=>we({name:e,aggregate_param:r,out:n||e},$i,t)}(e,Ti[e])}));const Hi=Gi.prototype;function Vi(e){qr.call(this,null,e),this._adds=[],this._mods=[],this._alen=0,this._mlen=0,this._drop=!0,this._cross=!1,this._dims=[],this._dnames=[],this._measures=[],this._countOnly=!1,this._counts=null,this._prev=null,this._inputs=null,this._outputs=null}Hi.reset=function(){this._add=[],this._rem=[],this._ext=null,this._get=null,this._q=null},Hi.add=function(e){this._add.push(e)},Hi.rem=function(e){this._rem.push(e)},Hi.values=function(){if(this._get=null,0===this._rem.length)return this._add;const e=this._add,t=this._rem,n=this._key,r=e.length,i=t.length,a=Array(r-i),o={};let s,u,l;for(s=0;s=0;)r=e(t[i])+"",Fe(n,r)||(n[r]=1,++a);return a},Hi.extent=function(e){if(this._get!==e||!this._ext){const t=this.values(),n=Ee(t,e);this._ext=[t[n[0]],t[n[1]]],this._get=e}return this._ext},Hi.argmin=function(e){return this.extent(e)[0]||{}},Hi.argmax=function(e){return this.extent(e)[1]||{}},Hi.min=function(e){const t=this.extent(e)[0];return null!=t?e(t):void 0},Hi.max=function(e){const t=this.extent(e)[1];return null!=t?e(t):void 0},Hi.quartile=function(e){return this._get===e&&this._q||(this._q=Ir(this.values(),e),this._get=e),this._q},Hi.q1=function(e){return this.quartile(e)[0]},Hi.q2=function(e){return this.quartile(e)[1]},Hi.q3=function(e){return this.quartile(e)[2]},Hi.ci=function(e){return this._get===e&&this._ci||(this._ci=Hr(this.values(),1e3,.05,e),this._get=e),this._ci},Hi.ci0=function(e){return this.ci(e)[0]},Hi.ci1=function(e){return this.ci(e)[1]},Vi.Definition={type:"Aggregate",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"ops",type:"enum",array:!0,values:qi},{name:"aggregate_params",type:"field",null:!0,array:!0,default:[null]},{name:"fields",type:"field",null:!0,array:!0},{name:"as",type:"string",null:!0,array:!0},{name:"drop",type:"boolean",default:!0},{name:"cross",type:"boolean",default:!1},{name:"key",type:"field"}]},Oe(Vi,qr,{transform(e,t){const n=this,r=t.fork(t.NO_SOURCE|t.NO_FIELDS),i=e.modified();return n.stamp=r.stamp,n.value&&(i||t.modified(n._inputs,!0))?(n._prev=n.value,n.value=i?n.init(e):Object.create(null),t.visit(t.SOURCE,(e=>n.add(e)))):(n.value=n.value||n.init(e),t.visit(t.REM,(e=>n.rem(e))),t.visit(t.ADD,(e=>n.add(e)))),r.modifies(n._outputs),n._drop=!1!==e.drop,e.cross&&n._dims.length>1&&(n._drop=!1,n.cross()),t.clean()&&n._drop&&r.clean(!0).runAfter((()=>this.clean())),n.changes(r)},cross(){const e=this,t=e.value,n=e._dnames,r=n.map((()=>({}))),i=n.length;function a(e){let t,a,o,s;for(t in e)for(o=e[t].tuple,a=0;a{const t=_(e);return i(e),n.push(t),t})),this.cellkey=e.key?e.key:Oi(this._dims),this._countOnly=!0,this._counts=[],this._measures=[];const a=e.fields||[null],o=e.ops||["count"],s=e.aggregate_params||[null],u=e.as||[],l=a.length,c={};let d,f,h,p,m,g,y;for(l!==o.length&&E("Unmatched number of fields and aggregate ops."),y=0;yWi(e,e.field))),Object.create(null)},cellkey:Oi(),cell(e,t){let n=this.value[e];return n?0===n.num&&this._drop&&n.stampa.push(e),remove:e=>o[r(e)]=++s,size:()=>i.length,data:(e,t)=>(s&&(i=i.filter((e=>!o[r(e)])),o={},s=0),t&&e&&i.sort(e),a.length&&(i=e?Ie(e,i,a.sort(e)):i.concat(a),a=[]),i)}}function Ji(e){qr.call(this,[],e)}function Qi(e){yr.call(this,null,Ki,e)}function Ki(e){return this.value&&!e.modified()?this.value:ye(e.fields,e.orders)}function Zi(e){qr.call(this,null,e)}function ea(e){qr.call(this,null,e)}Yi.Definition={type:"Bin",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"interval",type:"boolean",default:!0},{name:"anchor",type:"number"},{name:"maxbins",type:"number",default:20},{name:"base",type:"number",default:10},{name:"divide",type:"number",array:!0,default:[5,2]},{name:"extent",type:"number",array:!0,length:2,required:!0},{name:"span",type:"number"},{name:"step",type:"number"},{name:"steps",type:"number",array:!0},{name:"minstep",type:"number",default:0},{name:"nice",type:"boolean",default:!0},{name:"name",type:"string"},{name:"as",type:"string",array:!0,length:2,default:["bin0","bin1"]}]},Oe(Yi,qr,{transform(e,t){const n=!1!==e.interval,r=this._bins(e),i=r.start,a=r.step,o=e.as||["bin0","bin1"],s=o[0],u=o[1];let l;return l=e.modified()?(t=t.reflow(!0)).SOURCE:t.modified(k(e.field))?t.ADD_MOD:t.ADD,t.visit(l,n?e=>{const t=r(e);e[s]=t,e[u]=null==t?null:i+a*(1+(t-i)/a)}:e=>e[s]=r(e)),t.modifies(n?o:s)},_bins(e){if(this.value&&!e.modified())return this.value;const t=e.field,n=Gr(e),r=n.step;let i,a,o=n.start,s=o+Math.ceil((n.stop-o)/r)*r;null!=(i=e.anchor)&&(a=i-(o+r*Math.floor((i-o)/r)),o+=a,s+=a);const u=function(e){let n=X(t(e));return null==n?null:ns?1/0:(n=Math.max(o,Math.min(n,s-r)),o+r*Math.floor(1e-14+(n-o)/r))};return u.start=o,u.stop=n.stop,u.step=r,this.value=x(u,k(t),e.name||"bin_"+_(t))}}),Ji.Definition={type:"Collect",metadata:{source:!0},params:[{name:"sort",type:"compare"}]},Oe(Ji,qr,{transform(e,t){const n=t.fork(t.ALL),r=Xi(ir,this.value,n.materialize(n.ADD).add),i=e.sort,a=t.changed()||i&&(e.modified("sort")||t.modified(i.fields));return n.visit(n.REM,r.remove),this.modified(a),this.value=n.source=r.data(cr(i),a),t.source&&t.source.root&&(this.value.root=t.source.root),n}}),Oe(Qi,yr),Zi.Definition={type:"CountPattern",metadata:{generates:!0,changes:!0},params:[{name:"field",type:"field",required:!0},{name:"case",type:"enum",values:["upper","lower","mixed"],default:"mixed"},{name:"pattern",type:"string",default:'[\\w"]+'},{name:"stopwords",type:"string",default:""},{name:"as",type:"string",array:!0,length:2,default:["text","count"]}]},Oe(Zi,qr,{transform(e,t){const n=t=>n=>{for(var r,i=function(e,t,n){switch(t){case"upper":e=e.toUpperCase();break;case"lower":e=e.toLowerCase()}return e.match(n)}(s(n),e.case,a)||[],u=0,l=i.length;ui[e]=1+(i[e]||0))),c=n((e=>i[e]-=1));return r?t.visit(t.SOURCE,l):(t.visit(t.ADD,l),t.visit(t.REM,c)),this._finish(t,u)},_parameterCheck(e,t){let n=!1;return!e.modified("stopwords")&&this._stop||(this._stop=new RegExp("^"+(e.stopwords||"")+"$","i"),n=!0),!e.modified("pattern")&&this._match||(this._match=new RegExp(e.pattern||"[\\w']+","g"),n=!0),(e.modified("field")||t.modified(e.field.fields))&&(n=!0),n&&(this._counts={}),n},_finish(e,t){const n=this._counts,r=this._tuples||(this._tuples={}),i=t[0],a=t[1],o=e.fork(e.NO_SOURCE|e.NO_FIELDS);let s,u,l;for(s in n)u=r[s],l=n[s]||0,!u&&l?(r[s]=u=or({}),u[i]=s,u[a]=l,o.add.push(u)):0===l?(u&&o.rem.push(u),n[s]=null,r[s]=null):u[a]!==l&&(u[a]=l,o.mod.push(u));return o.modifies(t)}}),ea.Definition={type:"Cross",metadata:{generates:!0},params:[{name:"filter",type:"expr"},{name:"as",type:"string",array:!0,length:2,default:["a","b"]}]},Oe(ea,qr,{transform(e,t){const n=t.fork(t.NO_SOURCE),r=e.as||["a","b"],i=r[0],a=r[1],o=!this.value||t.changed(t.ADD_REM)||e.modified("as")||e.modified("filter");let s=this.value;return o?(s&&(n.rem=s),s=t.materialize(t.SOURCE).source,n.add=this.value=function(e,t,n,r){for(var i,a,o=[],s={},u=e.length,l=0;lra(e,t)))):typeof r[n]===na&&r[n](e[n]);return r}function ia(e){qr.call(this,null,e)}const aa=[{key:{function:"normal"},params:[{name:"mean",type:"number",default:0},{name:"stdev",type:"number",default:1}]},{key:{function:"lognormal"},params:[{name:"mean",type:"number",default:0},{name:"stdev",type:"number",default:1}]},{key:{function:"uniform"},params:[{name:"min",type:"number",default:0},{name:"max",type:"number",default:1}]},{key:{function:"kde"},params:[{name:"field",type:"field",required:!0},{name:"from",type:"data"},{name:"bandwidth",type:"number",default:0}]}],oa={key:{function:"mixture"},params:[{name:"distributions",type:"param",array:!0,params:aa},{name:"weights",type:"number",array:!0}]};function sa(e,t){return e?e.map(((e,n)=>t[n]||_(e))):null}function ua(e,t,n){const r=[],i=e=>e(u);let a,o,s,u,l,c;if(null==t)r.push(e.map(n));else for(a={},o=0,s=e.length;oe.materialize(e.SOURCE).source}(t)),i=e.steps||e.minsteps||25,a=e.steps||e.maxsteps||200;let o=e.method||"pdf";"pdf"!==o&&"cdf"!==o&&E("Invalid density method: "+o),e.extent||r.data||E("Missing density extent parameter."),o=r[o];const s=e.as||["value","density"],u=Si(o,e.extent||De(r.data()),i,a).map((e=>{const t={};return t[s[0]]=e[0],t[s[1]]=e[1],or(t)}));this.value&&(n.rem=this.value),this.value=n.add=n.source=u}return n}});function la(e){qr.call(this,null,e)}la.Definition={type:"DotBin",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"groupby",type:"field",array:!0},{name:"step",type:"number"},{name:"smooth",type:"boolean",default:!1},{name:"as",type:"string",default:"bin"}]};function ca(e){yr.call(this,null,da,e),this.modified(!0)}function da(e){const t=e.expr;return this.value&&!e.modified("expr")?this.value:x((n=>t(n,e)),k(t),_(t))}function fa(e){qr.call(this,[void 0,void 0],e)}function ha(e,t){yr.call(this,e),this.parent=t,this.count=0}function pa(e){qr.call(this,{},e),this._keys=Se();const t=this._targets=[];t.active=0,t.forEach=e=>{for(let n=0,r=t.active;nF(e))):F(e.name,e.as)}function ya(e){qr.call(this,Se(),e)}function va(e){qr.call(this,[],e)}function ba(e){qr.call(this,[],e)}function xa(e){qr.call(this,null,e)}function _a(e){qr.call(this,[],e)}Oe(la,qr,{transform(e,t){if(this.value&&!e.modified()&&!t.changed())return t;const n=t.materialize(t.SOURCE).source,r=ua(t.source,e.groupby,S),i=e.smooth||!1,a=e.field,o=e.step||((e,t)=>He(De(e,t))/30)(n,a),s=cr(((e,t)=>a(e)-a(t))),u=e.as||"bin",l=r.length;let c,d=1/0,f=-1/0,h=0;for(;hf&&(f=t),e[++c][u]=t}return this.value={start:d,stop:f,step:o},t.reflow(!0).modifies(u)}}),Oe(ca,yr),fa.Definition={type:"Extent",metadata:{},params:[{name:"field",type:"field",required:!0}]},Oe(fa,qr,{transform(e,t){const n=this.value,r=e.field,i=t.changed()||t.modified(r.fields)||e.modified("field");let a=n[0],o=n[1];if((i||null==a)&&(a=1/0,o=-1/0),t.visit(i?t.SOURCE:t.ADD,(e=>{const t=X(r(e));null!=t&&(to&&(o=t))})),!Number.isFinite(a)||!Number.isFinite(o)){let e=_(r);e&&(e=` for field "${e}"`),t.dataflow.warn(`Infinite extent${e}: [${a}, ${o}]`),a=o=void 0}this.value=[a,o]}}),Oe(ha,yr,{connect(e){return this.detachSubflow=e.detachSubflow,this.targets().add(e),e.source=this},add(e){this.count+=1,this.value.add.push(e)},rem(e){this.count-=1,this.value.rem.push(e)},mod(e){this.value.mod.push(e)},init(e){this.value.init(e,e.NO_SOURCE)},evaluate(){return this.value}}),Oe(pa,qr,{activate(e){this._targets[this._targets.active++]=e},subflow(e,t,n,r){const i=this.value;let a,o,s=Fe(i,e)&&i[e];return s?s.value.stampe&&e.count>0));this.initTargets(e)}},initTargets(e){const t=this._targets,n=t.length,r=e?e.length:0;let i=0;for(;ithis.subflow(e,i,t);return this._group=e.group||{},this.initTargets(),t.visit(t.REM,(e=>{const t=ir(e),n=a.get(t);void 0!==n&&(a.delete(t),s(n).rem(e))})),t.visit(t.ADD,(e=>{const t=r(e);a.set(ir(e),t),s(t).add(e)})),o||t.modified(r.fields)?t.visit(t.MOD,(e=>{const t=ir(e),n=a.get(t),i=r(e);n===i?s(i).mod(e):(a.set(t,i),s(n).rem(e),s(i).add(e))})):t.changed(t.MOD)&&t.visit(t.MOD,(e=>{s(a.get(ir(e))).mod(e)})),o&&t.visit(t.REFLOW,(e=>{const t=ir(e),n=a.get(t),i=r(e);n!==i&&(a.set(t,i),s(n).rem(e),s(i).add(e))})),t.clean()?n.runAfter((()=>{this.clean(),a.clean()})):a.empty>n.cleanThreshold&&n.runAfter(a.clean),t}}),Oe(ma,yr),ya.Definition={type:"Filter",metadata:{changes:!0},params:[{name:"expr",type:"expr",required:!0}]},Oe(ya,qr,{transform(e,t){const n=t.dataflow,r=this.value,i=t.fork(),a=i.add,o=i.rem,s=i.mod,u=e.expr;let l=!0;function c(t){const n=ir(t),i=u(t,e),c=r.get(n);i&&c?(r.delete(n),a.push(t)):i||c?l&&i&&!c&&s.push(t):(r.set(n,1),o.push(t))}return t.visit(t.REM,(e=>{const t=ir(e);r.has(t)?r.delete(t):o.push(e)})),t.visit(t.ADD,(t=>{u(t,e)?a.push(t):r.set(ir(t),1)})),t.visit(t.MOD,c),e.modified()&&(l=!1,t.visit(t.REFLOW,c)),r.empty>n.cleanThreshold&&n.runAfter(r.clean),i}}),va.Definition={type:"Flatten",metadata:{generates:!0},params:[{name:"fields",type:"field",array:!0,required:!0},{name:"index",type:"string"},{name:"as",type:"string",array:!0}]},Oe(va,qr,{transform(e,t){const n=t.fork(t.NO_SOURCE),r=e.fields,i=sa(r,e.as||[]),a=e.index||null,o=i.length;return n.rem=this.value,t.visit(t.SOURCE,(e=>{const t=r.map((t=>t(e))),s=t.reduce(((e,t)=>Math.max(e,t.length)),0);let u,l,c,d=0;for(;d{for(let t,a=0;at[r]=n(t,e)))}}),Oe(_a,qr,{transform(e,t){const n=t.fork(t.ALL),r=e.generator;let i,a,o,s=this.value,u=e.size-s.length;if(u>0){for(i=[];--u>=0;)i.push(o=or(r(e))),s.push(o);n.add=n.add.length?n.materialize(n.ADD).add.concat(i):i}else a=s.slice(0,-u),n.rem=n.rem.length?n.materialize(n.REM).rem.concat(a):a,s=s.slice(-u);return n.source=this.value=s,n}});const ka={value:"value",median:r.median,mean:r.mean,min:r.min,max:r.max},Aa=[];function wa(e){qr.call(this,[],e)}function Da(e){Vi.call(this,e)}function Ea(e){qr.call(this,null,e)}function Ca(e){yr.call(this,null,Fa,e)}function Fa(e){return this.value&&!e.modified()?this.value:Pe(e.fields,e.flat)}function Ma(e){qr.call(this,[],e),this._pending=null}function Sa(e,t,n){n.forEach(or);const r=t.fork(t.NO_FIELDS&t.NO_SOURCE);return r.rem=e.value,e.value=r.source=r.add=n,e._pending=null,r.rem.length&&r.clean(!0),r}function Ba(e){qr.call(this,{},e)}function Oa(e){yr.call(this,null,Ra,e)}function Ra(e){if(this.value&&!e.modified())return this.value;const t=e.extents,n=t.length;let r,i,a=1/0,o=-1/0;for(r=0;ro&&(o=i[1]);return[a,o]}function za(e){yr.call(this,null,$a,e)}function $a(e){return this.value&&!e.modified()?this.value:e.values.reduce(((e,t)=>e.concat(t)),[])}function Ta(e){qr.call(this,null,e)}function qa(e){Vi.call(this,e)}function La(e){pa.call(this,e)}function Na(e){qr.call(this,null,e)}function Pa(e){qr.call(this,null,e)}function Ua(e){qr.call(this,null,e)}wa.Definition={type:"Impute",metadata:{changes:!0},params:[{name:"field",type:"field",required:!0},{name:"key",type:"field",required:!0},{name:"keyvals",array:!0},{name:"groupby",type:"field",array:!0},{name:"method",type:"enum",default:"value",values:["value","mean","median","max","min"]},{name:"value",default:0}]},Oe(wa,qr,{transform(e,t){var n,r,i,a,o,s,u,l,c,d,f=t.fork(t.ALL),h=function(e){var t,n=e.method||ka.value;if(null!=ka[n])return n===ka.value?(t=void 0!==e.value?e.value:0,()=>t):ka[n];E("Unrecognized imputation method: "+n)}(e),p=function(e){const t=e.field;return e=>e?t(e):NaN}(e),m=_(e.field),g=_(e.key),y=(e.groupby||[]).map(_),v=function(e,t,n,r){var i,a,o,s,u,l,c,d,f=e=>e(d),h=[],p=r?r.slice():[],m={},g={};for(p.forEach(((e,t)=>m[e]=t+1)),s=0,c=e.length;sn.add(e)))):(i=n.value=n.value||this.init(e),t.visit(t.REM,(e=>n.rem(e))),t.visit(t.ADD,(e=>n.add(e)))),n.changes(),t.visit(t.SOURCE,(e=>{we(e,i[n.cellkey(e)].tuple)})),t.reflow(r).modifies(this._outputs)},changes(){const e=this._adds,t=this._mods;let n,r;for(n=0,r=this._alen;n{const n=ni(t,o)[s],r=e.counts?t.length:1;Si(n,c||De(t),d,f).forEach((e=>{const n={};for(let e=0;e(this._pending=he(e.data),e=>e.touch(this))));return{async:t}}return n.request(e.url,e.format).then((e=>Sa(this,t,he(e.data))))}}),Ba.Definition={type:"Lookup",metadata:{modifies:!0},params:[{name:"index",type:"index",params:[{name:"from",type:"data",required:!0},{name:"key",type:"field",required:!0}]},{name:"values",type:"field",array:!0},{name:"fields",type:"field",array:!0,required:!0},{name:"as",type:"string",array:!0},{name:"default",default:null}]},Oe(Ba,qr,{transform(e,t){const n=e.fields,r=e.index,i=e.values,a=null==e.default?null:e.default,o=e.modified(),s=n.length;let u,l,c,d=o?t.SOURCE:t.ADD,f=t,h=e.as;return i?(l=i.length,s>1&&!h&&E('Multi-field lookup requires explicit "as" parameter.'),h&&h.length!==s*l&&E('The "as" parameter has too few output field names.'),h=h||i.map(_),u=function(e){for(var t,o,u=0,c=0;ut.modified(e.fields))),d|=c?t.MOD:0),t.visit(d,u),f.modifies(h)}}),Oe(Oa,yr),Oe(za,yr),Oe(Ta,qr,{transform(e,t){return this.modified(e.modified()),this.value=e,t.fork(t.NO_SOURCE|t.NO_FIELDS)}}),qa.Definition={type:"Pivot",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"field",type:"field",required:!0},{name:"value",type:"field",required:!0},{name:"op",type:"enum",values:qi,default:"sum"},{name:"limit",type:"number",default:0},{name:"key",type:"field"}]},Oe(qa,Vi,{_transform:Vi.prototype.transform,transform(e,t){return this._transform(function(e,t){const n=e.field,r=e.value,i=("count"===e.op?"__count__":e.op)||"sum",a=k(n).concat(k(r)),o=function(e,t,n){const r={},i=[];return n.visit(n.SOURCE,(t=>{const n=e(t);r[n]||(r[n]=1,i.push(n))})),i.sort(ve),t?i.slice(0,t):i}(n,e.limit||0,t);t.changed()&&e.set("__pivot__",null,null,!0);return{key:e.key,groupby:e.groupby,ops:o.map((()=>i)),fields:o.map((e=>function(e,t,n,r){return x((r=>t(r)===e?n(r):NaN),r,e+"")}(e,n,r,a))),as:o.map((e=>e+"")),modified:e.modified.bind(e)}}(e,t),t)}}),Oe(La,pa,{transform(e,t){const n=e.subflow,r=e.field,i=e=>this.subflow(ir(e),n,t,e);return(e.modified("field")||r&&t.modified(k(r)))&&E("PreFacet does not support field modification."),this.initTargets(),r?(t.visit(t.MOD,(e=>{const t=i(e);r(e).forEach((e=>t.mod(e)))})),t.visit(t.ADD,(e=>{const t=i(e);r(e).forEach((e=>t.add(or(e))))})),t.visit(t.REM,(e=>{const t=i(e);r(e).forEach((e=>t.rem(e)))}))):(t.visit(t.MOD,(e=>i(e).mod(e))),t.visit(t.ADD,(e=>i(e).add(e))),t.visit(t.REM,(e=>i(e).rem(e)))),t.clean()&&t.runAfter((()=>this.clean())),t}}),Na.Definition={type:"Project",metadata:{generates:!0,changes:!0},params:[{name:"fields",type:"field",array:!0},{name:"as",type:"string",null:!0,array:!0}]},Oe(Na,qr,{transform(e,t){const n=t.fork(t.NO_SOURCE),r=e.fields,i=sa(e.fields,e.as||[]),a=r?(e,t)=>function(e,t,n,r){for(let i=0,a=n.length;i{const t=ir(e);n.rem.push(o[t]),o[t]=null})),t.visit(t.ADD,(e=>{const t=a(e,or({}));o[ir(e)]=t,n.add.push(t)})),t.visit(t.MOD,(e=>{n.mod.push(a(e,o[ir(e)]))})),n}}),Oe(Pa,qr,{transform(e,t){return this.value=e.value,e.modified("value")?t.fork(t.NO_SOURCE|t.NO_FIELDS):t.StopPropagation}}),Ua.Definition={type:"Quantile",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"field",type:"field",required:!0},{name:"probs",type:"number",array:!0},{name:"step",type:"number",default:.01},{name:"as",type:"string",array:!0,default:["prob","value"]}]};function ja(e){qr.call(this,null,e)}function Ia(e){qr.call(this,[],e),this.count=0}function Wa(e){qr.call(this,null,e)}function Ga(e){qr.call(this,null,e),this.modified(!0)}function Ha(e){qr.call(this,null,e)}Oe(Ua,qr,{transform(e,t){const n=t.fork(t.NO_SOURCE|t.NO_FIELDS),i=e.as||["prob","value"];if(this.value&&!e.modified()&&!t.changed())return n.source=this.value,n;const a=ua(t.materialize(t.SOURCE).source,e.groupby,e.field),o=(e.groupby||[]).map(_),s=[],u=e.step||.01,l=e.probs||r.range(u/2,1-1e-14,u),c=l.length;return a.forEach((e=>{const t=jr(e,l);for(let n=0;n{const t=ir(e);n.rem.push(r[t]),r[t]=null})),t.visit(t.ADD,(e=>{const t=sr(e);r[ir(e)]=t,n.add.push(t)})),t.visit(t.MOD,(e=>{const t=r[ir(e)];for(const r in e)t[r]=e[r],n.modifies(r);n.mod.push(t)}))),n}}),Ia.Definition={type:"Sample",metadata:{},params:[{name:"size",type:"number",default:1e3}]},Oe(Ia,qr,{transform(t,n){const r=n.fork(n.NO_SOURCE),i=t.modified("size"),a=t.size,o=this.value.reduce(((e,t)=>(e[ir(t)]=1,e)),{});let s=this.value,u=this.count,l=0;function c(t){let n,i;s.length=l&&(n=s[i],o[ir(n)]&&r.rem.push(n),s[i]=t)),++u}if(n.rem.length&&(n.visit(n.REM,(e=>{const t=ir(e);o[t]&&(o[t]=-1,r.rem.push(e)),--u})),s=s.filter((e=>-1!==o[ir(e)]))),(n.rem.length||i)&&s.length{o[ir(e)]||c(e)})),l=-1),i&&s.length>a){const e=s.length-a;for(let t=0;t{o[ir(e)]&&r.mod.push(e)})),n.add.length&&n.visit(n.ADD,c),(n.add.length||l<0)&&(r.add=s.filter((e=>!o[ir(e)]))),this.count=u,this.value=r.source=s,r}}),Wa.Definition={type:"Sequence",metadata:{generates:!0,changes:!0},params:[{name:"start",type:"number",required:!0},{name:"stop",type:"number",required:!0},{name:"step",type:"number",default:1},{name:"as",type:"string",default:"data"}]},Oe(Wa,qr,{transform(e,t){if(this.value&&!e.modified())return;const n=t.materialize().fork(t.MOD),i=e.as||"data";return n.rem=this.value?t.rem.concat(this.value):t.rem,this.value=r.range(e.start,e.stop,e.step||1).map((e=>{const t={};return t[i]=e,or(t)})),n.add=t.add.concat(this.value),n}}),Oe(Ga,qr,{transform(e,t){return this.value=t.source,t.changed()?t.fork(t.NO_SOURCE|t.NO_FIELDS):t.StopPropagation}});const Va=["unit0","unit1"];function Ya(e){qr.call(this,Se(),e)}function Xa(e){qr.call(this,null,e)}Ha.Definition={type:"TimeUnit",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"interval",type:"boolean",default:!0},{name:"units",type:"enum",values:ft,array:!0},{name:"step",type:"number",default:1},{name:"maxbins",type:"number",default:40},{name:"extent",type:"date",array:!0},{name:"timezone",type:"enum",default:"local",values:["local","utc"]},{name:"as",type:"string",array:!0,length:2,default:Va}]},Oe(Ha,qr,{transform(e,t){const n=e.field,r=!1!==e.interval,i="utc"===e.timezone,a=this._floor(e,t),o=(i?jt:Ut)(a.unit).offset,s=e.as||Va,u=s[0],l=s[1],c=a.step;let d=a.start||1/0,f=a.stop||-1/0,h=t.ADD;return(e.modified()||t.changed(t.REM)||t.modified(k(n)))&&(h=(t=t.reflow(!0)).SOURCE,d=1/0,f=-1/0),t.visit(h,(e=>{const t=n(e);let i,s;null==t?(e[u]=null,r&&(e[l]=null)):(e[u]=i=s=a(t),r&&(e[l]=s=o(i,c)),if&&(f=s))})),a.start=d,a.stop=f,t.modifies(r?s:u)},_floor(e,t){const n="utc"===e.timezone,{units:r,step:i}=e.units?{units:e.units,step:e.step||1}:cn({extent:e.extent||De(t.materialize(t.SOURCE).source,e.field),maxbins:e.maxbins}),a=pt(r),o=this.value||{},s=(n?Lt:$t)(a,i);return s.unit=Y(a),s.units=a,s.step=i,s.start=o.start,s.stop=o.stop,this.value=s}}),Oe(Ya,qr,{transform(e,t){const n=t.dataflow,r=e.field,i=this.value,a=e=>i.set(r(e),e);let o=!0;return e.modified("field")||t.modified(r.fields)?(i.clear(),t.visit(t.SOURCE,a)):t.changed()?(t.visit(t.REM,(e=>i.delete(r(e)))),t.visit(t.ADD,a)):o=!1,this.modified(o),i.empty>n.cleanThreshold&&n.runAfter(i.clean),t.fork()}}),Oe(Xa,qr,{transform(e,t){(!this.value||e.modified("field")||e.modified("sort")||t.changed()||e.sort&&t.modified(e.sort.fields))&&(this.value=(e.sort?t.source.slice().sort(cr(e.sort)):t.source).map(e.field))}});const Ja={row_number:function(){return{next:e=>e.index+1}},rank:function(){let e;return{init:()=>e=1,next:t=>{const n=t.index,r=t.data;return n&&t.compare(r[n-1],r[n])?e=n+1:e}}},dense_rank:function(){let e;return{init:()=>e=1,next:t=>{const n=t.index,r=t.data;return n&&t.compare(r[n-1],r[n])?++e:e}}},percent_rank:function(){const e=Ja.rank(),t=e.next;return{init:e.init,next:e=>(t(e)-1)/(e.data.length-1)}},cume_dist:function(){let e;return{init:()=>e=0,next:t=>{const n=t.data,r=t.compare;let i=t.index;if(e0||E("ntile num must be greater than zero.");const n=Ja.cume_dist(),r=n.next;return{init:n.init,next:e=>Math.ceil(t*r(e))}},lag:function(e,t){return t=+t||1,{next:n=>{const r=n.index-t;return r>=0?e(n.data[r]):null}}},lead:function(e,t){return t=+t||1,{next:n=>{const r=n.index+t,i=n.data;return re(t.data[t.i0])}},last_value:function(e){return{next:t=>e(t.data[t.i1-1])}},nth_value:function(e,t){return(t=+t)>0||E("nth_value nth must be greater than zero."),{next:n=>{const r=n.i0+(t-1);return rt=null,next:n=>{const r=e(n.data[n.index]);return null!=r?t=r:t}}},next_value:function(e){let t,n;return{init:()=>(t=null,n=-1),next:r=>{const i=r.data;return r.index<=n?t:(n=function(e,t,n){for(let r=t.length;nu[e]=1))}h(e.sort),t.forEach(((e,t)=>{const u=n[t],p=r[t],m=i[t]||null,g=_(u),y=Ri(e,g,a[t]);if(h(u),o.push(y),Fe(Ja,e))s.push(function(e,t,n,r){const i=Ja[e](t,n);return{init:i.init||B,update:function(e,t){t[r]=i.next(e)}}}(e,u,p,y));else{if(null==u&&"count"!==e&&E("Null aggregate field specified."),"count"===e)return void c.push(y);f=!1;let t=l[g];t||(t=l[g]=[],t.field=u,d.push(t)),t.push(Li(e,m,y))}})),(c.length||d.length)&&(this.cell=function(e,t,n){e=e.map((e=>Wi(e,e.field)));const r={num:0,agg:null,store:!1,count:t};if(!n)for(var i=e.length,a=r.agg=Array(i),o=0;o0&&!i(a[n],a[n-1])&&(e.i0=t.left(a,a[n])),re.init())),this.cell&&this.cell.init()},Za.update=function(e,t){const n=this.cell,r=this.windows,i=e.data,a=r&&r.length;let o;if(n){for(o=e.p0;othis.group(i(e));let o=this.state;o&&!n||(o=this.state=new Ka(e)),n||t.modified(o.inputs)?(this.value={},t.visit(t.SOURCE,(e=>a(e).add(e)))):(t.visit(t.REM,(e=>a(e).remove(e))),t.visit(t.ADD,(e=>a(e).add(e))));for(let t=0,n=this._mlen;t"undefined"!=typeof Image?Image:null;function so(e,t,n){const r=e-t+2*n;return e?r>0?r:1:0}const uo="linear",lo="log",co="pow",fo="sqrt",ho="symlog",po="time",mo="utc",go="sequential",yo="diverging",vo="quantile",bo="quantize",xo="threshold",_o="ordinal",ko="point",Ao="band",wo="bin-ordinal",Do="continuous",Eo="discrete",Co="discretizing",Fo="interpolating",Mo="temporal";function So(){const e=l.scaleOrdinal().unknown(void 0),t=e.domain,n=e.range;let i,a,o=[0,1],s=!1,u=0,c=0,d=.5;function f(){const e=t().length,l=o[1]p+i*e));return n(l?m.reverse():m)}return delete e.unknown,e.domain=function(e){return arguments.length?(t(e),f()):t()},e.range=function(e){return arguments.length?(o=[+e[0],+e[1]],f()):o.slice()},e.rangeRound=function(e){return o=[+e[0],+e[1]],s=!0,f()},e.bandwidth=function(){return a},e.step=function(){return i},e.round=function(e){return arguments.length?(s=!!e,f()):s},e.padding=function(e){return arguments.length?(c=Math.max(0,Math.min(1,e)),u=c,f()):u},e.paddingInner=function(e){return arguments.length?(u=Math.max(0,Math.min(1,e)),f()):u},e.paddingOuter=function(e){return arguments.length?(c=Math.max(0,Math.min(1,e)),f()):c},e.align=function(e){return arguments.length?(d=Math.max(0,Math.min(1,e)),f()):d},e.invertRange=function(e){if(null==e[0]||null==e[1])return;const i=o[1]o[1-i])?void 0:(l=Math.max(0,r.bisectRight(s,f)-1),c=f===h?l:r.bisectRight(s,h)-1,f-s[l]>a+1e-10&&++l,i&&(d=l,l=u-c,c=u-d),l>c?void 0:t().slice(l,c+1))},e.invert=function(t){const n=e.invertRange([t,t]);return n?n[0]:n},e.copy=function(){return So().domain(t()).range(o).round(s).paddingInner(u).paddingOuter(c).align(d)},f()}function Bo(e){const t=e.copy;return e.padding=e.paddingOuter,delete e.paddingInner,e.copy=function(){return Bo(t())},e}var Oo=Array.prototype.map;const Ro=Array.prototype.slice;const zo=new Map,$o=Symbol("vega_scale");function To(e){return e[$o]=!0,e}function qo(e,t,n){return arguments.length>1?(zo.set(e,function(e,t,n){const r=function(){const n=t();return n.invertRange||(n.invertRange=n.invert?function(e){return function(t){let n,r=t[0],i=t[1];return i=s&&n[a]<=u&&(l<0&&(l=a),r=a);if(!(l<0))return s=e.invertExtent(n[l]),u=e.invertExtent(n[r]),[void 0===s[0]?s[1]:s[0],void 0===u[1]?u[0]:u[1]]}}(n):void 0),n.type=e,To(n)};return r.metadata=Ke(he(n)),r}(e,t,n)),this):Lo(e)?zo.get(e):void 0}function Lo(e){return zo.has(e)}function No(e,t){const n=zo.get(e);return n&&n.metadata[t]}function Po(e){return No(e,Do)}function Uo(e){return No(e,Eo)}function jo(e){return No(e,Co)}function Io(e){return No(e,lo)}function Wo(e){return No(e,Fo)}function Go(e){return No(e,vo)}qo("identity",v.scaleIdentity),qo(uo,v.scaleLinear,Do),qo(lo,v.scaleLog,[Do,lo]),qo(co,v.scalePow,Do),qo(fo,v.scaleSqrt,Do),qo(ho,v.scaleSymlog,Do),qo(po,v.scaleTime,[Do,Mo]),qo(mo,v.scaleUtc,[Do,Mo]),qo(go,v.scaleSequential,[Do,Fo]),qo(`${go}-${uo}`,v.scaleSequential,[Do,Fo]),qo(`${go}-${lo}`,v.scaleSequentialLog,[Do,Fo,lo]),qo(`${go}-${co}`,v.scaleSequentialPow,[Do,Fo]),qo(`${go}-${fo}`,v.scaleSequentialSqrt,[Do,Fo]),qo(`${go}-${ho}`,v.scaleSequentialSymlog,[Do,Fo]),qo(`${yo}-${uo}`,v.scaleDiverging,[Do,Fo]),qo(`${yo}-${lo}`,v.scaleDivergingLog,[Do,Fo,lo]),qo(`${yo}-${co}`,v.scaleDivergingPow,[Do,Fo]),qo(`${yo}-${fo}`,v.scaleDivergingSqrt,[Do,Fo]),qo(`${yo}-${ho}`,v.scaleDivergingSymlog,[Do,Fo]),qo(vo,v.scaleQuantile,[Co,vo]),qo(bo,v.scaleQuantize,Co),qo(xo,v.scaleThreshold,Co),qo(wo,(function e(){let t=[],n=[];function i(e){return null==e||e!=e?void 0:n[(r.bisect(t,e)-1)%n.length]}return i.domain=function(e){return arguments.length?(t=function(e){return Oo.call(e,X)}(e),i):t.slice()},i.range=function(e){return arguments.length?(n=Ro.call(e),i):n.slice()},i.tickFormat=function(e,n){return l.tickFormat(t[0],Y(t),null==e?10:e,n)},i.copy=function(){return e().domain(i.domain()).range(i.range())},i}),[Eo,Co]),qo(_o,v.scaleOrdinal,Eo),qo(Ao,So,Eo),qo(ko,(function(){return Bo(So().paddingInner(1))}),Eo);const Ho=["clamp","base","constant","exponent"];function Vo(e,t){const n=t[0],r=Y(t)-n;return function(t){return e(n+t*r)}}function Yo(e,t,n){return b.piecewise(Qo(t||"rgb",n),e)}function Xo(e,t){const n=new Array(t),r=t+1;for(let i=0;ie[t]?o[t](e[t]()):0)),o):ke(.5)}function Qo(e,t){const n=b[function(e){return"interpolate"+e.toLowerCase().split("-").map((e=>e[0].toUpperCase()+e.slice(1))).join("")}(e)];return null!=t&&n&&n.gamma?n.gamma(t):n}function Ko(e){const t=e.length/6|0,n=new Array(t);for(let r=0;r1?(es[e]=t,this):es[e]}Zo({category10:"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf",category20:"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5",category20b:"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6",category20c:"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9",tableau10:"4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac",tableau20:"4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5",accent:"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666",dark2:"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666",paired:"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928",pastel1:"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2",pastel2:"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc",set1:"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999",set2:"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3",set3:"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"},Ko),Zo({blues:"cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90",greens:"d3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429",greys:"e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e",oranges:"fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303",purples:"e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c",reds:"fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13",blueGreen:"d5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429",bluePurple:"ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71",greenBlue:"d3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1",orangeRed:"fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403",purpleBlue:"dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281",purpleBlueGreen:"dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353",purpleRed:"dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a",redPurple:"fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174",yellowGreen:"e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034",yellowOrangeBrown:"feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204",yellowOrangeRed:"fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225",blueOrange:"134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07",brownBlueGreen:"704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147",purpleGreen:"5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29",purpleOrange:"4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07",redBlue:"8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85",redGrey:"8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434",yellowGreenBlue:"eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185",redYellowBlue:"a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695",redYellowGreen:"a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837",pinkYellowGreen:"8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419",spectral:"9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2",viridis:"440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725",magma:"0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf",inferno:"0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4",plasma:"0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921",cividis:"00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647",rainbow:"6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa",sinebow:"ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040",turbo:"23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00",browns:"eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632",tealBlues:"bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985",teals:"bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667",warmGreys:"dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e",goldGreen:"f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36",goldOrange:"f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26",goldRed:"f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e",lightGreyRed:"efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b",lightGreyTeal:"e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc",lightMulti:"e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c",lightOrange:"f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b",lightTealBlue:"e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988",darkBlue:"3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff",darkGold:"3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff",darkGreen:"3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa",darkMulti:"3737371f5287197d8c29a86995ce3fffe800ffffff",darkRed:"3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c"},(e=>Yo(Ko(e))));const ns="symbol",rs="discrete",is=e=>j(e)?e.map((e=>String(e))):String(e),as=(e,t)=>e[1]-t[1],os=(e,t)=>t[1]-e[1];function ss(e,t,n){let r;return qe(t)&&(e.bins&&(t=Math.max(t,e.bins.length)),null!=n&&(t=Math.min(t,Math.floor(He(e.domain())/n||1)+1))),I(t)&&(r=t.step,t=t.interval),Ne(t)&&(t=e.type===po?Ut(t):e.type==mo?jt(t):E("Only time and utc scales accept interval strings."),r&&(t=t.every(r))),t}function us(e,t,n){let r=e.range(),i=r[0],a=Y(r),o=as;if(i>a&&(r=a,a=i,i=r,o=os),i=Math.floor(i),a=Math.ceil(a),t=t.map((t=>[t,e(t)])).filter((e=>i<=e[1]&&e[1]<=a)).sort(o).map((e=>e[0])),n>0&&t.length>1){const e=[t[0],Y(t)];for(;t.length>n&&t.length>=3;)t=t.filter(((e,t)=>!(t%2)));t.length<3&&(t=e)}return t}function ls(e,t){return e.bins?us(e,e.bins):e.ticks?e.ticks(t):e.domain()}function cs(e,t,n,r,i,a){const o=t.type;let s=is;if(o===po||i===po)s=e.timeFormat(r);else if(o===mo||i===mo)s=e.utcFormat(r);else if(Io(o)){const i=e.formatFloat(r);if(a||t.bins)s=i;else{const e=ds(t,n,!1);s=t=>e(t)?i(t):""}}else if(t.tickFormat){const i=t.domain();s=e.formatSpan(i[0],i[i.length-1],n,r)}else r&&(s=e.format(r));return s}function ds(e,t,n){const r=ls(e,t),i=e.base(),a=Math.log(i),o=Math.max(1,i*t/r.length),s=e=>{let t=e/Math.pow(i,Math.round(Math.log(e)/a));return t*ifs[e.type]||e.bins;function gs(e,t,n,r,i,a,o){const s=hs[t.type]&&a!==po&&a!==mo?function(e,t,n){const r=t[hs[t.type]](),i=r.length;let a,o=i>1?r[1]-r[0]:r[0];for(a=1;a(t,n,r)=>{const i=vs(r[n+1],vs(r.max,1/0)),a=_s(t,e),o=_s(i,e);return a&&o?a+" – "+o:o?"< "+o:"≥ "+a},vs=(e,t)=>null!=e?e:t,bs=e=>(t,n)=>n?e(t):null,xs=e=>t=>e(t),_s=(e,t)=>Number.isFinite(e)?t(e):null;function ks(e,t,n,r){const i=r||t.type;return Ne(n)&&function(e){return No(e,Mo)}(i)&&(n=n.replace(/%a/g,"%A").replace(/%b/g,"%B")),n||i!==po?n||i!==mo?gs(e,t,5,null,n,r,!0):e.utcFormat("%A, %d %B %Y, %X UTC"):e.timeFormat("%A, %d %B %Y, %X")}function As(e,t,n){n=n||{};const r=Math.max(3,n.maxlen||7),i=ks(e,t,n.format,n.formatType);if(jo(t.type)){const e=ps(t).slice(1).map(i),n=e.length;return`${n} boundar${1===n?"y":"ies"}: ${e.join(", ")}`}if(Uo(t.type)){const e=t.domain(),n=e.length;return`${n} value${1===n?"":"s"}: ${n>r?e.slice(0,r-2).map(i).join(", ")+", ending with "+e.slice(-1).map(i):e.map(i).join(", ")}`}{const e=t.domain();return`values from ${i(e[0])} to ${i(Y(e))}`}}let ws=0;const Ds="p_";function Es(e){return e&&e.gradient}function Cs(e,t,n){const r=e.gradient;let i=e.id,a="radial"===r?Ds:"";return i||(i=e.id="gradient_"+ws++,"radial"===r?(e.x1=Fs(e.x1,.5),e.y1=Fs(e.y1,.5),e.r1=Fs(e.r1,0),e.x2=Fs(e.x2,.5),e.y2=Fs(e.y2,.5),e.r2=Fs(e.r2,.5),a=Ds):(e.x1=Fs(e.x1,0),e.y1=Fs(e.y1,0),e.x2=Fs(e.x2,1),e.y2=Fs(e.y2,0))),t[i]=e,"url("+(n||"")+"#"+a+i+")"}function Fs(e,t){return null!=e?e:t}function Ms(e,t){var n,r=[];return n={gradient:"linear",x1:e?e[0]:0,y1:e?e[1]:0,x2:t?t[0]:1,y2:t?t[1]:0,stops:r,stop:function(e,t){return r.push({offset:e,color:t}),n}}}const Ss={basis:{curve:s.curveBasis},"basis-closed":{curve:s.curveBasisClosed},"basis-open":{curve:s.curveBasisOpen},bundle:{curve:s.curveBundle,tension:"beta",value:.85},cardinal:{curve:s.curveCardinal,tension:"tension",value:0},"cardinal-open":{curve:s.curveCardinalOpen,tension:"tension",value:0},"cardinal-closed":{curve:s.curveCardinalClosed,tension:"tension",value:0},"catmull-rom":{curve:s.curveCatmullRom,tension:"alpha",value:.5},"catmull-rom-closed":{curve:s.curveCatmullRomClosed,tension:"alpha",value:.5},"catmull-rom-open":{curve:s.curveCatmullRomOpen,tension:"alpha",value:.5},linear:{curve:s.curveLinear},"linear-closed":{curve:s.curveLinearClosed},monotone:{horizontal:s.curveMonotoneY,vertical:s.curveMonotoneX},natural:{curve:s.curveNatural},step:{curve:s.curveStep},"step-after":{curve:s.curveStepAfter},"step-before":{curve:s.curveStepBefore}};function Bs(e,t,n){var r=Fe(Ss,e)&&Ss[e],i=null;return r&&(i=r.curve||r[t||"vertical"],r.tension&&null!=n&&(i=i[r.tension](n))),i}const Os={m:2,l:2,h:1,v:1,z:0,c:6,s:4,q:4,t:2,a:7},Rs=/[mlhvzcsqta]([^mlhvzcsqta]+|$)/gi,zs=/^[+-]?(([0-9]*\.[0-9]+)|([0-9]+\.)|([0-9]+))([eE][+-]?[0-9]+)?/,$s=/^((\s+,?\s*)|(,\s*))/,Ts=/^[01]/;function qs(e){const t=[];return(e.match(Rs)||[]).forEach((e=>{let n=e[0];const r=n.toLowerCase(),i=Os[r],a=function(e,t,n){const r=[];for(let i=0;t&&i1&&(m=Math.sqrt(m),n*=m,r*=m);const g=f/n,y=d/n,v=-d/r,b=f/r,x=g*s+y*u,_=v*s+b*u,k=g*e+y*t,A=v*e+b*t;let w=1/((k-x)*(k-x)+(A-_)*(A-_))-.25;w<0&&(w=0);let D=Math.sqrt(w);a==i&&(D=-D);const E=.5*(x+k)-D*(A-_),C=.5*(_+A)+D*(k-x),F=Math.atan2(_-C,x-E);let M=Math.atan2(A-C,k-E)-F;M<0&&1===a?M+=Ps:M>0&&0===a&&(M-=Ps);const S=Math.ceil(Math.abs(M/(Ns+.001))),B=[];for(let e=0;e+e}function ou(e,t,n){return Math.max(t,Math.min(e,n))}function su(){var e=tu,t=nu,n=ru,r=iu,i=au(0),a=i,o=i,s=i,l=null;function c(c,d,f){var h,p=null!=d?d:+e.call(this,c),m=null!=f?f:+t.call(this,c),g=+n.call(this,c),y=+r.call(this,c),v=Math.min(g,y)/2,b=ou(+i.call(this,c),0,v),x=ou(+a.call(this,c),0,v),_=ou(+o.call(this,c),0,v),k=ou(+s.call(this,c),0,v);if(l||(l=h=u.path()),b<=0&&x<=0&&_<=0&&k<=0)l.rect(p,m,g,y);else{var A=p+g,w=m+y;l.moveTo(p+b,m),l.lineTo(A-x,m),l.bezierCurveTo(A-eu*x,m,A,m+eu*x,A,m+x),l.lineTo(A,w-k),l.bezierCurveTo(A,w-eu*k,A-eu*k,w,A-k,w),l.lineTo(p+_,w),l.bezierCurveTo(p+eu*_,w,p,w-eu*_,p,w-_),l.lineTo(p,m+b),l.bezierCurveTo(p,m+eu*b,p+eu*b,m,p+b,m),l.closePath()}if(h)return l=null,h+""||null}return c.x=function(t){return arguments.length?(e=au(t),c):e},c.y=function(e){return arguments.length?(t=au(e),c):t},c.width=function(e){return arguments.length?(n=au(e),c):n},c.height=function(e){return arguments.length?(r=au(e),c):r},c.cornerRadius=function(e,t,n,r){return arguments.length?(i=au(e),a=null!=t?au(t):i,s=null!=n?au(n):i,o=null!=r?au(r):a,c):i},c.context=function(e){return arguments.length?(l=null==e?null:e,c):l},c}function uu(){var e,t,n,r,i,a,o,s,l=null;function c(e,t,n){const r=n/2;if(i){var u=o-t,c=e-a;if(u||c){var d=Math.hypot(u,c),f=(u/=d)*s,h=(c/=d)*s,p=Math.atan2(c,u);l.moveTo(a-f,o-h),l.lineTo(e-u*r,t-c*r),l.arc(e,t,r,p-Math.PI,p),l.lineTo(a+f,o+h),l.arc(a,o,s,p,p+Math.PI)}else l.arc(e,t,r,0,Ps);l.closePath()}else i=1;a=e,o=t,s=r}function d(a){var o,s,d,f=a.length,h=!1;for(null==l&&(l=d=u.path()),o=0;o<=f;++o)!(oe.x||0,du=e=>e.y||0,fu=e=>!(!1===e.defined),hu=s.arc().startAngle((e=>e.startAngle||0)).endAngle((e=>e.endAngle||0)).padAngle((e=>e.padAngle||0)).innerRadius((e=>e.innerRadius||0)).outerRadius((e=>e.outerRadius||0)).cornerRadius((e=>e.cornerRadius||0)),pu=s.area().x(cu).y1(du).y0((e=>(e.y||0)+(e.height||0))).defined(fu),mu=s.area().y(du).x1(cu).x0((e=>(e.x||0)+(e.width||0))).defined(fu),gu=s.line().x(cu).y(du).defined(fu),yu=su().x(cu).y(du).width((e=>e.width||0)).height((e=>e.height||0)).cornerRadius((e=>lu(e.cornerRadiusTopLeft,e.cornerRadius)||0),(e=>lu(e.cornerRadiusTopRight,e.cornerRadius)||0),(e=>lu(e.cornerRadiusBottomRight,e.cornerRadius)||0),(e=>lu(e.cornerRadiusBottomLeft,e.cornerRadius)||0)),vu=s.symbol().type((e=>Ks(e.shape||"circle"))).size((e=>lu(e.size,64))),bu=uu().x(cu).y(du).defined(fu).size((e=>e.size||1));function xu(e){return e.cornerRadius||e.cornerRadiusTopLeft||e.cornerRadiusTopRight||e.cornerRadiusBottomRight||e.cornerRadiusBottomLeft}function _u(e,t,n,r){return yu.context(e)(t,n,r)}var ku=1;function Au(){ku=1}function wu(e,t,n){var r=t.clip,i=e._defs,a=t.clip_id||(t.clip_id="clip"+ku++),o=i.clipping[a]||(i.clipping[a]={id:a});return me(r)?o.path=r(null):xu(n)?o.path=_u(null,n,0,0):(o.width=n.width||0,o.height=n.height||0),"url(#"+a+")"}function Du(e){this.clear(),e&&this.union(e)}function Eu(e){this.mark=e,this.bounds=this.bounds||new Du}function Cu(e){Eu.call(this,e),this.items=this.items||[]}function Fu(e){this._pending=0,this._loader=e||Kn()}function Mu(e){e._pending+=1}function Su(e){e._pending-=1}function Bu(e,t,n){if(t.stroke&&0!==t.opacity&&0!==t.strokeOpacity){const r=null!=t.strokeWidth?+t.strokeWidth:1;e.expand(r+(n?function(e,t){return e.strokeJoin&&"miter"!==e.strokeJoin?0:t}(t,r):0))}return e}Du.prototype={clone(){return new Du(this)},clear(){return this.x1=+Number.MAX_VALUE,this.y1=+Number.MAX_VALUE,this.x2=-Number.MAX_VALUE,this.y2=-Number.MAX_VALUE,this},empty(){return this.x1===+Number.MAX_VALUE&&this.y1===+Number.MAX_VALUE&&this.x2===-Number.MAX_VALUE&&this.y2===-Number.MAX_VALUE},equals(e){return this.x1===e.x1&&this.y1===e.y1&&this.x2===e.x2&&this.y2===e.y2},set(e,t,n,r){return nthis.x2&&(this.x2=e),t>this.y2&&(this.y2=t),this},expand(e){return this.x1-=e,this.y1-=e,this.x2+=e,this.y2+=e,this},round(){return this.x1=Math.floor(this.x1),this.y1=Math.floor(this.y1),this.x2=Math.ceil(this.x2),this.y2=Math.ceil(this.y2),this},scale(e){return this.x1*=e,this.y1*=e,this.x2*=e,this.y2*=e,this},translate(e,t){return this.x1+=e,this.x2+=e,this.y1+=t,this.y2+=t,this},rotate(e,t,n){const r=this.rotatedPoints(e,t,n);return this.clear().add(r[0],r[1]).add(r[2],r[3]).add(r[4],r[5]).add(r[6],r[7])},rotatedPoints(e,t,n){var{x1:r,y1:i,x2:a,y2:o}=this,s=Math.cos(e),u=Math.sin(e),l=t-t*s+n*u,c=n-t*u-n*s;return[s*r-u*i+l,u*r+s*i+c,s*r-u*o+l,u*r+s*o+c,s*a-u*i+l,u*a+s*i+c,s*a-u*o+l,u*a+s*o+c]},union(e){return e.x1this.x2&&(this.x2=e.x2),e.y2>this.y2&&(this.y2=e.y2),this},intersect(e){return e.x1>this.x1&&(this.x1=e.x1),e.y1>this.y1&&(this.y1=e.y1),e.x2=e.x2&&this.y1<=e.y1&&this.y2>=e.y2},alignsWith(e){return e&&(this.x1==e.x1||this.x2==e.x2||this.y1==e.y1||this.y2==e.y2)},intersects(e){return e&&!(this.x2e.x2||this.y2e.y2)},contains(e,t){return!(ethis.x2||tthis.y2)},width(){return this.x2-this.x1},height(){return this.y2-this.y1}},Oe(Cu,Eu),Fu.prototype={pending(){return this._pending},sanitizeURL(e){const t=this;return Mu(t),t._loader.sanitize(e,{context:"href"}).then((e=>(Su(t),e))).catch((()=>(Su(t),null)))},loadImage(e){const t=this,n=oo();return Mu(t),t._loader.sanitize(e,{context:"image"}).then((e=>{const r=e.href;if(!r||!n)throw{url:r};const i=new n,a=Fe(e,"crossOrigin")?e.crossOrigin:"anonymous";return null!=a&&(i.crossOrigin=a),i.onload=()=>Su(t),i.onerror=()=>Su(t),i.src=r,i})).catch((e=>(Su(t),{complete:!1,width:0,height:0,src:e&&e.url||""})))},ready(){const e=this;return new Promise((t=>{!function n(r){e.pending()?setTimeout((()=>{n(!0)}),10):t(r)}(!1)}))}};const Ou=Ps-1e-8;let Ru,zu,$u,Tu,qu,Lu,Nu,Pu;const Uu=(e,t)=>Ru.add(e,t),ju=(e,t)=>Uu(zu=e,$u=t),Iu=e=>Uu(e,Ru.y1),Wu=e=>Uu(Ru.x1,e),Gu=(e,t)=>qu*e+Nu*t,Hu=(e,t)=>Lu*e+Pu*t,Vu=(e,t)=>Uu(Gu(e,t),Hu(e,t)),Yu=(e,t)=>ju(Gu(e,t),Hu(e,t));function Xu(e,t){return Ru=e,t?(Tu=t*Ls,qu=Pu=Math.cos(Tu),Lu=Math.sin(Tu),Nu=-Lu):(qu=Pu=1,Tu=Lu=Nu=0),Ju}const Ju={beginPath(){},closePath(){},moveTo:Yu,lineTo:Yu,rect(e,t,n,r){Tu?(Vu(e+n,t),Vu(e+n,t+r),Vu(e,t+r),Yu(e,t)):(Uu(e+n,t+r),ju(e,t))},quadraticCurveTo(e,t,n,r){const i=Gu(e,t),a=Hu(e,t),o=Gu(n,r),s=Hu(n,r);Qu(zu,i,o,Iu),Qu($u,a,s,Wu),ju(o,s)},bezierCurveTo(e,t,n,r,i,a){const o=Gu(e,t),s=Hu(e,t),u=Gu(n,r),l=Hu(n,r),c=Gu(i,a),d=Hu(i,a);Ku(zu,o,u,c,Iu),Ku($u,s,l,d,Wu),ju(c,d)},arc(e,t,n,r,i,a){if(r+=Tu,i+=Tu,zu=n*Math.cos(i)+e,$u=n*Math.sin(i)+t,Math.abs(i-r)>Ou)Uu(e-n,t-n),Uu(e+n,t+n);else{const o=r=>Uu(n*Math.cos(r)+e,n*Math.sin(r)+t);let s,u;if(o(r),o(i),i!==r)if((r%=Ps)<0&&(r+=Ps),(i%=Ps)<0&&(i+=Ps),ii;++u,s-=Ns)o(s);else for(s=r-r%Ns+Ns,u=0;u<4&&s1e-14?(u=o*o+s*a,u>=0&&(u=Math.sqrt(u),l=(-o+u)/a,c=(-o-u)/a)):l=.5*s/o,0g)return!1;h>m&&(m=h)}else if(d>0){if(h0&&(e.globalAlpha=n,e.fillStyle=cl(e,t,t.fill),!0)}var fl=[];function hl(e,t,n){var r=null!=(r=t.strokeWidth)?r:1;return!(r<=0)&&((n*=null==t.strokeOpacity?1:t.strokeOpacity)>0&&(e.globalAlpha=n,e.strokeStyle=cl(e,t,t.stroke),e.lineWidth=r,e.lineCap=t.strokeCap||"butt",e.lineJoin=t.strokeJoin||"miter",e.miterLimit=t.strokeMiterLimit||10,e.setLineDash&&(e.setLineDash(t.strokeDash||fl),e.lineDashOffset=t.strokeDashOffset||0),!0))}function pl(e,t){return e.zindex-t.zindex||e.index-t.index}function ml(e){if(!e.zdirty)return e.zitems;var t,n,r,i=e.items,a=[];for(n=0,r=i.length;n=0;)if(n=t(i[r]))return n;if(i===a)for(r=(i=e.items).length;--r>=0;)if(!i[r].zindex&&(n=t(i[r])))return n;return null}function vl(e){return function(t,n,r){gl(n,(n=>{r&&!r.intersects(n.bounds)||xl(e,t,n,n)}))}}function bl(e){return function(t,n,r){!n.items.length||r&&!r.intersects(n.bounds)||xl(e,t,n.items[0],n.items)}}function xl(e,t,n,r){var i=null==n.opacity?1:n.opacity;0!==i&&(e(t,r)||(sl(t,n),n.fill&&dl(t,n,i)&&t.fill(),n.stroke&&hl(t,n,i)&&t.stroke()))}function _l(e){return e=e||R,function(t,n,r,i,a,o){return r*=t.pixelRatio,i*=t.pixelRatio,yl(n,(n=>{const s=n.bounds;if((!s||s.contains(a,o))&&s)return e(t,n,r,i,a,o)?n:void 0}))}}function kl(e,t){return function(n,r,i,a){var o,s,u=Array.isArray(r)?r[0]:r,l=null==t?u.fill:t,c=u.stroke&&n.isPointInStroke;return c&&(o=u.strokeWidth,s=u.strokeCap,n.lineWidth=null!=o?o:1,n.lineCap=null!=s?s:"butt"),!e(n,r)&&(l&&n.isPointInPath(i,a)||c&&n.isPointInStroke(i,a))}}function Al(e){return _l(kl(e))}function wl(e,t){return"translate("+e+","+t+")"}function Dl(e){return"rotate("+e+")"}function El(e){return wl(e.x||0,e.y||0)}function Cl(e,t,n){function r(e,n){var r=n.x||0,i=n.y||0,a=n.angle||0;e.translate(r,i),a&&e.rotate(a*=Ls),e.beginPath(),t(e,n),a&&e.rotate(-a),e.translate(-r,-i)}return{type:e,tag:"path",nested:!1,attr:function(e,n){e("transform",function(e){return wl(e.x||0,e.y||0)+(e.angle?" "+Dl(e.angle):"")}(n)),e("d",t(null,n))},bound:function(e,n){return t(Xu(e,n.angle),n),Bu(e,n).translate(n.x||0,n.y||0)},draw:vl(r),pick:Al(r),isect:n||nl(r)}}var Fl=Cl("arc",(function(e,t){return hu.context(e)(t)}));function Ml(e,t,n){function r(e,n){e.beginPath(),t(e,n)}const i=kl(r);return{type:e,tag:"path",nested:!0,attr:function(e,n){var r=n.mark.items;r.length&&e("d",t(null,r))},bound:function(e,n){var r=n.items;return 0===r.length?e:(t(Xu(e),r),Bu(e,r[0]))},draw:bl(r),pick:function(e,t,n,r,a,o){var s=t.items,u=t.bounds;return!s||!s.length||u&&!u.contains(a,o)?null:(n*=e.pixelRatio,r*=e.pixelRatio,i(e,s,n,r)?s[0]:null)},isect:rl,tip:n}}var Sl=Ml("area",(function(e,t){const n=t[0],r=n.interpolate||"linear";return("horizontal"===n.orient?mu:pu).curve(Bs(r,n.orient,n.tension)).context(e)(t)}),(function(e,t){for(var n,r,i="horizontal"===e[0].orient?t[1]:t[0],a="horizontal"===e[0].orient?"y":"x",o=e.length,s=1/0;--o>=0;)!1!==e[o].defined&&(r=Math.abs(e[o][a]-i)).5&&t<1.5?.5-Math.abs(t-1):0}function Rl(e,t){const n=Ol(t);e("d",_u(null,t,n,n))}function zl(e,t,n,r){const i=Ol(t);e.beginPath(),_u(e,t,(n||0)+i,(r||0)+i)}const $l=kl(zl),Tl=kl(zl,!1),ql=kl(zl,!0);var Ll={type:"group",tag:"g",nested:!1,attr:function(e,t){e("transform",El(t))},bound:function(e,t){if(!t.clip&&t.items){const n=t.items,r=n.length;for(let t=0;t{const i=t.x||0,a=t.y||0,o=t.strokeForeground,s=null==t.opacity?1:t.opacity;(t.stroke||t.fill)&&s&&(zl(e,t,i,a),sl(e,t),t.fill&&dl(e,t,s)&&e.fill(),t.stroke&&!o&&hl(e,t,s)&&e.stroke()),e.save(),e.translate(i,a),t.clip&&Bl(e,t),n&&n.translate(-i,-a),gl(t,(t=>{("group"===t.marktype||null==r||r.includes(t.marktype))&&this.draw(e,t,n,r)})),n&&n.translate(i,a),e.restore(),o&&t.stroke&&s&&(zl(e,t,i,a),sl(e,t),hl(e,t,s)&&e.stroke())}))},pick:function(e,t,n,r,i,a){if(t.bounds&&!t.bounds.contains(i,a)||!t.items)return null;const o=n*e.pixelRatio,s=r*e.pixelRatio;return yl(t,(u=>{let l,c,d;const f=u.bounds;if(f&&!f.contains(i,a))return;c=u.x||0,d=u.y||0;const h=c+(u.width||0),p=d+(u.height||0),m=u.clip;if(m&&(ih||ap))return;if(e.save(),e.translate(c,d),c=i-c,d=a-d,m&&xu(u)&&!ql(e,u,o,s))return e.restore(),null;const g=u.strokeForeground,y=!1!==t.interactive;return y&&g&&u.stroke&&Tl(e,u,o,s)?(e.restore(),u):(l=yl(u,(e=>function(e,t,n){return(!1!==e.interactive||"group"===e.marktype)&&e.bounds&&e.bounds.contains(t,n)}(e,c,d)?this.pick(e,n,r,c,d):null)),!l&&y&&(u.fill||!g&&u.stroke)&&$l(e,u,o,s)&&(l=u),e.restore(),l||null)}))},isect:il,content:function(e,t,n){e("clip-path",t.clip?wu(n,t,t):null)},background:function(e,t){e("class","background"),e("aria-hidden",!0),Rl(e,t)},foreground:function(e,t){e("class","foreground"),e("aria-hidden",!0),t.strokeForeground?Rl(e,t):e("d","")}},Nl={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",version:"1.1"};function Pl(e,t){var n=e.image;return(!n||e.url&&e.url!==n.url)&&(n={complete:!1,width:0,height:0},t.loadImage(e.url).then((t=>{e.image=t,e.image.url=e.url}))),n}function Ul(e,t){return null!=e.width?e.width:t&&t.width?!1!==e.aspect&&e.height?e.height*t.width/t.height:t.width:0}function jl(e,t){return null!=e.height?e.height:t&&t.height?!1!==e.aspect&&e.width?e.width*t.height/t.width:t.height:0}function Il(e,t){return"center"===e?t/2:"right"===e?t:0}function Wl(e,t){return"middle"===e?t/2:"bottom"===e?t:0}var Gl={type:"image",tag:"image",nested:!1,attr:function(e,t,n){const r=Pl(t,n),i=Ul(t,r),a=jl(t,r),o=(t.x||0)-Il(t.align,i),s=(t.y||0)-Wl(t.baseline,a);e("href",!r.src&&r.toDataURL?r.toDataURL():r.src||"",Nl["xmlns:xlink"],"xlink:href"),e("transform",wl(o,s)),e("width",i),e("height",a),e("preserveAspectRatio",!1===t.aspect?"none":"xMidYMid")},bound:function(e,t){const n=t.image,r=Ul(t,n),i=jl(t,n),a=(t.x||0)-Il(t.align,r),o=(t.y||0)-Wl(t.baseline,i);return e.set(a,o,a+r,o+i)},draw:function(e,t,n){gl(t,(t=>{if(n&&!n.intersects(t.bounds))return;const r=Pl(t,this);let i=Ul(t,r),a=jl(t,r);if(0===i||0===a)return;let o,s,u,l,c=(t.x||0)-Il(t.align,i),d=(t.y||0)-Wl(t.baseline,a);!1!==t.aspect&&(s=r.width/r.height,u=t.width/t.height,s==s&&u==u&&s!==u&&(u=0;)if(!1!==e[a].defined&&(n=e[a].x-t[0])*n+(r=e[a].y-t[1])*r{if(!n||n.intersects(t.bounds)){var r=null==t.opacity?1:t.opacity;r&&Ql(e,t,r)&&(sl(e,t),e.stroke())}}))},pick:_l((function(e,t,n,r){return!!e.isPointInStroke&&(Ql(e,t,1)&&e.isPointInStroke(n,r))})),isect:al},Zl=Cl("shape",(function(e,t){return(t.mark.shape||t.shape).context(e)(t)})),ec=Cl("symbol",(function(e,t){return vu.context(e)(t)}),rl);const tc=je();var nc={height:uc,measureWidth:oc,estimateWidth:ic,width:ic,canvas:rc};function rc(e){nc.width=e&&el?oc:ic}function ic(e,t){return ac(fc(e,t),uc(e))}function ac(e,t){return~~(.8*e.length*t)}function oc(e,t){return uc(e)<=0||!(t=fc(e,t))?0:sc(t,pc(e))}function sc(e,t){const n=`(${t}) ${e}`;let r=tc.get(n);return void 0===r&&(el.font=t,r=el.measureText(e).width,tc.set(n,r)),r}function uc(e){return null!=e.fontSize?+e.fontSize||0:11}function lc(e){return null!=e.lineHeight?e.lineHeight:uc(e)+2}function cc(e){return t=e.lineBreak&&e.text&&!j(e.text)?e.text.split(e.lineBreak):e.text,j(t)?t.length>1?t:t[0]:t;var t}function dc(e){const t=cc(e);return(j(t)?t.length-1:0)*lc(e)}function fc(e,t){const n=null==t?"":(t+"").trim();return e.limit>0&&n.length?function(e,t){var n=+e.limit,r=function(e){if(nc.width===oc){const t=pc(e);return e=>sc(e,t)}if(nc.width===ic){const t=uc(e);return e=>ac(e,t)}return t=>nc.width(e,t)}(e);if(r(t)>>1,r(t.slice(i))>n?s=i+1:u=i;return a+t.slice(s)}for(;s>>1),r(t.slice(0,i))Math.max(e,nc.width(t,n))),0)):r=nc.width(t,d),"center"===a?l-=r/2:"right"===a&&(l-=r),e.set(l+=s,c+=u,l+r,c+i),t.angle&&!n)e.rotate(t.angle*Ls,s,u);else if(2===n)return e.rotatedPoints(t.angle*Ls,s,u);return e}var xc={type:"text",tag:"text",nested:!1,attr:function(e,t){var n,r=t.dx||0,i=(t.dy||0)+mc(t),a=vc(t),o=a.x1,s=a.y1,u=t.angle||0;e("text-anchor",gc[t.align]||"start"),u?(n=wl(o,s)+" "+Dl(u),(r||i)&&(n+=" "+wl(r,i))):n=wl(o+r,s+i),e("transform",n)},bound:bc,draw:function(e,t,n){gl(t,(t=>{var r,i,a,o,s,u,l,c=null==t.opacity?1:t.opacity;if(!(n&&!n.intersects(t.bounds)||0===c||t.fontSize<=0||null==t.text||0===t.text.length)){if(e.font=pc(t),e.textAlign=t.align||"left",i=(r=vc(t)).x1,a=r.y1,t.angle&&(e.save(),e.translate(i,a),e.rotate(t.angle*Ls),i=a=0),i+=t.dx||0,a+=(t.dy||0)+mc(t),u=cc(t),sl(e,t),j(u))for(s=lc(t),o=0;o=0;)if(!1!==e[i].defined&&(n=e[i].x-t[0])*n+(r=e[i].y-t[1])*r<(n=e[i].size||1)*n)return e[i];return null})),kc={arc:Fl,area:Sl,group:Ll,image:Gl,line:Hl,path:Yl,rect:Jl,rule:Kl,shape:Zl,symbol:ec,text:xc,trail:_c};function Ac(e,t,n){var r=kc[e.mark.marktype],i=t||r.bound;return r.nested&&(e=e.mark),i(e.bounds||(e.bounds=new Du),e,n)}var wc={mark:null};function Dc(e,t,n){var r,i,a,o,s=kc[e.marktype],u=s.bound,l=e.items,c=l&&l.length;if(s.nested)return c?a=l[0]:(wc.mark=e,a=wc),o=Ac(a,u,n),t=t&&t.union(o)||o;if(t=t||e.bounds&&e.bounds.clear()||new Du,c)for(r=0,i=l.length;rt;)e.removeChild(n[--r]);return e}function Tc(e){return"mark-"+e.marktype+(e.role?" role-"+e.role:"")+(e.name?" "+e.name:"")}function qc(e,t){const n=t.getBoundingClientRect();return[e.clientX-n.left-(t.clientLeft||0),e.clientY-n.top-(t.clientTop||0)]}function Lc(e,t){this._active=null,this._handlers={},this._loader=e||Kn(),this._tooltip=t||Nc}function Nc(e,t,n,r){e.element().setAttribute("title",r||"")}function Pc(e){this._el=null,this._bgcolor=null,this._loader=new Fu(e)}Sc.prototype={toJSON(e){return Cc(this.root,e||0)},mark(e,t,n){const r=Bc(e,t=t||this.root.items[0]);return t.items[n]=r,r.zindex&&(r.group.zdirty=!0),r}},Lc.prototype={initialize(e,t,n){return this._el=e,this._obj=n||null,this.origin(t)},element(){return this._el},canvas(){return this._el&&this._el.firstChild},origin(e){return arguments.length?(this._origin=e||[0,0],this):this._origin.slice()},scene(e){return arguments.length?(this._scene=e,this):this._scene},on(){},off(){},_handlerIndex(e,t,n){for(let r=e?e.length:0;--r>=0;)if(e[r].type===t&&(!n||e[r].handler===n))return r;return-1},handlers(e){const t=this._handlers,n=[];if(e)n.push(...t[this.eventName(e)]);else for(const e in t)n.push(...t[e]);return n},eventName(e){const t=e.indexOf(".");return t<0?e:e.slice(0,t)},handleHref(e,t,n){this._loader.sanitize(n,{context:"href"}).then((t=>{const n=new MouseEvent(e.type,e),r=Oc(null,"a");for(const e in t)r.setAttribute(e,t[e]);r.dispatchEvent(n)})).catch((()=>{}))},handleTooltip(e,t,n){if(t&&null!=t.tooltip){t=function(e,t,n,r){var i,a,o=e&&e.mark;if(o&&(i=kc[o.marktype]).tip){for((a=qc(t,n))[0]-=r[0],a[1]-=r[1];e=e.mark.group;)a[0]-=e.x||0,a[1]-=e.y||0;e=i.tip(o.items,a)}return e}(t,e,this.canvas(),this._origin);const r=n&&t&&t.tooltip||null;this._tooltip.call(this._obj,this,e,t,r)}},getItemBoundingClientRect(e){const t=this.canvas();if(!t)return;const n=t.getBoundingClientRect(),r=this._origin,i=e.bounds,a=i.width(),o=i.height();let s=i.x1+r[0]+n.left,u=i.y1+r[1]+n.top;for(;e.mark&&(e=e.mark.group);)s+=e.x||0,u+=e.y||0;return{x:s,y:u,width:a,height:o,left:s,top:u,right:s+a,bottom:u+o}}},Pc.prototype={initialize(e,t,n,r,i){return this._el=e,this.resize(t,n,r,i)},element(){return this._el},canvas(){return this._el&&this._el.firstChild},background(e){return 0===arguments.length?this._bgcolor:(this._bgcolor=e,this)},resize(e,t,n,r){return this._width=e,this._height=t,this._origin=n||[0,0],this._scale=r||1,this},dirty(){},render(e,t){const n=this;return n._call=function(){n._render(e,t)},n._call(),n._call=null,n},_render(){},renderAsync(e,t){const n=this.render(e,t);return this._ready?this._ready.then((()=>n)):Promise.resolve(n)},_load(e,t){var n=this,r=n._loader[e](t);if(!n._ready){const e=n._call;n._ready=n._loader.ready().then((t=>{t&&e(),n._ready=null}))}return r},sanitizeURL(e){return this._load("sanitizeURL",e)},loadImage(e){return this._load("loadImage",e)}};const Uc="dragenter",jc="dragleave",Ic="dragover",Wc="pointerdown",Gc="pointermove",Hc="pointerout",Vc="pointerover",Yc="click",Xc="mousewheel",Jc="touchstart",Qc="touchmove",Kc="touchend",Zc=Gc,ed=Hc,td=Yc;function nd(e,t){Lc.call(this,e,t),this._down=null,this._touch=null,this._first=!0,this._events={}}function rd(e,t){(e=>e===Jc||e===Qc||e===Kc?[Jc,Qc,Kc]:[e])(t).forEach((t=>function(e,t){const n=e.canvas();n&&!e._events[t]&&(e._events[t]=1,n.addEventListener(t,e[t]?n=>e[t](n):n=>e.fire(t,n)))}(e,t)))}function id(e,t,n){return function(r){const i=this._active,a=this.pickEvent(r);a===i||(i&&i.exit||this.fire(n,r),this._active=a,this.fire(t,r)),this.fire(e,r)}}function ad(e){return function(t){this.fire(e,t),this._active=null}}Oe(nd,Lc,{initialize(e,t,n){return this._canvas=e&&Rc(e,"canvas"),[Yc,Wc,Gc,Hc,jc].forEach((e=>rd(this,e))),Lc.prototype.initialize.call(this,e,t,n)},canvas(){return this._canvas},context(){return this._canvas.getContext("2d")},events:["keydown","keypress","keyup",Uc,jc,Ic,Wc,"pointerup",Gc,Hc,Vc,Yc,"dblclick","wheel",Xc,Jc,Qc,Kc],DOMMouseScroll(e){this.fire(Xc,e)},pointermove:id(Gc,Vc,Hc),dragover:id(Ic,Uc,jc),pointerout:ad(Hc),dragleave:ad(jc),pointerdown(e){this._down=this._active,this.fire(Wc,e)},click(e){this._down===this._active&&(this.fire(Yc,e),this._down=null)},touchstart(e){this._touch=this.pickEvent(e.changedTouches[0]),this._first&&(this._active=this._touch,this._first=!1),this.fire(Jc,e,!0)},touchmove(e){this.fire(Qc,e,!0)},touchend(e){this.fire(Kc,e,!0),this._touch=null},fire(e,t,n){const r=n?this._touch:this._active,i=this._handlers[e];if(t.vegaType=e,e===td&&r&&r.href?this.handleHref(t,r,r.href):e!==Zc&&e!==ed||this.handleTooltip(t,r,e!==ed),i)for(let e=0,n=i.length;e=0&&r.splice(i,1),this},pickEvent(e){const t=qc(e,this._canvas),n=this._origin;return this.pick(this._scene,t[0],t[1],t[0]-n[0],t[1]-n[1])},pick(e,t,n,r,i){const a=this.context();return kc[e.marktype].pick.call(this,a,e,t,n,r,i)}});var od="undefined"!=typeof window&&window.devicePixelRatio||1;function sd(e){Pc.call(this,e),this._options={},this._redraw=!1,this._dirty=new Du,this._tempb=new Du}const ud=Pc.prototype;function ld(e,t){Lc.call(this,e,t);const n=this;n._hrefHandler=cd(n,((e,t)=>{t&&t.href&&n.handleHref(e,t,t.href)})),n._tooltipHandler=cd(n,((e,t)=>{n.handleTooltip(e,t,e.type!==ed)}))}Oe(sd,Pc,{initialize(e,t,n,r,i,a){return this._options=a||{},this._canvas=this._options.externalContext?null:ao(1,1,this._options.type),e&&this._canvas&&($c(e,0).appendChild(this._canvas),this._canvas.setAttribute("class","marks")),ud.initialize.call(this,e,t,n,r,i)},resize(e,t,n,r){if(ud.resize.call(this,e,t,n,r),this._canvas)!function(e,t,n,r,i,a){const o="undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&null!=e.parentNode,s=e.getContext("2d"),u=o?od:i;e.width=t*u,e.height=n*u;for(const e in a)s[e]=a[e];o&&1!==u&&(e.style.width=t+"px",e.style.height=n+"px"),s.pixelRatio=u,s.setTransform(u,0,0,u,u*r[0],u*r[1])}(this._canvas,this._width,this._height,this._origin,this._scale,this._options.context);else{const e=this._options.externalContext;e||E("CanvasRenderer is missing a valid canvas or context"),e.scale(this._scale,this._scale),e.translate(this._origin[0],this._origin[1])}return this._redraw=!0,this},canvas(){return this._canvas},context(){return this._options.externalContext||(this._canvas?this._canvas.getContext("2d"):null)},dirty(e){const t=this._tempb.clear().union(e.bounds);let n=e.mark.group;for(;n;)t.translate(n.x||0,n.y||0),n=n.mark.group;this._dirty.union(t)},_render(e,t){const n=this.context(),r=this._origin,i=this._width,a=this._height,o=this._dirty,s=((e,t,n)=>(new Du).set(0,0,t,n).translate(-e[0],-e[1]))(r,i,a);n.save();const u=this._redraw||o.empty()?(this._redraw=!1,s.expand(1)):function(e,t,n){return t.expand(1).round(),e.pixelRatio%1&&t.scale(e.pixelRatio).round().scale(1/e.pixelRatio),t.translate(-n[0]%1,-n[1]%1),e.beginPath(),e.rect(t.x1,t.y1,t.width(),t.height()),e.clip(),t}(n,s.intersect(o),r);return this.clear(-r[0],-r[1],i,a),this.draw(n,e,u,t),n.restore(),o.clear(),this},draw(e,t,n,r){if("group"!==t.marktype&&null!=r&&!r.includes(t.marktype))return;const i=kc[t.marktype];t.clip&&function(e,t){var n=t.clip;e.save(),me(n)?(e.beginPath(),n(e),e.clip()):Bl(e,t.group)}(e,t),i.draw.call(this,e,t,n,r),t.clip&&e.restore()},clear(e,t,n,r){const i=this._options,a=this.context();"pdf"===i.type||i.externalContext||a.clearRect(e,t,n,r),null!=this._bgcolor&&(a.fillStyle=this._bgcolor,a.fillRect(e,t,n,r))}});const cd=(e,t)=>n=>{let r=n.target.__data__;r=Array.isArray(r)?r[0]:r,n.vegaType=n.type,t.call(e._obj,n,r)};Oe(ld,Lc,{initialize(e,t,n){let r=this._svg;return r&&(r.removeEventListener(td,this._hrefHandler),r.removeEventListener(Zc,this._tooltipHandler),r.removeEventListener(ed,this._tooltipHandler)),this._svg=r=e&&Rc(e,"svg"),r&&(r.addEventListener(td,this._hrefHandler),r.addEventListener(Zc,this._tooltipHandler),r.addEventListener(ed,this._tooltipHandler)),Lc.prototype.initialize.call(this,e,t,n)},canvas(){return this._svg},on(e,t){const n=this.eventName(e),r=this._handlers;if(this._handlerIndex(r[n],e,t)<0){const i={type:e,handler:t,listener:cd(this,t)};(r[n]||(r[n]=[])).push(i),this._svg&&this._svg.addEventListener(n,i.listener)}return this},off(e,t){const n=this.eventName(e),r=this._handlers[n],i=this._handlerIndex(r,e,t);return i>=0&&(this._svg&&this._svg.removeEventListener(n,r[i].listener),r.splice(i,1)),this}});const dd="aria-hidden",fd="aria-label",hd="role",pd="aria-roledescription",md="graphics-object",gd="graphics-symbol",yd=(e,t,n)=>({[hd]:e,[pd]:t,[fd]:n||void 0}),vd=Ke(["axis-domain","axis-grid","axis-label","axis-tick","axis-title","legend-band","legend-entry","legend-gradient","legend-label","legend-title","legend-symbol","title"]),bd={axis:{desc:"axis",caption:function(e){const t=e.datum,n=e.orient,r=t.title?wd(e):null,i=e.context,a=i.scales[t.scale].value,o=i.dataflow.locale(),s=a.type;return("left"===n||"right"===n?"Y":"X")+"-axis"+(r?` titled '${r}'`:"")+` for a ${Uo(s)?"discrete":s} scale`+` with ${As(o,a,e)}`}},legend:{desc:"legend",caption:function(e){const t=e.datum,n=t.title?wd(e):null,r=`${t.type||""} legend`.trim(),i=t.scales,a=Object.keys(i),o=e.context,s=o.scales[i[a[0]]].value,u=o.dataflow.locale();return l=r,(l.length?l[0].toUpperCase()+l.slice(1):l)+(n?` titled '${n}'`:"")+` for ${function(e){return e=e.map((e=>e+("fill"===e||"stroke"===e?" color":""))),e.length<2?e[0]:e.slice(0,-1).join(", ")+" and "+Y(e)}(a)}`+` with ${As(u,s,e)}`;var l}},"title-text":{desc:"title",caption:e=>`Title text '${Ad(e)}'`},"title-subtitle":{desc:"subtitle",caption:e=>`Subtitle text '${Ad(e)}'`}},xd={ariaRole:hd,ariaRoleDescription:pd,description:fd};function _d(e,t){const n=!1===t.aria;if(e(dd,n||void 0),n||null==t.description)for(const t in xd)e(xd[t],void 0);else{const n=t.mark.marktype;e(fd,t.description),e(hd,t.ariaRole||("group"===n?md:gd)),e(pd,t.ariaRoleDescription||`${n} mark`)}}function kd(e){return!1===e.aria?{[dd]:!0}:vd[e.role]?null:bd[e.role]?function(e,t){try{const n=e.items[0],r=t.caption||(()=>"");return yd(t.role||gd,t.desc,n.description||r(n))}catch(e){return null}}(e,bd[e.role]):function(e){const t=e.marktype,n="group"===t||"text"===t||e.items.some((e=>null!=e.description&&!1!==e.aria));return yd(n?md:gd,`${t} mark container`,e.description)}(e)}function Ad(e){return he(e.text).join(" ")}function wd(e){try{return he(Y(e.items).items[0].text).join(" ")}catch(e){return null}}const Dd=e=>(e+"").replace(/&/g,"&").replace(//g,">");function Ed(){let e="",t="",n="";const r=[],i=()=>t=n="",a=(e,n)=>{var r;return null!=n&&(t+=` ${e}="${r=n,Dd(r).replace(/"/g,""").replace(/\t/g," ").replace(/\n/g," ").replace(/\r/g," ")}"`),o},o={open(s){(a=>{t&&(e+=`${t}>${n}`,i()),r.push(a)})(s),t="<"+s;for(var u=arguments.length,l=new Array(u>1?u-1:0),c=1;c${n}`:"/>"):``,i(),o},attr:a,text:e=>(n+=Dd(e),o),toString:()=>e};return o}const Cd=e=>Fd(Ed(),e)+"";function Fd(e,t){if(e.open(t.tagName),t.hasAttributes()){const n=t.attributes,r=n.length;for(let t=0;t1&&e.previousSibling!=t}(o,n))&&t.insertBefore(o,n?n.nextSibling:t.firstChild),o}Oe(zd,Pc,{initialize(e,t,n,r,i){return this._defs={},this._clearDefs(),e&&(this._svg=zc(e,0,"svg",Rd),this._svg.setAttributeNS(Od,"xmlns",Rd),this._svg.setAttributeNS(Od,"xmlns:xlink",Nl["xmlns:xlink"]),this._svg.setAttribute("version",Nl.version),this._svg.setAttribute("class","marks"),$c(e,1),this._root=zc(this._svg,0,"g",Rd),Gd(this._root,Bd),$c(this._svg,1)),this.background(this._bgcolor),$d.initialize.call(this,e,t,n,r,i)},background(e){return arguments.length&&this._svg&&this._svg.style.setProperty("background-color",e),$d.background.apply(this,arguments)},resize(e,t,n,r){return $d.resize.call(this,e,t,n,r),this._svg&&(Gd(this._svg,{width:this._width*this._scale,height:this._height*this._scale,viewBox:`0 0 ${this._width} ${this._height}`}),this._root.setAttribute("transform",`translate(${this._origin})`)),this._dirty=[],this},canvas(){return this._svg},svg(){const e=this._svg,t=this._bgcolor;if(!e)return null;let n;t&&(e.removeAttribute("style"),n=zc(e,0,"rect",Rd),Gd(n,{width:this._width,height:this._height,fill:t}));const r=Cd(e);return t&&(e.removeChild(n),this._svg.style.setProperty("background-color",t)),r},_render(e,t){return this._dirtyCheck()&&(this._dirtyAll&&this._clearDefs(),this.mark(this._root,e,void 0,t),$c(this._root,1)),this.defs(),this._dirty=[],++this._dirtyID,this},dirty(e){e.dirty!==this._dirtyID&&(e.dirty=this._dirtyID,this._dirty.push(e))},isDirty(e){return this._dirtyAll||!e._svg||!e._svg.ownerSVGElement||e.dirty===this._dirtyID},_dirtyCheck(){this._dirtyAll=!0;const e=this._dirty;if(!e.length||!this._dirtyID)return!0;const t=++this._dirtyID;let n,r,i,a,o,s,u;for(o=0,s=e.length;o{e.dirty=t}))),r.zdirty||(n.exit?(a.nested&&r.items.length?(u=r.items[0],u._svg&&this._update(a,u._svg,u)):n._svg&&(u=n._svg.parentNode,u&&u.removeChild(n._svg)),n._svg=null):(n=a.nested?r.items[0]:n,n._update!==t&&(n._svg&&n._svg.ownerSVGElement?this._update(a,n._svg,n):(this._dirtyAll=!1,Td(n,t)),n._update=t)));return!this._dirtyAll},mark(e,t,n,r){if(!this.isDirty(t))return t._svg;const i=this._svg,a=t.marktype,o=kc[a],s=!1===t.interactive?"none":null,u="g"===o.tag,l=Nd(t,e,n,"g",i);if("group"!==a&&null!=r&&!r.includes(a))return $c(l,0),t._svg;l.setAttribute("class",Tc(t));const c=kd(t);for(const e in c)Hd(l,e,c[e]);u||Hd(l,"pointer-events",s),Hd(l,"clip-path",t.clip?wu(this,t,t.group):null);let d=null,f=0;const h=e=>{const t=this.isDirty(e),n=Nd(e,l,d,o.tag,i);t&&(this._update(o,n,e),u&&function(e,t,n,r){t=t.lastChild.previousSibling;let i,a=0;gl(n,(n=>{i=e.mark(t,n,i,r),++a})),$c(t,1+a)}(this,n,e,r)),d=n,++f};return o.nested?t.items.length&&h(t.items[0]):gl(t,h),$c(l,f),l},_update(e,t,n){Pd=t,Ud=t.__values__,_d(Id,n),e.attr(Id,n,this);const r=jd[e.type];r&&r.call(this,e,t,n),Pd&&this.style(Pd,n)},style(e,t){if(null!=t){for(const n in Md){let r="font"===n?hc(t):t[n];if(r===Ud[n])continue;const i=Md[n];null==r?e.removeAttribute(i):(Es(r)&&(r=Cs(r,this._defs.gradient,Vd())),e.setAttribute(i,r+"")),Ud[n]=r}for(const n in Sd)Wd(e,Sd[n],t[n])}},defs(){const e=this._svg,t=this._defs;let n=t.el,r=0;for(const i in t.gradient)n||(t.el=n=zc(e,1,"defs",Rd)),r=qd(n,t.gradient[i],r);for(const i in t.clipping)n||(t.el=n=zc(e,1,"defs",Rd)),r=Ld(n,t.clipping[i],r);n&&(0===r?(e.removeChild(n),t.el=null):$c(n,r))},_clearDefs(){const e=this._defs;e.gradient={},e.clipping={}}});let Pd=null,Ud=null;const jd={group(e,t,n){const r=Pd=t.childNodes[2];Ud=r.__values__,e.foreground(Id,n,this),Ud=t.__values__,Pd=t.childNodes[1],e.content(Id,n,this);const i=Pd=t.childNodes[0];e.background(Id,n,this);const a=!1===n.mark.interactive?"none":null;if(a!==Ud.events&&(Hd(r,"pointer-events",a),Hd(i,"pointer-events",a),Ud.events=a),n.strokeForeground&&n.stroke){const e=n.fill;Hd(r,"display",null),this.style(i,n),Hd(i,"stroke",null),e&&(n.fill=null),Ud=r.__values__,this.style(r,n),e&&(n.fill=e),Pd=null}else Hd(r,"display","none")},image(e,t,n){!1===n.smooth?(Wd(t,"image-rendering","optimizeSpeed"),Wd(t,"image-rendering","pixelated")):Wd(t,"image-rendering",null)},text(e,t,n){const r=cc(n);let i,a,o,s;j(r)?(a=r.map((e=>fc(n,e))),i=a.join("\n"),i!==Ud.text&&($c(t,0),o=t.ownerDocument,s=lc(n),a.forEach(((e,r)=>{const i=Oc(o,"tspan",Rd);i.__data__=n,i.textContent=e,r&&(i.setAttribute("x",0),i.setAttribute("dy",s)),t.appendChild(i)})),Ud.text=i)):(a=fc(n,r),a!==Ud.text&&(t.textContent=a,Ud.text=a)),Hd(t,"font-family",hc(n)),Hd(t,"font-size",uc(n)+"px"),Hd(t,"font-style",n.fontStyle),Hd(t,"font-variant",n.fontVariant),Hd(t,"font-weight",n.fontWeight)}};function Id(e,t,n){t!==Ud[e]&&(n?function(e,t,n,r){null!=n?e.setAttributeNS(r,t,n):e.removeAttributeNS(r,t)}(Pd,e,t,n):Hd(Pd,e,t),Ud[e]=t)}function Wd(e,t,n){n!==Ud[t]&&(null==n?e.style.removeProperty(t):e.style.setProperty(t,n+""),Ud[t]=n)}function Gd(e,t){for(const n in t)Hd(e,n,t[n])}function Hd(e,t,n){null!=n?e.setAttribute(t,n):e.removeAttribute(t)}function Vd(){let e;return"undefined"==typeof window?"":(e=window.location).hash?e.href.slice(0,-e.hash.length):e.href}function Yd(e){Pc.call(this,e),this._text=null,this._defs={gradient:{},clipping:{}}}Oe(Yd,Pc,{svg(){return this._text},_render(e){const t=Ed();t.open("svg",we({},Nl,{class:"marks",width:this._width*this._scale,height:this._height*this._scale,viewBox:`0 0 ${this._width} ${this._height}`}));const n=this._bgcolor;return n&&"transparent"!==n&&"none"!==n&&t.open("rect",{width:this._width,height:this._height,fill:n}).close(),t.open("g",Bd,{transform:"translate("+this._origin+")"}),this.mark(t,e),t.close(),this.defs(t),this._text=t.close()+"",this},mark(e,t){const n=kc[t.marktype],r=n.tag,i=[_d,n.attr];e.open("g",{class:Tc(t),"clip-path":t.clip?wu(this,t,t.group):null},kd(t),{"pointer-events":"g"!==r&&!1===t.interactive?"none":null});const a=a=>{const o=this.href(a);if(o&&e.open("a",o),e.open(r,this.attr(t,a,i,"g"!==r?r:null)),"text"===r){const t=cc(a);if(j(t)){const n={x:0,dy:lc(a)};for(let r=0;rthis.mark(e,t))),e.close(),r&&o?(i&&(a.fill=null),a.stroke=o,e.open("path",this.attr(t,a,n.foreground,"bgrect")).close(),i&&(a.fill=i)):e.open("path",this.attr(t,a,n.foreground,"bgfore")).close()}e.close(),o&&e.close()};return n.nested?t.items&&t.items.length&&a(t.items[0]):gl(t,a),e.close()},href(e){const t=e.href;let n;if(t){if(n=this._hrefs&&this._hrefs[t])return n;this.sanitizeURL(t).then((e=>{e["xlink:href"]=e.href,e.href=null,(this._hrefs||(this._hrefs={}))[t]=e}))}return null},attr(e,t,n,r){const i={},a=(e,t,n,r)=>{i[r||e]=t};return Array.isArray(n)?n.forEach((e=>e(a,t,this))):n(a,t,this),r&&function(e,t,n,r,i){let a;if(null==t)return e;"bgrect"===r&&!1===n.interactive&&(e["pointer-events"]="none");if("bgfore"===r&&(!1===n.interactive&&(e["pointer-events"]="none"),e.display="none",null!==t.fill))return e;"image"===r&&!1===t.smooth&&(a=["image-rendering: optimizeSpeed;","image-rendering: pixelated;"]);"text"===r&&(e["font-family"]=hc(t),e["font-size"]=uc(t)+"px",e["font-style"]=t.fontStyle,e["font-variant"]=t.fontVariant,e["font-weight"]=t.fontWeight);for(const n in Md){let r=t[n];const a=Md[n];("transparent"!==r||"fill"!==a&&"stroke"!==a)&&null!=r&&(Es(r)&&(r=Cs(r,i.gradient,"")),e[a]=r)}for(const e in Sd){const n=t[e];null!=n&&(a=a||[],a.push(`${Sd[e]}: ${n};`))}a&&(e.style=a.join(" "))}(i,t,e,r,this._defs),i},defs(e){const t=this._defs.gradient,n=this._defs.clipping;if(0!==Object.keys(t).length+Object.keys(n).length){e.open("defs");for(const n in t){const r=t[n],i=r.stops;"radial"===r.gradient?(e.open("pattern",{id:Ds+n,viewBox:"0,0,1,1",width:"100%",height:"100%",preserveAspectRatio:"xMidYMid slice"}),e.open("rect",{width:"1",height:"1",fill:"url(#"+n+")"}).close(),e.close(),e.open("radialGradient",{id:n,fx:r.x1,fy:r.y1,fr:r.r1,cx:r.x2,cy:r.y2,r:r.r2})):e.open("linearGradient",{id:n,x1:r.x1,x2:r.x2,y1:r.y1,y2:r.y2});for(let t=0;t!Xd.svgMarkTypes.includes(e)));this._svgRenderer.render(e,Xd.svgMarkTypes),this._canvasRenderer.render(e,n)},resize(e,t,n,r){return Qd.resize.call(this,e,t,n,r),this._svgRenderer.resize(e,t,n,r),this._canvasRenderer.resize(e,t,n,r),this},background(e){return Xd.svgOnTop?this._canvasRenderer.background(e):this._svgRenderer.background(e),this}}),Oe(Kd,nd,{initialize(e,t,n){const r=zc(zc(e,0,"div"),Xd.svgOnTop?0:1,"div");return nd.prototype.initialize.call(this,r,t,n)}});const Zd="canvas",ef="hybrid",tf="none",nf={Canvas:Zd,PNG:"png",SVG:"svg",Hybrid:ef,None:tf},rf={};function af(e,t){return e=String(e||"").toLowerCase(),arguments.length>1?(rf[e]=t,this):rf[e]}function of(e,t,n){const r=[],i=(new Du).union(t),a=e.marktype;return a?sf(e,i,n,r):"group"===a?uf(e,i,n,r):E("Intersect scene must be mark node or group item.")}function sf(e,t,n,r){if(function(e,t,n){return e.bounds&&t.intersects(e.bounds)&&("group"===e.marktype||!1!==e.interactive&&(!n||n(e)))}(e,t,n)){const i=e.items,a=e.marktype,o=i.length;let s=0;if("group"===a)for(;s=0;r--)if(i[r]!=a[r])return!1;for(r=i.length-1;r>=0;r--)if(!hf(e[n=i[r]],t[n],n))return!1;return typeof e==typeof t}(e,t):e==t)}function pf(e,t){return hf(qs(e),qs(t))}const mf="top",gf="left",yf="right",vf="bottom",bf="top-left",xf="top-right",_f="bottom-left",kf="bottom-right",Af="start",wf="middle",Df="end",Ef="x",Cf="y",Ff="group",Mf="axis",Sf="title",Bf="frame",Of="scope",Rf="legend",zf="row-header",$f="row-footer",Tf="row-title",qf="column-header",Lf="column-footer",Nf="column-title",Pf="padding",Uf="symbol",jf="fit",If="fit-x",Wf="fit-y",Gf="pad",Hf="none",Vf="all",Yf="each",Xf="flush",Jf="column",Qf="row";function Kf(e){qr.call(this,null,e)}function Zf(e,t,n){return t(e.bounds.clear(),e,n)}Oe(Kf,qr,{transform(e,t){const n=t.dataflow,r=e.mark,i=r.marktype,a=kc[i],o=a.bound;let s,u=r.bounds;if(a.nested)r.items.length&&n.dirty(r.items[0]),u=Zf(r,o),r.items.forEach((e=>{e.bounds.clear().union(u)}));else if(i===Ff||e.modified())switch(t.visit(t.MOD,(e=>n.dirty(e))),u.clear(),r.items.forEach((e=>u.union(Zf(e,o)))),r.role){case Mf:case Rf:case Sf:t.reflow()}else s=t.changed(t.REM),t.visit(t.ADD,(e=>{u.union(Zf(e,o))})),t.visit(t.MOD,(e=>{s=s||u.alignsWith(e.bounds),n.dirty(e),u.union(Zf(e,o))})),s&&(u.clear(),r.items.forEach((e=>u.union(e.bounds))));return df(r),t.modifies("bounds")}});const eh=":vega_identifier:";function th(e){qr.call(this,0,e)}function nh(e){qr.call(this,null,e)}function rh(e){qr.call(this,null,e)}th.Definition={type:"Identifier",metadata:{modifies:!0},params:[{name:"as",type:"string",required:!0}]},Oe(th,qr,{transform(e,t){const n=(i=t.dataflow)._signals[eh]||(i._signals[eh]=i.add(0)),r=e.as;var i;let a=n.value;return t.visit(t.ADD,(e=>e[r]=e[r]||++a)),n.set(this.value=a),t}}),Oe(nh,qr,{transform(e,t){let n=this.value;n||(n=t.dataflow.scenegraph().mark(e.markdef,function(e){const t=e.groups,n=e.parent;return t&&1===t.size?t.get(Object.keys(t.object)[0]):t&&n?t.lookup(n):null}(e),e.index),n.group.context=e.context,e.context.group||(e.context.group=n.group),n.source=this.source,n.clip=e.clip,n.interactive=e.interactive,this.value=n);const r=n.marktype===Ff?Cu:Eu;return t.visit(t.ADD,(e=>r.call(e,n))),(e.modified("clip")||e.modified("interactive"))&&(n.clip=e.clip,n.interactive=!!e.interactive,n.zdirty=!0,t.reflow()),n.items=t.source,t}});const ih={parity:e=>e.filter(((e,t)=>t%2?e.opacity=0:1)),greedy:(e,t)=>{let n;return e.filter(((e,r)=>r&&ah(n.bounds,e.bounds,t)?e.opacity=0:(n=e,1)))}},ah=(e,t,n)=>n>Math.max(t.x1-e.x2,e.x1-t.x2,t.y1-e.y2,e.y1-t.y2),oh=(e,t)=>{for(var n,r=1,i=e.length,a=e[0].bounds;r{const t=e.bounds;return t.width()>1&&t.height()>1},uh=e=>(e.forEach((e=>e.opacity=1)),e),lh=(e,t)=>e.reflow(t.modified()).modifies("opacity");function ch(e){qr.call(this,null,e)}Oe(rh,qr,{transform(e,t){const n=ih[e.method]||ih.parity,r=e.separation||0;let i,a,o=t.materialize(t.SOURCE).source;if(!o||!o.length)return;if(!e.method)return e.modified("method")&&(uh(o),t=lh(t,e)),t;if(o=o.filter(sh),!o.length)return;if(e.sort&&(o=o.slice().sort(e.sort)),i=uh(o),t=lh(t,e),i.length>=3&&oh(i,r)){do{i=n(i,r)}while(i.length>=3&&oh(i,r));i.length<3&&!Y(o).opacity&&(i.length>1&&(Y(i).opacity=0),Y(o).opacity=1)}e.boundScale&&e.boundTolerance>=0&&(a=((e,t,n)=>{var r=e.range(),i=new Du;return t===mf||t===vf?i.set(r[0],-1/0,r[1],1/0):i.set(-1/0,r[0],1/0,r[1]),i.expand(n||1),e=>i.encloses(e.bounds)})(e.boundScale,e.boundOrient,+e.boundTolerance),o.forEach((e=>{a(e)||(e.opacity=0)})));const s=i[0].mark.bounds.clear();return o.forEach((e=>{e.opacity&&s.union(e.bounds)})),t}}),Oe(ch,qr,{transform(e,t){const n=t.dataflow;if(t.visit(t.ALL,(e=>n.dirty(e))),t.fields&&t.fields.zindex){const e=t.source&&t.source[0];e&&(e.mark.zdirty=!0)}}});const dh=new Du;function fh(e,t,n){return e[t]===n?0:(e[t]=n,1)}function hh(e){var t=e.items[0].orient;return t===gf||t===yf}function ph(e,t,n,r){var i,a,o=t.items[0],s=o.datum,u=null!=o.translate?o.translate:.5,l=o.orient,c=function(e){let t=+e.grid;return[e.ticks?t++:-1,e.labels?t++:-1,t+ +e.domain]}(s),d=o.range,f=o.offset,h=o.position,p=o.minExtent,m=o.maxExtent,g=s.title&&o.items[c[2]].items[0],y=o.titlePadding,v=o.bounds,b=g&&dc(g),x=0,_=0;switch(dh.clear().union(v),v.clear(),(i=c[0])>-1&&v.union(o.items[i].bounds),(i=c[1])>-1&&v.union(o.items[i].bounds),l){case mf:x=h||0,_=-f,a=Math.max(p,Math.min(m,-v.y1)),v.add(0,-a).add(d,0),g&&mh(e,g,a,y,b,0,-1,v);break;case gf:x=-f,_=h||0,a=Math.max(p,Math.min(m,-v.x1)),v.add(-a,0).add(0,d),g&&mh(e,g,a,y,b,1,-1,v);break;case yf:x=n+f,_=h||0,a=Math.max(p,Math.min(m,v.x2)),v.add(0,0).add(a,d),g&&mh(e,g,a,y,b,1,1,v);break;case vf:x=h||0,_=r+f,a=Math.max(p,Math.min(m,v.y2)),v.add(0,0).add(d,a),g&&mh(e,g,a,y,0,0,1,v);break;default:x=o.x,_=o.y}return Bu(v.translate(x,_),o),fh(o,"x",x+u)|fh(o,"y",_+u)&&(o.bounds=dh,e.dirty(o),o.bounds=v,e.dirty(o)),o.mark.bounds.clear().union(v)}function mh(e,t,n,r,i,a,o,s){const u=t.bounds;if(t.auto){const s=o*(n+i+r);let l=0,c=0;e.dirty(t),a?l=(t.x||0)-(t.x=s):c=(t.y||0)-(t.y=s),t.mark.bounds.clear().union(u.translate(-l,-c)),e.dirty(t)}s.union(u)}const gh=(e,t)=>Math.floor(Math.min(e,t)),yh=(e,t)=>Math.ceil(Math.max(e,t));function vh(e){return(new Du).set(0,0,e.width||0,e.height||0)}function bh(e){const t=e.bounds.clone();return t.empty()?t.set(0,0,0,0):t.translate(-(e.x||0),-(e.y||0))}function xh(e,t,n){const r=I(e)?e[t]:e;return null!=r?r:void 0!==n?n:0}function _h(e){return e<0?Math.ceil(-e):0}function kh(e,t,n){var r,i,a,o,s,u,l,c,d,f,h,p=!n.nodirty,m=n.bounds===Xf?vh:bh,g=dh.set(0,0,0,0),y=xh(n.align,Jf),v=xh(n.align,Qf),b=xh(n.padding,Jf),x=xh(n.padding,Qf),_=n.columns||t.length,k=_<=0?1:Math.ceil(t.length/_),A=t.length,w=Array(A),D=Array(_),E=0,C=Array(A),F=Array(k),M=0,S=Array(A),B=Array(A),O=Array(A);for(i=0;i<_;++i)D[i]=0;for(i=0;i1)for(i=0;i0&&(S[i]+=d/2);if(v&&xh(n.center,Qf)&&1!==_)for(i=0;i0&&(B[i]+=f/2);for(i=0;ii&&(e.warn("Grid headers exceed limit: "+i),t=t.slice(0,i)),w+=a,m=0,y=t.length;m=0&&null==(x=n[g]);g-=f);s?(_=null==h?x.x:Math.round(x.bounds.x1+h*x.bounds.width()),k=w):(_=w,k=null==h?x.y:Math.round(x.bounds.y1+h*x.bounds.height())),v.union(b.bounds.translate(_-(b.x||0),k-(b.y||0))),b.x=_,b.y=k,e.dirty(b),D=o(D,v[l])}return D}function Ch(e,t,n,r,i,a){if(t){e.dirty(t);var o=n,s=n;r?o=Math.round(i.x1+a*i.width()):s=Math.round(i.y1+a*i.height()),t.bounds.translate(o-(t.x||0),s-(t.y||0)),t.mark.bounds.clear().union(t.bounds),t.x=o,t.y=s,e.dirty(t)}}function Fh(e,t,n,r,i,a,o){const s=function(e,t){const n=e[t]||{};return(t,r)=>null!=n[t]?n[t]:null!=e[t]?e[t]:r}(n,t),u=function(e,t){let n=-1/0;return e.forEach((e=>{null!=e.offset&&(n=Math.max(n,e.offset))})),n>-1/0?n:t}(e,s("offset",0)),l=s("anchor",Af),c=l===Df?1:l===wf?.5:0,d={align:Yf,bounds:s("bounds",Xf),columns:"vertical"===s("direction")?1:e.length,padding:s("margin",8),center:s("center"),nodirty:!0};switch(t){case gf:d.anchor={x:Math.floor(r.x1)-u,column:Df,y:c*(o||r.height()+2*r.y1),row:l};break;case yf:d.anchor={x:Math.ceil(r.x2)+u,y:c*(o||r.height()+2*r.y1),row:l};break;case mf:d.anchor={y:Math.floor(i.y1)-u,row:Df,x:c*(a||i.width()+2*i.x1),column:l};break;case vf:d.anchor={y:Math.ceil(i.y2)+u,x:c*(a||i.width()+2*i.x1),column:l};break;case bf:d.anchor={x:u,y:u};break;case xf:d.anchor={x:a-u,y:u,column:Df};break;case _f:d.anchor={x:u,y:o-u,row:Df};break;case kf:d.anchor={x:a-u,y:o-u,column:Df,row:Df}}return d}function Mh(e,t){var n,r,i=t.items[0],a=i.datum,o=i.orient,s=i.bounds,u=i.x,l=i.y;return i._bounds?i._bounds.clear().union(s):i._bounds=s.clone(),s.clear(),function(e,t,n){var r=t.padding,i=r-n.x,a=r-n.y;if(t.datum.title){var o=t.items[1].items[0],s=o.anchor,u=t.titlePadding||0,l=r-o.x,c=r-o.y;switch(o.orient){case gf:i+=Math.ceil(o.bounds.width())+u;break;case yf:case vf:break;default:a+=o.bounds.height()+u}switch((i||a)&&Bh(e,n,i,a),o.orient){case gf:c+=Sh(t,n,o,s,1,1);break;case yf:l+=Sh(t,n,o,Df,0,0)+u,c+=Sh(t,n,o,s,1,1);break;case vf:l+=Sh(t,n,o,s,0,0),c+=Sh(t,n,o,Df,-1,0,1)+u;break;default:l+=Sh(t,n,o,s,0,0)}(l||c)&&Bh(e,o,l,c),(l=Math.round(o.bounds.x1-r))<0&&(Bh(e,n,-l,0),Bh(e,o,-l,0))}else(i||a)&&Bh(e,n,i,a)}(e,i,i.items[0].items[0]),s=function(e,t){return e.items.forEach((e=>t.union(e.bounds))),t.x1=e.padding,t.y1=e.padding,t}(i,s),n=2*i.padding,r=2*i.padding,s.empty()||(n=Math.ceil(s.width()+n),r=Math.ceil(s.height()+r)),a.type===Uf&&function(e){const t=e.reduce(((e,t)=>(e[t.column]=Math.max(t.bounds.x2-t.x,e[t.column]||0),e)),{});e.forEach((e=>{e.width=t[e.column],e.height=e.bounds.y2-e.y}))}(i.items[0].items[0].items[0].items),o!==Hf&&(i.x=u=0,i.y=l=0),i.width=n,i.height=r,Bu(s.set(u,l,u+n,l+r),i),i.mark.bounds.clear().union(s),i}function Sh(e,t,n,r,i,a,o){const s="symbol"!==e.datum.type,u=n.datum.vgrad,l=(!s||!a&&u||o?t:t.items[0]).bounds[i?"y2":"x2"]-e.padding,c=u&&a?l:0,d=u&&a?0:l,f=i<=0?0:dc(n);return Math.round(r===Af?c:r===Df?d-f:.5*(l-f))}function Bh(e,t,n,r){t.x+=n,t.y+=r,t.bounds.translate(n,r),t.mark.bounds.translate(n,r),e.dirty(t)}function Oh(e){qr.call(this,null,e)}Oe(Oh,qr,{transform(e,t){const n=t.dataflow;return e.mark.items.forEach((t=>{e.layout&&Ah(n,t,e.layout),function(e,t,n){var r,i,a,o,s,u=t.items,l=Math.max(0,t.width||0),c=Math.max(0,t.height||0),d=(new Du).set(0,0,l,c),f=d.clone(),h=d.clone(),p=[];for(o=0,s=u.length;o{(a=e.orient||yf)!==Hf&&(t[a]||(t[a]=[])).push(e)}));for(const r in t){const i=t[r];kh(e,i,Fh(i,r,n.legends,f,h,l,c))}p.forEach((t=>{const r=t.bounds;if(r.equals(t._bounds)||(t.bounds=t._bounds,e.dirty(t),t.bounds=r,e.dirty(t)),!n.autosize||n.autosize.type!==jf&&n.autosize.type!==If&&n.autosize.type!==Wf)d.union(r);else switch(t.orient){case gf:case yf:d.add(r.x1,0).add(r.x2,0);break;case mf:case vf:d.add(0,r.y1).add(0,r.y2)}}))}d.union(f).union(h),r&&d.union(function(e,t,n,r,i){var a,o=t.items[0],s=o.frame,u=o.orient,l=o.anchor,c=o.offset,d=o.padding,f=o.items[0].items[0],h=o.items[1]&&o.items[1].items[0],p=u===gf||u===yf?r:n,m=0,g=0,y=0,v=0,b=0;if(s!==Ff?u===gf?(m=i.y2,p=i.y1):u===yf?(m=i.y1,p=i.y2):(m=i.x1,p=i.x2):u===gf&&(m=r,p=0),a=l===Af?m:l===Df?p:(m+p)/2,h&&h.text){switch(u){case mf:case vf:b=f.bounds.height()+d;break;case gf:v=f.bounds.width()+d;break;case yf:v=-f.bounds.width()-d}dh.clear().union(h.bounds),dh.translate(v-(h.x||0),b-(h.y||0)),fh(h,"x",v)|fh(h,"y",b)&&(e.dirty(h),h.bounds.clear().union(dh),h.mark.bounds.clear().union(dh),e.dirty(h)),dh.clear().union(h.bounds)}else dh.clear();switch(dh.union(f.bounds),u){case mf:g=a,y=i.y1-dh.height()-c;break;case gf:g=i.x1-dh.width()-c,y=a;break;case yf:g=i.x2+dh.width()+c,y=a;break;case vf:g=a,y=i.y2+c;break;default:g=o.x,y=o.y}return fh(o,"x",g)|fh(o,"y",y)&&(dh.translate(g,y),e.dirty(o),o.bounds.clear().union(dh),t.bounds.clear().union(dh),e.dirty(o)),o.bounds}(e,r,l,c,d));t.clip&&d.set(0,0,t.width||0,t.height||0);!function(e,t,n,r){const i=r.autosize||{},a=i.type;if(e._autosize<1||!a)return;let o=e._width,s=e._height,u=Math.max(0,t.width||0),l=Math.max(0,Math.ceil(-n.x1)),c=Math.max(0,t.height||0),d=Math.max(0,Math.ceil(-n.y1));const f=Math.max(0,Math.ceil(n.x2-u)),h=Math.max(0,Math.ceil(n.y2-c));if(i.contains===Pf){const t=e.padding();o-=t.left+t.right,s-=t.top+t.bottom}a===Hf?(l=0,d=0,u=o,c=s):a===jf?(u=Math.max(0,o-l-f),c=Math.max(0,s-d-h)):a===If?(u=Math.max(0,o-l-f),s=c+d+h):a===Wf?(o=u+l+f,c=Math.max(0,s-d-h)):a===Gf&&(o=u+l+f,s=c+d+h);e._resizeView(o,s,u,c,[l,d],i.resize)}(e,t,d,n)}(n,t,e)})),function(e){return e&&"legend-entry"!==e.mark.role}(e.mark.group)?t.reflow():t}});var Rh=Object.freeze({__proto__:null,bound:Kf,identifier:th,mark:nh,overlap:rh,render:ch,viewlayout:Oh});function zh(e){qr.call(this,null,e)}function $h(e){qr.call(this,null,e)}function Th(){return or({})}function qh(e){qr.call(this,null,e)}function Lh(e){qr.call(this,[],e)}Oe(zh,qr,{transform(e,t){if(this.value&&!e.modified())return t.StopPropagation;var n=t.dataflow.locale(),r=t.fork(t.NO_SOURCE|t.NO_FIELDS),i=this.value,a=e.scale,o=ss(a,null==e.count?e.values?e.values.length:10:e.count,e.minstep),s=e.format||cs(n,a,o,e.formatSpecifier,e.formatType,!!e.values),u=e.values?us(a,e.values,o):ls(a,o);return i&&(r.rem=i),i=u.map(((e,t)=>or({index:t/(u.length-1||1),value:e,label:s(e)}))),e.extra&&i.length&&i.push(or({index:-1,extra:{value:i[0].value},label:""})),r.source=i,r.add=i,this.value=i,r}}),Oe($h,qr,{transform(e,t){var n=t.dataflow,r=t.fork(t.NO_SOURCE|t.NO_FIELDS),i=e.item||Th,a=e.key||ir,o=this.value;return j(r.encode)&&(r.encode=null),o&&(e.modified("key")||t.modified(a))&&E("DataJoin does not support modified key function or fields."),o||(t=t.addAll(),this.value=o=function(e){const t=Se().test((e=>e.exit));return t.lookup=n=>t.get(e(n)),t}(a)),t.visit(t.ADD,(e=>{const t=a(e);let n=o.get(t);n?n.exit?(o.empty--,r.add.push(n)):r.mod.push(n):(n=i(e),o.set(t,n),r.add.push(n)),n.datum=e,n.exit=!1})),t.visit(t.MOD,(e=>{const t=a(e),n=o.get(t);n&&(n.datum=e,r.mod.push(n))})),t.visit(t.REM,(e=>{const t=a(e),n=o.get(t);e!==n.datum||n.exit||(r.rem.push(n),n.exit=!0,++o.empty)})),t.changed(t.ADD_MOD)&&r.modifies("datum"),(t.clean()||e.clean&&o.empty>n.cleanThreshold)&&n.runAfter(o.clean),r}}),Oe(qh,qr,{transform(e,t){var n=t.fork(t.ADD_REM),r=e.mod||!1,i=e.encoders,a=t.encode;if(j(a)){if(!n.changed()&&!a.every((e=>i[e])))return t.StopPropagation;a=a[0],n.encode=null}var o="enter"===a,s=i.update||z,u=i.enter||z,l=i.exit||z,c=(a&&!o?i[a]:s)||z;if(t.changed(t.ADD)&&(t.visit(t.ADD,(t=>{u(t,e),s(t,e)})),n.modifies(u.output),n.modifies(s.output),c!==z&&c!==s&&(t.visit(t.ADD,(t=>{c(t,e)})),n.modifies(c.output))),t.changed(t.REM)&&l!==z&&(t.visit(t.REM,(t=>{l(t,e)})),n.modifies(l.output)),o||c!==z){const i=t.MOD|(e.modified()?t.REFLOW:0);o?(t.visit(i,(t=>{const i=u(t,e)||r;(c(t,e)||i)&&n.mod.push(t)})),n.mod.length&&n.modifies(u.output)):t.visit(i,(t=>{(c(t,e)||r)&&n.mod.push(t)})),n.mod.length&&n.modifies(c.output)}return n.changed()?n:t.StopPropagation}}),Oe(Lh,qr,{transform(e,t){if(null!=this.value&&!e.modified())return t.StopPropagation;var n,r,i,a,o,s=t.dataflow.locale(),u=t.fork(t.NO_SOURCE|t.NO_FIELDS),l=this.value,c=e.type||ns,d=e.scale,f=+e.limit,h=ss(d,null==e.count?5:e.count,e.minstep),p=!!e.values||c===ns,m=e.format||gs(s,d,h,c,e.formatSpecifier,e.formatType,p),g=e.values||ps(d,h);return l&&(u.rem=l),c===ns?(f&&g.length>f?(t.dataflow.warn("Symbol legend count exceeds limit, filtering items."),l=g.slice(0,f-1),o=!0):l=g,me(i=e.size)?(e.values||0!==d(l[0])||(l=l.slice(1)),a=l.reduce(((t,n)=>Math.max(t,i(n,e))),0)):i=ke(a=i||8),l=l.map(((t,n)=>or({index:n,label:m(t,n,l),value:t,offset:a,size:i(t,e)}))),o&&(o=g[l.length],l.push(or({index:l.length,label:`…${g.length-l.length} entries`,value:o,offset:a,size:i(o,e)})))):"gradient"===c?(n=d.domain(),r=Jo(d,n[0],Y(n)),g.length<3&&!e.values&&n[0]!==Y(n)&&(g=[n[0],Y(n)]),l=g.map(((e,t)=>or({index:t,label:m(e,t,g),value:e,perc:r(e)})))):(i=g.length-1,r=function(e){const t=e.domain(),n=t.length-1;let r=+t[0],i=+Y(t),a=i-r;if(e.type===xo){const e=n?a/n:.1;r-=e,i+=e,a=i-r}return e=>(e-r)/a}(d),l=g.map(((e,t)=>or({index:t,label:m(e,t,g),value:e,perc:t?r(e):0,perc2:t===i?1:r(g[t+1])})))),u.source=l,u.add=l,this.value=l,u}});const Nh=e=>e.source.x,Ph=e=>e.source.y,Uh=e=>e.target.x,jh=e=>e.target.y;function Ih(e){qr.call(this,{},e)}Ih.Definition={type:"LinkPath",metadata:{modifies:!0},params:[{name:"sourceX",type:"field",default:"source.x"},{name:"sourceY",type:"field",default:"source.y"},{name:"targetX",type:"field",default:"target.x"},{name:"targetY",type:"field",default:"target.y"},{name:"orient",type:"enum",default:"vertical",values:["horizontal","vertical","radial"]},{name:"shape",type:"enum",default:"line",values:["line","arc","curve","diagonal","orthogonal"]},{name:"require",type:"signal"},{name:"as",type:"string",default:"path"}]},Oe(Ih,qr,{transform(e,t){var n=e.sourceX||Nh,r=e.sourceY||Ph,i=e.targetX||Uh,a=e.targetY||jh,o=e.as||"path",s=e.orient||"vertical",u=e.shape||"line",l=Vh.get(u+"-"+s)||Vh.get(u);return l||E("LinkPath unsupported type: "+e.shape+(e.orient?"-"+e.orient:"")),t.visit(t.SOURCE,(e=>{e[o]=l(n(e),r(e),i(e),a(e))})),t.reflow(e.modified()).modifies(o)}});const Wh=(e,t,n,r)=>"M"+e+","+t+"L"+n+","+r,Gh=(e,t,n,r)=>{var i=n-e,a=r-t,o=Math.hypot(i,a)/2;return"M"+e+","+t+"A"+o+","+o+" "+180*Math.atan2(a,i)/Math.PI+" 0 1 "+n+","+r},Hh=(e,t,n,r)=>{const i=n-e,a=r-t,o=.2*(i+a),s=.2*(a-i);return"M"+e+","+t+"C"+(e+o)+","+(t+s)+" "+(n+s)+","+(r-o)+" "+n+","+r},Vh=Se({line:Wh,"line-radial":(e,t,n,r)=>Wh(t*Math.cos(e),t*Math.sin(e),r*Math.cos(n),r*Math.sin(n)),arc:Gh,"arc-radial":(e,t,n,r)=>Gh(t*Math.cos(e),t*Math.sin(e),r*Math.cos(n),r*Math.sin(n)),curve:Hh,"curve-radial":(e,t,n,r)=>Hh(t*Math.cos(e),t*Math.sin(e),r*Math.cos(n),r*Math.sin(n)),"orthogonal-horizontal":(e,t,n,r)=>"M"+e+","+t+"V"+r+"H"+n,"orthogonal-vertical":(e,t,n,r)=>"M"+e+","+t+"H"+n+"V"+r,"orthogonal-radial":(e,t,n,r)=>{const i=Math.cos(e),a=Math.sin(e),o=Math.cos(n),s=Math.sin(n);return"M"+t*i+","+t*a+"A"+t+","+t+" 0 0,"+((Math.abs(n-e)>Math.PI?n<=e:n>e)?1:0)+" "+t*o+","+t*s+"L"+r*o+","+r*s},"diagonal-horizontal":(e,t,n,r)=>{const i=(e+n)/2;return"M"+e+","+t+"C"+i+","+t+" "+i+","+r+" "+n+","+r},"diagonal-vertical":(e,t,n,r)=>{const i=(t+r)/2;return"M"+e+","+t+"C"+e+","+i+" "+n+","+i+" "+n+","+r},"diagonal-radial":(e,t,n,r)=>{const i=Math.cos(e),a=Math.sin(e),o=Math.cos(n),s=Math.sin(n),u=(t+r)/2;return"M"+t*i+","+t*a+"C"+u*i+","+u*a+" "+u*o+","+u*s+" "+r*o+","+r*s}});function Yh(e){qr.call(this,null,e)}Yh.Definition={type:"Pie",metadata:{modifies:!0},params:[{name:"field",type:"field"},{name:"startAngle",type:"number",default:0},{name:"endAngle",type:"number",default:6.283185307179586},{name:"sort",type:"boolean",default:!1},{name:"as",type:"string",array:!0,length:2,default:["startAngle","endAngle"]}]},Oe(Yh,qr,{transform(e,t){var n,i,a,o=e.as||["startAngle","endAngle"],s=o[0],u=o[1],l=e.field||O,c=e.startAngle||0,d=null!=e.endAngle?e.endAngle:2*Math.PI,f=t.source,h=f.map(l),p=h.length,m=c,g=(d-c)/r.sum(h),y=r.range(p);for(e.sort&&y.sort(((e,t)=>h[e]-h[t])),n=0;ne+(t<0?-1:t>0?1:0)),0))!==t.length&&n.warn("Log scale domain includes zero: "+Ve(t)));return t}function ep(e,t,n){return me(e)&&(t||n)?Vo(e,tp(t||[0,1],n)):e}function tp(e,t){return t?e.slice().reverse():e}function np(e){qr.call(this,null,e)}Oe(Kh,qr,{transform(e,t){var n=t.dataflow,i=this.value,a=function(e){var t,n=e.type,r="";if(n===go)return go+"-"+uo;(function(e){const t=e.type;return Po(t)&&t!==po&&t!==mo&&(e.scheme||e.range&&e.range.length&&e.range.every(Ne))})(e)&&(r=2===(t=e.rawDomain?e.rawDomain.length:e.domain?e.domain.length+ +(null!=e.domainMid):0)?go+"-":3===t?yo+"-":"");return(r+n||uo).toLowerCase()}(e);for(a in i&&a===i.type||(this.value=i=qo(a)()),e)if(!Qh[a]){if("padding"===a&&Jh(i.type))continue;me(i[a])?i[a](e[a]):n.warn("Unsupported scale property: "+a)}return function(e,t,n){var r=e.type,i=t.round||!1,a=t.range;if(null!=t.rangeStep)a=function(e,t,n){e!==Ao&&e!==ko&&E("Only band and point scales support rangeStep.");var r=(null!=t.paddingOuter?t.paddingOuter:t.padding)||0,i=e===ko?1:(null!=t.paddingInner?t.paddingInner:t.padding)||0;return[0,t.rangeStep*so(n,i,r)]}(r,t,n);else if(t.scheme&&(a=function(e,t,n){var r,i=t.schemeExtent;j(t.scheme)?r=Yo(t.scheme,t.interpolate,t.interpolateGamma):(r=ts(t.scheme.toLowerCase()))||E(`Unrecognized scheme name: ${t.scheme}`);return n=e===xo?n+1:e===wo?n-1:e===vo||e===bo?+t.schemeCount||Xh:n,Wo(e)?ep(r,i,t.reverse):me(r)?Xo(ep(r,i),n):e===_o?r:r.slice(0,n)}(r,t,n),me(a))){if(e.interpolator)return e.interpolator(a);E(`Scale type ${r} does not support interpolating color schemes.`)}if(a&&Wo(r))return e.interpolator(Yo(tp(a,t.reverse),t.interpolate,t.interpolateGamma));a&&t.interpolate&&e.interpolate?e.interpolate(Qo(t.interpolate,t.interpolateGamma)):me(e.round)?e.round(i):me(e.rangeRound)&&e.interpolate(i?c.interpolateRound:c.interpolate);a&&e.range(tp(a,t.reverse))}(i,e,function(e,t,n){let i=t.bins;if(i&&!j(i)){const t=e.domain(),n=t[0],a=Y(t),o=i.step;let s=null==i.start?n:i.start,u=null==i.stop?a:i.stop;o||E("Scale bins parameter missing step property."),sa&&(u=o*Math.floor(a/o)),i=r.range(s,u+o/2,o)}i?e.bins=i:e.bins&&delete e.bins;e.type===wo&&(i?t.domain||t.domainRaw||(e.domain(i),n=i.length):e.bins=e.domain());return n}(i,e,function(e,t,n){const r=function(e,t,n){return t?(e.domain(Zh(e.type,t,n)),t.length):-1}(e,t.domainRaw,n);if(r>-1)return r;var i,a,o=t.domain,s=e.type,u=t.zero||void 0===t.zero&&function(e){const t=e.type;return!e.bins&&(t===uo||t===co||t===fo)}(e);if(!o)return 0;Jh(s)&&t.padding&&o[0]!==Y(o)&&(o=function(e,t,n,r,i,a){var o=Math.abs(Y(n)-n[0]),s=o/(o-2*r),u=e===lo?ue(t,null,s):e===fo?le(t,null,s,.5):e===co?le(t,null,s,i||1):e===ho?ce(t,null,s,a||1):se(t,null,s);return t=t.slice(),t[0]=u[0],t[t.length-1]=u[1],t}(s,o,t.range,t.padding,t.exponent,t.constant));if((u||null!=t.domainMin||null!=t.domainMax||null!=t.domainMid)&&(i=(o=o.slice()).length-1||1,u&&(o[0]>0&&(o[0]=0),o[i]<0&&(o[i]=0)),null!=t.domainMin&&(o[0]=t.domainMin),null!=t.domainMax&&(o[i]=t.domainMax),null!=t.domainMid)){const e=(a=t.domainMid)>o[i]?i+1:ae(u);if(null==t)h.push(e.slice());else for(i={},a=0,o=e.length;af&&(f=d),n&&c.sort(n)}return h.max=f,h}(t.source,e.groupby,l,c),r=0,i=n.length,a=n.max;r0?Math.sqrt(e):0}(2);function bp(e){return e>1?yp:e<-1?-yp:Math.asin(e)}function xp(e,t){var n,r=e*pp(t),i=30;do{t-=n=(t+pp(t)-r)/(1+hp(t))}while(fp(n)>mp&&--i>0);return t/2}var _p=function(e,t,n){function r(r,i){return[e*r*hp(i=xp(n,i)),t*pp(i)]}return r.invert=function(r,i){return i=bp(i/t),[r/(e*hp(i)),bp((2*i+pp(2*i))/n)]},r}(vp/yp,vp,gp);const kp=d.geoPath(),Ap=["clipAngle","clipExtent","scale","translate","center","rotate","parallels","precision","reflectX","reflectY","coefficient","distance","fraction","lobes","parallel","radius","ratio","spacing","tilt"];function wp(e,t){if(!e||"string"!=typeof e)throw new Error("Projection type must be a name string.");return e=e.toLowerCase(),arguments.length>1?(Ep[e]=function(e,t){return function n(){const r=t();return r.type=e,r.path=d.geoPath().projection(r),r.copy=r.copy||function(){const e=n();return Ap.forEach((t=>{r[t]&&e[t](r[t]())})),e.path.pointRadius(r.path.pointRadius()),e},To(r)}}(e,t),this):Ep[e]||null}function Dp(e){return e&&e.path||kp}const Ep={albers:d.geoAlbers,albersusa:d.geoAlbersUsa,azimuthalequalarea:d.geoAzimuthalEqualArea,azimuthalequidistant:d.geoAzimuthalEquidistant,conicconformal:d.geoConicConformal,conicequalarea:d.geoConicEqualArea,conicequidistant:d.geoConicEquidistant,equalEarth:d.geoEqualEarth,equirectangular:d.geoEquirectangular,gnomonic:d.geoGnomonic,identity:d.geoIdentity,mercator:d.geoMercator,mollweide:function(){return d.geoProjection(_p).scale(169.529)},naturalEarth1:d.geoNaturalEarth1,orthographic:d.geoOrthographic,stereographic:d.geoStereographic,transversemercator:d.geoTransverseMercator};for(const e in Ep)wp(e,Ep[e]);function Cp(){}const Fp=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]];function Mp(){var e=1,t=1,n=o;function r(e,t){return t.map((t=>i(e,t)))}function i(r,i){var o=[],s=[];return function(n,r,i){var o,s,u,l,c,d,f=new Array,h=new Array;o=s=-1,l=n[0]>=r,Fp[l<<1].forEach(p);for(;++o=r,Fp[u|l<<1].forEach(p);Fp[l<<0].forEach(p);for(;++s=r,c=n[s*e]>=r,Fp[l<<1|c<<2].forEach(p);++o=r,d=c,c=n[s*e+o+1]>=r,Fp[u|l<<1|c<<2|d<<3].forEach(p);Fp[l|c<<3].forEach(p)}o=-1,c=n[s*e]>=r,Fp[c<<2].forEach(p);for(;++o=r,Fp[c<<2|d<<3].forEach(p);function p(e){var t,n,r=[e[0][0]+o,e[0][1]+s],u=[e[1][0]+o,e[1][1]+s],l=a(r),c=a(u);(t=h[l])?(n=f[c])?(delete h[t.end],delete f[n.start],t===n?(t.ring.push(u),i(t.ring)):f[t.start]=h[n.end]={start:t.start,end:n.end,ring:t.ring.concat(n.ring)}):(delete h[t.end],t.ring.push(u),h[t.end=c]=t):(t=f[c])?(n=h[l])?(delete f[t.start],delete h[n.end],t===n?(t.ring.push(u),i(t.ring)):f[n.start]=h[t.end]={start:n.start,end:t.end,ring:n.ring.concat(t.ring)}):(delete f[t.start],t.ring.unshift(r),f[t.start=l]=t):f[l]=h[c]={start:l,end:c,ring:[r,u]}}Fp[c<<3].forEach(p)}(r,i,(e=>{n(e,r,i),function(e){var t=0,n=e.length,r=e[n-1][1]*e[0][0]-e[n-1][0]*e[0][1];for(;++t0?o.push([e]):s.push(e)})),s.forEach((e=>{for(var t,n=0,r=o.length;n{var a,o=n[0],s=n[1],u=0|o,l=0|s,c=r[l*e+u];o>0&&o0&&s=0&&a>=0||E("invalid size"),e=i,t=a,r},r.smooth=function(e){return arguments.length?(n=e?o:Cp,r):n===o},r}function Sp(e,t){for(var n,r=-1,i=t.length;++rr!=h>r&&n<(f-l)*(r-c)/(h-c)+l&&(i=-i)}return i}function Op(e,t,n){var r,i,a,o;return function(e,t,n){return(t[0]-e[0])*(n[1]-e[1])==(n[0]-e[0])*(t[1]-e[1])}(e,t,n)&&(i=e[r=+(e[0]===t[0])],a=n[r],o=t[r],i<=a&&a<=o||o<=a&&a<=i)}function Rp(e,t,n){return function(i){var a=De(i),o=n?Math.min(a[0],0):a[0],s=a[1],u=s-o,l=t?r.tickStep(o,s,e):u/(e+1);return r.range(o+l,s,l)}}function zp(e){qr.call(this,null,e)}function $p(e,t,n,r,i){const a=e.x1||0,o=e.y1||0,s=t*n<0;function u(e){e.forEach(l)}function l(e){s&&e.reverse(),e.forEach(c)}function c(e){e[0]=(e[0]-a)*t+r,e[1]=(e[1]-o)*n+i}return function(e){return e.coordinates.forEach(u),e}}function Tp(e,t,n){const r=e>=0?e:Wr(t,n);return Math.round((Math.sqrt(4*r*r+1)-1)/2)}function qp(e){return me(e)?e:ke(+e)}function Lp(){var e=e=>e[0],t=e=>e[1],n=O,i=[-1,-1],a=960,o=500,s=2;function u(u,l){const c=Tp(i[0],u,e)>>s,d=Tp(i[1],u,t)>>s,f=c?c+2:0,h=d?d+2:0,p=2*f+(a>>s),m=2*h+(o>>s),g=new Float32Array(p*m),y=new Float32Array(p*m);let v=g;u.forEach((r=>{const i=f+(+e(r)>>s),a=h+(+t(r)>>s);i>=0&&i=0&&a0&&d>0?(Np(p,m,g,y,c),Pp(p,m,y,g,d),Np(p,m,g,y,c),Pp(p,m,y,g,d),Np(p,m,g,y,c),Pp(p,m,y,g,d)):c>0?(Np(p,m,g,y,c),Np(p,m,y,g,c),Np(p,m,g,y,c),v=y):d>0&&(Pp(p,m,g,y,d),Pp(p,m,y,g,d),Pp(p,m,g,y,d),v=y);const b=l?Math.pow(2,-2*s):1/r.sum(v);for(let e=0,t=p*m;e>s),y2:h+(o>>s)}}return u.x=function(t){return arguments.length?(e=qp(t),u):e},u.y=function(e){return arguments.length?(t=qp(e),u):t},u.weight=function(e){return arguments.length?(n=qp(e),u):n},u.size=function(e){if(!arguments.length)return[a,o];var t=+e[0],n=+e[1];return t>=0&&n>=0||E("invalid size"),a=t,o=n,u},u.cellSize=function(e){return arguments.length?((e=+e)>=1||E("invalid cell size"),s=Math.floor(Math.log(e)/Math.LN2),u):1<=i&&(t>=a&&(s-=n[t-a+o*e]),r[t-i+o*e]=s/Math.min(t+1,e-1+a-t,a))}function Pp(e,t,n,r,i){const a=1+(i<<1);for(let o=0;o=i&&(s>=a&&(u-=n[o+(s-a)*e]),r[o+(s-i)*e]=u/Math.min(s+1,t-1+a-s,a))}function Up(e){qr.call(this,null,e)}zp.Definition={type:"Isocontour",metadata:{generates:!0},params:[{name:"field",type:"field"},{name:"thresholds",type:"number",array:!0},{name:"levels",type:"number"},{name:"nice",type:"boolean",default:!1},{name:"resolve",type:"enum",values:["shared","independent"],default:"independent"},{name:"zero",type:"boolean",default:!0},{name:"smooth",type:"boolean",default:!0},{name:"scale",type:"number",expr:!0},{name:"translate",type:"number",array:!0,expr:!0},{name:"as",type:"string",null:!0,default:"contour"}]},Oe(zp,qr,{transform(e,t){if(this.value&&!t.changed()&&!e.modified())return t.StopPropagation;var n=t.fork(t.NO_SOURCE|t.NO_FIELDS),i=t.materialize(t.SOURCE).source,a=e.field||S,o=Mp().smooth(!1!==e.smooth),s=e.thresholds||function(e,t,n){const i=Rp(n.levels||10,n.nice,!1!==n.zero);return"shared"!==n.resolve?i:i(e.map((e=>r.max(t(e).values))))}(i,a,e),u=null===e.as?null:e.as||"contour",l=[];return i.forEach((t=>{const n=a(t),r=o.size([n.width,n.height])(n.values,j(s)?s:s(n.values));!function(e,t,n,r){let i=r.scale||t.scale,a=r.translate||t.translate;me(i)&&(i=i(n,r));me(a)&&(a=a(n,r));if((1===i||null==i)&&!a)return;const o=(qe(i)?i:i[0])||1,s=(qe(i)?i:i[1])||1,u=a&&a[0]||0,l=a&&a[1]||0;e.forEach($p(t,o,s,u,l))}(r,n,t,e),r.forEach((e=>{l.push(ur(t,or(null!=u?{[u]:e}:e)))}))})),this.value&&(n.rem=this.value),this.value=n.source=n.add=l,n}}),Up.Definition={type:"KDE2D",metadata:{generates:!0},params:[{name:"size",type:"number",array:!0,length:2,required:!0},{name:"x",type:"field",required:!0},{name:"y",type:"field",required:!0},{name:"weight",type:"field"},{name:"groupby",type:"field",array:!0},{name:"cellSize",type:"number"},{name:"bandwidth",type:"number",array:!0,length:2},{name:"counts",type:"boolean",default:!1},{name:"as",type:"string",default:"grid"}]};const jp=["x","y","weight","size","cellSize","bandwidth"];function Ip(e,t){return jp.forEach((n=>null!=t[n]?e[n](t[n]):0)),e}function Wp(e){qr.call(this,null,e)}Oe(Up,qr,{transform(e,t){if(this.value&&!t.changed()&&!e.modified())return t.StopPropagation;var n,r=t.fork(t.NO_SOURCE|t.NO_FIELDS),i=function(e,t){var n,r,i,a,o,s,u=[],l=e=>e(a);if(null==t)u.push(e);else for(n={},r=0,i=e.length;ror(function(e,t){for(let n=0;nr.push(u(e)))),o&&s&&(t.visit(l,(e=>{var t=o(e),n=s(e);null!=t&&null!=n&&(t=+t)===t&&(n=+n)===n&&i.push([t,n])})),r=r.concat({type:Gp,geometry:{type:"MultiPoint",coordinates:i}})),this.value={type:Hp,features:r}}}),Yp.Definition={type:"GeoPath",metadata:{modifies:!0},params:[{name:"projection",type:"projection"},{name:"field",type:"field"},{name:"pointRadius",type:"number",expr:!0},{name:"as",type:"string",default:"path"}]},Oe(Yp,qr,{transform(e,t){var n=t.fork(t.ALL),r=this.value,i=e.field||S,a=e.as||"path",o=n.SOURCE;!r||e.modified()?(this.value=r=Dp(e.projection),n.materialize().reflow()):o=i===S||t.modified(i.fields)?n.ADD_MOD:n.ADD;const s=function(e,t){const n=e.pointRadius();e.context(null),null!=t&&e.pointRadius(t);return n}(r,e.pointRadius);return n.visit(o,(e=>e[a]=r(i(e)))),r.pointRadius(s),n.modifies(a)}}),Xp.Definition={type:"GeoPoint",metadata:{modifies:!0},params:[{name:"projection",type:"projection",required:!0},{name:"fields",type:"field",array:!0,required:!0,length:2},{name:"as",type:"string",array:!0,length:2,default:["x","y"]}]},Oe(Xp,qr,{transform(e,t){var n,r=e.projection,i=e.fields[0],a=e.fields[1],o=e.as||["x","y"],s=o[0],u=o[1];function l(e){const t=r([i(e),a(e)]);t?(e[s]=t[0],e[u]=t[1]):(e[s]=void 0,e[u]=void 0)}return e.modified()?t=t.materialize().reflow(!0).visit(t.SOURCE,l):(n=t.modified(i.fields)||t.modified(a.fields),t.visit(n?t.ADD_MOD:t.ADD,l)),t.modifies(o)}}),Jp.Definition={type:"GeoShape",metadata:{modifies:!0,nomod:!0},params:[{name:"projection",type:"projection"},{name:"field",type:"field",default:"datum"},{name:"pointRadius",type:"number",expr:!0},{name:"as",type:"string",default:"shape"}]},Oe(Jp,qr,{transform(e,t){var n=t.fork(t.ALL),r=this.value,i=e.as||"shape",a=n.ADD;return r&&!e.modified()||(this.value=r=function(e,t,n){const r=null==n?n=>e(t(n)):r=>{var i=e.pointRadius(),a=e.pointRadius(n)(t(r));return e.pointRadius(i),a};return r.context=t=>(e.context(t),r),r}(Dp(e.projection),e.field||F("datum"),e.pointRadius),n.materialize().reflow(),a=n.SOURCE),n.visit(a,(e=>e[i]=r)),n.modifies(i)}}),Qp.Definition={type:"Graticule",metadata:{changes:!0,generates:!0},params:[{name:"extent",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"extentMajor",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"extentMinor",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"step",type:"number",array:!0,length:2},{name:"stepMajor",type:"number",array:!0,length:2,default:[90,360]},{name:"stepMinor",type:"number",array:!0,length:2,default:[10,10]},{name:"precision",type:"number",default:2.5}]},Oe(Qp,qr,{transform(e,t){var n,r=this.value,i=this.generator;if(!r.length||e.modified())for(const t in e)me(i[t])&&i[t](e[t]);return n=i(),r.length?t.mod.push(lr(r[0],n)):t.add.push(or(n)),r[0]=n,t}}),Kp.Definition={type:"heatmap",metadata:{modifies:!0},params:[{name:"field",type:"field"},{name:"color",type:"string",expr:!0},{name:"opacity",type:"number",expr:!0},{name:"resolve",type:"enum",values:["shared","independent"],default:"independent"},{name:"as",type:"string",default:"image"}]},Oe(Kp,qr,{transform(e,t){if(!t.changed()&&!e.modified())return t.StopPropagation;var n=t.materialize(t.SOURCE).source,i="shared"===e.resolve,a=e.field||S,o=function(e,t){let n;me(e)?(n=n=>e(n,t),n.dep=Zp(e)):e?n=ke(e):(n=e=>e.$value/e.$max||0,n.dep=!0);return n}(e.opacity,e),s=function(e,t){let n;me(e)?(n=n=>f.rgb(e(n,t)),n.dep=Zp(e)):n=ke(f.rgb(e||"#888"));return n}(e.color,e),u=e.as||"image",l={$x:0,$y:0,$value:0,$max:i?r.max(n.map((e=>r.max(a(e).values)))):0};return n.forEach((e=>{const t=a(e),n=we({},e,l);i||(n.$max=r.max(t.values||[])),e[u]=function(e,t,n,r){const i=e.width,a=e.height,o=e.x1||0,s=e.y1||0,u=e.x2||i,l=e.y2||a,c=e.values,d=c?e=>c[e]:B,f=ao(u-o,l-s),h=f.getContext("2d"),p=h.getImageData(0,0,u-o,l-s),m=p.data;for(let e=s,a=0;e{null!=e[t]&&tm(n,t,e[t])}))):Ap.forEach((t=>{e.modified(t)&&tm(n,t,e[t])})),null!=e.pointRadius&&n.path.pointRadius(e.pointRadius),e.fit&&function(e,t){const n=function(e){return e=he(e),1===e.length?e[0]:{type:Hp,features:e.reduce(((e,t)=>e.concat(function(e){return e.type===Hp?e.features:he(e).filter((e=>null!=e)).map((e=>e.type===Gp?e:{type:Gp,geometry:e}))}(t))),[])}}(t.fit);t.extent?e.fitExtent(t.extent,n):t.size&&e.fitSize(t.size,n)}(n,e),t.fork(t.NO_SOURCE|t.NO_FIELDS)}});var nm=Object.freeze({__proto__:null,contour:Wp,geojson:Vp,geopath:Yp,geopoint:Xp,geoshape:Jp,graticule:Qp,heatmap:Kp,isocontour:zp,kde2d:Up,projection:em});const rm={center:h.forceCenter,collide:h.forceCollide,nbody:h.forceManyBody,link:h.forceLink,x:h.forceX,y:h.forceY},im="forces",am=["alpha","alphaMin","alphaTarget","velocityDecay","forces"],om=["static","iterations"],sm=["x","y","vx","vy"];function um(e){qr.call(this,null,e)}function lm(e,t,n,r){var i,a,o,s,u=he(t.forces);for(i=0,a=am.length;it(e,n):t)}um.Definition={type:"Force",metadata:{modifies:!0},params:[{name:"static",type:"boolean",default:!1},{name:"restart",type:"boolean",default:!1},{name:"iterations",type:"number",default:300},{name:"alpha",type:"number",default:1},{name:"alphaMin",type:"number",default:.001},{name:"alphaTarget",type:"number",default:0},{name:"velocityDecay",type:"number",default:.4},{name:"forces",type:"param",array:!0,params:[{key:{force:"center"},params:[{name:"x",type:"number",default:0},{name:"y",type:"number",default:0}]},{key:{force:"collide"},params:[{name:"radius",type:"number",expr:!0},{name:"strength",type:"number",default:.7},{name:"iterations",type:"number",default:1}]},{key:{force:"nbody"},params:[{name:"strength",type:"number",default:-30,expr:!0},{name:"theta",type:"number",default:.9},{name:"distanceMin",type:"number",default:1},{name:"distanceMax",type:"number"}]},{key:{force:"link"},params:[{name:"links",type:"data"},{name:"id",type:"field"},{name:"distance",type:"number",default:30,expr:!0},{name:"strength",type:"number",expr:!0},{name:"iterations",type:"number",default:1}]},{key:{force:"x"},params:[{name:"strength",type:"number",default:.1},{name:"x",type:"field"}]},{key:{force:"y"},params:[{name:"strength",type:"number",default:.1},{name:"y",type:"field"}]}]},{name:"as",type:"string",array:!0,modify:!1,default:sm}]},Oe(um,qr,{transform(e,t){var n,r,i=this.value,a=t.changed(t.ADD_REM),o=e.modified(am),s=e.iterations||300;if(i?(a&&(t.modifies("index"),i.nodes(t.source)),(o||t.changed(t.MOD))&&lm(i,e,0,t)):(this.value=i=function(e,t){const n=h.forceSimulation(e),r=n.stop,i=n.restart;let a=!1;return n.stopped=()=>a,n.restart=()=>(a=!1,i()),n.stop=()=>(a=!0,r()),lm(n,t,!0).on("end",(()=>a=!0))}(t.source,e),i.on("tick",(n=t.dataflow,r=this,()=>n.touch(r).run())),e.static||(a=!0,i.tick()),t.modifies("index")),o||a||e.modified(om)||t.changed()&&e.restart)if(i.alpha(Math.max(i.alpha(),e.alpha||1)).alphaDecay(1-Math.pow(i.alphaMin(),1/s)),e.static)for(i.stop();--s>=0;)i.tick();else if(i.stopped()&&i.restart(),!a)return t.StopPropagation;return this.finish(e,t)},finish(e,t){const n=t.dataflow;for(let e,t=this._argops,s=0,u=t.length;s{const i=e.data;n(i)&&(r[t(i)]=e)})),e.lookup=r,e}function mm(e){qr.call(this,null,e)}mm.Definition={type:"Nest",metadata:{treesource:!0,changes:!0},params:[{name:"keys",type:"field",array:!0},{name:"generate",type:"boolean"}]};const gm=e=>e.values;function ym(){const e=[],t={entries:e=>r(n(e,0),0),key:n=>(e.push(n),t)};function n(t,r){if(r>=e.length)return t;const i=t.length,a=e[r++],o={},s={};let u,l,c,d=-1;for(;++de.length)return t;const i=[];for(const e in t)i.push({key:e,values:r(t[e],n)});return i}return t}function vm(e){qr.call(this,null,e)}Oe(mm,qr,{transform(e,t){t.source||E("Nest transform requires an upstream data source.");var n=e.generate,r=e.modified(),i=t.clone(),a=this.value;return(!a||r||t.changed())&&(a&&a.each((e=>{e.children&&rr(e.data)&&i.rem.push(e.data)})),this.value=a=p.hierarchy({values:he(e.keys).reduce(((e,t)=>(e.key(t),e)),ym()).entries(i.source)},gm),n&&a.each((e=>{e.children&&(e=or(e.data),i.add.push(e),i.source.push(e))})),pm(a,ir,ir)),i.source.root=a,i}});const bm=(e,t)=>e.parent===t.parent?1:2;Oe(vm,qr,{transform(e,t){t.source&&t.source.root||E(this.constructor.name+" transform requires a backing tree data source.");const n=this.layout(e.method),r=this.fields,i=t.source.root,a=e.as||r;e.field?i.sum(e.field):i.count(),e.sort&&i.sort(cr(e.sort,(e=>e.data))),function(e,t,n){for(let r,i=0,a=t.length;ifunction(e,t,n){const r=e.data,i=t.length-1;for(let a=0;aa[ir(e)]=1)),r.each((e=>{const t=e.data,n=e.parent&&e.parent.data;n&&a[ir(t)]&&a[ir(n)]&&i.add.push(or({source:n,target:t}))})),this.value=i.add):t.changed(t.MOD)&&(t.visit(t.MOD,(e=>a[ir(e)]=1)),n.forEach((e=>{(a[ir(e.source)]||a[ir(e.target)])&&i.mod.push(e)}))),i}});const Mm={binary:p.treemapBinary,dice:p.treemapDice,slice:p.treemapSlice,slicedice:p.treemapSliceDice,squarify:p.treemapSquarify,resquarify:p.treemapResquarify},Sm=["x0","y0","x1","y1","depth","children"];function Bm(e){vm.call(this,e)}Bm.Definition={type:"Treemap",metadata:{tree:!0,modifies:!0},params:[{name:"field",type:"field"},{name:"sort",type:"compare"},{name:"method",type:"enum",default:"squarify",values:["squarify","resquarify","binary","dice","slice","slicedice"]},{name:"padding",type:"number",default:0},{name:"paddingInner",type:"number",default:0},{name:"paddingOuter",type:"number",default:0},{name:"paddingTop",type:"number",default:0},{name:"paddingRight",type:"number",default:0},{name:"paddingBottom",type:"number",default:0},{name:"paddingLeft",type:"number",default:0},{name:"ratio",type:"number",default:1.618033988749895},{name:"round",type:"boolean",default:!1},{name:"size",type:"number",array:!0,length:2},{name:"as",type:"string",array:!0,length:Sm.length,default:Sm}]},Oe(Bm,vm,{layout(){const e=p.treemap();return e.ratio=t=>{const n=e.tile();n.ratio&&e.tile(n.ratio(t))},e.method=t=>{Fe(Mm,t)?e.tile(Mm[t]):E("Unrecognized Treemap layout method: "+t)},e},params:["method","ratio","size","round","padding","paddingInner","paddingOuter","paddingTop","paddingRight","paddingBottom","paddingLeft"],fields:Sm});var Om=Object.freeze({__proto__:null,nest:mm,pack:_m,partition:Am,stratify:wm,tree:Cm,treelinks:Fm,treemap:Bm});const Rm=4278190080;function zm(e,t,n){return new Uint32Array(e.getImageData(0,0,t,n).data.buffer)}function $m(e,t,n){if(!t.length)return;const r=t[0].mark.marktype;"group"===r?t.forEach((t=>{t.items.forEach((t=>$m(e,t.items,n)))})):kc[r].draw(e,{items:n?t.map(Tm):t})}function Tm(e){const t=ur(e,{});return t.stroke&&0!==t.strokeOpacity||t.fill&&0!==t.fillOpacity?{...t,strokeOpacity:1,stroke:"#000",fillOpacity:0}:t}const qm=5,Lm=31,Nm=32,Pm=new Uint32Array(Nm+1),Um=new Uint32Array(Nm+1);Um[0]=0,Pm[0]=~Um[0];for(let e=1;e<=Nm;++e)Um[e]=Um[e-1]<<1|1,Pm[e]=~Um[e];function jm(e,t,n){const r=Math.max(1,Math.sqrt(e*t/1e6)),i=~~((e+2*n+r)/r),a=~~((t+2*n+r)/r),o=e=>~~((e+n)/r);return o.invert=e=>e*r-n,o.bitmap=()=>function(e,t){const n=new Uint32Array(~~((e*t+Nm)/Nm));function r(e,t){n[e]|=t}function i(e,t){n[e]&=t}return{array:n,get:(t,r)=>{const i=r*e+t;return n[i>>>qm]&1<<(i&Lm)},set:(t,n)=>{const i=n*e+t;r(i>>>qm,1<<(i&Lm))},clear:(t,n)=>{const r=n*e+t;i(r>>>qm,~(1<<(r&Lm)))},getRange:(t,r,i,a)=>{let o,s,u,l,c=a;for(;c>=r;--c)if(o=c*e+t,s=c*e+i,u=o>>>qm,l=s>>>qm,u===l){if(n[u]&Pm[o&Lm]&Um[1+(s&Lm)])return!0}else{if(n[u]&Pm[o&Lm])return!0;if(n[l]&Um[1+(s&Lm)])return!0;for(let e=u+1;e{let o,s,u,l,c;for(;n<=a;++n)if(o=n*e+t,s=n*e+i,u=o>>>qm,l=s>>>qm,u===l)r(u,Pm[o&Lm]&Um[1+(s&Lm)]);else for(r(u,Pm[o&Lm]),r(l,Um[1+(s&Lm)]),c=u+1;c{let o,s,u,l,c;for(;n<=a;++n)if(o=n*e+t,s=n*e+r,u=o>>>qm,l=s>>>qm,u===l)i(u,Um[o&Lm]|Pm[1+(s&Lm)]);else for(i(u,Um[o&Lm]),i(l,Pm[1+(s&Lm)]),c=u+1;cn<0||r<0||a>=t||i>=e}}(i,a),o.ratio=r,o.padding=n,o.width=e,o.height=t,o}function Im(e,t,n,r,i,a){let o=n/2;return e-o<0||e+o>i||t-(o=r/2)<0||t+o>a}function Wm(e,t,n,r,i,a,o,s){const u=i*a/(2*r),l=e(t-u),c=e(t+u),d=e(n-(a/=2)),f=e(n+a);return o.outOfBounds(l,d,c,f)||o.getRange(l,d,c,f)||s&&s.getRange(l,d,c,f)}const Gm=[-1,-1,1,1],Hm=[-1,1,-1,1];const Vm=["right","center","left"],Ym=["bottom","middle","top"];function Xm(e,t,n,r,i,a,o,s,u,l,c,d){return!(i.outOfBounds(e,n,t,r)||(d&&a||i).getRange(e,n,t,r))}const Jm={"top-left":0,top:1,"top-right":2,left:4,middle:5,right:6,"bottom-left":8,bottom:9,"bottom-right":10},Qm={naive:function(e,t,n,r){const i=e.width,a=e.height;return function(e){const t=e.datum.datum.items[r].items,n=t.length,o=e.datum.fontSize,s=nc.width(e.datum,e.datum.text);let u,l,c,d,f,h,p,m=0;for(let r=0;r=m&&(m=p,e.x=f,e.y=h);return f=s/2,h=o/2,u=e.x-f,l=e.x+f,c=e.y-h,d=e.y+h,e.align="center",u<0&&l<=i?e.align="left":0<=u&&i=1;)f=(h+p)/2,Wm(e,c,d,l,u,f,o,s)?p=f:h=f;if(h>r)return[c,d,h,!0]}}return function(t){const s=t.datum.datum.items[r].items,l=s.length,c=t.datum.fontSize,d=nc.width(t.datum,t.datum.text);let f,h,p,m,g,y,v,b,x,_,k,A,w,D,E,C,F,M=n?c:0,S=!1,B=!1,O=0;for(let r=0;rh&&(F=f,f=h,h=F),p>m&&(F=p,p=m,m=F),x=e(f),k=e(h),_=~~((x+k)/2),A=e(p),D=e(m),w=~~((A+D)/2),v=_;v>=x;--v)for(b=w;b>=A;--b)C=u(v,b,M,d,c),C&&([t.x,t.y,M,S]=C);for(v=_;v<=k;++v)for(b=w;b<=D;++b)C=u(v,b,M,d,c),C&&([t.x,t.y,M,S]=C);S||n||(E=Math.abs(h-f+m-p),g=(f+h)/2,y=(p+m)/2,E>=O&&!Im(g,y,d,c,i,a)&&!Wm(e,g,y,c,d,c,o,null)&&(O=E,t.x=g,t.y=y,B=!0))}return!(!S&&!B)&&(g=d/2,y=c/2,o.setRange(e(t.x-g),e(t.y-y),e(t.x+g),e(t.y+y)),t.align="center",t.baseline="middle",!0)}},floodfill:function(e,t,n,r){const i=e.width,a=e.height,o=t[0],s=t[1],u=e.bitmap();return function(t){const l=t.datum.datum.items[r].items,c=l.length,d=t.datum.fontSize,f=nc.width(t.datum,t.datum.text),h=[];let p,m,g,y,v,b,x,_,k,A,w,D,E=n?d:0,C=!1,F=!1,M=0;for(let r=0;r=1;)w=(k+A)/2,Wm(e,v,b,d,f,w,o,s)?A=w:k=w;k>E&&(t.x=v,t.y=b,E=k,C=!0)}}C||n||(D=Math.abs(m-p+y-g),v=(p+m)/2,b=(g+y)/2,D>=M&&!Im(v,b,f,d,i,a)&&!Wm(e,v,b,d,f,d,o,null)&&(M=D,t.x=v,t.y=b,F=!0))}return!(!C&&!F)&&(v=f/2,b=d/2,o.setRange(e(t.x-v),e(t.y-b),e(t.x+v),e(t.y+b)),t.align="center",t.baseline="middle",!0)}}};function Km(e,t,n,r,i,a,o,s,u,l,c){if(!e.length)return e;const d=Math.max(r.length,i.length),f=function(e,t){const n=new Float64Array(t),r=e.length;for(let t=0;t[e.x,e.x,e.x,e.y,e.y,e.y];return e?"line"===e||"area"===e?e=>i(e.datum):"line"===t?e=>{const t=e.datum.items[r].items;return i(t.length?t["start"===n?0:t.length-1]:{x:NaN,y:NaN})}:e=>{const t=e.datum.bounds;return[t.x1,(t.x1+t.x2)/2,t.x2,t.y1,(t.y1+t.y2)/2,t.y2]}:i}(p,m,s,u),v=null===l||l===1/0,b=g&&"naive"===c;var x;let _=-1,k=-1;const A=e.map((e=>{const t=v?nc.width(e,e.text):void 0;return _=Math.max(_,t),k=Math.max(k,e.fontSize),{datum:e,opacity:0,x:void 0,y:void 0,align:void 0,baseline:void 0,boundary:y(e),textWidth:t}}));l=null===l||l===1/0?Math.max(_,k)+Math.max(...r):l;const w=jm(t[0],t[1],l);let D;if(!b){n&&A.sort(((e,t)=>n(e.datum,t.datum)));let t=!1;for(let e=0;ee.datum));D=a.length||r?function(e,t,n,r,i){const a=e.width,o=e.height,s=r||i,u=ao(a,o).getContext("2d"),l=ao(a,o).getContext("2d"),c=s&&ao(a,o).getContext("2d");n.forEach((e=>$m(u,e,!1))),$m(l,t,!1),s&&$m(c,t,!0);const d=zm(u,a,o),f=zm(l,a,o),h=s&&zm(c,a,o),p=e.bitmap(),m=s&&e.bitmap();let g,y,v,b,x,_,k,A;for(y=0;yn.set(e(t.boundary[0]),e(t.boundary[3])))),[n,void 0]}(w,o&&A)}const E=g?Qm[c](w,D,o,u):function(e,t,n,r){const i=e.width,a=e.height,o=t[0],s=t[1],u=r.length;return function(t){const l=t.boundary,c=t.datum.fontSize;if(l[2]<0||l[5]<0||l[0]>i||l[3]>a)return!1;let d,f,h,p,m,g,y,v,b,x,_,k,A,w,D,E=t.textWidth??0;for(let i=0;i>>2&3)-1,h=0===d&&0===f||r[i]<0,p=d&&f?Math.SQRT1_2:1,m=r[i]<0?-1:1,g=l[1+d]+r[i]*d*p,_=l[4+f]+m*c*f/2+r[i]*f*p,v=_-c/2,b=_+c/2,k=e(g),w=e(v),D=e(b),!E){if(!Xm(k,k,w,D,o,s,0,0,0,0,0,h))continue;E=nc.width(t.datum,t.datum.text)}if(x=g+m*E*d/2,g=x-E/2,y=x+E/2,k=e(g),A=e(y),Xm(k,A,w,D,o,s,0,0,0,0,0,h))return t.x=d?d*m<0?y:g:x,t.y=f?f*m<0?b:v:_,t.align=Vm[d*m+1],t.baseline=Ym[f*m+1],o.setRange(k,w,A,D),!0}return!1}}(w,D,h,f);return A.forEach((e=>e.opacity=+E(e))),A}const Zm=["x","y","opacity","align","baseline"],eg=["top-left","left","bottom-left","top","bottom","top-right","right","bottom-right"];function tg(e){qr.call(this,null,e)}tg.Definition={type:"Label",metadata:{modifies:!0},params:[{name:"size",type:"number",array:!0,length:2,required:!0},{name:"sort",type:"compare"},{name:"anchor",type:"string",array:!0,default:eg},{name:"offset",type:"number",array:!0,default:[1]},{name:"padding",type:"number",default:0,null:!0},{name:"lineAnchor",type:"string",values:["start","end"],default:"end"},{name:"markIndex",type:"number",default:0},{name:"avoidBaseMark",type:"boolean",default:!0},{name:"avoidMarks",type:"data",array:!0},{name:"method",type:"string",default:"naive"},{name:"as",type:"string",array:!0,length:Zm.length,default:Zm}]},Oe(tg,qr,{transform(e,t){const n=e.modified();if(!(n||t.changed(t.ADD_REM)||function(n){const r=e[n];return me(r)&&t.modified(r.fields)}("sort")))return;e.size&&2===e.size.length||E("Size parameter should be specified as a [width, height] array.");const r=e.as||Zm;return Km(t.materialize(t.SOURCE).source||[],e.size,e.sort,he(null==e.offset?1:e.offset),he(e.anchor||eg),e.avoidMarks||[],!1!==e.avoidBaseMark,e.lineAnchor||"end",e.markIndex||0,void 0===e.padding?0:e.padding,e.method||"naive").forEach((e=>{const t=e.datum;t[r[0]]=e.x,t[r[1]]=e.y,t[r[2]]=e.opacity,t[r[3]]=e.align,t[r[4]]=e.baseline})),t.reflow(n).modifies(r)}});var ng=Object.freeze({__proto__:null,label:tg});function rg(e,t){var n,r,i,a,o,s,u=[],l=function(e){return e(a)};if(null==t)u.push(e);else for(n={},r=0,i=e.length;r{Ei(t,e.x,e.y,e.bandwidth||.3).forEach((e=>{const n={};for(let e=0;e"poly"===e?t:"quad"===e?2:1)(a,o),u=e.as||[_(e.x),_(e.y)],l=ag[a],c=[];let d=e.extent;Fe(ag,a)||E("Invalid regression method: "+a),null!=d&&"log"===a&&d[0]<=0&&(t.dataflow.warn("Ignoring extent with values <= 0 for log regression."),d=null),r.forEach((n=>{if(n.length<=s)return void t.dataflow.warn("Skipping regression with more parameters than data points.");const r=l(n,e.x,e.y,o);if(e.params)return void c.push(or({keys:n.dims,coef:r.coef,rSquared:r.rSquared}));const f=d||De(n,e.x),h=e=>{const t={};for(let e=0;eh([e,r.predict(e)]))):Si(r.predict,f,25,200).forEach(h)})),this.value&&(n.rem=this.value),this.value=n.add=n.source=c}return n}});var sg=Object.freeze({__proto__:null,loess:ig,regression:og});function ug(e){qr.call(this,null,e)}ug.Definition={type:"Voronoi",metadata:{modifies:!0},params:[{name:"x",type:"field",required:!0},{name:"y",type:"field",required:!0},{name:"size",type:"number",array:!0,length:2},{name:"extent",type:"array",array:!0,length:2,default:[[-1e5,-1e5],[1e5,1e5]],content:{type:"number",array:!0,length:2}},{name:"as",type:"string",default:"path"}]};const lg=[-1e5,-1e5,1e5,1e5];function cg(e){const t=e[0][0],n=e[0][1];let r=e.length-1;for(;e[r][0]===t&&e[r][1]===n;--r);return"M"+e.slice(0,r+1).join("L")+"Z"}Oe(ug,qr,{transform(e,t){const n=e.as||"path",r=t.source;if(!r||!r.length)return t;let i=e.size;i=i?[0,0,i[0],i[1]]:(i=e.extent)?[i[0][0],i[0][1],i[1][0],i[1][1]]:lg;const a=this.value=m.Delaunay.from(r,e.x,e.y).voronoi(i);for(let e=0,t=r.length;e=d));)if(t.x=o+i,t.y=l+a,!(t.x+t.x0<0||t.y+t.y0<0||t.x+t.x1>s[0]||t.y+t.y1>s[1])&&(!n||!yg(t,e,s[0]))&&(!n||bg(t,n))){for(var m,g=t.sprite,y=t.width>>5,v=s[0]>>5,b=t.x-(y<<4),x=127&b,_=32-x,k=t.y1-t.y0,A=(t.y+t.y0)*v+(b>>5),w=0;w>>x:0);A+=v}return t.sprite=null,!0}return!1}return d.layout=function(){for(var u=function(e){e.width=e.height=1;var t=Math.sqrt(e.getContext("2d").getImageData(0,0,1,1).data.length>>2);e.width=(hg<<5)/t,e.height=pg/t;var n=e.getContext("2d");return n.fillStyle=n.strokeStyle="red",n.textAlign="center",{context:n,ratio:t}}(ao()),d=function(e){var t=[],n=-1;for(;++n>5)*s[1]),h=null,p=l.length,m=-1,g=[],y=l.map((s=>({text:e(s),font:t(s),style:r(s),weight:i(s),rotate:a(s),size:~~(n(s)+1e-14),padding:o(s),xoff:0,yoff:0,x1:0,y1:0,x0:0,y0:0,hasText:!1,sprite:null,datum:s}))).sort(((e,t)=>t.size-e.size));++m>1,v.y=s[1]*(c()+.5)>>1,gg(u,v,y,m),v.hasText&&f(d,v,h)&&(g.push(v),h?vg(h,v):h=[{x:v.x+v.x0,y:v.y+v.y0},{x:v.x+v.x1,y:v.y+v.y1}],v.x-=s[0]>>1,v.y-=s[1]>>1)}return g},d.words=function(e){return arguments.length?(l=e,d):l},d.size=function(e){return arguments.length?(s=[+e[0],+e[1]],d):s},d.font=function(e){return arguments.length?(t=_g(e),d):t},d.fontStyle=function(e){return arguments.length?(r=_g(e),d):r},d.fontWeight=function(e){return arguments.length?(i=_g(e),d):i},d.rotate=function(e){return arguments.length?(a=_g(e),d):a},d.text=function(t){return arguments.length?(e=_g(t),d):e},d.spiral=function(e){return arguments.length?(u=kg[e]||e,d):u},d.fontSize=function(e){return arguments.length?(n=_g(e),d):n},d.padding=function(e){return arguments.length?(o=_g(e),d):o},d.random=function(e){return arguments.length?(c=e,d):c},d}function gg(e,t,n,r){if(!t.sprite){var i=e.context,a=e.ratio;i.clearRect(0,0,(hg<<5)/a,pg/a);var o,s,u,l,c,d=0,f=0,h=0,p=n.length;for(--r;++r>5<<5,u=~~Math.max(Math.abs(v+b),Math.abs(v-b))}else o=o+31>>5<<5;if(u>h&&(h=u),d+o>=hg<<5&&(d=0,f+=h,h=0),f+u>=pg)break;i.translate((d+(o>>1))/a,(f+(u>>1))/a),t.rotate&&i.rotate(t.rotate*fg),i.fillText(t.text,0,0),t.padding&&(i.lineWidth=2*t.padding,i.strokeText(t.text,0,0)),i.restore(),t.width=o,t.height=u,t.xoff=d,t.yoff=f,t.x1=o>>1,t.y1=u>>1,t.x0=-t.x1,t.y0=-t.y1,t.hasText=!0,d+=o}for(var _=i.getImageData(0,0,(hg<<5)/a,pg/a).data,k=[];--r>=0;)if((t=n[r]).hasText){for(s=(o=t.width)>>5,u=t.y1-t.y0,l=0;l>5),E=_[(f+c)*(hg<<5)+(d+l)<<2]?1<<31-l%32:0;k[D]|=E,A|=E}A?w=c:(t.y0++,u--,c--,f++)}t.y1=t.y0+w,t.sprite=k.slice(0,(t.y1-t.y0)*s)}}}function yg(e,t,n){n>>=5;for(var r,i=e.sprite,a=e.width>>5,o=e.x-(a<<4),s=127&o,u=32-s,l=e.y1-e.y0,c=(e.y+e.y0)*n+(o>>5),d=0;d>>s:0))&t[c+f])return!0;c+=n}return!1}function vg(e,t){var n=e[0],r=e[1];t.x+t.x0r.x&&(r.x=t.x+t.x1),t.y+t.y1>r.y&&(r.y=t.y+t.y1)}function bg(e,t){return e.x+e.x1>t[0].x&&e.x+e.x0t[0].y&&e.y+e.y0t(e(n))}i.forEach((e=>{e[o[0]]=NaN,e[o[1]]=NaN,e[o[3]]=0}));const l=a.words(i).text(t.text).size(t.size||[500,500]).padding(t.padding||1).spiral(t.spiral||"archimedean").rotate(t.rotate||0).font(t.font||"sans-serif").fontStyle(t.fontStyle||"normal").fontWeight(t.fontWeight||"normal").fontSize(u).random(e.random).layout(),c=a.size(),d=c[0]>>1,f=c[1]>>1,h=l.length;for(let e,t,n=0;nnew Uint8Array(e),Fg=e=>new Uint16Array(e),Mg=e=>new Uint32Array(e);function Sg(e,t,n){const r=(t<257?Cg:t<65537?Fg:Mg)(e);return n&&r.set(n),r}function Bg(e,t,n){const r=1<{const r=e[t],i=e[n];return ri?1:0})),r.permute(e,t)}(h,l),s)c=t,d=e,t=Array(s+u),e=Mg(s+u),function(e,t,n,r,i,a,o,s,u){let l,c=0,d=0;for(l=0;c0)for(f=0;fe,size:()=>n}}function Rg(e){qr.call(this,function(){let e=8,t=[],n=Mg(0),r=Sg(0,e),i=Sg(0,e);return{data:()=>t,seen:()=>n=function(e,t,n){return e.length>=t?e:((n=n||new e.constructor(t)).set(e),n)}(n,t.length),add(e){for(let n,r=0,i=t.length,a=e.length;rt.length,curr:()=>r,prev:()=>i,reset:e=>i[e]=r[e],all:()=>e<257?255:e<65537?65535:4294967295,set(e,t){r[e]|=t},clear(e,t){r[e]&=~t},resize(t,n){(t>r.length||n>e)&&(e=Math.max(n,e),r=Sg(t,e,r),i=Sg(t,e))}}}(),e),this._indices=null,this._dims=null}function zg(e){qr.call(this,null,e)}Rg.Definition={type:"CrossFilter",metadata:{},params:[{name:"fields",type:"field",array:!0,required:!0},{name:"query",type:"array",array:!0,required:!0,content:{type:"number",array:!0,length:2}}]},Oe(Rg,qr,{transform(e,t){return this._dims?e.modified("fields")||e.fields.some((e=>t.modified(e.fields)))?this.reinit(e,t):this.eval(e,t):this.init(e,t)},init(e,t){const n=e.fields,r=e.query,i=this._indices={},a=this._dims=[],o=r.length;let s,u,l=0;for(;l{const e=i.remove(t,n);for(const t in r)r[t].reindex(e)}))},update(e,t,n){const r=this._dims,i=e.query,a=t.stamp,o=r.length;let s,u,l=0;for(n.filters=0,u=0;uh)for(g=h,y=Math.min(d,p);gp)for(g=Math.max(d,p),y=f;gc)for(h=c,p=Math.min(u,d);hd)for(h=Math.max(u,d),p=l;hs[e]&n?null:o[e];return a.filter(a.MOD,l),i&i-1?(a.filter(a.ADD,(e=>{const t=s[e]&n;return!t&&t^u[e]&n?o[e]:null})),a.filter(a.REM,(e=>{const t=s[e]&n;return t&&!(t^t^u[e]&n)?o[e]:null}))):(a.filter(a.ADD,l),a.filter(a.REM,(e=>(s[e]&n)===i?o[e]:null))),a.filter(a.SOURCE,(e=>l(e._index)))}});var $g=Object.freeze({__proto__:null,crossfilter:Rg,resolvefilter:zg});const Tg="Literal",qg="Property",Lg="ArrayExpression",Ng="BinaryExpression",Pg="CallExpression",Ug="ConditionalExpression",jg="LogicalExpression",Ig="MemberExpression",Wg="ObjectExpression",Gg="UnaryExpression";function Hg(e){this.type=e}var Vg,Yg,Xg,Jg,Qg;Hg.prototype.visit=function(e){let t,n,r;if(e(this))return 1;for(t=function(e){switch(e.type){case Lg:return e.elements;case Ng:case jg:return[e.left,e.right];case Pg:return[e.callee].concat(e.arguments);case Ug:return[e.test,e.consequent,e.alternate];case Ig:return[e.object,e.property];case Wg:return e.properties;case qg:return[e.key,e.value];case Gg:return[e.argument];default:return[]}}(this),n=0,r=t.length;n",Vg[ey]="Identifier",Vg[ty]="Keyword",Vg[ny]="Null",Vg[ry]="Numeric",Vg[iy]="Punctuator",Vg[ay]="String",Vg[9]="RegularExpression";var oy="ArrayExpression",sy="BinaryExpression",uy="CallExpression",ly="ConditionalExpression",cy="Identifier",dy="Literal",fy="LogicalExpression",hy="MemberExpression",py="ObjectExpression",my="Property",gy="UnaryExpression",yy="Unexpected token %0",vy="Unexpected number",by="Unexpected string",xy="Unexpected identifier",_y="Unexpected reserved word",ky="Unexpected end of input",Ay="Invalid regular expression",wy="Invalid regular expression: missing /",Dy="Octal literals are not allowed in strict mode.",Ey="Duplicate data property in object literal not allowed in strict mode",Cy="ILLEGAL",Fy="Disabled.",My=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),Sy=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]");function By(e,t){if(!e)throw new Error("ASSERT: "+t)}function Oy(e){return e>=48&&e<=57}function Ry(e){return"0123456789abcdefABCDEF".indexOf(e)>=0}function zy(e){return"01234567".indexOf(e)>=0}function $y(e){return 32===e||9===e||11===e||12===e||160===e||e>=5760&&[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(e)>=0}function Ty(e){return 10===e||13===e||8232===e||8233===e}function qy(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||92===e||e>=128&&My.test(String.fromCharCode(e))}function Ly(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||92===e||e>=128&&Sy.test(String.fromCharCode(e))}const Ny={if:1,in:1,do:1,var:1,for:1,new:1,try:1,let:1,this:1,else:1,case:1,void:1,with:1,enum:1,while:1,break:1,catch:1,throw:1,const:1,yield:1,class:1,super:1,return:1,typeof:1,delete:1,switch:1,export:1,import:1,public:1,static:1,default:1,finally:1,extends:1,package:1,private:1,function:1,continue:1,debugger:1,interface:1,protected:1,instanceof:1,implements:1};function Py(){for(;Xg1114111||"}"!==e)&&rv({},yy,Cy),t<=65535?String.fromCharCode(t):(n=55296+(t-65536>>10),r=56320+(t-65536&1023),String.fromCharCode(n,r))}function Iy(){var e,t;for(e=Yg.charCodeAt(Xg++),t=String.fromCharCode(e),92===e&&(117!==Yg.charCodeAt(Xg)&&rv({},yy,Cy),++Xg,(e=Uy("u"))&&"\\"!==e&&qy(e.charCodeAt(0))||rv({},yy,Cy),t=e);Xg>>="===(r=Yg.substr(Xg,4))?{type:iy,value:r,start:i,end:Xg+=4}:">>>"===(n=r.substr(0,3))||"<<="===n||">>="===n?{type:iy,value:n,start:i,end:Xg+=3}:o===(t=n.substr(0,2))[1]&&"+-<>&|".indexOf(o)>=0||"=>"===t?{type:iy,value:t,start:i,end:Xg+=2}:("//"===t&&rv({},yy,Cy),"<>=!+-*%&|^/".indexOf(o)>=0?(++Xg,{type:iy,value:o,start:i,end:Xg}):void rv({},yy,Cy))}function Hy(){var e,t,n;if(By(Oy((n=Yg[Xg]).charCodeAt(0))||"."===n,"Numeric literal must start with a decimal digit or a decimal point"),t=Xg,e="","."!==n){if(e=Yg[Xg++],n=Yg[Xg],"0"===e){if("x"===n||"X"===n)return++Xg,function(e){let t="";for(;Xg=0&&rv({},Ay,n),{value:n,literal:t}}(),r=function(e,t){let n=e;t.indexOf("u")>=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}/g,((e,t)=>{if(parseInt(t,16)<=1114111)return"x";rv({},Ay)})).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"x"));try{new RegExp(n)}catch(e){rv({},Ay)}try{return new RegExp(e,t)}catch(e){return null}}(t.value,n.value),{literal:t.literal+n.literal,value:r,regex:{pattern:t.value,flags:n.value},start:e,end:Xg}}function Yy(){if(Py(),Xg>=Jg)return{type:Zg,start:Xg,end:Xg};const e=Yg.charCodeAt(Xg);return qy(e)?Wy():40===e||41===e||59===e?Gy():39===e||34===e?function(){var e,t,n,r,i="",a=!1;for(By("'"===(e=Yg[Xg])||'"'===e,"String literal must starts with a quote"),t=Xg,++Xg;Xg=0&&Xg(By(t":case"<=":case">=":case"instanceof":case"in":t=7;break;case"<<":case">>":case">>>":t=8;break;case"+":case"-":t=9;break;case"*":case"/":case"%":t=11}return t}function xv(){var e,t;return e=function(){var e,t,n,r,i,a,o,s,u,l;if(e=Qg,u=vv(),0===(i=bv(r=Qg)))return u;for(r.prec=i,Xy(),t=[e,Qg],a=[u,r,o=vv()];(i=bv(Qg))>0;){for(;a.length>2&&i<=a[a.length-2].prec;)o=a.pop(),s=a.pop().value,u=a.pop(),t.pop(),n=Qy(s,u,o),a.push(n);(r=Xy()).prec=i,a.push(r),t.push(Qg),n=vv(),a.push(n)}for(n=a[l=a.length-1],t.pop();l>1;)t.pop(),n=Qy(a[l-1].value,a[l-2],n),l-=2;return n}(),ov("?")&&(Xy(),t=xv(),av(":"),e=function(e,t,n){const r=new Hg(ly);return r.test=e,r.consequent=t,r.alternate=n,r}(e,t,xv())),e}function _v(){const e=xv();if(ov(","))throw new Error(Fy);return e}function kv(e){Xg=0,Jg=(Yg=e).length,Qg=null,Jy();const t=_v();if(Qg.type!==Zg)throw new Error("Unexpect token after expression.");return t}var Av={NaN:"NaN",E:"Math.E",LN2:"Math.LN2",LN10:"Math.LN10",LOG2E:"Math.LOG2E",LOG10E:"Math.LOG10E",PI:"Math.PI",SQRT1_2:"Math.SQRT1_2",SQRT2:"Math.SQRT2",MIN_VALUE:"Number.MIN_VALUE",MAX_VALUE:"Number.MAX_VALUE"};function wv(e){function t(t,n,r){return i=>function(t,n,r,i){let a=e(n[0]);return r&&(a=r+"("+a+")",0===r.lastIndexOf("new ",0)&&(a="("+a+")")),a+"."+t+(i<0?"":0===i?"()":"("+n.slice(1).map(e).join(",")+")")}(t,i,n,r)}const n="new Date",r="String",i="RegExp";return{isNaN:"Number.isNaN",isFinite:"Number.isFinite",abs:"Math.abs",acos:"Math.acos",asin:"Math.asin",atan:"Math.atan",atan2:"Math.atan2",ceil:"Math.ceil",cos:"Math.cos",exp:"Math.exp",floor:"Math.floor",hypot:"Math.hypot",log:"Math.log",max:"Math.max",min:"Math.min",pow:"Math.pow",random:"Math.random",round:"Math.round",sin:"Math.sin",sqrt:"Math.sqrt",tan:"Math.tan",clamp:function(t){t.length<3&&E("Missing arguments to clamp function."),t.length>3&&E("Too many arguments to clamp function.");const n=t.map(e);return"Math.max("+n[1]+", Math.min("+n[2]+","+n[0]+"))"},now:"Date.now",utc:"Date.UTC",datetime:n,date:t("getDate",n,0),day:t("getDay",n,0),year:t("getFullYear",n,0),month:t("getMonth",n,0),hours:t("getHours",n,0),minutes:t("getMinutes",n,0),seconds:t("getSeconds",n,0),milliseconds:t("getMilliseconds",n,0),time:t("getTime",n,0),timezoneoffset:t("getTimezoneOffset",n,0),utcdate:t("getUTCDate",n,0),utcday:t("getUTCDay",n,0),utcyear:t("getUTCFullYear",n,0),utcmonth:t("getUTCMonth",n,0),utchours:t("getUTCHours",n,0),utcminutes:t("getUTCMinutes",n,0),utcseconds:t("getUTCSeconds",n,0),utcmilliseconds:t("getUTCMilliseconds",n,0),length:t("length",null,-1),parseFloat:"parseFloat",parseInt:"parseInt",upper:t("toUpperCase",r,0),lower:t("toLowerCase",r,0),substring:t("substring",r),split:t("split",r),trim:t("trim",r,0),regexp:i,test:t("test",i),if:function(t){t.length<3&&E("Missing arguments to if function."),t.length>3&&E("Too many arguments to if function.");const n=t.map(e);return"("+n[0]+"?"+n[1]+":"+n[2]+")"}}}function Dv(e){const t=(e=e||{}).allowed?Ke(e.allowed):{},n=e.forbidden?Ke(e.forbidden):{},r=e.constants||Av,i=(e.functions||wv)(d),a=e.globalvar,o=e.fieldvar,s=me(a)?a:e=>`${a}["${e}"]`;let u={},l={},c=0;function d(e){if(Ne(e))return e;const t=f[e.type];return null==t&&E("Unsupported type: "+e.type),t(e)}const f={Literal:e=>e.raw,Identifier:e=>{const i=e.name;return c>0?i:Fe(n,i)?E("Illegal identifier: "+i):Fe(r,i)?r[i]:Fe(t,i)?i:(u[i]=1,s(i))},MemberExpression:e=>{const t=!e.computed,n=d(e.object);t&&(c+=1);const r=d(e.property);return n===o&&(l[function(e){const t=e&&e.length-1;return t&&('"'===e[0]&&'"'===e[t]||"'"===e[0]&&"'"===e[t])?e.slice(1,-1):e}(r)]=1),t&&(c-=1),n+(t?"."+r:"["+r+"]")},CallExpression:e=>{"Identifier"!==e.callee.type&&E("Illegal callee type: "+e.callee.type);const t=e.callee.name,n=e.arguments,r=Fe(i,t)&&i[t];return r||E("Unrecognized function: "+t),me(r)?r(n):r+"("+n.map(d).join(",")+")"},ArrayExpression:e=>"["+e.elements.map(d).join(",")+"]",BinaryExpression:e=>"("+d(e.left)+" "+e.operator+" "+d(e.right)+")",UnaryExpression:e=>"("+e.operator+d(e.argument)+")",ConditionalExpression:e=>"("+d(e.test)+"?"+d(e.consequent)+":"+d(e.alternate)+")",LogicalExpression:e=>"("+d(e.left)+e.operator+d(e.right)+")",ObjectExpression:e=>"{"+e.properties.map(d).join(",")+"}",Property:e=>{c+=1;const t=d(e.key);return c-=1,t+":"+d(e.value)}};function h(e){const t={code:d(e),globals:Object.keys(u),fields:Object.keys(l)};return u={},l={},t}return h.functions=i,h.constants=r,h}const Ev=Symbol("vega_selection_getter");function Cv(e){return e.getter&&e.getter[Ev]||(e.getter=F(e.field),e.getter[Ev]=!0),e.getter}const Fv="intersect",Mv="union",Sv="_vgsid_",Bv=F(Sv),Ov="E",Rv="R",zv="R-E",$v="R-LE",Tv="R-RE",qv="index:unit";function Lv(e,t){for(var n,r,i=t.fields,a=t.values,o=i.length,s=0;st.indexOf(e)>=0)):t},R_union:function(e,t){var n=X(t[0]),r=X(t[1]);return n>r&&(n=t[1],r=t[0]),e.length?(e[0]>n&&(e[0]=n),e[1]r&&(n=t[1],r=t[0]),e.length?rr&&(e[1]=r),e):[n,r]}};function Iv(e,t,n,r){t[0].type!==Tg&&E("First argument to selection functions must be a string literal.");const i=t[0].value,a="unit",o="@"+a,s=":"+i;(t.length>=2&&Y(t).value)!==Fv||Fe(r,o)||(r[o]=n.getData(i).indataRef(n,a)),Fe(r,s)||(r[s]=n.getData(i).tuplesRef())}function Wv(e){const t=this.context.data[e];return t?t.values.value:[]}const Gv=e=>function(t,n){return this.context.dataflow.locale()[e](n)(t)},Hv=Gv("format"),Vv=Gv("timeFormat"),Yv=Gv("utcFormat"),Xv=Gv("timeParse"),Jv=Gv("utcParse"),Qv=new Date(2e3,0,1);function Kv(e,t,n){return Number.isInteger(e)&&Number.isInteger(t)?(Qv.setYear(2e3),Qv.setMonth(e),Qv.setDate(t),Vv.call(this,Qv,n)):""}const Zv="%",eb="$";function tb(e,t,n,r){t[0].type!==Tg&&E("First argument to data functions must be a string literal.");const i=t[0].value,a=":"+i;if(!Fe(a,r))try{r[a]=n.getData(i).tuplesRef()}catch(e){}}function nb(e,t,n,r){if(t[0].type===Tg)rb(n,r,t[0].value);else for(e in n.scales)rb(n,r,e)}function rb(e,t,n){const r=Zv+n;if(!Fe(t,r))try{t[r]=e.scaleRef(n)}catch(e){}}function ib(e,t){if(me(e))return e;if(Ne(e)){const n=t.scales[e];return n&&function(e){return e&&!0===e[$o]}(n.value)?n.value:void 0}}function ab(e,t,n){t.__bandwidth=e=>e&&e.bandwidth?e.bandwidth():0,n._bandwidth=nb,n._range=nb,n._scale=nb;const r=t=>"_["+(t.type===Tg?Ve(Zv+t.value):Ve(Zv)+"+"+e(t))+"]";return{_bandwidth:e=>`this.__bandwidth(${r(e[0])})`,_range:e=>`${r(e[0])}.range()`,_scale:t=>`${r(t[0])}(${e(t[1])})`}}function ob(e,t){return function(n,r,i){if(n){const t=ib(n,(i||this).context);return t&&t.path[e](r)}return t(r)}}const sb=ob("area",d.geoArea),ub=ob("bounds",d.geoBounds),lb=ob("centroid",d.geoCentroid);function cb(e,t,n){try{e[t].apply(e,["EXPRESSION"].concat([].slice.call(n)))}catch(t){e.warn(t)}return n[n.length-1]}function db(e){const t=e/255;return t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4)}function fb(e){const t=f.rgb(e);return.2126*db(t.r)+.7152*db(t.g)+.0722*db(t.b)}function hb(e,t){return e===t||e!=e&&t!=t||(j(e)?!(!j(t)||e.length!==t.length)&&function(e,t){for(let n=0,r=e.length;npb(e,t)}const gb={};function yb(e){return j(e)||ArrayBuffer.isView(e)?e:null}function vb(e){return yb(e)||(Ne(e)?e:null)}const bb=e=>e.data;function xb(e,t){const n=Wv.call(t,e);return n.root&&n.root.lookup||{}}const _b=()=>"undefined"!=typeof window&&window||null;function kb(e,t,n){if(!e)return[];const[r,i]=e,a=(new Du).set(r[0],r[1],i[0],i[1]);return of(n||this.context.dataflow.scenegraph().root,a,function(e){let t=null;if(e){const n=he(e.marktype),r=he(e.markname);t=e=>(!n.length||n.some((t=>e.marktype===t)))&&(!r.length||r.some((t=>e.name===t)))}return t}(t))}const Ab={random:()=>e.random(),cumulativeNormal:Zr,cumulativeLogNormal:ai,cumulativeUniform:di,densityNormal:Kr,densityLogNormal:ii,densityUniform:ci,quantileNormal:ei,quantileLogNormal:oi,quantileUniform:fi,sampleNormal:Qr,sampleLogNormal:ri,sampleUniform:li,isArray:j,isBoolean:ze,isDate:$e,isDefined:e=>void 0!==e,isNumber:qe,isObject:I,isRegExp:Le,isString:Ne,isTuple:rr,isValid:e=>null!=e&&e==e,toBoolean:Ye,toDate:e=>Je(e),toNumber:X,toString:Qe,indexof:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r1?t-1:0),r=1;r1?t-1:0),r=1;r1?t-1:0),r=1;rDe(e),inScope:function(e){const t=this.context.group;let n=!1;if(t)for(;e;){if(e===t){n=!0;break}e=e.mark.group}return n},intersect:kb,clampRange:pe,pinchDistance:function(e){const t=e.touches,n=t[0].clientX-t[1].clientX,r=t[0].clientY-t[1].clientY;return Math.hypot(n,r)},pinchAngle:function(e){const t=e.touches;return Math.atan2(t[0].clientY-t[1].clientY,t[0].clientX-t[1].clientX)},screen:function(){const e=_b();return e?e.screen:{}},containerSize:function(){const e=this.context.dataflow,t=e.container&&e.container();return t?[t.clientWidth,t.clientHeight]:[void 0,void 0]},windowSize:function(){const e=_b();return e?[e.innerWidth,e.innerHeight]:[void 0,void 0]},bandspace:function(e,t,n){return so(e||0,t||0,n||0)},setdata:function(e,t){const n=this.context.dataflow,r=this.context.data[e].input;return n.pulse(r,n.changeset().remove(R).insert(t)),1},pathShape:function(e){let t=null;return function(n){return n?Ys(n,t=t||qs(e)):e}},panLinear:ne,panLog:re,panPow:ie,panSymlog:ae,zoomLinear:se,zoomLog:ue,zoomPow:le,zoomSymlog:ce,encode:function(e,t,n){if(e){const n=this.context.dataflow,r=e.mark.source;n.pulse(r,n.changeset().encode(e,t))}return void 0!==n?n:e},modify:function(e,t,n,r,i,a){const o=this.context.dataflow,s=this.context.data[e],u=s.input,l=o.stamp();let c,d,f=s.changes;if(!1===o._trigger||!(u.value.length||t||r))return 0;if((!f||f.stamp{s.modified=!0,o.pulse(u,f).run()}),!0,1)),n&&(c=!0===n?R:j(n)||rr(n)?n:mb(n),f.remove(c)),t&&f.insert(t),r&&(c=mb(r),u.value.some(c)?f.remove(c):f.insert(r)),i)for(d in a)f.modify(i,d,a[d]);return 1},lassoAppend:function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5;const i=(e=he(e))[e.length-1];return void 0===i||Math.hypot(i[0]-t,i[1]-n)>r?[...e,[t,n]]:e},lassoPath:function(e){return he(e).reduce(((t,n,r)=>{let[i,a]=n;return t+(0==r?`M ${i},${a} `:r===e.length-1?" Z":`L ${i},${a} `)}),"")},intersectLasso:function(e,t,n){const{x:r,y:i,mark:a}=n,o=(new Du).set(Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER,Number.MIN_SAFE_INTEGER);for(const[e,n]of t)eo.x2&&(o.x2=e),no.y2&&(o.y2=n);return o.translate(r,i),kb([[o.x1,o.y1],[o.x2,o.y2]],e,a).filter((e=>function(e,t,n){let r=0;for(let i=0,a=n.length-1;it!=s>t&&e<(o-u)*(t-l)/(s-l)+u&&r++}return 1&r}(e.x,e.y,t)))}},wb=["view","item","group","xy","x","y"],Db="this.",Eb={},Cb={forbidden:["_"],allowed:["datum","event","item"],fieldvar:"datum",globalvar:e=>`_[${Ve(eb+e)}]`,functions:function(e){const t=wv(e);wb.forEach((e=>t[e]="event.vega."+e));for(const e in Ab)t[e]=Db+e;return we(t,ab(e,Ab,Eb)),t},constants:Av,visitors:Eb},Fb=Dv(Cb);function Mb(e,t,n){return 1===arguments.length?Ab[e]:(Ab[e]=t,n&&(Eb[e]=n),Fb&&(Fb.functions[e]=Db+e),this)}function Sb(e,t){const n={};let r;try{r=kv(e=Ne(e)?e:Ve(e)+"")}catch(t){E("Expression parse error: "+e)}r.visit((e=>{if(e.type!==Pg)return;const r=e.callee.name,i=Cb.visitors[r];i&&i(r,e.arguments,t,n)}));const i=Fb(r);return i.globals.forEach((e=>{const r=eb+e;!Fe(n,r)&&t.getSignal(e)&&(n[r]=t.signalRef(e))})),{$expr:we({code:i.code},t.options.ast?{ast:r}:null),$fields:i.fields,$params:n}}Mb("bandwidth",(function(e,t){const n=ib(e,(t||this).context);return n&&n.bandwidth?n.bandwidth():0}),nb),Mb("copy",(function(e,t){const n=ib(e,(t||this).context);return n?n.copy():void 0}),nb),Mb("domain",(function(e,t){const n=ib(e,(t||this).context);return n?n.domain():[]}),nb),Mb("range",(function(e,t){const n=ib(e,(t||this).context);return n&&n.range?n.range():[]}),nb),Mb("invert",(function(e,t,n){const r=ib(e,(n||this).context);return r?j(t)?(r.invertRange||r.invert)(t):(r.invert||r.invertExtent)(t):void 0}),nb),Mb("scale",(function(e,t,n){const r=ib(e,(n||this).context);return r?r(t):void 0}),nb),Mb("gradient",(function(e,t,n,r,i){e=ib(e,(i||this).context);const a=Ms(t,n);let o=e.domain(),s=o[0],u=Y(o),l=S;return u-s?l=Jo(e,s,u):e=(e.interpolator?qo("sequential")().interpolator(e.interpolator()):qo("linear")().interpolate(e.interpolate()).range(e.range())).domain([s=0,u=1]),e.ticks&&(o=e.ticks(+r||15),s!==o[0]&&o.unshift(s),u!==Y(o)&&o.push(u)),o.forEach((t=>a.stop(l(t),e(t)))),a}),nb),Mb("geoArea",sb,nb),Mb("geoBounds",ub,nb),Mb("geoCentroid",lb,nb),Mb("geoShape",(function(e,t,n){const r=ib(e,(n||this).context);return function(e){return r?r.path.context(e)(t):""}}),nb),Mb("geoScale",(function(e,t){const n=ib(e,(t||this).context);return n&&n.scale()}),nb),Mb("indata",(function(e,t,n){const r=this.context.data[e]["index:"+t],i=r?r.value.get(n):void 0;return i?i.count:i}),(function(e,t,n,r){t[0].type!==Tg&&E("First argument to indata must be a string literal."),t[1].type!==Tg&&E("Second argument to indata must be a string literal.");const i=t[0].value,a=t[1].value,o="@"+a;Fe(o,r)||(r[o]=n.getData(i).indataRef(n,a))})),Mb("data",Wv,tb),Mb("treePath",(function(e,t,n){const r=xb(e,this),i=r[t],a=r[n];return i&&a?i.path(a).map(bb):void 0}),tb),Mb("treeAncestors",(function(e,t){const n=xb(e,this)[t];return n?n.ancestors().map(bb):void 0}),tb),Mb("vlSelectionTest",(function(e,t,n){for(var r,i,a,o,s,u=this.context.data[e],l=u?u.values.value:[],c=u?u[qv]&&u[qv].value:void 0,d=n===Fv,f=l.length,h=0;h(e[a[n].field]=t,e)),{}))}else u=Sv,l=Bv(i),(d=(c=v[u]||(v[u]={}))[s]||(c[s]=[])).push(l),n&&(d=b[s]||(b[s]=[])).push({[Sv]:l});if(t=t||Mv,v[Sv]?v[Sv]=jv[`${Sv}_${t}`](...Object.values(v[Sv])):Object.keys(v).forEach((e=>{v[e]=Object.keys(v[e]).map((t=>v[e][t])).reduce(((n,r)=>void 0===n?r:jv[`${x[e]}_${t}`](n,r)))})),y=Object.keys(b),n&&y.length){v[r?"vlPoint":"vlMulti"]=t===Mv?{or:y.reduce(((e,t)=>(e.push(...b[t]),e)),[])}:{and:y.map((e=>({or:b[e]})))}}return v}),Iv),Mb("vlSelectionTuples",(function(e,t){return e.map((e=>we(t.fields?{values:t.fields.map((t=>Cv(t)(e.datum)))}:{[Sv]:Bv(e.datum)},t)))}));const Bb=Ke(["rule"]),Ob=Ke(["group","image","rect"]);function Rb(e){return(e+"").toLowerCase()}function zb(e,t,n){n.endsWith(";")||(n="return("+n+");");const r=Function(...t.concat(n));return e&&e.functions?r.bind(e.functions):r}var $b={operator:(e,t)=>zb(e,["_"],t.code),parameter:(e,t)=>zb(e,["datum","_"],t.code),event:(e,t)=>zb(e,["event"],t.code),handler:(e,t)=>zb(e,["_","event"],`var datum=event.item&&event.item.datum;return ${t.code};`),encode:(e,t)=>{const{marktype:n,channels:r}=t;let i="var o=item,datum=o.datum,m=0,$;";for(const e in r){const t="o["+Ve(e)+"]";i+=`$=${r[e].code};if(${t}!==$)${t}=$,m=1;`}return i+=function(e,t){let n="";return Bb[t]||(e.x2&&(e.x?(Ob[t]&&(n+="if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;"),n+="o.width=o.x2-o.x;"):n+="o.x=o.x2-(o.width||0);"),e.xc&&(n+="o.x=o.xc-(o.width||0)/2;"),e.y2&&(e.y?(Ob[t]&&(n+="if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;"),n+="o.height=o.y2-o.y;"):n+="o.y=o.y2-(o.height||0);"),e.yc&&(n+="o.y=o.yc-(o.height||0)/2;")),n}(r,n),i+="return m;",zb(e,["item","_"],i)},codegen:{get(e){const t=`[${e.map(Ve).join("][")}]`,n=Function("_",`return _${t};`);return n.path=t,n},comparator(e,t){let n;const r=Function("a","b","var u, v; return "+e.map(((e,r)=>{const i=t[r];let a,o;return e.path?(a=`a${e.path}`,o=`b${e.path}`):((n=n||{})["f"+r]=e,a=`this.f${r}(a)`,o=`this.f${r}(b)`),function(e,t,n,r){return`((u = ${e}) < (v = ${t}) || u == null) && v != null ? ${n}\n : (u > v || v == null) && u != null ? ${r}\n : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? ${n}\n : v !== v && u === u ? ${r} : `}(a,o,-i,i)})).join("")+"0;");return n?r.bind(n):r}}};function Tb(e,t,n){if(!e||!I(e))return e;for(let r,i=0,a=qb.length;ie&&e.$tupleid?ir:e));return t.fn[n]||(t.fn[n]=ye(r,e.$order,t.expr.codegen))}},{key:"$context",parse:function(e,t){return t}},{key:"$subflow",parse:function(e,t){const n=e.$subflow;return function(e,r,i){const a=t.fork().parse(n),o=a.get(n.operators[0].id),s=a.signals.parent;return s&&s.set(i),o.detachSubflow=()=>t.detach(a),o}}},{key:"$tupleid",parse:function(){return ir}}];const Lb={skip:!0};function Nb(e,t,n,r){return new Pb(e,t,n,r)}function Pb(e,t,n,r){this.dataflow=e,this.transforms=t,this.events=e.events.bind(e),this.expr=r||$b,this.signals={},this.scales={},this.nodes={},this.data={},this.fn={},n&&(this.functions=Object.create(n),this.functions.context=this)}function Ub(e){this.dataflow=e.dataflow,this.transforms=e.transforms,this.events=e.events,this.expr=e.expr,this.signals=Object.create(e.signals),this.scales=Object.create(e.scales),this.nodes=Object.create(e.nodes),this.data=Object.create(e.data),this.fn=Object.create(e.fn),e.functions&&(this.functions=Object.create(e.functions),this.functions.context=this)}function jb(e,t){e&&(null==t?e.removeAttribute("aria-label"):e.setAttribute("aria-label",t))}Pb.prototype=Ub.prototype={fork(){const e=new Ub(this);return(this.subcontext||(this.subcontext=[])).push(e),e},detach(e){this.subcontext=this.subcontext.filter((t=>t!==e));const t=Object.keys(e.nodes);for(const n of t)e.nodes[n]._targets=null;for(const n of t)e.nodes[n].detach();e.nodes=null},get(e){return this.nodes[e]},set(e,t){return this.nodes[e]=t},add(e,t){const n=this,r=n.dataflow,i=e.value;if(n.set(e.id,t),function(e){return"collect"===Rb(e)}(e.type)&&i&&(i.$ingest?r.ingest(t,i.$ingest,i.$format):i.$request?r.preload(t,i.$request,i.$format):r.pulse(t,r.changeset().insert(i))),e.root&&(n.root=t),e.parent){let i=n.get(e.parent.$ref);i?(r.connect(i,[t]),t.targets().add(i)):(n.unresolved=n.unresolved||[]).push((()=>{i=n.get(e.parent.$ref),r.connect(i,[t]),t.targets().add(i)}))}if(e.signal&&(n.signals[e.signal]=t),e.scale&&(n.scales[e.scale]=t),e.data)for(const r in e.data){const i=n.data[r]||(n.data[r]={});e.data[r].forEach((e=>i[e]=t))}},resolve(){return(this.unresolved||[]).forEach((e=>e())),delete this.unresolved,this},operator(e,t){this.add(e,this.dataflow.add(e.value,t))},transform(e,t){this.add(e,this.dataflow.add(this.transforms[Rb(t)]))},stream(e,t){this.set(e.id,t)},update(e,t,n,r,i){this.dataflow.on(t,n,r,i,e.options)},operatorExpression(e){return this.expr.operator(this,e)},parameterExpression(e){return this.expr.parameter(this,e)},eventExpression(e){return this.expr.event(this,e)},handlerExpression(e){return this.expr.handler(this,e)},encodeExpression(e){return this.expr.encode(this,e)},parse:function(e){const t=this,n=e.operators||[];return e.background&&(t.background=e.background),e.eventConfig&&(t.eventConfig=e.eventConfig),e.locale&&(t.locale=e.locale),n.forEach((e=>t.parseOperator(e))),n.forEach((e=>t.parseOperatorParameters(e))),(e.streams||[]).forEach((e=>t.parseStream(e))),(e.updates||[]).forEach((e=>t.parseUpdate(e))),t.resolve()},parseOperator:function(e){const t=this;!function(e){return"operator"===Rb(e)}(e.type)&&e.type?t.transform(e,e.type):t.operator(e,e.update?t.operatorExpression(e.update):null)},parseOperatorParameters:function(e){const t=this;if(e.params){const n=t.get(e.id);n||E("Invalid operator id: "+e.id),t.dataflow.connect(n,n.parameters(t.parseParameters(e.params),e.react,e.initonly))}},parseParameters:function(e,t){t=t||{};const n=this;for(const r in e){const i=e[r];t[r]=j(i)?i.map((e=>Tb(e,n,t))):Tb(i,n,t)}return t},parseStream:function(e){var t,n=this,r=null!=e.filter?n.eventExpression(e.filter):void 0,i=null!=e.stream?n.get(e.stream):void 0;e.source?i=n.events(e.source,e.type,r):e.merge&&(i=(t=e.merge.map((e=>n.get(e))))[0].merge.apply(t[0],t.slice(1))),e.between&&(t=e.between.map((e=>n.get(e))),i=i.between(t[0],t[1])),e.filter&&(i=i.filter(r)),null!=e.throttle&&(i=i.throttle(+e.throttle)),null!=e.debounce&&(i=i.debounce(+e.debounce)),null==i&&E("Invalid stream definition: "+JSON.stringify(e)),e.consume&&i.consume(!0),n.stream(e,i)},parseUpdate:function(e){var t,n=this,r=I(r=e.source)?r.$ref:r,i=n.get(r),a=e.update,o=void 0;i||E("Source not defined: "+e.source),t=e.target&&e.target.$expr?n.eventExpression(e.target.$expr):n.get(e.target),a&&a.$expr&&(a.$params&&(o=n.parseParameters(a.$params)),a=n.handlerExpression(a.$expr)),n.update(e,i,t,a,o)},getState:function(e){var t=this,n={};if(e.signals){var r=n.signals={};Object.keys(t.signals).forEach((n=>{const i=t.signals[n];e.signals(n,i)&&(r[n]=i.value)}))}if(e.data){var i=n.data={};Object.keys(t.data).forEach((n=>{const r=t.data[n];e.data(n,r)&&(i[n]=r.input.value)}))}return t.subcontext&&!1!==e.recurse&&(n.subcontext=t.subcontext.map((t=>t.getState(e)))),n},setState:function(e){var t=this,n=t.dataflow,r=e.data,i=e.signals;Object.keys(i||{}).forEach((e=>{n.update(t.signals[e],i[e],Lb)})),Object.keys(r||{}).forEach((e=>{n.pulse(t.data[e].input,n.changeset().remove(R).insert(r[e]))})),(e.subcontext||[]).forEach(((e,n)=>{const r=t.subcontext[n];r&&r.setState(e)}))}};const Ib="default";function Wb(e,t){const n=e.globalCursor()?"undefined"!=typeof document&&document.body:e.container();if(n)return null==t?n.style.removeProperty("cursor"):n.style.cursor=t}function Gb(e,t){var n=e._runtime.data;return Fe(n,t)||E("Unrecognized data set: "+t),n[t]}function Hb(e,t){dr(t)||E("Second argument to changes must be a changeset.");const n=Gb(this,e);return n.modified=!0,this.pulse(n.input,t)}function Vb(e){var t=e.padding();return Math.max(0,e._viewWidth+t.left+t.right)}function Yb(e){var t=e.padding();return Math.max(0,e._viewHeight+t.top+t.bottom)}function Xb(e){var t=e.padding(),n=e._origin;return[t.left+n[0],t.top+n[1]]}function Jb(e,t,n){var r,i,a=e._renderer,o=a&&a.canvas();return o&&(i=Xb(e),(r=qc(t.changedTouches?t.changedTouches[0]:t,o))[0]-=i[0],r[1]-=i[1]),t.dataflow=e,t.item=n,t.vega=function(e,t,n){const r=t?"group"===t.mark.marktype?t:t.mark.group:null;function i(e){var n,i=r;if(e)for(n=t;n;n=n.mark.group)if(n.mark.name===e){i=n;break}return i&&i.mark&&i.mark.interactive?i:{}}function a(e){if(!e)return n;Ne(e)&&(e=i(e));const t=n.slice();for(;e;)t[0]-=e.x||0,t[1]-=e.y||0,e=e.mark&&e.mark.group;return t}return{view:ke(e),item:ke(t||{}),group:i,xy:a,x:e=>a(e)[0],y:e=>a(e)[1]}}(e,n,r),t}const Qb="view",Kb={trap:!1};function Zb(e,t,n,r){e._eventListeners.push({type:n,sources:he(t),handler:r})}function ex(e,t,n){const r=e._eventConfig&&e._eventConfig[t];return!(!1===r||I(r)&&!r[n])||(e.warn(`Blocked ${t} ${n} event listener.`),!1)}function tx(e){return e.item}function nx(e){return e.item.mark.source}function rx(e){return function(t,n){return n.vega.view().changeset().encode(n.item,e)}}function ix(e,t,n){const r=document.createElement(e);for(const e in t)r.setAttribute(e,t[e]);return null!=n&&(r.textContent=n),r}const ax="vega-bind",ox="vega-bind-name",sx="vega-bind-radio";function ux(e,t,n,r){const i=n.event||"input",a=()=>e.update(t.value);r.signal(n.signal,t.value),t.addEventListener(i,a),Zb(r,t,i,a),e.set=e=>{t.value=e,t.dispatchEvent(function(e){return"undefined"!=typeof Event?new Event(e):{type:e}}(i))}}function lx(e,t,n,r){const i=r.signal(n.signal),a=ix("div",{class:ax}),o="radio"===n.input?a:a.appendChild(ix("label"));o.appendChild(ix("span",{class:ox},n.name||n.signal)),t.appendChild(a);let s=cx;switch(n.input){case"checkbox":s=dx;break;case"select":s=fx;break;case"radio":s=hx;break;case"range":s=px}s(e,o,n,i)}function cx(e,t,n,r){const i=ix("input");for(const e in n)"signal"!==e&&"element"!==e&&i.setAttribute("input"===e?"type":e,n[e]);i.setAttribute("name",n.signal),i.value=r,t.appendChild(i),i.addEventListener("input",(()=>e.update(i.value))),e.elements=[i],e.set=e=>i.value=e}function dx(e,t,n,r){const i={type:"checkbox",name:n.signal};r&&(i.checked=!0);const a=ix("input",i);t.appendChild(a),a.addEventListener("change",(()=>e.update(a.checked))),e.elements=[a],e.set=e=>a.checked=!!e||null}function fx(e,t,n,r){const i=ix("select",{name:n.signal}),a=n.labels||[];n.options.forEach(((e,t)=>{const n={value:e};mx(e,r)&&(n.selected=!0),i.appendChild(ix("option",n,(a[t]||e)+""))})),t.appendChild(i),i.addEventListener("change",(()=>{e.update(n.options[i.selectedIndex])})),e.elements=[i],e.set=e=>{for(let t=0,r=n.options.length;t{const s={type:"radio",name:n.signal,value:t};mx(t,r)&&(s.checked=!0);const u=ix("input",s);u.addEventListener("change",(()=>e.update(t)));const l=ix("label",{},(a[o]||t)+"");return l.prepend(u),i.appendChild(l),u})),e.set=t=>{const n=e.elements,r=n.length;for(let e=0;e{l.textContent=u.value,e.update(+u.value)};u.addEventListener("input",c),u.addEventListener("change",c),e.elements=[u],e.set=e=>{u.value=e,l.textContent=e}}function mx(e,t){return e===t||e+""==t+""}function gx(e,t,n,r,i,a){return(t=t||new r(e.loader())).initialize(n,Vb(e),Yb(e),Xb(e),i,a).background(e.background())}function yx(e,t){return t?function(){try{t.apply(this,arguments)}catch(t){e.error(t)}}:null}function vx(e,t,n){if("string"==typeof t){if("undefined"==typeof document)return e.error("DOM document instance not found."),null;if(!(t=document.querySelector(t)))return e.error("Signal bind element not found: "+t),null}if(t&&n)try{t.textContent=""}catch(n){t=null,e.error(n)}return t}const bx=e=>+e||0;function xx(e){return I(e)?{top:bx(e.top),bottom:bx(e.bottom),left:bx(e.left),right:bx(e.right)}:(e=>({top:e,bottom:e,left:e,right:e}))(bx(e))}async function _x(e,t,n,r){const i=af(t),a=i&&i.headless;return a||E("Unrecognized renderer type: "+t),await e.runAsync(),gx(e,null,null,a,n,r).renderAsync(e._scenegraph.root)}var kx="width",Ax="height",wx="padding",Dx={skip:!0};function Ex(e,t){var n=e.autosize(),r=e.padding();return t-(n&&n.contains===wx?r.left+r.right:0)}function Cx(e,t){var n=e.autosize(),r=e.padding();return t-(n&&n.contains===wx?r.top+r.bottom:0)}function Fx(e,t){return t.modified&&j(t.input.value)&&e.indexOf("_:vega:_")}function Mx(e,t){return!("parent"===e||t instanceof Lr.proxy)}function Sx(e,t,n,r){const i=e.element();i&&i.setAttribute("title",function(e){return null==e?"":j(e)?Bx(e):I(e)&&!$e(e)?(t=e,Object.keys(t).map((e=>{const n=t[e];return e+": "+(j(n)?Bx(n):Ox(n))})).join("\n")):e+"";var t}(r))}function Bx(e){return"["+e.map(Ox).join(", ")+"]"}function Ox(e){return j(e)?"[…]":I(e)&&!$e(e)?"{…}":e}function Rx(e,t){const n=this;if(t=t||{},$r.call(n),t.loader&&n.loader(t.loader),t.logger&&n.logger(t.logger),null!=t.logLevel&&n.logLevel(t.logLevel),t.locale||e.locale){const r=we({},e.locale,t.locale);n.locale(wn(r.number,r.time))}n._el=null,n._elBind=null,n._renderType=t.renderer||nf.Canvas,n._scenegraph=new Sc;const r=n._scenegraph.root;n._renderer=null,n._tooltip=t.tooltip||Sx,n._redraw=!0,n._handler=(new nd).scene(r),n._globalCursor=!1,n._preventDefault=!1,n._timers=[],n._eventListeners=[],n._resizeListeners=[],n._eventConfig=function(e){const t=we({defaults:{}},e),n=(e,t)=>{t.forEach((t=>{j(e[t])&&(e[t]=Ke(e[t]))}))};return n(t.defaults,["prevent","allow"]),n(t,["view","window","selector"]),t}(e.eventConfig),n.globalCursor(n._eventConfig.globalCursor);const i=function(e,t,n){return Nb(e,Lr,Ab,n).parse(t)}(n,e,t.expr);n._runtime=i,n._signals=i.signals,n._bind=(e.bindings||[]).map((e=>({state:null,param:we({},e)}))),i.root&&i.root.set(r),r.source=i.data.root.input,n.pulse(i.data.root.input,n.changeset().insert(r.items)),n._width=n.width(),n._height=n.height(),n._viewWidth=Ex(n,n._width),n._viewHeight=Cx(n,n._height),n._origin=[0,0],n._resize=0,n._autosize=1,function(e){var t=e._signals,n=t[kx],r=t[Ax],i=t[wx];function a(){e._autosize=e._resize=1}e._resizeWidth=e.add(null,(t=>{e._width=t.size,e._viewWidth=Ex(e,t.size),a()}),{size:n}),e._resizeHeight=e.add(null,(t=>{e._height=t.size,e._viewHeight=Cx(e,t.size),a()}),{size:r});const o=e.add(null,a,{pad:i});e._resizeWidth.rank=n.rank+1,e._resizeHeight.rank=r.rank+1,o.rank=i.rank+1}(n),function(e){e.add(null,(t=>(e._background=t.bg,e._resize=1,t.bg)),{bg:e._signals.background})}(n),function(e){const t=e._signals.cursor||(e._signals.cursor=e.add({user:Ib,item:null}));e.on(e.events("view","pointermove"),t,((e,n)=>{const r=t.value,i=r?Ne(r)?r:r.user:Ib,a=n.item&&n.item.cursor||null;return r&&i===r.user&&a==r.item?r:{user:i,item:a}})),e.add(null,(function(t){let n=t.cursor,r=this.value;return Ne(n)||(r=n.item,n=n.user),Wb(e,n&&n!==Ib?n:r||n),r}),{cursor:t})}(n),n.description(e.description),t.hover&&n.hover(),t.container&&n.initialize(t.container,t.bind)}function zx(e,t){return Fe(e._signals,t)?e._signals[t]:E("Unrecognized signal name: "+Ve(t))}function $x(e,t){const n=(e._targets||[]).filter((e=>e._update&&e._update.handler===t));return n.length?n[0]:null}function Tx(e,t,n,r){let i=$x(n,r);return i||(i=yx(e,(()=>r(t,n.value))),i.handler=r,e.on(n,null,i)),e}function qx(e,t,n){const r=$x(t,n);return r&&t._targets.remove(r),e}Oe(Rx,$r,{async evaluate(e,t,n){if(await $r.prototype.evaluate.call(this,e,t),this._redraw||this._resize)try{this._renderer&&(this._resize&&(this._resize=0,function(e){var t=Xb(e),n=Vb(e),r=Yb(e);e._renderer.background(e.background()),e._renderer.resize(n,r,t),e._handler.origin(t),e._resizeListeners.forEach((t=>{try{t(n,r)}catch(t){e.error(t)}}))}(this)),await this._renderer.renderAsync(this._scenegraph.root)),this._redraw=!1}catch(e){this.error(e)}return n&&er(this,n),this},dirty(e){this._redraw=!0,this._renderer&&this._renderer.dirty(e)},description(e){if(arguments.length){const t=null!=e?e+"":null;return t!==this._desc&&jb(this._el,this._desc=t),this}return this._desc},container(){return this._el},scenegraph(){return this._scenegraph},origin(){return this._origin.slice()},signal(e,t,n){const r=zx(this,e);return 1===arguments.length?r.value:this.update(r,t,n)},width(e){return arguments.length?this.signal("width",e):this.signal("width")},height(e){return arguments.length?this.signal("height",e):this.signal("height")},padding(e){return arguments.length?this.signal("padding",xx(e)):xx(this.signal("padding"))},autosize(e){return arguments.length?this.signal("autosize",e):this.signal("autosize")},background(e){return arguments.length?this.signal("background",e):this.signal("background")},renderer(e){return arguments.length?(af(e)||E("Unrecognized renderer type: "+e),e!==this._renderType&&(this._renderType=e,this._resetRenderer()),this):this._renderType},tooltip(e){return arguments.length?(e!==this._tooltip&&(this._tooltip=e,this._resetRenderer()),this):this._tooltip},loader(e){return arguments.length?(e!==this._loader&&($r.prototype.loader.call(this,e),this._resetRenderer()),this):this._loader},resize(){return this._autosize=1,this.touch(zx(this,"autosize"))},_resetRenderer(){this._renderer&&(this._renderer=null,this.initialize(this._el,this._elBind))},_resizeView:function(e,t,n,r,i,a){this.runAfter((o=>{let s=0;o._autosize=0,o.width()!==n&&(s=1,o.signal(kx,n,Dx),o._resizeWidth.skip(!0)),o.height()!==r&&(s=1,o.signal(Ax,r,Dx),o._resizeHeight.skip(!0)),o._viewWidth!==e&&(o._resize=1,o._viewWidth=e),o._viewHeight!==t&&(o._resize=1,o._viewHeight=t),o._origin[0]===i[0]&&o._origin[1]===i[1]||(o._resize=1,o._origin=i),s&&o.run("enter"),a&&o.runAfter((e=>e.resize()))}),!1,1)},addEventListener(e,t,n){let r=t;return n&&!1===n.trap||(r=yx(this,t),r.raw=t),this._handler.on(e,r),this},removeEventListener(e,t){for(var n,r,i=this._handler.handlers(e),a=i.length;--a>=0;)if(r=i[a].type,n=i[a].handler,e===r&&(t===n||t===n.raw)){this._handler.off(r,n);break}return this},addResizeListener(e){const t=this._resizeListeners;return t.indexOf(e)<0&&t.push(e),this},removeResizeListener(e){var t=this._resizeListeners,n=t.indexOf(e);return n>=0&&t.splice(n,1),this},addSignalListener(e,t){return Tx(this,e,zx(this,e),t)},removeSignalListener(e,t){return qx(this,zx(this,e),t)},addDataListener(e,t){return Tx(this,e,Gb(this,e).values,t)},removeDataListener(e,t){return qx(this,Gb(this,e).values,t)},globalCursor(e){if(arguments.length){if(this._globalCursor!==!!e){const t=Wb(this,null);this._globalCursor=!!e,t&&Wb(this,t)}return this}return this._globalCursor},preventDefault(e){return arguments.length?(this._preventDefault=e,this):this._preventDefault},timer:function(e,t){this._timers.push(g.interval((function(t){e({timestamp:Date.now(),elapsed:t})}),t))},events:function(e,t,n){var r,i=this,a=new xr(n),o=function(n,r){i.runAsync(null,(()=>{e===Qb&&function(e,t){var n=e._eventConfig.defaults,r=n.prevent,i=n.allow;return!1!==r&&!0!==i&&(!0===r||!1===i||(r?r[t]:i?!i[t]:e.preventDefault()))}(i,t)&&n.preventDefault(),a.receive(Jb(i,n,r))}))};if("timer"===e)ex(i,"timer",t)&&i.timer(o,t);else if(e===Qb)ex(i,"view",t)&&i.addEventListener(t,o,Kb);else if("window"===e?ex(i,"window",t)&&"undefined"!=typeof window&&(r=[window]):"undefined"!=typeof document&&ex(i,"selector",t)&&(r=Array.from(document.querySelectorAll(e))),r){for(var s=0,u=r.length;s=0;)i[e].stop();for(e=a.length;--e>=0;)for(t=(n=a[e]).sources.length;--t>=0;)n.sources[t].removeEventListener(n.type,n.handler);return r&&r.call(this,this._handler,null,null,null),this},hover:function(e,t){return t=[t||"update",(e=[e||"hover"])[0]],this.on(this.events("view","pointerover",tx),nx,rx(e)),this.on(this.events("view","pointerout",tx),nx,rx(t)),this},data:function(e,t){return arguments.length<2?Gb(this,e).values.value:Hb.call(this,e,fr().remove(R).insert(t))},change:Hb,insert:function(e,t){return Hb.call(this,e,fr().insert(t))},remove:function(e,t){return Hb.call(this,e,fr().remove(t))},scale:function(e){var t=this._runtime.scales;return Fe(t,e)||E("Unrecognized scale or projection: "+e),t[e].value},initialize:function(e,t){const n=this,r=n._renderType,i=n._eventConfig.bind,a=af(r);e=n._el=e?vx(n,e,!0):null,function(e){const t=e.container();t&&(t.setAttribute("role","graphics-document"),t.setAttribute("aria-roleDescription","visualization"),jb(t,e.description()))}(n),a||n.error("Unrecognized renderer type: "+r);const o=a.handler||nd,s=e?a.renderer:a.headless;return n._renderer=s?gx(n,n._renderer,e,s):null,n._handler=function(e,t,n,r){const i=new r(e.loader(),yx(e,e.tooltip())).scene(e.scenegraph().root).initialize(n,Xb(e),e);return t&&t.handlers().forEach((e=>{i.on(e.type,e.handler)})),i}(n,n._handler,e,o),n._redraw=!0,e&&"none"!==i&&(t=t?n._elBind=vx(n,t,!0):e.appendChild(ix("form",{class:"vega-bindings"})),n._bind.forEach((e=>{e.param.element&&"container"!==i&&(e.element=vx(n,e.param.element,!!e.param.input))})),n._bind.forEach((e=>{!function(e,t,n){if(!t)return;const r=n.param;let i=n.state;i||(i=n.state={elements:null,active:!1,set:null,update:t=>{t!=e.signal(r.signal)&&e.runAsync(null,(()=>{i.source=!0,e.signal(r.signal,t)}))}},r.debounce&&(i.update=Ae(r.debounce,i.update))),(null==r.input&&r.element?ux:lx)(i,t,r,e),i.active||(e.on(e._signals[r.signal],null,(()=>{i.source?i.source=!1:i.set(e.signal(r.signal))})),i.active=!0)}(n,e.element||t,e)}))),n},toImageURL:async function(e,t){e!==nf.Canvas&&e!==nf.SVG&&e!==nf.PNG&&E("Unrecognized image type: "+e);const n=await _x(this,e,t);return e===nf.SVG?function(e,t){const n=new Blob([e],{type:t});return window.URL.createObjectURL(n)}(n.svg(),"image/svg+xml"):n.canvas().toDataURL("image/png")},toCanvas:async function(e,t){return(await _x(this,nf.Canvas,e,t)).canvas()},toSVG:async function(e){return(await _x(this,nf.SVG,e)).svg()},getState:function(e){return this._runtime.getState(e||{data:Fx,signals:Mx,recurse:!0})},setState:function(e){return this.runAsync(null,(t=>{t._trigger=!1,t._runtime.setState(e)}),(e=>{e._trigger=!0})),this}});const Lx="view",Nx="[",Px="]",Ux="{",jx="}",Ix=":",Wx=",",Gx="@",Hx=">",Vx=/[[\]{}]/,Yx={"*":1,arc:1,area:1,group:1,image:1,line:1,path:1,rect:1,rule:1,shape:1,symbol:1,text:1,trail:1};let Xx,Jx;function Qx(e,t,n){return Xx=t||Lx,Jx=n||Yx,Zx(e.trim()).map(e_)}function Kx(e,t,n,r,i){const a=e.length;let o,s=0;for(;t=0?--s:r&&r.indexOf(o)>=0&&++s}return t}function Zx(e){const t=[],n=e.length;let r=0,i=0;for(;i' after between selector: "+e;n=n.map(e_);const i=e_(e.slice(1).trim());if(i.between)return{between:n,stream:i};i.between=n;return i}(e):function(e){const t={source:Xx},n=[];let r,i,a=[0,0],o=0,s=0,u=e.length,l=0;if(e[u-1]===jx){if(l=e.lastIndexOf(Ux),!(l>=0))throw"Unmatched right brace: "+e;try{a=function(e){const t=e.split(Wx);if(!e.length||t.length>2)throw e;return t.map((t=>{const n=+t;if(n!=n)throw e;return n}))}(e.substring(l+1,u-1))}catch(t){throw"Invalid throttle specification: "+e}u=(e=e.slice(0,l).trim()).length,l=0}if(!u)throw e;e[0]===Gx&&(o=++l);r=Kx(e,l,Ix),r1?(t.type=n[1],o?t.markname=n[0].slice(1):!function(e){return Jx[e]}(n[0])?t.source=n[0]:t.marktype=n[0]):t.type=n[0];"!"===t.type.slice(-1)&&(t.consume=!0,t.type=t.type.slice(0,-1));null!=i&&(t.filter=i);a[0]&&(t.throttle=a[0]);a[1]&&(t.debounce=a[1]);return t}(e)}function t_(e){return I(e)?e:{type:e||"pad"}}const n_=e=>+e||0,r_=e=>({top:e,bottom:e,left:e,right:e});function i_(e){return I(e)?e.signal?e:{top:n_(e.top),bottom:n_(e.bottom),left:n_(e.left),right:n_(e.right)}:r_(n_(e))}const a_=e=>I(e)&&!j(e)?we({},e):{value:e};function o_(e,t,n,r){if(null!=n){return I(n)&&!j(n)||j(n)&&n.length&&I(n[0])?e.update[t]=n:e[r||"enter"][t]={value:n},1}return 0}function s_(e,t,n){for(const n in t)o_(e,n,t[n]);for(const t in n)o_(e,t,n[t],"update")}function u_(e,t,n){for(const r in t)n&&Fe(n,r)||(e[r]=we(e[r]||{},t[r]));return e}function l_(e,t){return t&&(t.enter&&t.enter[e]||t.update&&t.update[e])}const c_="mark",d_="frame",f_="scope",h_="axis",p_="axis-domain",m_="axis-grid",g_="axis-label",y_="axis-tick",v_="axis-title",b_="legend",x_="legend-band",__="legend-entry",k_="legend-gradient",A_="legend-label",w_="legend-symbol",D_="legend-title",E_="title",C_="title-text",F_="title-subtitle";function M_(e,t,n){e[t]=n&&n.signal?{signal:n.signal}:{value:n}}const S_=e=>Ne(e)?Ve(e):e.signal?`(${e.signal})`:z_(e);function B_(e){if(null!=e.gradient)return function(e){const t=[e.start,e.stop,e.count].map((e=>null==e?null:Ve(e)));for(;t.length&&null==Y(t);)t.pop();return t.unshift(S_(e.gradient)),`gradient(${t.join(",")})`}(e);let t=e.signal?`(${e.signal})`:e.color?function(e){return e.c?O_("hcl",e.h,e.c,e.l):e.h||e.s?O_("hsl",e.h,e.s,e.l):e.l||e.a?O_("lab",e.l,e.a,e.b):e.r||e.g||e.b?O_("rgb",e.r,e.g,e.b):null}(e.color):null!=e.field?z_(e.field):void 0!==e.value?Ve(e.value):void 0;return null!=e.scale&&(t=function(e,t){const n=S_(e.scale);null!=e.range?t=`lerp(_range(${n}), ${+e.range})`:(void 0!==t&&(t=`_scale(${n}, ${t})`),e.band&&(t=(t?t+"+":"")+`_bandwidth(${n})`+(1==+e.band?"":"*"+R_(e.band)),e.extra&&(t=`(datum.extra ? _scale(${n}, datum.extra.value) : ${t})`)),null==t&&(t="0"));return t}(e,t)),void 0===t&&(t=null),null!=e.exponent&&(t=`pow(${t},${R_(e.exponent)})`),null!=e.mult&&(t+=`*${R_(e.mult)}`),null!=e.offset&&(t+=`+${R_(e.offset)}`),e.round&&(t=`round(${t})`),t}const O_=(e,t,n,r)=>`(${e}(${[t,n,r].map(B_).join(",")})+'')`;function R_(e){return I(e)?"("+B_(e)+")":e}function z_(e){return $_(I(e)?e:{datum:e})}function $_(e){let t,n,r;if(e.signal)t="datum",r=e.signal;else if(e.group||e.parent){for(n=Math.max(1,e.level||1),t="item";n-- >0;)t+=".mark.group";e.parent?(r=e.parent,t+=".datum"):r=e.group}else e.datum?(t="datum",r=e.datum):E("Invalid field reference: "+Ve(e));return e.signal||(r=Ne(r)?C(r).map(Ve).join("]["):$_(r)),t+"["+r+"]"}function T_(e,t,n,r,i,a){const o={};(a=a||{}).encoders={$encode:o},e=function(e,t,n,r,i){const a={},o={};let s,u,l,c;for(u in u="lineBreak","text"!==t||null==i[u]||l_(u,e)||M_(a,u,i[u]),("legend"==n||String(n).startsWith("axis"))&&(n=null),c=n===d_?i.group:n===c_?we({},i.mark,i[t]):null,c)l=l_(u,e)||("fill"===u||"stroke"===u)&&(l_("fill",e)||l_("stroke",e)),l||M_(a,u,c[u]);for(u in he(r).forEach((t=>{const n=i.style&&i.style[t];for(const t in n)l_(t,e)||M_(a,t,n[t])})),e=we({},e),a)c=a[u],c.signal?(s=s||{})[u]=c:o[u]=c;return e.enter=we(o,e.enter),s&&(e.update=we(s,e.update)),e}(e,t,n,r,i.config);for(const n in e)o[n]=q_(e[n],t,a,i);return a}function q_(e,t,n,r){const i={},a={};for(const t in e)null!=e[t]&&(i[t]=L_((o=e[t],j(o)?function(e){let t="";return e.forEach((e=>{const n=B_(e);t+=e.test?`(${e.test})?${n}:`:n})),":"===Y(t)&&(t+="null"),t}(o):B_(o)),r,n,a));var o;return{$expr:{marktype:t,channels:i},$fields:Object.keys(a),$output:Object.keys(e)}}function L_(e,t,n,r){const i=Sb(e,t);return i.$fields.forEach((e=>r[e]=1)),we(n,i.$params),i.$expr}const N_="outer",P_=["value","update","init","react","bind"];function U_(e,t){E(e+' for "outer" push: '+Ve(t))}function j_(e,t){const n=e.name;if(e.push===N_)t.signals[n]||U_("No prior signal definition",n),P_.forEach((t=>{void 0!==e[t]&&U_("Invalid property ",t)}));else{const r=t.addSignal(n,e.value);!1===e.react&&(r.react=!1),e.bind&&t.addBinding(n,e.bind)}}function I_(e,t,n,r){this.id=-1,this.type=e,this.value=t,this.params=n,r&&(this.parent=r)}function W_(e,t,n,r){return new I_(e,t,n,r)}function G_(e,t){return W_("operator",e,t)}function H_(e){const t={$ref:e.id};return e.id<0&&(e.refs=e.refs||[]).push(t),t}function V_(e,t){return t?{$field:e,$name:t}:{$field:e}}const Y_=V_("key");function X_(e,t){return{$compare:e,$order:t}}const J_="descending";function Q_(e,t){return(e&&e.signal?"$"+e.signal:e||"")+(e&&t?"_":"")+(t&&t.signal?"$"+t.signal:t||"")}const K_="scope",Z_="view";function ek(e){return e&&e.signal}function tk(e){if(ek(e))return!0;if(I(e))for(const t in e)if(tk(e[t]))return!0;return!1}function nk(e,t){return null!=e?e:t}function rk(e){return e&&e.signal||e}const ik="timer";function ak(e,t){return(e.merge?ok:e.stream?sk:e.type?uk:E("Invalid stream specification: "+Ve(e)))(e,t)}function ok(e,t){const n=lk({merge:e.merge.map((e=>ak(e,t)))},e,t);return t.addStream(n).id}function sk(e,t){const n=lk({stream:ak(e.stream,t)},e,t);return t.addStream(n).id}function uk(e,t){let n;e.type===ik?(n=t.event(ik,e.throttle),e={between:e.between,filter:e.filter}):n=t.event(function(e){return e===K_?Z_:e||Z_}(e.source),e.type);const r=lk({stream:n},e,t);return 1===Object.keys(r).length?n:t.addStream(r).id}function lk(e,t,n){let r=t.between;return r&&(2!==r.length&&E('Stream "between" parameter must have 2 entries: '+Ve(t)),e.between=[ak(r[0],n),ak(r[1],n)]),r=t.filter?[].concat(t.filter):[],(t.marktype||t.markname||t.markrole)&&r.push(function(e,t,n){const r="event.item";return r+(e&&"*"!==e?"&&"+r+".mark.marktype==='"+e+"'":"")+(n?"&&"+r+".mark.role==='"+n+"'":"")+(t?"&&"+r+".mark.name==='"+t+"'":"")}(t.marktype,t.markname,t.markrole)),t.source===K_&&r.push("inScope(event.item)"),r.length&&(e.filter=Sb("("+r.join(")&&(")+")",n).$expr),null!=(r=t.throttle)&&(e.throttle=+r),null!=(r=t.debounce)&&(e.debounce=+r),t.consume&&(e.consume=!0),e}const ck={code:"_.$value",ast:{type:"Identifier",value:"value"}};function dk(e,t,n){const r=e.encode,i={target:n};let a=e.events,o=e.update,s=[];a||E("Signal update missing events specification."),Ne(a)&&(a=Qx(a,t.isSubscope()?K_:Z_)),a=he(a).filter((e=>e.signal||e.scale?(s.push(e),0):1)),s.length>1&&(s=[fk(s)]),a.length&&s.push(a.length>1?{merge:a}:a[0]),null!=r&&(o&&E("Signal encode and update are mutually exclusive."),o="encode(item(),"+Ve(r)+")"),i.update=Ne(o)?Sb(o,t):null!=o.expr?Sb(o.expr,t):null!=o.value?o.value:null!=o.signal?{$expr:ck,$params:{$value:t.signalRef(o.signal)}}:E("Invalid signal update specification."),e.force&&(i.options={force:!0}),s.forEach((e=>t.addUpdate(we(function(e,t){return{source:e.signal?t.signalRef(e.signal):e.scale?t.scaleRef(e.scale):ak(e,t)}}(e,t),i))))}function fk(e){return{signal:"["+e.map((e=>e.scale?'scale("'+e.scale+'")':e.signal))+"]"}}const hk=e=>(t,n,r)=>W_(e,n,t||void 0,r),pk=hk("aggregate"),mk=hk("axisticks"),gk=hk("bound"),yk=hk("collect"),vk=hk("compare"),bk=hk("datajoin"),xk=hk("encode"),_k=hk("expression"),kk=hk("facet"),Ak=hk("field"),wk=hk("key"),Dk=hk("legendentries"),Ek=hk("load"),Ck=hk("mark"),Fk=hk("multiextent"),Mk=hk("multivalues"),Sk=hk("overlap"),Bk=hk("params"),Ok=hk("prefacet"),Rk=hk("projection"),zk=hk("proxy"),$k=hk("relay"),Tk=hk("render"),qk=hk("scale"),Lk=hk("sieve"),Nk=hk("sortitems"),Pk=hk("viewlayout"),Uk=hk("values");let jk=0;const Ik={min:"min",max:"max",count:"sum"};function Wk(e,t){const n=t.getScale(e.name).params;let r;var i;for(r in n.domain=Yk(e.domain,e,t),null!=e.range&&(n.range=nA(e,t,n)),null!=e.interpolate&&function(e,t){t.interpolate=Gk(e.type||e),null!=e.gamma&&(t.interpolateGamma=Gk(e.gamma))}(e.interpolate,n),null!=e.nice&&(n.nice=I(i=e.nice)?{interval:Gk(i.interval),step:Gk(i.step)}:Gk(i)),null!=e.bins&&(n.bins=function(e,t){return e.signal||j(e)?Hk(e,t):t.objectProperty(e)}(e.bins,t)),e)Fe(n,r)||"name"===r||(n[r]=Gk(e[r],t))}function Gk(e,t){return I(e)?e.signal?t.signalRef(e.signal):E("Unsupported object: "+Ve(e)):e}function Hk(e,t){return e.signal?t.signalRef(e.signal):e.map((e=>Gk(e,t)))}function Vk(e){E("Can not find data set: "+Ve(e))}function Yk(e,t,n){if(e)return e.signal?n.signalRef(e.signal):(j(e)?Xk:e.fields?Qk:Jk)(e,t,n);null==t.domainMin&&null==t.domainMax||E("No scale domain defined for domainMin/domainMax to override.")}function Xk(e,t,n){return e.map((e=>Gk(e,n)))}function Jk(e,t,n){const r=n.getData(e.data);return r||Vk(e.data),Uo(t.type)?r.valuesRef(n,e.field,Zk(e.sort,!1)):Go(t.type)?r.domainRef(n,e.field):r.extentRef(n,e.field)}function Qk(e,t,n){const r=e.data,i=e.fields.reduce(((e,t)=>(t=Ne(t)?{data:r,field:t}:j(t)||t.signal?function(e,t){const n="_:vega:_"+jk++,r=yk({});if(j(e))r.value={$ingest:e};else if(e.signal){const i="setdata("+Ve(n)+","+e.signal+")";r.params.input=t.signalRef(i)}return t.addDataPipeline(n,[r,Lk({})]),{data:n,field:"data"}}(t,n):t,e.push(t),e)),[]);return(Uo(t.type)?Kk:Go(t.type)?eA:tA)(e,n,i)}function Kk(e,t,n){const r=Zk(e.sort,!0);let i,a;const o=n.map((e=>{const n=t.getData(e.data);return n||Vk(e.data),n.countsRef(t,e.field,r)})),s={groupby:Y_,pulse:o};r&&(i=r.op||"count",a=r.field?Q_(i,r.field):"count",s.ops=[Ik[i]],s.fields=[t.fieldRef(a)],s.as=[a]),i=t.add(pk(s));const u=t.add(yk({pulse:H_(i)}));return a=t.add(Uk({field:Y_,sort:t.sortRef(r),pulse:H_(u)})),H_(a)}function Zk(e,t){return e&&(e.field||e.op?e.field||"count"===e.op?t&&e.field&&e.op&&!Ik[e.op]&&E("Multiple domain scales can not be sorted using "+e.op):E("No field provided for sort aggregate op: "+e.op):I(e)?e.field="key":e={field:"key"}),e}function eA(e,t,n){const r=n.map((e=>{const n=t.getData(e.data);return n||Vk(e.data),n.domainRef(t,e.field)}));return H_(t.add(Mk({values:r})))}function tA(e,t,n){const r=n.map((e=>{const n=t.getData(e.data);return n||Vk(e.data),n.extentRef(t,e.field)}));return H_(t.add(Fk({extents:r})))}function nA(e,t,n){const r=t.config.range;let i=e.range;if(i.signal)return t.signalRef(i.signal);if(Ne(i)){if(r&&Fe(r,i))return nA(e=we({},e,{range:r[i]}),t,n);"width"===i?i=[0,{signal:"width"}]:"height"===i?i=Uo(e.type)?[0,{signal:"height"}]:[{signal:"height"},0]:E("Unrecognized scale range value: "+Ve(i))}else{if(i.scheme)return n.scheme=j(i.scheme)?Hk(i.scheme,t):Gk(i.scheme,t),i.extent&&(n.schemeExtent=Hk(i.extent,t)),void(i.count&&(n.schemeCount=Gk(i.count,t)));if(i.step)return void(n.rangeStep=Gk(i.step,t));if(Uo(e.type)&&!j(i))return Yk(i,e,t);j(i)||E("Unsupported range type: "+Ve(i))}return i.map((e=>(j(e)?Hk:Gk)(e,t)))}function rA(e,t,n){return j(e)?e.map((e=>rA(e,t,n))):I(e)?e.signal?n.signalRef(e.signal):"fit"===t?e:E("Unsupported parameter object: "+Ve(e)):e}const iA="top",aA="left",oA="right",sA="bottom",uA="center",lA="vertical",cA="start",dA="end",fA="index",hA="label",pA="offset",mA="perc",gA="perc2",yA="value",vA="guide-label",bA="guide-title",xA="group-title",_A="group-subtitle",kA="symbol",AA="gradient",wA="discrete",DA="size",EA=[DA,"shape","fill","stroke","strokeWidth","strokeDash","opacity"],CA={name:1,style:1,interactive:1},FA={value:0},MA={value:1},SA="group",BA="rect",OA="rule",RA="symbol",zA="text";function $A(e){return e.type=SA,e.interactive=e.interactive||!1,e}function TA(e,t){const n=(n,r)=>nk(e[n],nk(t[n],r));return n.isVertical=n=>lA===nk(e.direction,t.direction||(n?t.symbolDirection:t.gradientDirection)),n.gradientLength=()=>nk(e.gradientLength,t.gradientLength||t.gradientWidth),n.gradientThickness=()=>nk(e.gradientThickness,t.gradientThickness||t.gradientHeight),n.entryColumns=()=>nk(e.columns,nk(t.columns,+n.isVertical(!0))),n}function qA(e,t){const n=t&&(t.update&&t.update[e]||t.enter&&t.enter[e]);return n&&n.signal?n:n?n.value:null}function LA(e,t,n){return`item.anchor === '${cA}' ? ${e} : item.anchor === '${dA}' ? ${t} : ${n}`}const NA=LA(Ve(aA),Ve(oA),Ve(uA));function PA(e,t){return t?e?I(e)?Object.assign({},e,{offset:PA(e.offset,t)}):{value:e,offset:t}:t:e}function UA(e,t){return t?(e.name=t.name,e.style=t.style||e.style,e.interactive=!!t.interactive,e.encode=u_(e.encode,t,CA)):e.interactive=!1,e}function jA(e,t,n,r){const i=TA(e,n),a=i.isVertical(),o=i.gradientThickness(),s=i.gradientLength();let u,l,c,d,f;a?(l=[0,1],c=[0,0],d=o,f=s):(l=[0,0],c=[1,0],d=s,f=o);const h={enter:u={opacity:FA,x:FA,y:FA,width:a_(d),height:a_(f)},update:we({},u,{opacity:MA,fill:{gradient:t,start:l,stop:c}}),exit:{opacity:FA}};return s_(h,{stroke:i("gradientStrokeColor"),strokeWidth:i("gradientStrokeWidth")},{opacity:i("gradientOpacity")}),UA({type:BA,role:k_,encode:h},r)}function IA(e,t,n,r,i){const a=TA(e,n),o=a.isVertical(),s=a.gradientThickness(),u=a.gradientLength();let l,c,d,f,h="";o?(l="y",d="y2",c="x",f="width",h="1-"):(l="x",d="x2",c="y",f="height");const p={opacity:FA,fill:{scale:t,field:yA}};p[l]={signal:h+"datum."+mA,mult:u},p[c]=FA,p[d]={signal:h+"datum."+gA,mult:u},p[f]=a_(s);const m={enter:p,update:we({},p,{opacity:MA}),exit:{opacity:FA}};return s_(m,{stroke:a("gradientStrokeColor"),strokeWidth:a("gradientStrokeWidth")},{opacity:a("gradientOpacity")}),UA({type:BA,role:x_,key:yA,from:i,encode:m},r)}const WA=`datum.${mA}<=0?"${aA}":datum.${mA}>=1?"${oA}":"${uA}"`,GA=`datum.${mA}<=0?"${sA}":datum.${mA}>=1?"${iA}":"middle"`;function HA(e,t,n,r){const i=TA(e,t),a=i.isVertical(),o=a_(i.gradientThickness()),s=i.gradientLength();let u,l,c,d,f=i("labelOverlap"),h="";const p={enter:u={opacity:FA},update:l={opacity:MA,text:{field:hA}},exit:{opacity:FA}};return s_(p,{fill:i("labelColor"),fillOpacity:i("labelOpacity"),font:i("labelFont"),fontSize:i("labelFontSize"),fontStyle:i("labelFontStyle"),fontWeight:i("labelFontWeight"),limit:nk(e.labelLimit,t.gradientLabelLimit)}),a?(u.align={value:"left"},u.baseline=l.baseline={signal:GA},c="y",d="x",h="1-"):(u.align=l.align={signal:WA},u.baseline={value:"top"},c="x",d="y"),u[c]=l[c]={signal:h+"datum."+mA,mult:s},u[d]=l[d]=o,o.offset=nk(e.labelOffset,t.gradientLabelOffset)||0,f=f?{separation:i("labelSeparation"),method:f,order:"datum."+fA}:void 0,UA({type:zA,role:A_,style:vA,key:yA,from:r,encode:p,overlap:f},n)}function VA(e,t,n,r,i){const a=TA(e,t),o=n.entries,s=!(!o||!o.interactive),u=o?o.name:void 0,l=a("clipHeight"),c=a("symbolOffset"),d={data:"value"},f=`(${i}) ? datum.${pA} : datum.${DA}`,h=l?a_(l):{field:DA},p=`datum.${fA}`,m=`max(1, ${i})`;let g,y,v,b,x;h.mult=.5,g={enter:y={opacity:FA,x:{signal:f,mult:.5,offset:c},y:h},update:v={opacity:MA,x:y.x,y:y.y},exit:{opacity:FA}};let _=null,k=null;e.fill||(_=t.symbolBaseFillColor,k=t.symbolBaseStrokeColor),s_(g,{fill:a("symbolFillColor",_),shape:a("symbolType"),size:a("symbolSize"),stroke:a("symbolStrokeColor",k),strokeDash:a("symbolDash"),strokeDashOffset:a("symbolDashOffset"),strokeWidth:a("symbolStrokeWidth")},{opacity:a("symbolOpacity")}),EA.forEach((t=>{e[t]&&(v[t]=y[t]={scale:e[t],field:yA})}));const A=UA({type:RA,role:w_,key:yA,from:d,clip:!!l||void 0,encode:g},n.symbols),w=a_(c);w.offset=a("labelOffset"),g={enter:y={opacity:FA,x:{signal:f,offset:w},y:h},update:v={opacity:MA,text:{field:hA},x:y.x,y:y.y},exit:{opacity:FA}},s_(g,{align:a("labelAlign"),baseline:a("labelBaseline"),fill:a("labelColor"),fillOpacity:a("labelOpacity"),font:a("labelFont"),fontSize:a("labelFontSize"),fontStyle:a("labelFontStyle"),fontWeight:a("labelFontWeight"),limit:a("labelLimit")});const D=UA({type:zA,role:A_,style:vA,key:yA,from:d,encode:g},n.labels);return g={enter:{noBound:{value:!l},width:FA,height:l?a_(l):FA,opacity:FA},exit:{opacity:FA},update:v={opacity:MA,row:{signal:null},column:{signal:null}}},a.isVertical(!0)?(b=`ceil(item.mark.items.length / ${m})`,v.row.signal=`${p}%${b}`,v.column.signal=`floor(${p} / ${b})`,x={field:["row",p]}):(v.row.signal=`floor(${p} / ${m})`,v.column.signal=`${p} % ${m}`,x={field:p}),v.column.signal=`(${i})?${v.column.signal}:${p}`,$A({role:f_,from:r={facet:{data:r,name:"value",groupby:fA}},encode:u_(g,o,CA),marks:[A,D],name:u,interactive:s,sort:x})}const YA='item.orient === "left"',XA='item.orient === "right"',JA=`(${YA} || ${XA})`,QA=`datum.vgrad && ${JA}`,KA=LA('"top"','"bottom"','"middle"'),ZA=`datum.vgrad && ${XA} ? (${LA('"right"','"left"','"center"')}) : (${JA} && !(datum.vgrad && ${YA})) ? "left" : ${NA}`,ew=`item._anchor || (${JA} ? "middle" : "start")`,tw=`${QA} ? (${YA} ? -90 : 90) : 0`,nw=`${JA} ? (datum.vgrad ? (${XA} ? "bottom" : "top") : ${KA}) : "top"`;function rw(e,t){let n;return I(e)&&(e.signal?n=e.signal:e.path?n="pathShape("+iw(e.path)+")":e.sphere&&(n="geoShape("+iw(e.sphere)+', {type: "Sphere"})')),n?t.signalRef(n):!!e}function iw(e){return I(e)&&e.signal?e.signal:Ve(e)}function aw(e){const t=e.role||"";return t.indexOf("axis")&&t.indexOf("legend")&&t.indexOf("title")?e.type===SA?f_:t||c_:t}function ow(e){return{marktype:e.type,name:e.name||void 0,role:e.role||aw(e),zindex:+e.zindex||void 0,aria:e.aria,description:e.description}}function sw(e,t){return e&&e.signal?t.signalRef(e.signal):!1!==e}function uw(e,t){const n=Nr(e.type);n||E("Unrecognized transform type: "+Ve(e.type));const r=W_(n.type.toLowerCase(),null,lw(n,e,t));return e.signal&&t.addSignal(e.signal,t.proxy(r)),r.metadata=n.metadata||{},r}function lw(e,t,n){const r={},i=e.params.length;for(let a=0;afw(e,t,n)))):fw(e,r,n)}(e,t,n):"projection"===r?n.projectionRef(t[e.name]):e.array&&!ek(i)?i.map((t=>dw(e,t,n))):dw(e,i,n):void(e.required&&E("Missing required "+Ve(t.type)+" parameter: "+Ve(e.name)))}function dw(e,t,n){const r=e.type;if(ek(t))return gw(r)?E("Expression references can not be signals."):yw(r)?n.fieldRef(t):vw(r)?n.compareRef(t):n.signalRef(t.signal);{const i=e.expr||yw(r);return i&&hw(t)?n.exprRef(t.expr,t.as):i&&pw(t)?V_(t.field,t.as):gw(r)?Sb(t,n):mw(r)?H_(n.getData(t).values):yw(r)?V_(t):vw(r)?n.compareRef(t):t}}function fw(e,t,n){const r=e.params.length;let i;for(let n=0;ne&&e.expr,pw=e=>e&&e.field,mw=e=>"data"===e,gw=e=>"expr"===e,yw=e=>"field"===e,vw=e=>"compare"===e;function bw(e,t){return e.$ref?e:e.data&&e.data.$ref?e.data:H_(t.getData(e.data).output)}function xw(e,t,n,r,i){this.scope=e,this.input=t,this.output=n,this.values=r,this.aggregate=i,this.index={}}function _w(e){return Ne(e)?e:null}function kw(e,t,n){const r=Q_(n.op,n.field);let i;if(t.ops){for(let e=0,n=t.as.length;enull==e?"null":e)).join(",")+"),0)",t);u.update=l.$expr,u.params=l.$params}function Dw(e,t){const n=aw(e),r=e.type===SA,i=e.from&&e.from.facet,a=e.overlap;let o,s,u,l,c,d,f,h=e.layout||n===f_||n===d_;const p=n===c_||h||i,m=function(e,t,n){let r,i,a,o,s;return e?(r=e.facet)&&(t||E("Only group marks can be faceted."),null!=r.field?o=s=bw(r,n):(e.data?s=H_(n.getData(e.data).aggregate):(a=uw(we({type:"aggregate",groupby:he(r.groupby)},r.aggregate),n),a.params.key=n.keyRef(r.groupby),a.params.pulse=bw(r,n),o=s=H_(n.add(a))),i=n.keyRef(r.groupby,!0))):o=H_(n.add(yk(null,[{}]))),o||(o=bw(e,n)),{key:i,pulse:o,parent:s}}(e.from,r,t);s=t.add(bk({key:m.key||(e.key?V_(e.key):void 0),pulse:m.pulse,clean:!r}));const g=H_(s);s=u=t.add(yk({pulse:g})),s=t.add(Ck({markdef:ow(e),interactive:sw(e.interactive,t),clip:rw(e.clip,t),context:{$context:!0},groups:t.lookup(),parent:t.signals.parent?t.signalRef("parent"):null,index:t.markpath(),pulse:H_(s)}));const y=H_(s);s=l=t.add(xk(T_(e.encode,e.type,n,e.style,t,{mod:!1,pulse:y}))),s.params.parent=t.encode(),e.transform&&e.transform.forEach((e=>{const n=uw(e,t),r=n.metadata;(r.generates||r.changes)&&E("Mark transforms should not generate new data."),r.nomod||(l.params.mod=!0),n.params.pulse=H_(s),t.add(s=n)})),e.sort&&(s=t.add(Nk({sort:t.compareRef(e.sort),pulse:H_(s)})));const v=H_(s);(i||h)&&(h=t.add(Pk({layout:t.objectProperty(e.layout),legends:t.legends,mark:y,pulse:v})),d=H_(h));const b=t.add(gk({mark:y,pulse:d||v}));f=H_(b),r&&(p&&(o=t.operators,o.pop(),h&&o.pop()),t.pushState(v,d||f,g),i?function(e,t,n){const r=e.from.facet,i=r.name,a=bw(r,t);let o;r.name||E("Facet must have a name: "+Ve(r)),r.data||E("Facet must reference a data set: "+Ve(r)),r.field?o=t.add(Ok({field:t.fieldRef(r.field),pulse:a})):r.groupby?o=t.add(kk({key:t.keyRef(r.groupby),group:H_(t.proxy(n.parent)),pulse:a})):E("Facet must specify groupby or field: "+Ve(r));const s=t.fork(),u=s.add(yk()),l=s.add(Lk({pulse:H_(u)}));s.addData(i,new xw(s,u,u,l)),s.addSignal("parent",null),o.params.subflow={$subflow:s.parse(e).toRuntime()}}(e,t,m):p?function(e,t,n){const r=t.add(Ok({pulse:n.pulse})),i=t.fork();i.add(Lk()),i.addSignal("parent",null),r.params.subflow={$subflow:i.parse(e).toRuntime()}}(e,t,m):t.parse(e),t.popState(),p&&(h&&o.push(h),o.push(b))),a&&(f=function(e,t,n){const r=e.method,i=e.bound,a=e.separation,o={separation:ek(a)?n.signalRef(a.signal):a,method:ek(r)?n.signalRef(r.signal):r,pulse:t};e.order&&(o.sort=n.compareRef({field:e.order}));if(i){const e=i.tolerance;o.boundTolerance=ek(e)?n.signalRef(e.signal):+e,o.boundScale=n.scaleRef(i.scale),o.boundOrient=i.orient}return H_(n.add(Sk(o)))}(a,f,t));const x=t.add(Tk({pulse:f})),_=t.add(Lk({pulse:H_(x)},void 0,t.parent()));null!=e.name&&(c=e.name,t.addData(c,new xw(t,u,x,_)),e.on&&e.on.forEach((e=>{(e.insert||e.remove||e.toggle)&&E("Marks only support modify triggers."),ww(e,t,c)})))}function Ew(e,t){const n=t.config.legend,r=e.encode||{},i=TA(e,n),a=r.legend||{},o=a.name||void 0,s=a.interactive,u=a.style,l={};let c,d,f,h=0;EA.forEach((t=>e[t]?(l[t]=e[t],h=h||e[t]):0)),h||E("Missing valid scale for legend.");const p=function(e,t){let n=e.type||kA;e.type||1!==function(e){return EA.reduce(((t,n)=>t+(e[n]?1:0)),0)}(e)||!e.fill&&!e.stroke||(n=Po(t)?AA:jo(t)?wA:kA);return n!==AA?n:jo(t)?wA:AA}(e,t.scaleType(h)),m={title:null!=e.title,scales:l,type:p,vgrad:"symbol"!==p&&i.isVertical()},g=H_(t.add(yk(null,[m]))),y=H_(t.add(Dk(d={type:p,scale:t.scaleRef(h),count:t.objectProperty(i("tickCount")),limit:t.property(i("symbolLimit")),values:t.objectProperty(e.values),minstep:t.property(e.tickMinStep),formatType:t.property(e.formatType),formatSpecifier:t.property(e.format)})));return p===AA?(f=[jA(e,h,n,r.gradient),HA(e,n,r.labels,y)],d.count=d.count||t.signalRef(`max(2,2*floor((${rk(i.gradientLength())})/100))`)):p===wA?f=[IA(e,h,n,r.gradient,y),HA(e,n,r.labels,y)]:(c=function(e,t){const n=TA(e,t);return{align:n("gridAlign"),columns:n.entryColumns(),center:{row:!0,column:!1},padding:{row:n("rowPadding"),column:n("columnPadding")}}}(e,n),f=[VA(e,n,r,y,rk(c.columns))],d.size=function(e,t,n){const r=rk(Fw("size",e,n)),i=rk(Fw("strokeWidth",e,n)),a=rk(function(e,t,n){return qA("fontSize",e)||function(e,t,n){const r=t.config.style[n];return r&&r[e]}("fontSize",t,n)}(n[1].encode,t,vA));return Sb(`max(ceil(sqrt(${r})+${i}),${a})`,t)}(e,t,f[0].marks)),f=[$A({role:__,from:g,encode:{enter:{x:{value:0},y:{value:0}}},marks:f,layout:c,interactive:s})],m.title&&f.push(function(e,t,n,r){const i=TA(e,t),a={enter:{opacity:FA},update:{opacity:MA,x:{field:{group:"padding"}},y:{field:{group:"padding"}}},exit:{opacity:FA}};return s_(a,{orient:i("titleOrient"),_anchor:i("titleAnchor"),anchor:{signal:ew},angle:{signal:tw},align:{signal:ZA},baseline:{signal:nw},text:e.title,fill:i("titleColor"),fillOpacity:i("titleOpacity"),font:i("titleFont"),fontSize:i("titleFontSize"),fontStyle:i("titleFontStyle"),fontWeight:i("titleFontWeight"),limit:i("titleLimit"),lineHeight:i("titleLineHeight")},{align:i("titleAlign"),baseline:i("titleBaseline")}),UA({type:zA,role:D_,style:bA,from:r,encode:a},n)}(e,n,r.title,g)),Dw($A({role:b_,from:g,encode:u_(Cw(i,e,n),a,CA),marks:f,aria:i("aria"),description:i("description"),zindex:i("zindex"),name:o,interactive:s,style:u}),t)}function Cw(e,t,n){const r={enter:{},update:{}};return s_(r,{orient:e("orient"),offset:e("offset"),padding:e("padding"),titlePadding:e("titlePadding"),cornerRadius:e("cornerRadius"),fill:e("fillColor"),stroke:e("strokeColor"),strokeWidth:n.strokeWidth,strokeDash:n.strokeDash,x:e("legendX"),y:e("legendY"),format:t.format,formatType:t.formatType}),r}function Fw(e,t,n){return t[e]?`scale("${t[e]}",datum)`:qA(e,n[0].encode)}xw.fromEntries=function(e,t){const n=t.length,r=t[n-1],i=t[n-2];let a=t[0],o=null,s=1;for(a&&"load"===a.type&&(a=t[1]),e.add(t[0]);s{n.push(uw(e,t))})),e.on&&e.on.forEach((n=>{ww(n,t,e.name)})),t.addDataPipeline(e.name,function(e,t,n){const r=[];let i,a,o,s,u,l=null,c=!1,d=!1;e.values?ek(e.values)||tk(e.format)?(r.push(zw(t,e)),r.push(l=Rw())):r.push(l=Rw({$ingest:e.values,$format:e.format})):e.url?tk(e.url)||tk(e.format)?(r.push(zw(t,e)),r.push(l=Rw())):r.push(l=Rw({$request:e.url,$format:e.format})):e.source&&(l=i=he(e.source).map((e=>H_(t.getData(e).output))),r.push(null));for(a=0,o=n.length;ae===sA||e===iA,Tw=(e,t,n)=>ek(e)?Iw(e.signal,t,n):e===aA||e===iA?t:n,qw=(e,t,n)=>ek(e)?Uw(e.signal,t,n):$w(e)?t:n,Lw=(e,t,n)=>ek(e)?jw(e.signal,t,n):$w(e)?n:t,Nw=(e,t,n)=>ek(e)?Ww(e.signal,t,n):e===iA?{value:t}:{value:n},Pw=(e,t,n)=>ek(e)?Gw(e.signal,t,n):e===oA?{value:t}:{value:n},Uw=(e,t,n)=>Hw(`${e} === '${iA}' || ${e} === '${sA}'`,t,n),jw=(e,t,n)=>Hw(`${e} !== '${iA}' && ${e} !== '${sA}'`,t,n),Iw=(e,t,n)=>Yw(`${e} === '${aA}' || ${e} === '${iA}'`,t,n),Ww=(e,t,n)=>Yw(`${e} === '${iA}'`,t,n),Gw=(e,t,n)=>Yw(`${e} === '${oA}'`,t,n),Hw=(e,t,n)=>(t=null!=t?a_(t):t,n=null!=n?a_(n):n,Vw(t)&&Vw(n)?{signal:`${e} ? (${t=t?t.signal||Ve(t.value):null}) : (${n=n?n.signal||Ve(n.value):null})`}:[we({test:e},t)].concat(n||[])),Vw=e=>null==e||1===Object.keys(e).length,Yw=(e,t,n)=>({signal:`${e} ? (${Jw(t)}) : (${Jw(n)})`}),Xw=(e,t,n,r,i)=>({signal:(null!=r?`${e} === '${aA}' ? (${Jw(r)}) : `:"")+(null!=n?`${e} === '${sA}' ? (${Jw(n)}) : `:"")+(null!=i?`${e} === '${oA}' ? (${Jw(i)}) : `:"")+(null!=t?`${e} === '${iA}' ? (${Jw(t)}) : `:"")+"(null)"}),Jw=e=>ek(e)?e.signal:null==e?null:Ve(e),Qw=(e,t)=>0===t?0:ek(e)?{signal:`(${e.signal}) * ${t}`}:{value:e*t},Kw=(e,t)=>{const n=e.signal;return n&&n.endsWith("(null)")?{signal:n.slice(0,-6)+t.signal}:e};function Zw(e,t,n,r){let i;if(t&&Fe(t,e))return t[e];if(Fe(n,e))return n[e];if(e.startsWith("title")){switch(e){case"titleColor":i="fill";break;case"titleFont":case"titleFontSize":case"titleFontWeight":i=e[5].toLowerCase()+e.slice(6)}return r[bA][i]}if(e.startsWith("label")){switch(e){case"labelColor":i="fill";break;case"labelFont":case"labelFontSize":i=e[5].toLowerCase()+e.slice(6)}return r[vA][i]}return null}function eD(e){const t={};for(const n of e)if(n)for(const e in n)t[e]=1;return Object.keys(t)}function tD(e,t){return{scale:e.scale,range:t}}function nD(e,t,n,r,i){const a=TA(e,t),o=e.orient,s=e.gridScale,u=Tw(o,1,-1),l=function(e,t){if(1===t);else if(I(e)){let n=e=we({},e);for(;null!=n.mult;){if(!I(n.mult))return n.mult=ek(t)?{signal:`(${n.mult}) * (${t.signal})`}:n.mult*t,e;n=n.mult=we({},n.mult)}n.mult=t}else e=ek(t)?{signal:`(${t.signal}) * (${e||0})`}:t*(e||0);return e}(e.offset,u);let c,d,f;const h={enter:c={opacity:FA},update:f={opacity:MA},exit:d={opacity:FA}};s_(h,{stroke:a("gridColor"),strokeCap:a("gridCap"),strokeDash:a("gridDash"),strokeDashOffset:a("gridDashOffset"),strokeOpacity:a("gridOpacity"),strokeWidth:a("gridWidth")});const p={scale:e.scale,field:yA,band:i.band,extra:i.extra,offset:i.offset,round:a("tickRound")},m=qw(o,{signal:"height"},{signal:"width"}),g=s?{scale:s,range:0,mult:u,offset:l}:{value:0,offset:l},y=s?{scale:s,range:1,mult:u,offset:l}:we(m,{mult:u,offset:l});return c.x=f.x=qw(o,p,g),c.y=f.y=Lw(o,p,g),c.x2=f.x2=Lw(o,y),c.y2=f.y2=qw(o,y),d.x=qw(o,p),d.y=Lw(o,p),UA({type:OA,role:m_,key:yA,from:r,encode:h},n)}function rD(e,t,n,r,i){return{signal:'flush(range("'+e+'"), scale("'+e+'", datum.value), '+t+","+n+","+r+","+i+")"}}function iD(e,t,n,r){const i=TA(e,t),a=e.orient,o=Tw(a,-1,1);let s,u;const l={enter:s={opacity:FA,anchor:a_(i("titleAnchor",null)),align:{signal:NA}},update:u=we({},s,{opacity:MA,text:a_(e.title)}),exit:{opacity:FA}},c={signal:`lerp(range("${e.scale}"), ${LA(0,1,.5)})`};return u.x=qw(a,c),u.y=Lw(a,c),s.angle=qw(a,FA,Qw(o,90)),s.baseline=qw(a,Nw(a,sA,iA),{value:sA}),u.angle=s.angle,u.baseline=s.baseline,s_(l,{fill:i("titleColor"),fillOpacity:i("titleOpacity"),font:i("titleFont"),fontSize:i("titleFontSize"),fontStyle:i("titleFontStyle"),fontWeight:i("titleFontWeight"),limit:i("titleLimit"),lineHeight:i("titleLineHeight")},{align:i("titleAlign"),angle:i("titleAngle"),baseline:i("titleBaseline")}),function(e,t,n,r){const i=(e,t)=>null!=e?(n.update[t]=Kw(a_(e),n.update[t]),!1):!l_(t,r),a=i(e("titleX"),"x"),o=i(e("titleY"),"y");n.enter.auto=o===a?a_(o):qw(t,a_(o),a_(a))}(i,a,l,n),l.update.align=Kw(l.update.align,s.align),l.update.angle=Kw(l.update.angle,s.angle),l.update.baseline=Kw(l.update.baseline,s.baseline),UA({type:zA,role:v_,style:bA,from:r,encode:l},n)}function aD(e,t){const n=function(e,t){var n,r,i,a=t.config,o=a.style,s=a.axis,u="band"===t.scaleType(e.scale)&&a.axisBand,l=e.orient;if(ek(l)){const e=eD([a.axisX,a.axisY]),t=eD([a.axisTop,a.axisBottom,a.axisLeft,a.axisRight]);for(i of(n={},e))n[i]=qw(l,Zw(i,a.axisX,s,o),Zw(i,a.axisY,s,o));for(i of(r={},t))r[i]=Xw(l.signal,Zw(i,a.axisTop,s,o),Zw(i,a.axisBottom,s,o),Zw(i,a.axisLeft,s,o),Zw(i,a.axisRight,s,o))}else n=l===iA||l===sA?a.axisX:a.axisY,r=a["axis"+l[0].toUpperCase()+l.slice(1)];return n||r||u?we({},s,n,r,u):s}(e,t),r=e.encode||{},i=r.axis||{},a=i.name||void 0,o=i.interactive,s=i.style,u=TA(e,n),l=function(e){const t=e("tickBand");let n,r,i=e("tickOffset");return t?t.signal?(n={signal:`(${t.signal}) === 'extent' ? 1 : 0.5`},r={signal:`(${t.signal}) === 'extent'`},I(i)||(i={signal:`(${t.signal}) === 'extent' ? 0 : ${i}`})):"extent"===t?(n=1,r=!0,i=0):(n=.5,r=!1):(n=e("bandPosition"),r=e("tickExtra")),{extra:r,band:n,offset:i}}(u),c={scale:e.scale,ticks:!!u("ticks"),labels:!!u("labels"),grid:!!u("grid"),domain:!!u("domain"),title:null!=e.title},d=H_(t.add(yk({},[c]))),f=H_(t.add(mk({scale:t.scaleRef(e.scale),extra:t.property(l.extra),count:t.objectProperty(e.tickCount),values:t.objectProperty(e.values),minstep:t.property(e.tickMinStep),formatType:t.property(e.formatType),formatSpecifier:t.property(e.format)}))),h=[];let p;return c.grid&&h.push(nD(e,n,r.grid,f,l)),c.ticks&&(p=u("tickSize"),h.push(function(e,t,n,r,i,a){const o=TA(e,t),s=e.orient,u=Tw(s,-1,1);let l,c,d;const f={enter:l={opacity:FA},update:d={opacity:MA},exit:c={opacity:FA}};s_(f,{stroke:o("tickColor"),strokeCap:o("tickCap"),strokeDash:o("tickDash"),strokeDashOffset:o("tickDashOffset"),strokeOpacity:o("tickOpacity"),strokeWidth:o("tickWidth")});const h=a_(i);h.mult=u;const p={scale:e.scale,field:yA,band:a.band,extra:a.extra,offset:a.offset,round:o("tickRound")};return d.y=l.y=qw(s,FA,p),d.y2=l.y2=qw(s,h),c.x=qw(s,p),d.x=l.x=Lw(s,FA,p),d.x2=l.x2=Lw(s,h),c.y=Lw(s,p),UA({type:OA,role:y_,key:yA,from:r,encode:f},n)}(e,n,r.ticks,f,p,l))),c.labels&&(p=c.ticks?p:0,h.push(function(e,t,n,r,i,a){const o=TA(e,t),s=e.orient,u=e.scale,l=Tw(s,-1,1),c=rk(o("labelFlush")),d=rk(o("labelFlushOffset")),f=o("labelAlign"),h=o("labelBaseline");let p,m=0===c||!!c;const g=a_(i);g.mult=l,g.offset=a_(o("labelPadding")||0),g.offset.mult=l;const y={scale:u,field:yA,band:.5,offset:PA(a.offset,o("labelOffset"))},v=qw(s,m?rD(u,c,'"left"','"right"','"center"'):{value:"center"},Pw(s,"left","right")),b=qw(s,Nw(s,"bottom","top"),m?rD(u,c,'"top"','"bottom"','"middle"'):{value:"middle"}),x=rD(u,c,`-(${d})`,d,0);m=m&&d;const _={opacity:FA,x:qw(s,y,g),y:Lw(s,y,g)},k={enter:_,update:p={opacity:MA,text:{field:hA},x:_.x,y:_.y,align:v,baseline:b},exit:{opacity:FA,x:_.x,y:_.y}};s_(k,{dx:!f&&m?qw(s,x):null,dy:!h&&m?Lw(s,x):null}),s_(k,{angle:o("labelAngle"),fill:o("labelColor"),fillOpacity:o("labelOpacity"),font:o("labelFont"),fontSize:o("labelFontSize"),fontWeight:o("labelFontWeight"),fontStyle:o("labelFontStyle"),limit:o("labelLimit"),lineHeight:o("labelLineHeight")},{align:f,baseline:h});const A=o("labelBound");let w=o("labelOverlap");return w=w||A?{separation:o("labelSeparation"),method:w,order:"datum.index",bound:A?{scale:u,orient:s,tolerance:A}:null}:void 0,p.align!==v&&(p.align=Kw(p.align,v)),p.baseline!==b&&(p.baseline=Kw(p.baseline,b)),UA({type:zA,role:g_,style:vA,key:yA,from:r,encode:k,overlap:w},n)}(e,n,r.labels,f,p,l))),c.domain&&h.push(function(e,t,n,r){const i=TA(e,t),a=e.orient;let o,s;const u={enter:o={opacity:FA},update:s={opacity:MA},exit:{opacity:FA}};s_(u,{stroke:i("domainColor"),strokeCap:i("domainCap"),strokeDash:i("domainDash"),strokeDashOffset:i("domainDashOffset"),strokeWidth:i("domainWidth"),strokeOpacity:i("domainOpacity")});const l=tD(e,0),c=tD(e,1);return o.x=s.x=qw(a,l,FA),o.x2=s.x2=qw(a,c),o.y=s.y=Lw(a,l,FA),o.y2=s.y2=Lw(a,c),UA({type:OA,role:p_,from:r,encode:u},n)}(e,n,r.domain,d)),c.title&&h.push(iD(e,n,r.title,d)),Dw($A({role:h_,from:d,encode:u_(oD(u,e),i,CA),marks:h,aria:u("aria"),description:u("description"),zindex:u("zindex"),name:a,interactive:o,style:s}),t)}function oD(e,t){const n={enter:{},update:{}};return s_(n,{orient:e("orient"),offset:e("offset")||0,position:nk(t.position,0),titlePadding:e("titlePadding"),minExtent:e("minExtent"),maxExtent:e("maxExtent"),range:{signal:`abs(span(range("${t.scale}")))`},translate:e("translate"),format:t.format,formatType:t.formatType}),n}function sD(e,t,n){const r=he(e.signals),i=he(e.scales);return n||r.forEach((e=>j_(e,t))),he(e.projections).forEach((e=>function(e,t){const n=t.config.projection||{},r={};for(const n in e)"name"!==n&&(r[n]=rA(e[n],n,t));for(const e in n)null==r[e]&&(r[e]=rA(n[e],e,t));t.addProjection(e.name,r)}(e,t))),i.forEach((e=>function(e,t){const n=e.type||"linear";Lo(n)||E("Unrecognized scale type: "+Ve(n)),t.addScale(e.name,{type:n,domain:void 0})}(e,t))),he(e.data).forEach((e=>Ow(e,t))),i.forEach((e=>Wk(e,t))),(n||r).forEach((e=>function(e,t){const n=t.getSignal(e.name);let r=e.update;e.init&&(r?E("Signals can not include both init and update expressions."):(r=e.init,n.initonly=!0)),r&&(r=Sb(r,t),n.update=r.$expr,n.params=r.$params),e.on&&e.on.forEach((e=>dk(e,t,n.id)))}(e,t))),he(e.axes).forEach((e=>aD(e,t))),he(e.marks).forEach((e=>Dw(e,t))),he(e.legends).forEach((e=>Ew(e,t))),e.title&&Sw(e.title,t),t.parseLambdas(),t}const uD=e=>u_({enter:{x:{value:0},y:{value:0}},update:{width:{signal:"width"},height:{signal:"height"}}},e);function lD(e,t){const n=t.config,r=H_(t.root=t.add(G_())),i=function(e,t){const n=n=>nk(e[n],t[n]),r=[cD("background",n("background")),cD("autosize",t_(n("autosize"))),cD("padding",i_(n("padding"))),cD("width",n("width")||0),cD("height",n("height")||0)],i=r.reduce(((e,t)=>(e[t.name]=t,e)),{}),a={};return he(e.signals).forEach((e=>{Fe(i,e.name)?e=we(i[e.name],e):r.push(e),a[e.name]=e})),he(t.signals).forEach((e=>{Fe(a,e.name)||Fe(i,e.name)||r.push(e)})),r}(e,n);i.forEach((e=>j_(e,t))),t.description=e.description||n.description,t.eventConfig=n.events,t.legends=t.objectProperty(n.legend&&n.legend.layout),t.locale=n.locale;const a=t.add(yk()),o=t.add(xk(T_(uD(e.encode),SA,d_,e.style,t,{pulse:H_(a)}))),s=t.add(Pk({layout:t.objectProperty(e.layout),legends:t.legends,autosize:t.signalRef("autosize"),mark:r,pulse:H_(o)}));t.operators.pop(),t.pushState(H_(o),H_(s),null),sD(e,t,i),t.operators.push(s);let u=t.add(gk({mark:r,pulse:H_(s)}));return u=t.add(Tk({pulse:H_(u)})),u=t.add(Lk({pulse:H_(u)})),t.addData("root",new xw(t,a,a,u)),t}function cD(e,t){return t&&t.signal?{name:e,update:t.signal}:{name:e,value:t}}function dD(e,t){this.config=e||{},this.options=t||{},this.bindings=[],this.field={},this.signals={},this.lambdas={},this.scales={},this.events={},this.data={},this.streams=[],this.updates=[],this.operators=[],this.eventConfig=null,this.locale=null,this._id=0,this._subid=0,this._nextsub=[0],this._parent=[],this._encode=[],this._lookup=[],this._markpath=[]}function fD(e){this.config=e.config,this.options=e.options,this.legends=e.legends,this.field=Object.create(e.field),this.signals=Object.create(e.signals),this.lambdas=Object.create(e.lambdas),this.scales=Object.create(e.scales),this.events=Object.create(e.events),this.data=Object.create(e.data),this.streams=[],this.updates=[],this.operators=[],this._id=0,this._subid=++e._nextsub[0],this._nextsub=e._nextsub,this._parent=e._parent.slice(),this._encode=e._encode.slice(),this._lookup=e._lookup.slice(),this._markpath=e._markpath}function hD(e){return(j(e)?pD:mD)(e)}function pD(e){const t=e.length;let n="[";for(let r=0;r0?",":"")+(I(t)?t.signal||hD(t):Ve(t))}return n+"]"}function mD(e){let t,n,r="{",i=0;for(t in e)n=e[t],r+=(++i>1?",":"")+Ve(t)+":"+(I(n)?n.signal||hD(n):Ve(n));return r+"}"}dD.prototype=fD.prototype={parse(e){return sD(e,this)},fork(){return new fD(this)},isSubscope(){return this._subid>0},toRuntime(){return this.finish(),{description:this.description,operators:this.operators,streams:this.streams,updates:this.updates,bindings:this.bindings,eventConfig:this.eventConfig,locale:this.locale}},id(){return(this._subid?this._subid+":":0)+this._id++},add(e){return this.operators.push(e),e.id=this.id(),e.refs&&(e.refs.forEach((t=>{t.$ref=e.id})),e.refs=null),e},proxy(e){const t=e instanceof I_?H_(e):e;return this.add(zk({value:t}))},addStream(e){return this.streams.push(e),e.id=this.id(),e},addUpdate(e){return this.updates.push(e),e},finish(){let e,t;for(e in this.root&&(this.root.root=!0),this.signals)this.signals[e].signal=e;for(e in this.scales)this.scales[e].scale=e;function n(e,t,n){let r,i;e&&(r=e.data||(e.data={}),i=r[t]||(r[t]=[]),i.push(n))}for(e in this.data){t=this.data[e],n(t.input,e,"input"),n(t.output,e,"output"),n(t.values,e,"values");for(const r in t.index)n(t.index[r],e,"index:"+r)}return this},pushState(e,t,n){this._encode.push(H_(this.add(Lk({pulse:e})))),this._parent.push(t),this._lookup.push(n?H_(this.proxy(n)):null),this._markpath.push(-1)},popState(){this._encode.pop(),this._parent.pop(),this._lookup.pop(),this._markpath.pop()},parent(){return Y(this._parent)},encode(){return Y(this._encode)},lookup(){return Y(this._lookup)},markpath(){const e=this._markpath;return++e[e.length-1]},fieldRef(e,t){if(Ne(e))return V_(e,t);e.signal||E("Unsupported field reference: "+Ve(e));const n=e.signal;let r=this.field[n];if(!r){const e={name:this.signalRef(n)};t&&(e.as=t),this.field[n]=r=H_(this.add(Ak(e)))}return r},compareRef(e){let t=!1;const n=e=>ek(e)?(t=!0,this.signalRef(e.signal)):function(e){return e&&e.expr}(e)?(t=!0,this.exprRef(e.expr)):e,r=he(e.field).map(n),i=he(e.order).map(n);return t?H_(this.add(vk({fields:r,orders:i}))):X_(r,i)},keyRef(e,t){let n=!1;const r=this.signals;return e=he(e).map((e=>ek(e)?(n=!0,H_(r[e.signal])):e)),n?H_(this.add(wk({fields:e,flat:t}))):function(e,t){const n={$key:e};return t&&(n.$flat=!0),n}(e,t)},sortRef(e){if(!e)return e;const t=Q_(e.op,e.field),n=e.order||"ascending";return n.signal?H_(this.add(vk({fields:t,orders:this.signalRef(n.signal)}))):X_(t,n)},event(e,t){const n=e+":"+t;if(!this.events[n]){const r=this.id();this.streams.push({id:r,source:e,type:t}),this.events[n]=r}return this.events[n]},hasOwnSignal(e){return Fe(this.signals,e)},addSignal(e,t){this.hasOwnSignal(e)&&E("Duplicate signal name: "+Ve(e));const n=t instanceof I_?t:this.add(G_(t));return this.signals[e]=n},getSignal(e){return this.signals[e]||E("Unrecognized signal name: "+Ve(e)),this.signals[e]},signalRef(e){return this.signals[e]?H_(this.signals[e]):(Fe(this.lambdas,e)||(this.lambdas[e]=this.add(G_(null))),H_(this.lambdas[e]))},parseLambdas(){const e=Object.keys(this.lambdas);for(let t=0,n=e.length;tr+Math.floor(a*e.random()),pdf:e=>e===Math.floor(e)&&e>=r&&e=i?1:(t-r+1)/a},icdf:e=>e>=0&&e<=1?r-1+Math.floor(e*a):NaN};return o.min(t).max(n)},e.randomKDE=ni,e.randomLCG=function(e){return function(){return(e=(1103515245*e+12345)%2147483647)/2147483647}},e.randomLogNormal=si,e.randomMixture=ui,e.randomNormal=ti,e.randomUniform=hi,e.read=Qn,e.regressionConstant=pi,e.regressionExp=_i,e.regressionLinear=bi,e.regressionLoess=Ei,e.regressionLog=xi,e.regressionPoly=wi,e.regressionPow=ki,e.regressionQuad=Ai,e.renderModule=af,e.repeat=We,e.resetDefaultLocale=function(){return mn(),xn(),Dn()},e.resetSVGClipId=Au,e.resetSVGDefIds=function(){Au(),ws=0},e.responseType=Jn,e.runtimeContext=Nb,e.sampleCurve=Si,e.sampleLogNormal=ri,e.sampleNormal=Qr,e.sampleUniform=li,e.scale=qo,e.sceneEqual=hf,e.sceneFromJSON=Fc,e.scenePickVisit=yl,e.sceneToJSON=Cc,e.sceneVisit=gl,e.sceneZOrder=ml,e.scheme=ts,e.serializeXML=Cd,e.setHybridRendererOptions=function(e){Xd.svgMarkTypes=e.svgMarkTypes??["text"],Xd.svgOnTop=e.svgOnTop??!0,Xd.debug=e.debug??!1},e.setRandom=function(t){e.random=t},e.span=He,e.splitAccessPath=C,e.stringValue=Ve,e.textMetrics=nc,e.timeBin=cn,e.timeFloor=$t,e.timeFormatLocale=kn,e.timeInterval=Ut,e.timeOffset=Wt,e.timeSequence=Vt,e.timeUnitSpecifier=gt,e.timeUnits=pt,e.toBoolean=Ye,e.toDate=Je,e.toNumber=X,e.toSet=Ke,e.toString=Qe,e.transform=Pr,e.transforms=Lr,e.truncate=Ze,e.truthy=R,e.tupleid=ir,e.typeParsers=Ln,e.utcFloor=Lt,e.utcInterval=jt,e.utcOffset=Gt,e.utcSequence=Yt,e.utcdayofyear=Dt,e.utcquarter=fe,e.utcweek=Et,e.version="5.26.0",e.visitArray=et,e.week=xt,e.writeConfig=H,e.zero=B,e.zoomLinear=se,e.zoomLog=ue,e.zoomPow=le,e.zoomSymlog=ce})); //# sourceMappingURL=vega-core.min.js.map diff --git a/docs/vega-core.min.js.map b/docs/vega-core.min.js.map index 77fdd4115c..bc767c2c67 100644 --- a/docs/vega-core.min.js.map +++ b/docs/vega-core.min.js.map @@ -1 +1 @@ -{"version":3,"file":"vega-core.min.js","sources":["../../vega-util/build/vega-util.module.js","../../vega-time/build/vega-time.module.js","../../vega-format/build/vega-format.module.js","../../vega-loader/build/vega-loader.browser.module.js","../../vega-dataflow/build/vega-dataflow.module.js","../../vega-statistics/build/vega-statistics.module.js","../../vega-transforms/build/vega-transforms.module.js","../../vega-canvas/build/vega-canvas.browser.module.js","../../vega-scale/build/vega-scale.module.js","../../vega-scenegraph/build/vega-scenegraph.module.js","../../vega-view-transforms/build/vega-view-transforms.module.js","../../vega-encode/build/vega-encode.module.js","../../../node_modules/d3-geo-projection/src/math.js","../../../node_modules/d3-geo-projection/src/mollweide.js","../../vega-projection/build/vega-projection.module.js","../../vega-geo/build/vega-geo.module.js","../../vega-force/build/vega-force.module.js","../../vega-hierarchy/build/vega-hierarchy.module.js","../../vega-label/build/vega-label.module.js","../../vega-regression/build/vega-regression.module.js","../../vega-voronoi/build/vega-voronoi.module.js","../../vega-wordcloud/build/vega-wordcloud.module.js","../../vega-crossfilter/build/vega-crossfilter.module.js","../../vega-expression/build/vega-expression.module.js","../../vega-selections/build/vega-selection.module.js","../../vega-functions/build/vega-functions.module.js","../../vega-runtime/build/vega-runtime.module.js","../../vega-view/build/vega-view.module.js","../../vega-event-selector/build/vega-event-selector.module.js","../../vega-parser/build/vega-parser.module.js","../index.js"],"sourcesContent":["function accessor (fn, fields, name) {\n fn.fields = fields || [];\n fn.fname = name;\n return fn;\n}\nfunction accessorName(fn) {\n return fn == null ? null : fn.fname;\n}\nfunction accessorFields(fn) {\n return fn == null ? null : fn.fields;\n}\n\nfunction getter (path) {\n return path.length === 1 ? get1(path[0]) : getN(path);\n}\nconst get1 = field => function (obj) {\n return obj[field];\n};\nconst getN = path => {\n const len = path.length;\n return function (obj) {\n for (let i = 0; i < len; ++i) {\n obj = obj[path[i]];\n }\n return obj;\n };\n};\n\nfunction error (message) {\n throw Error(message);\n}\n\nfunction splitAccessPath (p) {\n const path = [],\n n = p.length;\n let q = null,\n b = 0,\n s = '',\n i,\n j,\n c;\n p = p + '';\n function push() {\n path.push(s + p.substring(i, j));\n s = '';\n i = j + 1;\n }\n for (i = j = 0; j < n; ++j) {\n c = p[j];\n if (c === '\\\\') {\n s += p.substring(i, j++);\n i = j;\n } else if (c === q) {\n push();\n q = null;\n b = -1;\n } else if (q) {\n continue;\n } else if (i === b && c === '\"') {\n i = j + 1;\n q = c;\n } else if (i === b && c === \"'\") {\n i = j + 1;\n q = c;\n } else if (c === '.' && !b) {\n if (j > i) {\n push();\n } else {\n i = j + 1;\n }\n } else if (c === '[') {\n if (j > i) push();\n b = i = j + 1;\n } else if (c === ']') {\n if (!b) error('Access path missing open bracket: ' + p);\n if (b > 0) push();\n b = 0;\n i = j + 1;\n }\n }\n if (b) error('Access path missing closing bracket: ' + p);\n if (q) error('Access path missing closing quote: ' + p);\n if (j > i) {\n j++;\n push();\n }\n return path;\n}\n\nfunction field (field, name, opt) {\n const path = splitAccessPath(field);\n field = path.length === 1 ? path[0] : field;\n return accessor((opt && opt.get || getter)(path), [field], name || field);\n}\n\nconst id = field('id');\nconst identity = accessor(_ => _, [], 'identity');\nconst zero = accessor(() => 0, [], 'zero');\nconst one = accessor(() => 1, [], 'one');\nconst truthy = accessor(() => true, [], 'true');\nconst falsy = accessor(() => false, [], 'false');\n\nfunction log$1(method, level, input) {\n const args = [level].concat([].slice.call(input));\n console[method].apply(console, args); // eslint-disable-line no-console\n}\n\nconst None = 0;\nconst Error$1 = 1;\nconst Warn = 2;\nconst Info = 3;\nconst Debug = 4;\nfunction logger (_, method) {\n let handler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : log$1;\n let level = _ || None;\n return {\n level(_) {\n if (arguments.length) {\n level = +_;\n return this;\n } else {\n return level;\n }\n },\n error() {\n if (level >= Error$1) handler(method || 'error', 'ERROR', arguments);\n return this;\n },\n warn() {\n if (level >= Warn) handler(method || 'warn', 'WARN', arguments);\n return this;\n },\n info() {\n if (level >= Info) handler(method || 'log', 'INFO', arguments);\n return this;\n },\n debug() {\n if (level >= Debug) handler(method || 'log', 'DEBUG', arguments);\n return this;\n }\n };\n}\n\nvar isArray = Array.isArray;\n\nfunction isObject (_) {\n return _ === Object(_);\n}\n\nconst isLegalKey = key => key !== '__proto__';\nfunction mergeConfig() {\n for (var _len = arguments.length, configs = new Array(_len), _key = 0; _key < _len; _key++) {\n configs[_key] = arguments[_key];\n }\n return configs.reduce((out, source) => {\n for (const key in source) {\n if (key === 'signals') {\n // for signals, we merge the signals arrays\n // source signals take precedence over\n // existing signals with the same name\n out.signals = mergeNamed(out.signals, source.signals);\n } else {\n // otherwise, merge objects subject to recursion constraints\n // for legend block, recurse for the layout entry only\n // for style block, recurse for all properties\n // otherwise, no recursion: objects overwrite, no merging\n const r = key === 'legend' ? {\n layout: 1\n } : key === 'style' ? true : null;\n writeConfig(out, key, source[key], r);\n }\n }\n return out;\n }, {});\n}\nfunction writeConfig(output, key, value, recurse) {\n if (!isLegalKey(key)) return;\n let k, o;\n if (isObject(value) && !isArray(value)) {\n o = isObject(output[key]) ? output[key] : output[key] = {};\n for (k in value) {\n if (recurse && (recurse === true || recurse[k])) {\n writeConfig(o, k, value[k]);\n } else if (isLegalKey(k)) {\n o[k] = value[k];\n }\n }\n } else {\n output[key] = value;\n }\n}\nfunction mergeNamed(a, b) {\n if (a == null) return b;\n const map = {},\n out = [];\n function add(_) {\n if (!map[_.name]) {\n map[_.name] = 1;\n out.push(_);\n }\n }\n b.forEach(add);\n a.forEach(add);\n return out;\n}\n\nfunction peek (array) {\n return array[array.length - 1];\n}\n\nfunction toNumber (_) {\n return _ == null || _ === '' ? null : +_;\n}\n\nconst exp = sign => x => sign * Math.exp(x);\nconst log = sign => x => Math.log(sign * x);\nconst symlog = c => x => Math.sign(x) * Math.log1p(Math.abs(x / c));\nconst symexp = c => x => Math.sign(x) * Math.expm1(Math.abs(x)) * c;\nconst pow = exponent => x => x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\nfunction pan(domain, delta, lift, ground) {\n const d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n dd = (d1 - d0) * delta;\n return [ground(d0 - dd), ground(d1 - dd)];\n}\nfunction panLinear(domain, delta) {\n return pan(domain, delta, toNumber, identity);\n}\nfunction panLog(domain, delta) {\n var sign = Math.sign(domain[0]);\n return pan(domain, delta, log(sign), exp(sign));\n}\nfunction panPow(domain, delta, exponent) {\n return pan(domain, delta, pow(exponent), pow(1 / exponent));\n}\nfunction panSymlog(domain, delta, constant) {\n return pan(domain, delta, symlog(constant), symexp(constant));\n}\nfunction zoom(domain, anchor, scale, lift, ground) {\n const d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n return [ground(da + (d0 - da) * scale), ground(da + (d1 - da) * scale)];\n}\nfunction zoomLinear(domain, anchor, scale) {\n return zoom(domain, anchor, scale, toNumber, identity);\n}\nfunction zoomLog(domain, anchor, scale) {\n const sign = Math.sign(domain[0]);\n return zoom(domain, anchor, scale, log(sign), exp(sign));\n}\nfunction zoomPow(domain, anchor, scale, exponent) {\n return zoom(domain, anchor, scale, pow(exponent), pow(1 / exponent));\n}\nfunction zoomSymlog(domain, anchor, scale, constant) {\n return zoom(domain, anchor, scale, symlog(constant), symexp(constant));\n}\n\nfunction quarter(date) {\n return 1 + ~~(new Date(date).getMonth() / 3);\n}\nfunction utcquarter(date) {\n return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n\nfunction array (_) {\n return _ != null ? isArray(_) ? _ : [_] : [];\n}\n\n/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nfunction clampRange (range, min, max) {\n let lo = range[0],\n hi = range[1],\n span;\n if (hi < lo) {\n span = hi;\n hi = lo;\n lo = span;\n }\n span = hi - lo;\n return span >= max - min ? [min, max] : [lo = Math.min(Math.max(lo, min), max - span), lo + span];\n}\n\nfunction isFunction (_) {\n return typeof _ === 'function';\n}\n\nconst DESCENDING = 'descending';\nfunction compare (fields, orders, opt) {\n opt = opt || {};\n orders = array(orders) || [];\n const ord = [],\n get = [],\n fmap = {},\n gen = opt.comparator || comparator;\n array(fields).forEach((f, i) => {\n if (f == null) return;\n ord.push(orders[i] === DESCENDING ? -1 : 1);\n get.push(f = isFunction(f) ? f : field(f, null, opt));\n (accessorFields(f) || []).forEach(_ => fmap[_] = 1);\n });\n return get.length === 0 ? null : accessor(gen(get, ord), Object.keys(fmap));\n}\nconst ascending = (u, v) => (u < v || u == null) && v != null ? -1 : (u > v || v == null) && u != null ? 1 : (v = v instanceof Date ? +v : v, u = u instanceof Date ? +u : u) !== u && v === v ? -1 : v !== v && u === u ? 1 : 0;\nconst comparator = (fields, orders) => fields.length === 1 ? compare1(fields[0], orders[0]) : compareN(fields, orders, fields.length);\nconst compare1 = (field, order) => function (a, b) {\n return ascending(field(a), field(b)) * order;\n};\nconst compareN = (fields, orders, n) => {\n orders.push(0); // pad zero for convenient lookup\n return function (a, b) {\n let f,\n c = 0,\n i = -1;\n while (c === 0 && ++i < n) {\n f = fields[i];\n c = ascending(f(a), f(b));\n }\n return c * orders[i];\n };\n};\n\nfunction constant (_) {\n return isFunction(_) ? _ : () => _;\n}\n\nfunction debounce (delay, handler) {\n let tid;\n return e => {\n if (tid) clearTimeout(tid);\n tid = setTimeout(() => (handler(e), tid = null), delay);\n };\n}\n\nfunction extend (_) {\n for (let x, k, i = 1, len = arguments.length; i < len; ++i) {\n x = arguments[i];\n for (k in x) {\n _[k] = x[k];\n }\n }\n return _;\n}\n\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nfunction extent (array, f) {\n let i = 0,\n n,\n v,\n min,\n max;\n if (array && (n = array.length)) {\n if (f == null) {\n // find first valid value\n for (v = array[i]; i < n && (v == null || v !== v); v = array[++i]);\n min = max = v;\n\n // visit all other values\n for (; i < n; ++i) {\n v = array[i];\n // skip null/undefined; NaN will fail all comparisons\n if (v != null) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n } else {\n // find first valid value\n for (v = f(array[i]); i < n && (v == null || v !== v); v = f(array[++i]));\n min = max = v;\n\n // visit all other values\n for (; i < n; ++i) {\n v = f(array[i]);\n // skip null/undefined; NaN will fail all comparisons\n if (v != null) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n }\n }\n return [min, max];\n}\n\nfunction extentIndex (array, f) {\n const n = array.length;\n let i = -1,\n a,\n b,\n c,\n u,\n v;\n if (f == null) {\n while (++i < n) {\n b = array[i];\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n if (i === n) return [-1, -1];\n u = v = i;\n while (++i < n) {\n b = array[i];\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n } else {\n while (++i < n) {\n b = f(array[i], i, array);\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n if (i === n) return [-1, -1];\n u = v = i;\n while (++i < n) {\n b = f(array[i], i, array);\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n }\n return [u, v];\n}\n\nconst hop = Object.prototype.hasOwnProperty;\nfunction has (object, property) {\n return hop.call(object, property);\n}\n\nconst NULL = {};\nfunction fastmap (input) {\n let obj = {},\n test;\n function has$1(key) {\n return has(obj, key) && obj[key] !== NULL;\n }\n const map = {\n size: 0,\n empty: 0,\n object: obj,\n has: has$1,\n get(key) {\n return has$1(key) ? obj[key] : undefined;\n },\n set(key, value) {\n if (!has$1(key)) {\n ++map.size;\n if (obj[key] === NULL) --map.empty;\n }\n obj[key] = value;\n return this;\n },\n delete(key) {\n if (has$1(key)) {\n --map.size;\n ++map.empty;\n obj[key] = NULL;\n }\n return this;\n },\n clear() {\n map.size = map.empty = 0;\n map.object = obj = {};\n },\n test(_) {\n if (arguments.length) {\n test = _;\n return map;\n } else {\n return test;\n }\n },\n clean() {\n const next = {};\n let size = 0;\n for (const key in obj) {\n const value = obj[key];\n if (value !== NULL && (!test || !test(value))) {\n next[key] = value;\n ++size;\n }\n }\n map.size = size;\n map.empty = 0;\n map.object = obj = next;\n }\n };\n if (input) Object.keys(input).forEach(key => {\n map.set(key, input[key]);\n });\n return map;\n}\n\nfunction flush (range, value, threshold, left, right, center) {\n if (!threshold && threshold !== 0) return center;\n const t = +threshold;\n let a = range[0],\n b = peek(range),\n l;\n\n // swap endpoints if range is reversed\n if (b < a) {\n l = a;\n a = b;\n b = l;\n }\n\n // compare value to endpoints\n l = Math.abs(value - a);\n const r = Math.abs(b - value);\n\n // adjust if value is within threshold distance of endpoint\n return l < r && l <= t ? left : r <= t ? right : center;\n}\n\nfunction inherits (child, parent, members) {\n const proto = child.prototype = Object.create(parent.prototype);\n Object.defineProperty(proto, 'constructor', {\n value: child,\n writable: true,\n enumerable: true,\n configurable: true\n });\n return extend(proto, members);\n}\n\n/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nfunction inrange (value, range, left, right) {\n let r0 = range[0],\n r1 = range[range.length - 1],\n t;\n if (r0 > r1) {\n t = r0;\n r0 = r1;\n r1 = t;\n }\n left = left === undefined || left;\n right = right === undefined || right;\n return (left ? r0 <= value : r0 < value) && (right ? value <= r1 : value < r1);\n}\n\nfunction isBoolean (_) {\n return typeof _ === 'boolean';\n}\n\nfunction isDate (_) {\n return Object.prototype.toString.call(_) === '[object Date]';\n}\n\nfunction isIterable (_) {\n return _ && isFunction(_[Symbol.iterator]);\n}\n\nfunction isNumber (_) {\n return typeof _ === 'number';\n}\n\nfunction isRegExp (_) {\n return Object.prototype.toString.call(_) === '[object RegExp]';\n}\n\nfunction isString (_) {\n return typeof _ === 'string';\n}\n\nfunction key (fields, flat, opt) {\n if (fields) {\n fields = flat ? array(fields).map(f => f.replace(/\\\\(.)/g, '$1')) : array(fields);\n }\n const len = fields && fields.length,\n gen = opt && opt.get || getter,\n map = f => gen(flat ? [f] : splitAccessPath(f));\n let fn;\n if (!len) {\n fn = function () {\n return '';\n };\n } else if (len === 1) {\n const get = map(fields[0]);\n fn = function (_) {\n return '' + get(_);\n };\n } else {\n const get = fields.map(map);\n fn = function (_) {\n let s = '' + get[0](_),\n i = 0;\n while (++i < len) s += '|' + get[i](_);\n return s;\n };\n }\n return accessor(fn, fields, 'key');\n}\n\nfunction lerp (array, frac) {\n const lo = array[0],\n hi = peek(array),\n f = +frac;\n return !f ? lo : f === 1 ? hi : lo + f * (hi - lo);\n}\n\nconst DEFAULT_MAX_SIZE = 10000;\n\n// adapted from https://github.com/dominictarr/hashlru/ (MIT License)\nfunction lruCache (maxsize) {\n maxsize = +maxsize || DEFAULT_MAX_SIZE;\n let curr, prev, size;\n const clear = () => {\n curr = {};\n prev = {};\n size = 0;\n };\n const update = (key, value) => {\n if (++size > maxsize) {\n prev = curr;\n curr = {};\n size = 1;\n }\n return curr[key] = value;\n };\n clear();\n return {\n clear,\n has: key => has(curr, key) || has(prev, key),\n get: key => has(curr, key) ? curr[key] : has(prev, key) ? update(key, prev[key]) : undefined,\n set: (key, value) => has(curr, key) ? curr[key] = value : update(key, value)\n };\n}\n\nfunction merge (compare, array0, array1, output) {\n const n0 = array0.length,\n n1 = array1.length;\n if (!n1) return array0;\n if (!n0) return array1;\n const merged = output || new array0.constructor(n0 + n1);\n let i0 = 0,\n i1 = 0,\n i = 0;\n for (; i0 < n0 && i1 < n1; ++i) {\n merged[i] = compare(array0[i0], array1[i1]) > 0 ? array1[i1++] : array0[i0++];\n }\n for (; i0 < n0; ++i0, ++i) {\n merged[i] = array0[i0];\n }\n for (; i1 < n1; ++i1, ++i) {\n merged[i] = array1[i1];\n }\n return merged;\n}\n\nfunction repeat (str, reps) {\n let s = '';\n while (--reps >= 0) s += str;\n return s;\n}\n\nfunction pad (str, length, padchar, align) {\n const c = padchar || ' ',\n s = str + '',\n n = length - s.length;\n return n <= 0 ? s : align === 'left' ? repeat(c, n) + s : align === 'center' ? repeat(c, ~~(n / 2)) + s + repeat(c, Math.ceil(n / 2)) : s + repeat(c, n);\n}\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\nfunction span (array) {\n return array && peek(array) - array[0] || 0;\n}\n\nfunction $(x) {\n return isArray(x) ? '[' + x.map($) + ']' : isObject(x) || isString(x) ?\n // Output valid JSON and JS source strings.\n // See http://timelessrepo.com/json-isnt-a-javascript-subset\n JSON.stringify(x).replace('\\u2028', '\\\\u2028').replace('\\u2029', '\\\\u2029') : x;\n}\n\nfunction toBoolean (_) {\n return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n}\n\nconst defaultParser = _ => isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\nfunction toDate (_, parser) {\n parser = parser || defaultParser;\n return _ == null || _ === '' ? null : parser(_);\n}\n\nfunction toString (_) {\n return _ == null || _ === '' ? null : _ + '';\n}\n\nfunction toSet (_) {\n const s = {},\n n = _.length;\n for (let i = 0; i < n; ++i) s[_[i]] = true;\n return s;\n}\n\nfunction truncate (str, length, align, ellipsis) {\n const e = ellipsis != null ? ellipsis : '\\u2026',\n s = str + '',\n n = s.length,\n l = Math.max(0, length - e.length);\n return n <= length ? s : align === 'left' ? e + s.slice(n - l) : align === 'center' ? s.slice(0, Math.ceil(l / 2)) + e + s.slice(n - ~~(l / 2)) : s.slice(0, l) + e;\n}\n\nfunction visitArray (array, filter, visitor) {\n if (array) {\n if (filter) {\n const n = array.length;\n for (let i = 0; i < n; ++i) {\n const t = filter(array[i]);\n if (t) visitor(t, i, array);\n }\n } else {\n array.forEach(visitor);\n }\n }\n}\n\nexport { Debug, Error$1 as Error, Info, None, Warn, accessor, accessorFields, accessorName, array, ascending, clampRange, compare, constant, debounce, error, extend, extent, extentIndex, falsy, fastmap, field, flush, has as hasOwnProperty, id, identity, inherits, inrange, isArray, isBoolean, isDate, isFunction, isIterable, isNumber, isObject, isRegExp, isString, key, lerp, logger, lruCache, merge, mergeConfig, one, pad, panLinear, panLog, panPow, panSymlog, peek, quarter, repeat, span, splitAccessPath, $ as stringValue, toBoolean, toDate, toNumber, toSet, toString, truncate, truthy, utcquarter, visitArray, writeConfig, zero, zoomLinear, zoomLog, zoomPow, zoomSymlog };\n","import { array, error, hasOwnProperty, extend, peek, toSet, constant, zero, one, span } from 'vega-util';\nimport { timeDay, timeWeek, utcDay, utcWeek, timeYear, timeMonth, timeHour, timeMinute, timeSecond, timeMillisecond, utcYear, utcMonth, utcHour, utcMinute, utcSecond, utcMillisecond } from 'd3-time';\nimport { bisector, tickStep } from 'd3-array';\n\nconst YEAR = 'year';\nconst QUARTER = 'quarter';\nconst MONTH = 'month';\nconst WEEK = 'week';\nconst DATE = 'date';\nconst DAY = 'day';\nconst DAYOFYEAR = 'dayofyear';\nconst HOURS = 'hours';\nconst MINUTES = 'minutes';\nconst SECONDS = 'seconds';\nconst MILLISECONDS = 'milliseconds';\nconst TIME_UNITS = [YEAR, QUARTER, MONTH, WEEK, DATE, DAY, DAYOFYEAR, HOURS, MINUTES, SECONDS, MILLISECONDS];\nconst UNITS = TIME_UNITS.reduce((o, u, i) => (o[u] = 1 + i, o), {});\nfunction timeUnits(units) {\n const u = array(units).slice(),\n m = {};\n\n // check validity\n if (!u.length) error('Missing time unit.');\n u.forEach(unit => {\n if (hasOwnProperty(UNITS, unit)) {\n m[unit] = 1;\n } else {\n error(`Invalid time unit: ${unit}.`);\n }\n });\n const numTypes = (m[WEEK] || m[DAY] ? 1 : 0) + (m[QUARTER] || m[MONTH] || m[DATE] ? 1 : 0) + (m[DAYOFYEAR] ? 1 : 0);\n if (numTypes > 1) {\n error(`Incompatible time units: ${units}`);\n }\n\n // ensure proper sort order\n u.sort((a, b) => UNITS[a] - UNITS[b]);\n return u;\n}\nconst defaultSpecifiers = {\n [YEAR]: '%Y ',\n [QUARTER]: 'Q%q ',\n [MONTH]: '%b ',\n [DATE]: '%d ',\n [WEEK]: 'W%U ',\n [DAY]: '%a ',\n [DAYOFYEAR]: '%j ',\n [HOURS]: '%H:00',\n [MINUTES]: '00:%M',\n [SECONDS]: ':%S',\n [MILLISECONDS]: '.%L',\n [`${YEAR}-${MONTH}`]: '%Y-%m ',\n [`${YEAR}-${MONTH}-${DATE}`]: '%Y-%m-%d ',\n [`${HOURS}-${MINUTES}`]: '%H:%M'\n};\nfunction timeUnitSpecifier(units, specifiers) {\n const s = extend({}, defaultSpecifiers, specifiers),\n u = timeUnits(units),\n n = u.length;\n let fmt = '',\n start = 0,\n end,\n key;\n for (start = 0; start < n;) {\n for (end = u.length; end > start; --end) {\n key = u.slice(start, end).join('-');\n if (s[key] != null) {\n fmt += s[key];\n start = end;\n break;\n }\n }\n }\n return fmt.trim();\n}\n\nconst t0 = new Date();\nfunction localYear(y) {\n t0.setFullYear(y);\n t0.setMonth(0);\n t0.setDate(1);\n t0.setHours(0, 0, 0, 0);\n return t0;\n}\nfunction dayofyear(d) {\n return localDayOfYear(new Date(d));\n}\nfunction week(d) {\n return localWeekNum(new Date(d));\n}\nfunction localDayOfYear(d) {\n return timeDay.count(localYear(d.getFullYear()) - 1, d);\n}\nfunction localWeekNum(d) {\n return timeWeek.count(localYear(d.getFullYear()) - 1, d);\n}\nfunction localFirst(y) {\n return localYear(y).getDay();\n}\nfunction localDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(-1, m, d, H, M, S, L);\n date.setFullYear(y);\n return date;\n }\n return new Date(y, m, d, H, M, S, L);\n}\nfunction utcdayofyear(d) {\n return utcDayOfYear(new Date(d));\n}\nfunction utcweek(d) {\n return utcWeekNum(new Date(d));\n}\nfunction utcDayOfYear(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcDay.count(y - 1, d);\n}\nfunction utcWeekNum(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcWeek.count(y - 1, d);\n}\nfunction utcFirst(y) {\n t0.setTime(Date.UTC(y, 0, 1));\n return t0.getUTCDay();\n}\nfunction utcDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(Date.UTC(-1, m, d, H, M, S, L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(y, m, d, H, M, S, L));\n}\n\nfunction floor(units, step, get, inv, newDate) {\n const s = step || 1,\n b = peek(units),\n _ = (unit, p, key) => {\n key = key || unit;\n return getUnit(get[key], inv[key], unit === b && s, p);\n };\n const t = new Date(),\n u = toSet(units),\n y = u[YEAR] ? _(YEAR) : constant(2012),\n m = u[MONTH] ? _(MONTH) : u[QUARTER] ? _(QUARTER) : zero,\n d = u[WEEK] && u[DAY] ? _(DAY, 1, WEEK + DAY) : u[WEEK] ? _(WEEK, 1) : u[DAY] ? _(DAY, 1) : u[DATE] ? _(DATE, 1) : u[DAYOFYEAR] ? _(DAYOFYEAR, 1) : one,\n H = u[HOURS] ? _(HOURS) : zero,\n M = u[MINUTES] ? _(MINUTES) : zero,\n S = u[SECONDS] ? _(SECONDS) : zero,\n L = u[MILLISECONDS] ? _(MILLISECONDS) : zero;\n return function (v) {\n t.setTime(+v);\n const year = y(t);\n return newDate(year, m(t), d(t, year), H(t), M(t), S(t), L(t));\n };\n}\nfunction getUnit(f, inv, step, phase) {\n const u = step <= 1 ? f : phase ? (d, y) => phase + step * Math.floor((f(d, y) - phase) / step) : (d, y) => step * Math.floor(f(d, y) / step);\n return inv ? (d, y) => inv(u(d, y), y) : u;\n}\n\n// returns the day of the year based on week number, day of week,\n// and the day of the week for the first day of the year\nfunction weekday(week, day, firstDay) {\n return day + week * 7 - (firstDay + 6) % 7;\n}\n\n// -- LOCAL TIME --\n\nconst localGet = {\n [YEAR]: d => d.getFullYear(),\n [QUARTER]: d => Math.floor(d.getMonth() / 3),\n [MONTH]: d => d.getMonth(),\n [DATE]: d => d.getDate(),\n [HOURS]: d => d.getHours(),\n [MINUTES]: d => d.getMinutes(),\n [SECONDS]: d => d.getSeconds(),\n [MILLISECONDS]: d => d.getMilliseconds(),\n [DAYOFYEAR]: d => localDayOfYear(d),\n [WEEK]: d => localWeekNum(d),\n [WEEK + DAY]: (d, y) => weekday(localWeekNum(d), d.getDay(), localFirst(y)),\n [DAY]: (d, y) => weekday(1, d.getDay(), localFirst(y))\n};\nconst localInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, localFirst(y))\n};\nfunction timeFloor(units, step) {\n return floor(units, step || 1, localGet, localInv, localDate);\n}\n\n// -- UTC TIME --\n\nconst utcGet = {\n [YEAR]: d => d.getUTCFullYear(),\n [QUARTER]: d => Math.floor(d.getUTCMonth() / 3),\n [MONTH]: d => d.getUTCMonth(),\n [DATE]: d => d.getUTCDate(),\n [HOURS]: d => d.getUTCHours(),\n [MINUTES]: d => d.getUTCMinutes(),\n [SECONDS]: d => d.getUTCSeconds(),\n [MILLISECONDS]: d => d.getUTCMilliseconds(),\n [DAYOFYEAR]: d => utcDayOfYear(d),\n [WEEK]: d => utcWeekNum(d),\n [DAY]: (d, y) => weekday(1, d.getUTCDay(), utcFirst(y)),\n [WEEK + DAY]: (d, y) => weekday(utcWeekNum(d), d.getUTCDay(), utcFirst(y))\n};\nconst utcInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, utcFirst(y))\n};\nfunction utcFloor(units, step) {\n return floor(units, step || 1, utcGet, utcInv, utcDate);\n}\n\nconst timeIntervals = {\n [YEAR]: timeYear,\n [QUARTER]: timeMonth.every(3),\n [MONTH]: timeMonth,\n [WEEK]: timeWeek,\n [DATE]: timeDay,\n [DAY]: timeDay,\n [DAYOFYEAR]: timeDay,\n [HOURS]: timeHour,\n [MINUTES]: timeMinute,\n [SECONDS]: timeSecond,\n [MILLISECONDS]: timeMillisecond\n};\nconst utcIntervals = {\n [YEAR]: utcYear,\n [QUARTER]: utcMonth.every(3),\n [MONTH]: utcMonth,\n [WEEK]: utcWeek,\n [DATE]: utcDay,\n [DAY]: utcDay,\n [DAYOFYEAR]: utcDay,\n [HOURS]: utcHour,\n [MINUTES]: utcMinute,\n [SECONDS]: utcSecond,\n [MILLISECONDS]: utcMillisecond\n};\nfunction timeInterval(unit) {\n return timeIntervals[unit];\n}\nfunction utcInterval(unit) {\n return utcIntervals[unit];\n}\nfunction offset(ival, date, step) {\n return ival ? ival.offset(date, step) : undefined;\n}\nfunction timeOffset(unit, date, step) {\n return offset(timeInterval(unit), date, step);\n}\nfunction utcOffset(unit, date, step) {\n return offset(utcInterval(unit), date, step);\n}\nfunction sequence(ival, start, stop, step) {\n return ival ? ival.range(start, stop, step) : undefined;\n}\nfunction timeSequence(unit, start, stop, step) {\n return sequence(timeInterval(unit), start, stop, step);\n}\nfunction utcSequence(unit, start, stop, step) {\n return sequence(utcInterval(unit), start, stop, step);\n}\n\nconst durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\nconst Milli = [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS],\n Seconds = Milli.slice(0, -1),\n Minutes = Seconds.slice(0, -1),\n Hours = Minutes.slice(0, -1),\n Day = Hours.slice(0, -1),\n Week = [YEAR, WEEK],\n Month = [YEAR, MONTH],\n Year = [YEAR];\nconst intervals = [[Seconds, 1, durationSecond], [Seconds, 5, 5 * durationSecond], [Seconds, 15, 15 * durationSecond], [Seconds, 30, 30 * durationSecond], [Minutes, 1, durationMinute], [Minutes, 5, 5 * durationMinute], [Minutes, 15, 15 * durationMinute], [Minutes, 30, 30 * durationMinute], [Hours, 1, durationHour], [Hours, 3, 3 * durationHour], [Hours, 6, 6 * durationHour], [Hours, 12, 12 * durationHour], [Day, 1, durationDay], [Week, 1, durationWeek], [Month, 1, durationMonth], [Month, 3, 3 * durationMonth], [Year, 1, durationYear]];\nfunction bin (opt) {\n const ext = opt.extent,\n max = opt.maxbins || 40,\n target = Math.abs(span(ext)) / max;\n let i = bisector(i => i[2]).right(intervals, target),\n units,\n step;\n if (i === intervals.length) {\n units = Year, step = tickStep(ext[0] / durationYear, ext[1] / durationYear, max);\n } else if (i) {\n i = intervals[target / intervals[i - 1][2] < intervals[i][2] / target ? i - 1 : i];\n units = i[0];\n step = i[1];\n } else {\n units = Milli;\n step = Math.max(tickStep(ext[0], ext[1], max), 1);\n }\n return {\n units,\n step\n };\n}\n\nexport { DATE, DAY, DAYOFYEAR, HOURS, MILLISECONDS, MINUTES, MONTH, QUARTER, SECONDS, TIME_UNITS, WEEK, YEAR, dayofyear, bin as timeBin, timeFloor, timeInterval, timeOffset, timeSequence, timeUnitSpecifier, timeUnits, utcFloor, utcInterval, utcOffset, utcSequence, utcdayofyear, utcweek, week };\n","import { tickStep } from 'd3-array';\nimport { formatSpecifier, precisionFixed, precisionRound, precisionPrefix, format, formatPrefix, formatLocale } from 'd3-format';\nimport { SECONDS, MINUTES, HOURS, DATE, WEEK, MONTH, QUARTER, YEAR, MILLISECONDS, DAY, timeInterval, utcInterval } from 'vega-time';\nimport { isString, isObject, error, extend } from 'vega-util';\nimport { timeFormat, timeParse, utcFormat, utcParse, timeFormatLocale as timeFormatLocale$1 } from 'd3-time-format';\n\nfunction memoize (method) {\n const cache = {};\n return spec => cache[spec] || (cache[spec] = method(spec));\n}\n\nfunction trimZeroes(numberFormat, decimalChar) {\n return x => {\n const str = numberFormat(x),\n dec = str.indexOf(decimalChar);\n if (dec < 0) return str;\n let idx = rightmostDigit(str, dec);\n const end = idx < str.length ? str.slice(idx) : '';\n while (--idx > dec) if (str[idx] !== '0') {\n ++idx;\n break;\n }\n return str.slice(0, idx) + end;\n };\n}\nfunction rightmostDigit(str, dec) {\n let i = str.lastIndexOf('e'),\n c;\n if (i > 0) return i;\n for (i = str.length; --i > dec;) {\n c = str.charCodeAt(i);\n if (c >= 48 && c <= 57) return i + 1; // is digit\n }\n}\n\nfunction numberLocale(locale) {\n const format = memoize(locale.format),\n formatPrefix = locale.formatPrefix;\n return {\n format,\n formatPrefix,\n formatFloat(spec) {\n const s = formatSpecifier(spec || ',');\n if (s.precision == null) {\n s.precision = 12;\n switch (s.type) {\n case '%':\n s.precision -= 2;\n break;\n case 'e':\n s.precision -= 1;\n break;\n }\n return trimZeroes(format(s),\n // number format\n format('.1f')(1)[1] // decimal point character\n );\n } else {\n return format(s);\n }\n },\n formatSpan(start, stop, count, specifier) {\n specifier = formatSpecifier(specifier == null ? ',f' : specifier);\n const step = tickStep(start, stop, count),\n value = Math.max(Math.abs(start), Math.abs(stop));\n let precision;\n if (specifier.precision == null) {\n switch (specifier.type) {\n case 's':\n {\n if (!isNaN(precision = precisionPrefix(step, value))) {\n specifier.precision = precision;\n }\n return formatPrefix(specifier, value);\n }\n case '':\n case 'e':\n case 'g':\n case 'p':\n case 'r':\n {\n if (!isNaN(precision = precisionRound(step, value))) {\n specifier.precision = precision - (specifier.type === 'e');\n }\n break;\n }\n case 'f':\n case '%':\n {\n if (!isNaN(precision = precisionFixed(step))) {\n specifier.precision = precision - (specifier.type === '%') * 2;\n }\n break;\n }\n }\n }\n return format(specifier);\n }\n };\n}\nlet defaultNumberLocale;\nresetNumberFormatDefaultLocale();\nfunction resetNumberFormatDefaultLocale() {\n return defaultNumberLocale = numberLocale({\n format: format,\n formatPrefix: formatPrefix\n });\n}\nfunction numberFormatLocale(definition) {\n return numberLocale(formatLocale(definition));\n}\nfunction numberFormatDefaultLocale(definition) {\n return arguments.length ? defaultNumberLocale = numberFormatLocale(definition) : defaultNumberLocale;\n}\n\nfunction timeMultiFormat(format, interval, spec) {\n spec = spec || {};\n if (!isObject(spec)) {\n error(`Invalid time multi-format specifier: ${spec}`);\n }\n const second = interval(SECONDS),\n minute = interval(MINUTES),\n hour = interval(HOURS),\n day = interval(DATE),\n week = interval(WEEK),\n month = interval(MONTH),\n quarter = interval(QUARTER),\n year = interval(YEAR),\n L = format(spec[MILLISECONDS] || '.%L'),\n S = format(spec[SECONDS] || ':%S'),\n M = format(spec[MINUTES] || '%I:%M'),\n H = format(spec[HOURS] || '%I %p'),\n d = format(spec[DATE] || spec[DAY] || '%a %d'),\n w = format(spec[WEEK] || '%b %d'),\n m = format(spec[MONTH] || '%B'),\n q = format(spec[QUARTER] || '%B'),\n y = format(spec[YEAR] || '%Y');\n return date => (second(date) < date ? L : minute(date) < date ? S : hour(date) < date ? M : day(date) < date ? H : month(date) < date ? week(date) < date ? d : w : year(date) < date ? quarter(date) < date ? m : q : y)(date);\n}\nfunction timeLocale(locale) {\n const timeFormat = memoize(locale.format),\n utcFormat = memoize(locale.utcFormat);\n return {\n timeFormat: spec => isString(spec) ? timeFormat(spec) : timeMultiFormat(timeFormat, timeInterval, spec),\n utcFormat: spec => isString(spec) ? utcFormat(spec) : timeMultiFormat(utcFormat, utcInterval, spec),\n timeParse: memoize(locale.parse),\n utcParse: memoize(locale.utcParse)\n };\n}\nlet defaultTimeLocale;\nresetTimeFormatDefaultLocale();\nfunction resetTimeFormatDefaultLocale() {\n return defaultTimeLocale = timeLocale({\n format: timeFormat,\n parse: timeParse,\n utcFormat: utcFormat,\n utcParse: utcParse\n });\n}\nfunction timeFormatLocale(definition) {\n return timeLocale(timeFormatLocale$1(definition));\n}\nfunction timeFormatDefaultLocale(definition) {\n return arguments.length ? defaultTimeLocale = timeFormatLocale(definition) : defaultTimeLocale;\n}\n\nconst createLocale = (number, time) => extend({}, number, time);\nfunction locale(numberSpec, timeSpec) {\n const number = numberSpec ? numberFormatLocale(numberSpec) : numberFormatDefaultLocale();\n const time = timeSpec ? timeFormatLocale(timeSpec) : timeFormatDefaultLocale();\n return createLocale(number, time);\n}\nfunction defaultLocale(numberSpec, timeSpec) {\n const args = arguments.length;\n if (args && args !== 2) {\n error('defaultLocale expects either zero or two arguments.');\n }\n return args ? createLocale(numberFormatDefaultLocale(numberSpec), timeFormatDefaultLocale(timeSpec)) : createLocale(numberFormatDefaultLocale(), timeFormatDefaultLocale());\n}\nfunction resetDefaultLocale() {\n resetNumberFormatDefaultLocale();\n resetTimeFormatDefaultLocale();\n return defaultLocale();\n}\n\nexport { defaultLocale, locale, numberFormatDefaultLocale, numberFormatLocale, resetDefaultLocale, resetNumberFormatDefaultLocale, resetTimeFormatDefaultLocale, timeFormatDefaultLocale, timeFormatLocale };\n","import { extend, error, stringValue, isFunction, toBoolean, toNumber, toDate, toString, identity, field, isObject, isArray, isIterable, hasOwnProperty } from 'vega-util';\nimport { dsvFormat } from 'd3-dsv';\nimport { feature, mesh } from 'topojson-client';\nimport { timeFormatDefaultLocale } from 'vega-format';\n\n// Matches absolute URLs with optional protocol\n// https://... file://... //...\nconst protocol_re = /^(data:|([A-Za-z]+:)?\\/\\/)/;\n\n// Matches allowed URIs. From https://github.com/cure53/DOMPurify/blob/master/src/regexp.js with added file://\nconst allowed_re = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i; // eslint-disable-line no-useless-escape\nconst whitespace_re = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g; // eslint-disable-line no-control-regex\n\n// Special treatment in node.js for the file: protocol\nconst fileProtocol = 'file://';\n\n/**\n * Factory for a loader constructor that provides methods for requesting\n * files from either the network or disk, and for sanitizing request URIs.\n * @param {function} fetch - The Fetch API for HTTP network requests.\n * If null or undefined, HTTP loading will be disabled.\n * @param {object} fs - The file system interface for file loading.\n * If null or undefined, local file loading will be disabled.\n * @return {function} A loader constructor with the following signature:\n * param {object} [options] - Optional default loading options to use.\n * return {object} - A new loader instance.\n */\nfunction loaderFactory (fetch, fs) {\n return options => ({\n options: options || {},\n sanitize: sanitize,\n load: load,\n fileAccess: !!fs,\n file: fileLoader(fs),\n http: httpLoader(fetch)\n });\n}\n\n/**\n * Load an external resource, typically either from the web or from the local\n * filesystem. This function uses {@link sanitize} to first sanitize the uri,\n * then calls either {@link http} (for web requests) or {@link file} (for\n * filesystem loading).\n * @param {string} uri - The resource indicator (e.g., URL or filename).\n * @param {object} [options] - Optional loading options. These options will\n * override any existing default options.\n * @return {Promise} - A promise that resolves to the loaded content.\n */\nasync function load(uri, options) {\n const opt = await this.sanitize(uri, options),\n url = opt.href;\n return opt.localFile ? this.file(url) : this.http(url, options);\n}\n\n/**\n * URI sanitizer function.\n * @param {string} uri - The uri (url or filename) to check.\n * @param {object} options - An options hash.\n * @return {Promise} - A promise that resolves to an object containing\n * sanitized uri data, or rejects it the input uri is deemed invalid.\n * The properties of the resolved object are assumed to be\n * valid attributes for an HTML 'a' tag. The sanitized uri *must* be\n * provided by the 'href' property of the returned object.\n */\nasync function sanitize(uri, options) {\n options = extend({}, this.options, options);\n const fileAccess = this.fileAccess,\n result = {\n href: null\n };\n let isFile, loadFile, base;\n const isAllowed = allowed_re.test(uri.replace(whitespace_re, ''));\n if (uri == null || typeof uri !== 'string' || !isAllowed) {\n error('Sanitize failure, invalid URI: ' + stringValue(uri));\n }\n const hasProtocol = protocol_re.test(uri);\n\n // if relative url (no protocol/host), prepend baseURL\n if ((base = options.baseURL) && !hasProtocol) {\n // Ensure that there is a slash between the baseURL (e.g. hostname) and url\n if (!uri.startsWith('/') && !base.endsWith('/')) {\n uri = '/' + uri;\n }\n uri = base + uri;\n }\n\n // should we load from file system?\n loadFile = (isFile = uri.startsWith(fileProtocol)) || options.mode === 'file' || options.mode !== 'http' && !hasProtocol && fileAccess;\n if (isFile) {\n // strip file protocol\n uri = uri.slice(fileProtocol.length);\n } else if (uri.startsWith('//')) {\n if (options.defaultProtocol === 'file') {\n // if is file, strip protocol and set loadFile flag\n uri = uri.slice(2);\n loadFile = true;\n } else {\n // if relative protocol (starts with '//'), prepend default protocol\n uri = (options.defaultProtocol || 'http') + ':' + uri;\n }\n }\n\n // set non-enumerable mode flag to indicate local file load\n Object.defineProperty(result, 'localFile', {\n value: !!loadFile\n });\n\n // set uri\n result.href = uri;\n\n // set default result target, if specified\n if (options.target) {\n result.target = options.target + '';\n }\n\n // set default result rel, if specified (#1542)\n if (options.rel) {\n result.rel = options.rel + '';\n }\n\n // provide control over cross-origin image handling (#2238)\n // https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image\n if (options.context === 'image' && options.crossOrigin) {\n result.crossOrigin = options.crossOrigin + '';\n }\n\n // return\n return result;\n}\n\n/**\n * File system loader factory.\n * @param {object} fs - The file system interface.\n * @return {function} - A file loader with the following signature:\n * param {string} filename - The file system path to load.\n * param {string} filename - The file system path to load.\n * return {Promise} A promise that resolves to the file contents.\n */\nfunction fileLoader(fs) {\n return fs ? filename => new Promise((accept, reject) => {\n fs.readFile(filename, (error, data) => {\n if (error) reject(error);else accept(data);\n });\n }) : fileReject;\n}\n\n/**\n * Default file system loader that simply rejects.\n */\nasync function fileReject() {\n error('No file system access.');\n}\n\n/**\n * HTTP request handler factory.\n * @param {function} fetch - The Fetch API method.\n * @return {function} - An http loader with the following signature:\n * param {string} url - The url to request.\n * param {object} options - An options hash.\n * return {Promise} - A promise that resolves to the file contents.\n */\nfunction httpLoader(fetch) {\n return fetch ? async function (url, options) {\n const opt = extend({}, this.options.http, options),\n type = options && options.response,\n response = await fetch(url, opt);\n return !response.ok ? error(response.status + '' + response.statusText) : isFunction(response[type]) ? response[type]() : response.text();\n } : httpReject;\n}\n\n/**\n * Default http request handler that simply rejects.\n */\nasync function httpReject() {\n error('No HTTP fetch method available.');\n}\n\nconst isValid = _ => _ != null && _ === _;\nconst isBoolean = _ => _ === 'true' || _ === 'false' || _ === true || _ === false;\nconst isDate = _ => !Number.isNaN(Date.parse(_));\nconst isNumber = _ => !Number.isNaN(+_) && !(_ instanceof Date);\nconst isInteger = _ => isNumber(_) && Number.isInteger(+_);\nconst typeParsers = {\n boolean: toBoolean,\n integer: toNumber,\n number: toNumber,\n date: toDate,\n string: toString,\n unknown: identity\n};\nconst typeTests = [isBoolean, isInteger, isNumber, isDate];\nconst typeList = ['boolean', 'integer', 'number', 'date'];\nfunction inferType(values, field) {\n if (!values || !values.length) return 'unknown';\n const n = values.length,\n m = typeTests.length,\n a = typeTests.map((_, i) => i + 1);\n for (let i = 0, t = 0, j, value; i < n; ++i) {\n value = field ? values[i][field] : values[i];\n for (j = 0; j < m; ++j) {\n if (a[j] && isValid(value) && !typeTests[j](value)) {\n a[j] = 0;\n ++t;\n if (t === typeTests.length) return 'string';\n }\n }\n }\n return typeList[a.reduce((u, v) => u === 0 ? v : u, 0) - 1];\n}\nfunction inferTypes(data, fields) {\n return fields.reduce((types, field) => {\n types[field] = inferType(data, field);\n return types;\n }, {});\n}\n\nfunction delimitedFormat(delimiter) {\n const parse = function (data, format) {\n const delim = {\n delimiter: delimiter\n };\n return dsv(data, format ? extend(format, delim) : delim);\n };\n parse.responseType = 'text';\n return parse;\n}\nfunction dsv(data, format) {\n if (format.header) {\n data = format.header.map(stringValue).join(format.delimiter) + '\\n' + data;\n }\n return dsvFormat(format.delimiter).parse(data + '');\n}\ndsv.responseType = 'text';\n\nfunction isBuffer(_) {\n return typeof Buffer === 'function' && isFunction(Buffer.isBuffer) ? Buffer.isBuffer(_) : false;\n}\nfunction json(data, format) {\n const prop = format && format.property ? field(format.property) : identity;\n return isObject(data) && !isBuffer(data) ? parseJSON(prop(data), format) : prop(JSON.parse(data));\n}\njson.responseType = 'json';\nfunction parseJSON(data, format) {\n if (!isArray(data) && isIterable(data)) {\n data = [...data];\n }\n return format && format.copy ? JSON.parse(JSON.stringify(data)) : data;\n}\n\nconst filters = {\n interior: (a, b) => a !== b,\n exterior: (a, b) => a === b\n};\nfunction topojson(data, format) {\n let method, object, property, filter;\n data = json(data, format);\n if (format && format.feature) {\n method = feature;\n property = format.feature;\n } else if (format && format.mesh) {\n method = mesh;\n property = format.mesh;\n filter = filters[format.filter];\n } else {\n error('Missing TopoJSON feature or mesh parameter.');\n }\n object = (object = data.objects[property]) ? method(data, object, filter) : error('Invalid TopoJSON object: ' + property);\n return object && object.features || [object];\n}\ntopojson.responseType = 'json';\n\nconst format = {\n dsv: dsv,\n csv: delimitedFormat(','),\n tsv: delimitedFormat('\\t'),\n json: json,\n topojson: topojson\n};\nfunction formats(name, reader) {\n if (arguments.length > 1) {\n format[name] = reader;\n return this;\n } else {\n return hasOwnProperty(format, name) ? format[name] : null;\n }\n}\nfunction responseType(type) {\n const f = formats(type);\n return f && f.responseType || 'text';\n}\n\nfunction read (data, schema, timeParser, utcParser) {\n schema = schema || {};\n const reader = formats(schema.type || 'json');\n if (!reader) error('Unknown data format type: ' + schema.type);\n data = reader(data, schema);\n if (schema.parse) parse(data, schema.parse, timeParser, utcParser);\n if (hasOwnProperty(data, 'columns')) delete data.columns;\n return data;\n}\nfunction parse(data, types, timeParser, utcParser) {\n if (!data.length) return; // early exit for empty data\n\n const locale = timeFormatDefaultLocale();\n timeParser = timeParser || locale.timeParse;\n utcParser = utcParser || locale.utcParse;\n let fields = data.columns || Object.keys(data[0]),\n datum,\n field,\n i,\n j,\n n,\n m;\n if (types === 'auto') types = inferTypes(data, fields);\n fields = Object.keys(types);\n const parsers = fields.map(field => {\n const type = types[field];\n let parts, pattern;\n if (type && (type.startsWith('date:') || type.startsWith('utc:'))) {\n parts = type.split(/:(.+)?/, 2); // split on first :\n pattern = parts[1];\n if (pattern[0] === '\\'' && pattern[pattern.length - 1] === '\\'' || pattern[0] === '\"' && pattern[pattern.length - 1] === '\"') {\n pattern = pattern.slice(1, -1);\n }\n const parse = parts[0] === 'utc' ? utcParser : timeParser;\n return parse(pattern);\n }\n if (!typeParsers[type]) {\n throw Error('Illegal format pattern: ' + field + ':' + type);\n }\n return typeParsers[type];\n });\n for (i = 0, n = data.length, m = fields.length; i < n; ++i) {\n datum = data[i];\n for (j = 0; j < m; ++j) {\n field = fields[j];\n datum[field] = parsers[j](datum[field]);\n }\n }\n}\n\nconst loader = loaderFactory(typeof fetch !== 'undefined' && fetch,\n// use built-in fetch API\nnull // no file system access\n);\n\nexport { format, formats, inferType, inferTypes, loader, read, responseType, typeParsers };\n","import { identity, array, isFunction, constant, isArray, id, error, truthy, debounce, extend, visitArray, inherits, logger, Error, hasOwnProperty } from 'vega-util';\nimport { read, responseType, loader } from 'vega-loader';\nimport { defaultLocale } from 'vega-format';\n\nfunction UniqueList(idFunc) {\n const $ = idFunc || identity,\n list = [],\n ids = {};\n list.add = _ => {\n const id = $(_);\n if (!ids[id]) {\n ids[id] = 1;\n list.push(_);\n }\n return list;\n };\n list.remove = _ => {\n const id = $(_);\n if (ids[id]) {\n ids[id] = 0;\n const idx = list.indexOf(_);\n if (idx >= 0) list.splice(idx, 1);\n }\n return list;\n };\n return list;\n}\n\n/**\n * Invoke and await a potentially async callback function. If\n * an error occurs, trap it and route to Dataflow.error.\n * @param {Dataflow} df - The dataflow instance\n * @param {function} callback - A callback function to invoke\n * and then await. The dataflow will be passed as the single\n * argument to the function.\n */\nasync function asyncCallback (df, callback) {\n try {\n await callback(df);\n } catch (err) {\n df.error(err);\n }\n}\n\nconst TUPLE_ID_KEY = Symbol('vega_id');\nlet TUPLE_ID = 1;\n\n/**\n * Checks if an input value is a registered tuple.\n * @param {*} t - The value to check.\n * @return {boolean} True if the input is a tuple, false otherwise.\n */\nfunction isTuple(t) {\n return !!(t && tupleid(t));\n}\n\n/**\n * Returns the id of a tuple.\n * @param {object} t - The input tuple.\n * @return {*} the tuple id.\n */\nfunction tupleid(t) {\n return t[TUPLE_ID_KEY];\n}\n\n/**\n * Sets the id of a tuple.\n * @param {object} t - The input tuple.\n * @param {*} id - The id value to set.\n * @return {object} the input tuple.\n */\nfunction setid(t, id) {\n t[TUPLE_ID_KEY] = id;\n return t;\n}\n\n/**\n * Ingest an object or value as a data tuple.\n * If the input value is an object, an id field will be added to it. For\n * efficiency, the input object is modified directly. A copy is not made.\n * If the input value is a literal, it will be wrapped in a new object\n * instance, with the value accessible as the 'data' property.\n * @param datum - The value to ingest.\n * @return {object} The ingested data tuple.\n */\nfunction ingest$1(datum) {\n const t = datum === Object(datum) ? datum : {\n data: datum\n };\n return tupleid(t) ? t : setid(t, TUPLE_ID++);\n}\n\n/**\n * Given a source tuple, return a derived copy.\n * @param {object} t - The source tuple.\n * @return {object} The derived tuple.\n */\nfunction derive(t) {\n return rederive(t, ingest$1({}));\n}\n\n/**\n * Rederive a derived tuple by copying values from the source tuple.\n * @param {object} t - The source tuple.\n * @param {object} d - The derived tuple.\n * @return {object} The derived tuple.\n */\nfunction rederive(t, d) {\n for (const k in t) d[k] = t[k];\n return d;\n}\n\n/**\n * Replace an existing tuple with a new tuple.\n * @param {object} t - The existing data tuple.\n * @param {object} d - The new tuple that replaces the old.\n * @return {object} The new tuple.\n */\nfunction replace(t, d) {\n return setid(d, tupleid(t));\n}\n\n/**\n * Generate an augmented comparator function that provides stable\n * sorting by tuple id when the given comparator produces ties.\n * @param {function} cmp - The comparator to augment.\n * @param {function} [f] - Optional tuple accessor function.\n * @return {function} An augmented comparator function.\n */\nfunction stableCompare(cmp, f) {\n return !cmp ? null : f ? (a, b) => cmp(a, b) || tupleid(f(a)) - tupleid(f(b)) : (a, b) => cmp(a, b) || tupleid(a) - tupleid(b);\n}\n\nfunction isChangeSet(v) {\n return v && v.constructor === changeset;\n}\nfunction changeset() {\n const add = [],\n // insert tuples\n rem = [],\n // remove tuples\n mod = [],\n // modify tuples\n remp = [],\n // remove by predicate\n modp = []; // modify by predicate\n let clean = null,\n reflow = false;\n return {\n constructor: changeset,\n insert(t) {\n const d = array(t),\n n = d.length;\n for (let i = 0; i < n; ++i) add.push(d[i]);\n return this;\n },\n remove(t) {\n const a = isFunction(t) ? remp : rem,\n d = array(t),\n n = d.length;\n for (let i = 0; i < n; ++i) a.push(d[i]);\n return this;\n },\n modify(t, field, value) {\n const m = {\n field: field,\n value: constant(value)\n };\n if (isFunction(t)) {\n m.filter = t;\n modp.push(m);\n } else {\n m.tuple = t;\n mod.push(m);\n }\n return this;\n },\n encode(t, set) {\n if (isFunction(t)) modp.push({\n filter: t,\n field: set\n });else mod.push({\n tuple: t,\n field: set\n });\n return this;\n },\n clean(value) {\n clean = value;\n return this;\n },\n reflow() {\n reflow = true;\n return this;\n },\n pulse(pulse, tuples) {\n const cur = {},\n out = {};\n let i, n, m, f, t, id;\n\n // build lookup table of current tuples\n for (i = 0, n = tuples.length; i < n; ++i) {\n cur[tupleid(tuples[i])] = 1;\n }\n\n // process individual tuples to remove\n for (i = 0, n = rem.length; i < n; ++i) {\n t = rem[i];\n cur[tupleid(t)] = -1;\n }\n\n // process predicate-based removals\n for (i = 0, n = remp.length; i < n; ++i) {\n f = remp[i];\n tuples.forEach(t => {\n if (f(t)) cur[tupleid(t)] = -1;\n });\n }\n\n // process all add tuples\n for (i = 0, n = add.length; i < n; ++i) {\n t = add[i];\n id = tupleid(t);\n if (cur[id]) {\n // tuple already resides in dataset\n // if flagged for both add and remove, cancel\n cur[id] = 1;\n } else {\n // tuple does not reside in dataset, add\n pulse.add.push(ingest$1(add[i]));\n }\n }\n\n // populate pulse rem list\n for (i = 0, n = tuples.length; i < n; ++i) {\n t = tuples[i];\n if (cur[tupleid(t)] < 0) pulse.rem.push(t);\n }\n\n // modify helper method\n function modify(t, f, v) {\n if (v) {\n t[f] = v(t);\n } else {\n pulse.encode = f;\n }\n if (!reflow) out[tupleid(t)] = t;\n }\n\n // process individual tuples to modify\n for (i = 0, n = mod.length; i < n; ++i) {\n m = mod[i];\n t = m.tuple;\n f = m.field;\n id = cur[tupleid(t)];\n if (id > 0) {\n modify(t, f, m.value);\n pulse.modifies(f);\n }\n }\n\n // process predicate-based modifications\n for (i = 0, n = modp.length; i < n; ++i) {\n m = modp[i];\n f = m.filter;\n tuples.forEach(t => {\n if (f(t) && cur[tupleid(t)] > 0) {\n modify(t, m.field, m.value);\n }\n });\n pulse.modifies(m.field);\n }\n\n // upon reflow request, populate mod with all non-removed tuples\n // otherwise, populate mod with modified tuples only\n if (reflow) {\n pulse.mod = rem.length || remp.length ? tuples.filter(t => cur[tupleid(t)] > 0) : tuples.slice();\n } else {\n for (id in out) pulse.mod.push(out[id]);\n }\n\n // set pulse garbage collection request\n if (clean || clean == null && (rem.length || remp.length)) {\n pulse.clean(true);\n }\n return pulse;\n }\n };\n}\n\nconst CACHE = '_:mod:_';\n\n/**\n * Hash that tracks modifications to assigned values.\n * Callers *must* use the set method to update values.\n */\nfunction Parameters() {\n Object.defineProperty(this, CACHE, {\n writable: true,\n value: {}\n });\n}\nParameters.prototype = {\n /**\n * Set a parameter value. If the parameter value changes, the parameter\n * will be recorded as modified.\n * @param {string} name - The parameter name.\n * @param {number} index - The index into an array-value parameter. Ignored if\n * the argument is undefined, null or less than zero.\n * @param {*} value - The parameter value to set.\n * @param {boolean} [force=false] - If true, records the parameter as modified\n * even if the value is unchanged.\n * @return {Parameters} - This parameter object.\n */\n set(name, index, value, force) {\n const o = this,\n v = o[name],\n mod = o[CACHE];\n if (index != null && index >= 0) {\n if (v[index] !== value || force) {\n v[index] = value;\n mod[index + ':' + name] = -1;\n mod[name] = -1;\n }\n } else if (v !== value || force) {\n o[name] = value;\n mod[name] = isArray(value) ? 1 + value.length : -1;\n }\n return o;\n },\n /**\n * Tests if one or more parameters has been modified. If invoked with no\n * arguments, returns true if any parameter value has changed. If the first\n * argument is array, returns trues if any parameter name in the array has\n * changed. Otherwise, tests if the given name and optional array index has\n * changed.\n * @param {string} name - The parameter name to test.\n * @param {number} [index=undefined] - The parameter array index to test.\n * @return {boolean} - Returns true if a queried parameter was modified.\n */\n modified(name, index) {\n const mod = this[CACHE];\n if (!arguments.length) {\n for (const k in mod) {\n if (mod[k]) return true;\n }\n return false;\n } else if (isArray(name)) {\n for (let k = 0; k < name.length; ++k) {\n if (mod[name[k]]) return true;\n }\n return false;\n }\n return index != null && index >= 0 ? index + 1 < mod[name] || !!mod[index + ':' + name] : !!mod[name];\n },\n /**\n * Clears the modification records. After calling this method,\n * all parameters are considered unmodified.\n */\n clear() {\n this[CACHE] = {};\n return this;\n }\n};\n\nlet OP_ID = 0;\nconst PULSE = 'pulse',\n NO_PARAMS = new Parameters();\n\n// Boolean Flags\nconst SKIP$1 = 1,\n MODIFIED = 2;\n\n/**\n * An Operator is a processing node in a dataflow graph.\n * Each operator stores a value and an optional value update function.\n * Operators can accept a hash of named parameters. Parameter values can\n * either be direct (JavaScript literals, arrays, objects) or indirect\n * (other operators whose values will be pulled dynamically). Operators\n * included as parameters will have this operator added as a dependency.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {function(object, Pulse)} [update] - An update function. Upon\n * evaluation of this operator, the update function will be invoked and the\n * return value will be used as the new value of this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @see parameters\n */\nfunction Operator(init, update, params, react) {\n this.id = ++OP_ID;\n this.value = init;\n this.stamp = -1;\n this.rank = -1;\n this.qrank = -1;\n this.flags = 0;\n if (update) {\n this._update = update;\n }\n if (params) this.parameters(params, react);\n}\nfunction flag(bit) {\n return function (state) {\n const f = this.flags;\n if (arguments.length === 0) return !!(f & bit);\n this.flags = state ? f | bit : f & ~bit;\n return this;\n };\n}\nOperator.prototype = {\n /**\n * Returns a list of target operators dependent on this operator.\n * If this list does not exist, it is created and then returned.\n * @return {UniqueList}\n */\n targets() {\n return this._targets || (this._targets = UniqueList(id));\n },\n /**\n * Sets the value of this operator.\n * @param {*} value - the value to set.\n * @return {Number} Returns 1 if the operator value has changed\n * according to strict equality, returns 0 otherwise.\n */\n set(value) {\n if (this.value !== value) {\n this.value = value;\n return 1;\n } else {\n return 0;\n }\n },\n /**\n * Indicates that operator evaluation should be skipped on the next pulse.\n * This operator will still propagate incoming pulses, but its update function\n * will not be invoked. The skip flag is reset after every pulse, so calling\n * this method will affect processing of the next pulse only.\n */\n skip: flag(SKIP$1),\n /**\n * Indicates that this operator's value has been modified on its most recent\n * pulse. Normally modification is checked via strict equality; however, in\n * some cases it is more efficient to update the internal state of an object.\n * In those cases, the modified flag can be used to trigger propagation. Once\n * set, the modification flag persists across pulses until unset. The flag can\n * be used with the last timestamp to test if a modification is recent.\n */\n modified: flag(MODIFIED),\n /**\n * Sets the parameters for this operator. The parameter values are analyzed for\n * operator instances. If found, this operator will be added as a dependency\n * of the parameterizing operator. Operator values are dynamically marshalled\n * from each operator parameter prior to evaluation. If a parameter value is\n * an array, the array will also be searched for Operator instances. However,\n * the search does not recurse into sub-arrays or object properties.\n * @param {object} params - A hash of operator parameters.\n * @param {boolean} [react=true] - A flag indicating if this operator should\n * automatically update (react) when parameter values change. In other words,\n * this flag determines if the operator registers itself as a listener on\n * any upstream operators included in the parameters.\n * @param {boolean} [initonly=false] - A flag indicating if this operator\n * should calculate an update only upon its initial evaluation, then\n * deregister dependencies and suppress all future update invocations.\n * @return {Operator[]} - An array of upstream dependencies.\n */\n parameters(params, react, initonly) {\n react = react !== false;\n const argval = this._argval = this._argval || new Parameters(),\n argops = this._argops = this._argops || [],\n deps = [];\n let name, value, n, i;\n const add = (name, index, value) => {\n if (value instanceof Operator) {\n if (value !== this) {\n if (react) value.targets().add(this);\n deps.push(value);\n }\n argops.push({\n op: value,\n name: name,\n index: index\n });\n } else {\n argval.set(name, index, value);\n }\n };\n for (name in params) {\n value = params[name];\n if (name === PULSE) {\n array(value).forEach(op => {\n if (!(op instanceof Operator)) {\n error('Pulse parameters must be operator instances.');\n } else if (op !== this) {\n op.targets().add(this);\n deps.push(op);\n }\n });\n this.source = value;\n } else if (isArray(value)) {\n argval.set(name, -1, Array(n = value.length));\n for (i = 0; i < n; ++i) add(name, i, value[i]);\n } else {\n add(name, -1, value);\n }\n }\n this.marshall().clear(); // initialize values\n if (initonly) argops.initonly = true;\n return deps;\n },\n /**\n * Internal method for marshalling parameter values.\n * Visits each operator dependency to pull the latest value.\n * @return {Parameters} A Parameters object to pass to the update function.\n */\n marshall(stamp) {\n const argval = this._argval || NO_PARAMS,\n argops = this._argops;\n let item, i, op, mod;\n if (argops) {\n const n = argops.length;\n for (i = 0; i < n; ++i) {\n item = argops[i];\n op = item.op;\n mod = op.modified() && op.stamp === stamp;\n argval.set(item.name, item.index, op.value, mod);\n }\n if (argops.initonly) {\n for (i = 0; i < n; ++i) {\n item = argops[i];\n item.op.targets().remove(this);\n }\n this._argops = null;\n this._update = null;\n }\n }\n return argval;\n },\n /**\n * Detach this operator from the dataflow.\n * Unregisters listeners on upstream dependencies.\n */\n detach() {\n const argops = this._argops;\n let i, n, item, op;\n if (argops) {\n for (i = 0, n = argops.length; i < n; ++i) {\n item = argops[i];\n op = item.op;\n if (op._targets) {\n op._targets.remove(this);\n }\n }\n }\n\n // remove references to the source and pulse object,\n // if present, to prevent memory leaks of old data.\n this.pulse = null;\n this.source = null;\n },\n /**\n * Delegate method to perform operator processing.\n * Subclasses can override this method to perform custom processing.\n * By default, it marshalls parameters and calls the update function\n * if that function is defined. If the update function does not\n * change the operator value then StopPropagation is returned.\n * If no update function is defined, this method does nothing.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return The output pulse or StopPropagation. A falsy return value\n * (including undefined) will let the input pulse pass through.\n */\n evaluate(pulse) {\n const update = this._update;\n if (update) {\n const params = this.marshall(pulse.stamp),\n v = update.call(this, params, pulse);\n params.clear();\n if (v !== this.value) {\n this.value = v;\n } else if (!this.modified()) {\n return pulse.StopPropagation;\n }\n }\n },\n /**\n * Run this operator for the current pulse. If this operator has already\n * been run at (or after) the pulse timestamp, returns StopPropagation.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\n run(pulse) {\n if (pulse.stamp < this.stamp) return pulse.StopPropagation;\n let rv;\n if (this.skip()) {\n this.skip(false);\n rv = 0;\n } else {\n rv = this.evaluate(pulse);\n }\n return this.pulse = rv || pulse;\n }\n};\n\n/**\n * Add an operator to the dataflow graph. This function accepts a\n * variety of input argument types. The basic signature supports an\n * initial value, update function and parameters. If the first parameter\n * is an Operator instance, it will be added directly. If it is a\n * constructor for an Operator subclass, a new instance will be instantiated.\n * Otherwise, if the first parameter is a function instance, it will be used\n * as the update function and a null initial value is assumed.\n * @param {*} init - One of: the operator to add, the initial value of\n * the operator, an operator class to instantiate, or an update function.\n * @param {function} [update] - The operator update function.\n * @param {object} [params] - The operator parameters.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @return {Operator} - The added operator.\n */\nfunction add (init, update, params, react) {\n let shift = 1,\n op;\n if (init instanceof Operator) {\n op = init;\n } else if (init && init.prototype instanceof Operator) {\n op = new init();\n } else if (isFunction(init)) {\n op = new Operator(null, init);\n } else {\n shift = 0;\n op = new Operator(init, update);\n }\n this.rank(op);\n if (shift) {\n react = params;\n params = update;\n }\n if (params) this.connect(op, op.parameters(params, react));\n this.touch(op);\n return op;\n}\n\n/**\n * Connect a target operator as a dependent of source operators.\n * If necessary, this method will rerank the target operator and its\n * dependents to ensure propagation proceeds in a topologically sorted order.\n * @param {Operator} target - The target operator.\n * @param {Array} - The source operators that should propagate\n * to the target operator.\n */\nfunction connect (target, sources) {\n const targetRank = target.rank,\n n = sources.length;\n for (let i = 0; i < n; ++i) {\n if (targetRank < sources[i].rank) {\n this.rerank(target);\n return;\n }\n }\n}\n\nlet STREAM_ID = 0;\n\n/**\n * Models an event stream.\n * @constructor\n * @param {function(Object, number): boolean} [filter] - Filter predicate.\n * Events pass through when truthy, events are suppressed when falsy.\n * @param {function(Object): *} [apply] - Applied to input events to produce\n * new event values.\n * @param {function(Object)} [receive] - Event callback function to invoke\n * upon receipt of a new event. Use to override standard event processing.\n */\nfunction EventStream(filter, apply, receive) {\n this.id = ++STREAM_ID;\n this.value = null;\n if (receive) this.receive = receive;\n if (filter) this._filter = filter;\n if (apply) this._apply = apply;\n}\n\n/**\n * Creates a new event stream instance with the provided\n * (optional) filter, apply and receive functions.\n * @param {function(Object, number): boolean} [filter] - Filter predicate.\n * Events pass through when truthy, events are suppressed when falsy.\n * @param {function(Object): *} [apply] - Applied to input events to produce\n * new event values.\n * @see EventStream\n */\nfunction stream(filter, apply, receive) {\n return new EventStream(filter, apply, receive);\n}\nEventStream.prototype = {\n _filter: truthy,\n _apply: identity,\n targets() {\n return this._targets || (this._targets = UniqueList(id));\n },\n consume(_) {\n if (!arguments.length) return !!this._consume;\n this._consume = !!_;\n return this;\n },\n receive(evt) {\n if (this._filter(evt)) {\n const val = this.value = this._apply(evt),\n trg = this._targets,\n n = trg ? trg.length : 0;\n for (let i = 0; i < n; ++i) trg[i].receive(val);\n if (this._consume) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n }\n },\n filter(filter) {\n const s = stream(filter);\n this.targets().add(s);\n return s;\n },\n apply(apply) {\n const s = stream(null, apply);\n this.targets().add(s);\n return s;\n },\n merge() {\n const s = stream();\n this.targets().add(s);\n for (let i = 0, n = arguments.length; i < n; ++i) {\n arguments[i].targets().add(s);\n }\n return s;\n },\n throttle(pause) {\n let t = -1;\n return this.filter(() => {\n const now = Date.now();\n if (now - t > pause) {\n t = now;\n return 1;\n } else {\n return 0;\n }\n });\n },\n debounce(delay) {\n const s = stream();\n this.targets().add(stream(null, null, debounce(delay, e => {\n const df = e.dataflow;\n s.receive(e);\n if (df && df.run) df.run();\n })));\n return s;\n },\n between(a, b) {\n let active = false;\n a.targets().add(stream(null, null, () => active = true));\n b.targets().add(stream(null, null, () => active = false));\n return this.filter(() => active);\n },\n detach() {\n // ensures compatibility with operators (#2753)\n // remove references to other streams and filter functions that may\n // be bound to subcontexts that need to be garbage collected.\n this._filter = truthy;\n this._targets = null;\n }\n};\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor. The input must\n * support the addEventListener method.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @param {function(object): *} [apply] - Event application function.\n * If provided, this function will be invoked and the result will be\n * used as the downstream event value.\n * @return {EventStream}\n */\nfunction events (source, type, filter, apply) {\n const df = this,\n s = stream(filter, apply),\n send = function (e) {\n e.dataflow = df;\n try {\n s.receive(e);\n } catch (error) {\n df.error(error);\n } finally {\n df.run();\n }\n };\n let sources;\n if (typeof source === 'string' && typeof document !== 'undefined') {\n sources = document.querySelectorAll(source);\n } else {\n sources = array(source);\n }\n const n = sources.length;\n for (let i = 0; i < n; ++i) {\n sources[i].addEventListener(type, send);\n }\n return s;\n}\n\nfunction parse(data, format) {\n const locale = this.locale();\n return read(data, format, locale.timeParse, locale.utcParse);\n}\n\n/**\n * Ingests new data into the dataflow. First parses the data using the\n * vega-loader read method, then pulses a changeset to the target operator.\n * @param {Operator} target - The Operator to target with ingested data,\n * typically a Collect transform instance.\n * @param {*} data - The input data, prior to parsing. For JSON this may\n * be a string or an object. For CSV, TSV, etc should be a string.\n * @param {object} format - The data format description for parsing\n * loaded data. This object is passed to the vega-loader read method.\n * @returns {Dataflow}\n */\nfunction ingest(target, data, format) {\n data = this.parse(data, format);\n return this.pulse(target, this.changeset().insert(data));\n}\n\n/**\n * Request data from an external source, parse it, and return a Promise.\n * @param {string} url - The URL from which to load the data. This string\n * is passed to the vega-loader load method.\n * @param {object} [format] - The data format description for parsing\n * loaded data. This object is passed to the vega-loader read method.\n * @return {Promise} A Promise that resolves upon completion of the request.\n * The resolved object contains the following properties:\n * - data: an array of parsed data (or null upon error)\n * - status: a code for success (0), load fail (-1), or parse fail (-2)\n */\nasync function request(url, format) {\n const df = this;\n let status = 0,\n data;\n try {\n data = await df.loader().load(url, {\n context: 'dataflow',\n response: responseType(format && format.type)\n });\n try {\n data = df.parse(data, format);\n } catch (err) {\n status = -2;\n df.warn('Data ingestion failed', url, err);\n }\n } catch (err) {\n status = -1;\n df.warn('Loading failed', url, err);\n }\n return {\n data,\n status\n };\n}\nasync function preload(target, url, format) {\n const df = this,\n pending = df._pending || loadPending(df);\n pending.requests += 1;\n const res = await df.request(url, format);\n df.pulse(target, df.changeset().remove(truthy).insert(res.data || []));\n pending.done();\n return res;\n}\nfunction loadPending(df) {\n let accept;\n const pending = new Promise(a => accept = a);\n pending.requests = 0;\n pending.done = () => {\n if (--pending.requests === 0) {\n df._pending = null;\n accept(df);\n }\n };\n return df._pending = pending;\n}\n\nconst SKIP = {\n skip: true\n};\n\n/**\n * Perform operator updates in response to events. Applies an\n * update function to compute a new operator value. If the update function\n * returns a {@link ChangeSet}, the operator will be pulsed with those tuple\n * changes. Otherwise, the operator value will be updated to the return value.\n * @param {EventStream|Operator} source - The event source to react to.\n * This argument can be either an EventStream or an Operator.\n * @param {Operator|function(object):Operator} target - The operator to update.\n * This argument can either be an Operator instance or (if the source\n * argument is an EventStream), a function that accepts an event object as\n * input and returns an Operator to target.\n * @param {function(Parameters,Event): *} [update] - Optional update function\n * to compute the new operator value, or a literal value to set. Update\n * functions expect to receive a parameter object and event as arguments.\n * This function can either return a new operator value or (if the source\n * argument is an EventStream) a {@link ChangeSet} instance to pulse\n * the target operator with tuple changes.\n * @param {object} [params] - The update function parameters.\n * @param {object} [options] - Additional options hash. If not overridden,\n * updated operators will be skipped by default.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @return {Dataflow}\n */\nfunction on (source, target, update, params, options) {\n const fn = source instanceof Operator ? onOperator : onStream;\n fn(this, source, target, update, params, options);\n return this;\n}\nfunction onStream(df, stream, target, update, params, options) {\n const opt = extend({}, options, SKIP);\n let func, op;\n if (!isFunction(target)) target = constant(target);\n if (update === undefined) {\n func = e => df.touch(target(e));\n } else if (isFunction(update)) {\n op = new Operator(null, update, params, false);\n func = e => {\n op.evaluate(e);\n const t = target(e),\n v = op.value;\n isChangeSet(v) ? df.pulse(t, v, options) : df.update(t, v, opt);\n };\n } else {\n func = e => df.update(target(e), update, opt);\n }\n stream.apply(func);\n}\nfunction onOperator(df, source, target, update, params, options) {\n if (update === undefined) {\n source.targets().add(target);\n } else {\n const opt = options || {},\n op = new Operator(null, updater(target, update), params, false);\n op.modified(opt.force);\n op.rank = source.rank; // immediately follow source\n source.targets().add(op); // add dependency\n\n if (target) {\n op.skip(true); // skip first invocation\n op.value = target.value; // initialize value\n op.targets().add(target); // chain dependencies\n df.connect(target, [op]); // rerank as needed, #1672\n }\n }\n}\n\nfunction updater(target, update) {\n update = isFunction(update) ? update : constant(update);\n return target ? function (_, pulse) {\n const value = update(_, pulse);\n if (!target.skip()) {\n target.skip(value !== this.value).value = value;\n }\n return value;\n } : update;\n}\n\n/**\n * Assigns a rank to an operator. Ranks are assigned in increasing order\n * by incrementing an internal rank counter.\n * @param {Operator} op - The operator to assign a rank.\n */\nfunction rank(op) {\n op.rank = ++this._rank;\n}\n\n/**\n * Re-ranks an operator and all downstream target dependencies. This\n * is necessary when upstream dependencies of higher rank are added to\n * a target operator.\n * @param {Operator} op - The operator to re-rank.\n */\nfunction rerank(op) {\n const queue = [op];\n let cur, list, i;\n while (queue.length) {\n this.rank(cur = queue.pop());\n if (list = cur._targets) {\n for (i = list.length; --i >= 0;) {\n queue.push(cur = list[i]);\n if (cur === op) error('Cycle detected in dataflow graph.');\n }\n }\n }\n}\n\n/**\n * Sentinel value indicating pulse propagation should stop.\n */\nconst StopPropagation = {};\n\n// Pulse visit type flags\nconst ADD = 1 << 0,\n REM = 1 << 1,\n MOD = 1 << 2,\n ADD_REM = ADD | REM,\n ADD_MOD = ADD | MOD,\n ALL = ADD | REM | MOD,\n REFLOW = 1 << 3,\n SOURCE = 1 << 4,\n NO_SOURCE = 1 << 5,\n NO_FIELDS = 1 << 6;\n\n/**\n * A Pulse enables inter-operator communication during a run of the\n * dataflow graph. In addition to the current timestamp, a pulse may also\n * contain a change-set of added, removed or modified data tuples, as well as\n * a pointer to a full backing data source. Tuple change sets may not\n * be fully materialized; for example, to prevent needless array creation\n * a change set may include larger arrays and corresponding filter functions.\n * The pulse provides a {@link visit} method to enable proper and efficient\n * iteration over requested data tuples.\n *\n * In addition, each pulse can track modification flags for data tuple fields.\n * Responsible transform operators should call the {@link modifies} method to\n * indicate changes to data fields. The {@link modified} method enables\n * querying of this modification state.\n *\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The current propagation timestamp.\n * @param {string} [encode] - An optional encoding set name, which is then\n * accessible as Pulse.encode. Operators can respond to (or ignore) this\n * setting as appropriate. This parameter can be used in conjunction with\n * the Encode transform in the vega-encode module.\n */\nfunction Pulse(dataflow, stamp, encode) {\n this.dataflow = dataflow;\n this.stamp = stamp == null ? -1 : stamp;\n this.add = [];\n this.rem = [];\n this.mod = [];\n this.fields = null;\n this.encode = encode || null;\n}\nfunction materialize(data, filter) {\n const out = [];\n visitArray(data, filter, _ => out.push(_));\n return out;\n}\nfunction filter(pulse, flags) {\n const map = {};\n pulse.visit(flags, t => {\n map[tupleid(t)] = 1;\n });\n return t => map[tupleid(t)] ? null : t;\n}\nfunction addFilter(a, b) {\n return a ? (t, i) => a(t, i) && b(t, i) : b;\n}\nPulse.prototype = {\n /**\n * Sentinel value indicating pulse propagation should stop.\n */\n StopPropagation,\n /**\n * Boolean flag indicating ADD (added) tuples.\n */\n ADD,\n /**\n * Boolean flag indicating REM (removed) tuples.\n */\n REM,\n /**\n * Boolean flag indicating MOD (modified) tuples.\n */\n MOD,\n /**\n * Boolean flag indicating ADD (added) and REM (removed) tuples.\n */\n ADD_REM,\n /**\n * Boolean flag indicating ADD (added) and MOD (modified) tuples.\n */\n ADD_MOD,\n /**\n * Boolean flag indicating ADD, REM and MOD tuples.\n */\n ALL,\n /**\n * Boolean flag indicating all tuples in a data source\n * except for the ADD, REM and MOD tuples.\n */\n REFLOW,\n /**\n * Boolean flag indicating a 'pass-through' to a\n * backing data source, ignoring ADD, REM and MOD tuples.\n */\n SOURCE,\n /**\n * Boolean flag indicating that source data should be\n * suppressed when creating a forked pulse.\n */\n NO_SOURCE,\n /**\n * Boolean flag indicating that field modifications should be\n * suppressed when creating a forked pulse.\n */\n NO_FIELDS,\n /**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created.\n * @return {Pulse} - The forked pulse instance.\n * @see init\n */\n fork(flags) {\n return new Pulse(this.dataflow).init(this, flags);\n },\n /**\n * Creates a copy of this pulse with new materialized array\n * instances for the ADD, REM, MOD, and SOURCE arrays.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse} - The cloned pulse instance.\n * @see init\n */\n clone() {\n const p = this.fork(ALL);\n p.add = p.add.slice();\n p.rem = p.rem.slice();\n p.mod = p.mod.slice();\n if (p.source) p.source = p.source.slice();\n return p.materialize(ALL | SOURCE);\n },\n /**\n * Returns a pulse that adds all tuples from a backing source. This is\n * useful for cases where operators are added to a dataflow after an\n * upstream data pipeline has already been processed, ensuring that\n * new operators can observe all tuples within a stream.\n * @return {Pulse} - A pulse instance with all source tuples included\n * in the add array. If the current pulse already has all source\n * tuples in its add array, it is returned directly. If the current\n * pulse does not have a backing source, it is returned directly.\n */\n addAll() {\n let p = this;\n const reuse = !p.source || p.add === p.rem // special case for indexed set (e.g., crossfilter)\n || !p.rem.length && p.source.length === p.add.length;\n if (reuse) {\n return p;\n } else {\n p = new Pulse(this.dataflow).init(this);\n p.add = p.source;\n p.rem = []; // new operators can ignore rem #2769\n return p;\n }\n },\n /**\n * Initialize this pulse based on the values of another pulse. This method\n * is used internally by {@link fork} to initialize a new forked tuple.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {Pulse} src - The source pulse to copy from.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created. By default, source data arrays are copied\n * to the new pulse. Use the NO_SOURCE flag to enforce a null source.\n * @return {Pulse} - Returns this Pulse instance.\n */\n init(src, flags) {\n const p = this;\n p.stamp = src.stamp;\n p.encode = src.encode;\n if (src.fields && !(flags & NO_FIELDS)) {\n p.fields = src.fields;\n }\n if (flags & ADD) {\n p.addF = src.addF;\n p.add = src.add;\n } else {\n p.addF = null;\n p.add = [];\n }\n if (flags & REM) {\n p.remF = src.remF;\n p.rem = src.rem;\n } else {\n p.remF = null;\n p.rem = [];\n }\n if (flags & MOD) {\n p.modF = src.modF;\n p.mod = src.mod;\n } else {\n p.modF = null;\n p.mod = [];\n }\n if (flags & NO_SOURCE) {\n p.srcF = null;\n p.source = null;\n } else {\n p.srcF = src.srcF;\n p.source = src.source;\n if (src.cleans) p.cleans = src.cleans;\n }\n return p;\n },\n /**\n * Schedules a function to run after pulse propagation completes.\n * @param {function} func - The function to run.\n */\n runAfter(func) {\n this.dataflow.runAfter(func);\n },\n /**\n * Indicates if tuples have been added, removed or modified.\n * @param {number} [flags] - The tuple types (ADD, REM or MOD) to query.\n * Defaults to ALL, returning true if any tuple type has changed.\n * @return {boolean} - Returns true if one or more queried tuple types have\n * changed, false otherwise.\n */\n changed(flags) {\n const f = flags || ALL;\n return f & ADD && this.add.length || f & REM && this.rem.length || f & MOD && this.mod.length;\n },\n /**\n * Forces a \"reflow\" of tuple values, such that all tuples in the backing\n * source are added to the MOD set, unless already present in the ADD set.\n * @param {boolean} [fork=false] - If true, returns a forked copy of this\n * pulse, and invokes reflow on that derived pulse.\n * @return {Pulse} - The reflowed pulse instance.\n */\n reflow(fork) {\n if (fork) return this.fork(ALL).reflow();\n const len = this.add.length,\n src = this.source && this.source.length;\n if (src && src !== len) {\n this.mod = this.source;\n if (len) this.filter(MOD, filter(this, ADD));\n }\n return this;\n },\n /**\n * Get/set metadata to pulse requesting garbage collection\n * to reclaim currently unused resources.\n */\n clean(value) {\n if (arguments.length) {\n this.cleans = !!value;\n return this;\n } else {\n return this.cleans;\n }\n },\n /**\n * Marks one or more data field names as modified to assist dependency\n * tracking and incremental processing by transform operators.\n * @param {string|Array} _ - The field(s) to mark as modified.\n * @return {Pulse} - This pulse instance.\n */\n modifies(_) {\n const hash = this.fields || (this.fields = {});\n if (isArray(_)) {\n _.forEach(f => hash[f] = true);\n } else {\n hash[_] = true;\n }\n return this;\n },\n /**\n * Checks if one or more data fields have been modified during this pulse\n * propagation timestamp.\n * @param {string|Array} _ - The field(s) to check for modified.\n * @param {boolean} nomod - If true, will check the modified flag even if\n * no mod tuples exist. If false (default), mod tuples must be present.\n * @return {boolean} - Returns true if any of the provided fields has been\n * marked as modified, false otherwise.\n */\n modified(_, nomod) {\n const fields = this.fields;\n return !((nomod || this.mod.length) && fields) ? false : !arguments.length ? !!fields : isArray(_) ? _.some(f => fields[f]) : fields[_];\n },\n /**\n * Adds a filter function to one more tuple sets. Filters are applied to\n * backing tuple arrays, to determine the actual set of tuples considered\n * added, removed or modified. They can be used to delay materialization of\n * a tuple set in order to avoid expensive array copies. In addition, the\n * filter functions can serve as value transformers: unlike standard predicate\n * function (which return boolean values), Pulse filters should return the\n * actual tuple value to process. If a tuple set is already filtered, the\n * new filter function will be appended into a conjuntive ('and') query.\n * @param {number} flags - Flags indicating the tuple set(s) to filter.\n * @param {function(*):object} filter - Filter function that will be applied\n * to the tuple set array, and should return a data tuple if the value\n * should be included in the tuple set, and falsy (or null) otherwise.\n * @return {Pulse} - Returns this pulse instance.\n */\n filter(flags, filter) {\n const p = this;\n if (flags & ADD) p.addF = addFilter(p.addF, filter);\n if (flags & REM) p.remF = addFilter(p.remF, filter);\n if (flags & MOD) p.modF = addFilter(p.modF, filter);\n if (flags & SOURCE) p.srcF = addFilter(p.srcF, filter);\n return p;\n },\n /**\n * Materialize one or more tuple sets in this pulse. If the tuple set(s) have\n * a registered filter function, it will be applied and the tuple set(s) will\n * be replaced with materialized tuple arrays.\n * @param {number} flags - Flags indicating the tuple set(s) to materialize.\n * @return {Pulse} - Returns this pulse instance.\n */\n materialize(flags) {\n flags = flags || ALL;\n const p = this;\n if (flags & ADD && p.addF) {\n p.add = materialize(p.add, p.addF);\n p.addF = null;\n }\n if (flags & REM && p.remF) {\n p.rem = materialize(p.rem, p.remF);\n p.remF = null;\n }\n if (flags & MOD && p.modF) {\n p.mod = materialize(p.mod, p.modF);\n p.modF = null;\n }\n if (flags & SOURCE && p.srcF) {\n p.source = p.source.filter(p.srcF);\n p.srcF = null;\n }\n return p;\n },\n /**\n * Visit one or more tuple sets in this pulse.\n * @param {number} flags - Flags indicating the tuple set(s) to visit.\n * Legal values are ADD, REM, MOD and SOURCE (if a backing data source\n * has been set).\n * @param {function(object):*} - Visitor function invoked per-tuple.\n * @return {Pulse} - Returns this pulse instance.\n */\n visit(flags, visitor) {\n const p = this,\n v = visitor;\n if (flags & SOURCE) {\n visitArray(p.source, p.srcF, v);\n return p;\n }\n if (flags & ADD) visitArray(p.add, p.addF, v);\n if (flags & REM) visitArray(p.rem, p.remF, v);\n if (flags & MOD) visitArray(p.mod, p.modF, v);\n const src = p.source;\n if (flags & REFLOW && src) {\n const sum = p.add.length + p.mod.length;\n if (sum === src.length) ; else if (sum) {\n visitArray(src, filter(p, ADD_MOD), v);\n } else {\n // if no add/rem/mod tuples, visit source\n visitArray(src, p.srcF, v);\n }\n }\n return p;\n }\n};\n\n/**\n * Represents a set of multiple pulses. Used as input for operators\n * that accept multiple pulses at a time. Contained pulses are\n * accessible via the public \"pulses\" array property. This pulse doe\n * not carry added, removed or modified tuples directly. However,\n * the visit method can be used to traverse all such tuples contained\n * in sub-pulses with a timestamp matching this parent multi-pulse.\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The timestamp.\n * @param {Array} pulses - The sub-pulses for this multi-pulse.\n */\nfunction MultiPulse(dataflow, stamp, pulses, encode) {\n const p = this;\n let c = 0;\n this.dataflow = dataflow;\n this.stamp = stamp;\n this.fields = null;\n this.encode = encode || null;\n this.pulses = pulses;\n for (const pulse of pulses) {\n if (pulse.stamp !== stamp) continue;\n if (pulse.fields) {\n const hash = p.fields || (p.fields = {});\n for (const f in pulse.fields) {\n hash[f] = 1;\n }\n }\n if (pulse.changed(p.ADD)) c |= p.ADD;\n if (pulse.changed(p.REM)) c |= p.REM;\n if (pulse.changed(p.MOD)) c |= p.MOD;\n }\n this.changes = c;\n}\ninherits(MultiPulse, Pulse, {\n /**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse}\n */\n fork(flags) {\n const p = new Pulse(this.dataflow).init(this, flags & this.NO_FIELDS);\n if (flags !== undefined) {\n if (flags & p.ADD) this.visit(p.ADD, t => p.add.push(t));\n if (flags & p.REM) this.visit(p.REM, t => p.rem.push(t));\n if (flags & p.MOD) this.visit(p.MOD, t => p.mod.push(t));\n }\n return p;\n },\n changed(flags) {\n return this.changes & flags;\n },\n modified(_) {\n const p = this,\n fields = p.fields;\n return !(fields && p.changes & p.MOD) ? 0 : isArray(_) ? _.some(f => fields[f]) : fields[_];\n },\n filter() {\n error('MultiPulse does not support filtering.');\n },\n materialize() {\n error('MultiPulse does not support materialization.');\n },\n visit(flags, visitor) {\n const p = this,\n pulses = p.pulses,\n n = pulses.length;\n let i = 0;\n if (flags & p.SOURCE) {\n for (; i < n; ++i) {\n pulses[i].visit(flags, visitor);\n }\n } else {\n for (; i < n; ++i) {\n if (pulses[i].stamp === p.stamp) {\n pulses[i].visit(flags, visitor);\n }\n }\n }\n return p;\n }\n});\n\n/* eslint-disable require-atomic-updates */\n\n/**\n * Evaluates the dataflow and returns a Promise that resolves when pulse\n * propagation completes. This method will increment the current timestamp\n * and process all updated, pulsed and touched operators. When invoked for\n * the first time, all registered operators will be processed. This method\n * should not be invoked by third-party clients, use {@link runAsync} or\n * {@link run} instead.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode package.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Promise} - A promise that resolves to this dataflow after\n * evaluation completes.\n */\nasync function evaluate(encode, prerun, postrun) {\n const df = this,\n async = [];\n\n // if the pulse value is set, this is a re-entrant call\n if (df._pulse) return reentrant(df);\n\n // wait for pending datasets to load\n if (df._pending) await df._pending;\n\n // invoke prerun function, if provided\n if (prerun) await asyncCallback(df, prerun);\n\n // exit early if there are no updates\n if (!df._touched.length) {\n df.debug('Dataflow invoked, but nothing to do.');\n return df;\n }\n\n // increment timestamp clock\n const stamp = ++df._clock;\n\n // set the current pulse\n df._pulse = new Pulse(df, stamp, encode);\n\n // initialize priority queue, reset touched operators\n df._touched.forEach(op => df._enqueue(op, true));\n df._touched = UniqueList(id);\n let count = 0,\n op,\n next,\n error;\n try {\n while (df._heap.size() > 0) {\n // dequeue operator with highest priority\n op = df._heap.pop();\n\n // re-queue if rank changed\n if (op.rank !== op.qrank) {\n df._enqueue(op, true);\n continue;\n }\n\n // otherwise, evaluate the operator\n next = op.run(df._getPulse(op, encode));\n if (next.then) {\n // await if operator returns a promise directly\n next = await next;\n } else if (next.async) {\n // queue parallel asynchronous execution\n async.push(next.async);\n next = StopPropagation;\n }\n\n // propagate evaluation, enqueue dependent operators\n if (next !== StopPropagation) {\n if (op._targets) op._targets.forEach(op => df._enqueue(op));\n }\n\n // increment visit counter\n ++count;\n }\n } catch (err) {\n df._heap.clear();\n error = err;\n }\n\n // reset pulse map\n df._input = {};\n df._pulse = null;\n df.debug(`Pulse ${stamp}: ${count} operators`);\n if (error) {\n df._postrun = [];\n df.error(error);\n }\n\n // invoke callbacks queued via runAfter\n if (df._postrun.length) {\n const pr = df._postrun.sort((a, b) => b.priority - a.priority);\n df._postrun = [];\n for (let i = 0; i < pr.length; ++i) {\n await asyncCallback(df, pr[i].callback);\n }\n }\n\n // invoke postrun function, if provided\n if (postrun) await asyncCallback(df, postrun);\n\n // handle non-blocking asynchronous callbacks\n if (async.length) {\n Promise.all(async).then(cb => df.runAsync(null, () => {\n cb.forEach(f => {\n try {\n f(df);\n } catch (err) {\n df.error(err);\n }\n });\n }));\n }\n return df;\n}\n\n/**\n * Queues dataflow evaluation to run once any other queued evaluations have\n * completed and returns a Promise that resolves when the queued pulse\n * propagation completes. If provided, a callback function will be invoked\n * immediately before evaluation commences. This method will ensure a\n * separate evaluation is invoked for each time it is called.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode package.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Promise} - A promise that resolves to this dataflow after\n * evaluation completes.\n */\nasync function runAsync(encode, prerun, postrun) {\n // await previously queued functions\n while (this._running) await this._running;\n\n // run dataflow, manage running promise\n const clear = () => this._running = null;\n (this._running = this.evaluate(encode, prerun, postrun)).then(clear, clear);\n return this._running;\n}\n\n/**\n * Requests dataflow evaluation and the immediately returns this dataflow\n * instance. If there are pending data loading or other asynchronous\n * operations, the dataflow will evaluate asynchronously after this method\n * has been invoked. To track when dataflow evaluation completes, use the\n * {@link runAsync} method instead. This method will raise an error if\n * invoked while the dataflow is already in the midst of evaluation.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode module.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Dataflow} - This dataflow instance.\n */\nfunction run(encode, prerun, postrun) {\n return this._pulse ? reentrant(this) : (this.evaluate(encode, prerun, postrun), this);\n}\n\n/**\n * Schedules a callback function to be invoked after the current pulse\n * propagation completes. If no propagation is currently occurring,\n * the function is invoked immediately. Callbacks scheduled via runAfter\n * are invoked immediately upon completion of the current cycle, before\n * any request queued via runAsync. This method is primarily intended for\n * internal use. Third-party callers using runAfter to schedule a callback\n * that invokes {@link run} or {@link runAsync} should not use this method,\n * but instead use {@link runAsync} with prerun or postrun arguments.\n * @param {function(Dataflow)} callback - The callback function to run.\n * The callback will be invoked with this Dataflow instance as its\n * sole argument.\n * @param {boolean} enqueue - A boolean flag indicating that the\n * callback should be queued up to run after the next propagation\n * cycle, suppressing immediate invocation when propagation is not\n * currently occurring.\n * @param {number} [priority] - A priority value used to sort registered\n * callbacks to determine execution order. This argument is intended\n * for internal Vega use only.\n */\nfunction runAfter(callback, enqueue, priority) {\n if (this._pulse || enqueue) {\n // pulse propagation is currently running, queue to run after\n this._postrun.push({\n priority: priority || 0,\n callback: callback\n });\n } else {\n // pulse propagation already complete, invoke immediately\n try {\n callback(this);\n } catch (err) {\n this.error(err);\n }\n }\n}\n\n/**\n * Raise an error for re-entrant dataflow evaluation.\n */\nfunction reentrant(df) {\n df.error('Dataflow already running. Use runAsync() to chain invocations.');\n return df;\n}\n\n/**\n * Enqueue an operator into the priority queue for evaluation. The operator\n * will be enqueued if it has no registered pulse for the current cycle, or if\n * the force argument is true. Upon enqueue, this method also sets the\n * operator's qrank to the current rank value.\n * @param {Operator} op - The operator to enqueue.\n * @param {boolean} [force] - A flag indicating if the operator should be\n * forceably added to the queue, even if it has already been previously\n * enqueued during the current pulse propagation. This is useful when the\n * dataflow graph is dynamically modified and the operator rank changes.\n */\nfunction enqueue(op, force) {\n const q = op.stamp < this._clock;\n if (q) op.stamp = this._clock;\n if (q || force) {\n op.qrank = op.rank;\n this._heap.push(op);\n }\n}\n\n/**\n * Provide a correct pulse for evaluating an operator. If the operator has an\n * explicit source operator, we will try to pull the pulse(s) from it.\n * If there is an array of source operators, we build a multi-pulse.\n * Otherwise, we return a current pulse with correct source data.\n * If the pulse is the pulse map has an explicit target set, we use that.\n * Else if the pulse on the upstream source operator is current, we use that.\n * Else we use the pulse from the pulse map, but copy the source tuple array.\n * @param {Operator} op - The operator for which to get an input pulse.\n * @param {string} [encode] - An (optional) encoding set name with which to\n * annotate the returned pulse. See {@link run} for more information.\n */\nfunction getPulse(op, encode) {\n const s = op.source,\n stamp = this._clock;\n return s && isArray(s) ? new MultiPulse(this, stamp, s.map(_ => _.pulse), encode) : this._input[op.id] || singlePulse(this._pulse, s && s.pulse);\n}\nfunction singlePulse(p, s) {\n if (s && s.stamp === p.stamp) {\n return s;\n }\n p = p.fork();\n if (s && s !== StopPropagation) {\n p.source = s.source;\n }\n return p;\n}\n\nconst NO_OPT = {\n skip: false,\n force: false\n};\n\n/**\n * Touches an operator, scheduling it to be evaluated. If invoked outside of\n * a pulse propagation, the operator will be evaluated the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the operator\n * will be queued for evaluation if and only if the operator has not yet been\n * evaluated on the current propagation timestamp.\n * @param {Operator} op - The operator to touch.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nfunction touch(op, options) {\n const opt = options || NO_OPT;\n if (this._pulse) {\n // if in midst of propagation, add to priority queue\n this._enqueue(op);\n } else {\n // otherwise, queue for next propagation\n this._touched.add(op);\n }\n if (opt.skip) op.skip(true);\n return this;\n}\n\n/**\n * Updates the value of the given operator.\n * @param {Operator} op - The operator to update.\n * @param {*} value - The value to set.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nfunction update(op, value, options) {\n const opt = options || NO_OPT;\n if (op.set(value) || opt.force) {\n this.touch(op, opt);\n }\n return this;\n}\n\n/**\n * Pulses an operator with a changeset of tuples. If invoked outside of\n * a pulse propagation, the pulse will be applied the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the pulse\n * will be added to the set of active pulses and will be applied if and\n * only if the target operator has not yet been evaluated on the current\n * propagation timestamp.\n * @param {Operator} op - The operator to pulse.\n * @param {ChangeSet} value - The tuple changeset to apply.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nfunction pulse(op, changeset, options) {\n this.touch(op, options || NO_OPT);\n const p = new Pulse(this, this._clock + (this._pulse ? 0 : 1)),\n t = op.pulse && op.pulse.source || [];\n p.target = op;\n this._input[op.id] = changeset.pulse(p, t);\n return this;\n}\n\nfunction Heap(cmp) {\n let nodes = [];\n return {\n clear: () => nodes = [],\n size: () => nodes.length,\n peek: () => nodes[0],\n push: x => {\n nodes.push(x);\n return siftdown(nodes, 0, nodes.length - 1, cmp);\n },\n pop: () => {\n const last = nodes.pop();\n let item;\n if (nodes.length) {\n item = nodes[0];\n nodes[0] = last;\n siftup(nodes, 0, cmp);\n } else {\n item = last;\n }\n return item;\n }\n };\n}\nfunction siftdown(array, start, idx, cmp) {\n let parent, pidx;\n const item = array[idx];\n while (idx > start) {\n pidx = idx - 1 >> 1;\n parent = array[pidx];\n if (cmp(item, parent) < 0) {\n array[idx] = parent;\n idx = pidx;\n continue;\n }\n break;\n }\n return array[idx] = item;\n}\nfunction siftup(array, idx, cmp) {\n const start = idx,\n end = array.length,\n item = array[idx];\n let cidx = (idx << 1) + 1,\n ridx;\n while (cidx < end) {\n ridx = cidx + 1;\n if (ridx < end && cmp(array[cidx], array[ridx]) >= 0) {\n cidx = ridx;\n }\n array[idx] = array[cidx];\n idx = cidx;\n cidx = (idx << 1) + 1;\n }\n array[idx] = item;\n return siftdown(array, start, idx, cmp);\n}\n\n/**\n * A dataflow graph for reactive processing of data streams.\n * @constructor\n */\nfunction Dataflow() {\n this.logger(logger());\n this.logLevel(Error);\n this._clock = 0;\n this._rank = 0;\n this._locale = defaultLocale();\n try {\n this._loader = loader();\n } catch (e) {\n // do nothing if loader module is unavailable\n }\n this._touched = UniqueList(id);\n this._input = {};\n this._pulse = null;\n this._heap = Heap((a, b) => a.qrank - b.qrank);\n this._postrun = [];\n}\nfunction logMethod(method) {\n return function () {\n return this._log[method].apply(this, arguments);\n };\n}\nDataflow.prototype = {\n /**\n * The current timestamp of this dataflow. This value reflects the\n * timestamp of the previous dataflow run. The dataflow is initialized\n * with a stamp value of 0. The initial run of the dataflow will have\n * a timestap of 1, and so on. This value will match the\n * {@link Pulse.stamp} property.\n * @return {number} - The current timestamp value.\n */\n stamp() {\n return this._clock;\n },\n /**\n * Gets or sets the loader instance to use for data file loading. A\n * loader object must provide a \"load\" method for loading files and a\n * \"sanitize\" method for checking URL/filename validity. Both methods\n * should accept a URI and options hash as arguments, and return a Promise\n * that resolves to the loaded file contents (load) or a hash containing\n * sanitized URI data with the sanitized url assigned to the \"href\" property\n * (sanitize).\n * @param {object} _ - The loader instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current loader instance. Otherwise returns this Dataflow instance.\n */\n loader(_) {\n if (arguments.length) {\n this._loader = _;\n return this;\n } else {\n return this._loader;\n }\n },\n /**\n * Gets or sets the locale instance to use for formatting and parsing\n * string values. The locale object should be provided by the\n * vega-format library, and include methods such as format, timeFormat,\n * utcFormat, timeParse, and utcParse.\n * @param {object} _ - The locale instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current locale instance. Otherwise returns this Dataflow instance.\n */\n locale(_) {\n if (arguments.length) {\n this._locale = _;\n return this;\n } else {\n return this._locale;\n }\n },\n /**\n * Get or set the logger instance used to log messages. If no arguments are\n * provided, returns the current logger instance. Otherwise, sets the logger\n * and return this Dataflow instance. Provided loggers must support the full\n * API of logger objects generated by the vega-util logger method. Note that\n * by default the log level of the new logger will be used; use the logLevel\n * method to adjust the log level as needed.\n */\n logger(logger) {\n if (arguments.length) {\n this._log = logger;\n return this;\n } else {\n return this._log;\n }\n },\n /**\n * Logs an error message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit error messages.\n */\n error: logMethod('error'),\n /**\n * Logs a warning message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit warning messages.\n */\n warn: logMethod('warn'),\n /**\n * Logs a information message. By default, logged messages are written to\n * console output. The message will only be logged if the current log level is\n * high enough to permit information messages.\n */\n info: logMethod('info'),\n /**\n * Logs a debug message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit debug messages.\n */\n debug: logMethod('debug'),\n /**\n * Get or set the current log level. If an argument is provided, it\n * will be used as the new log level.\n * @param {number} [level] - Should be one of None, Warn, Info\n * @return {number} - The current log level.\n */\n logLevel: logMethod('level'),\n /**\n * Empty entry threshold for garbage cleaning. Map data structures will\n * perform cleaning once the number of empty entries exceeds this value.\n */\n cleanThreshold: 1e4,\n // OPERATOR REGISTRATION\n add,\n connect,\n rank,\n rerank,\n // OPERATOR UPDATES\n pulse,\n touch,\n update,\n changeset,\n // DATA LOADING\n ingest,\n parse,\n preload,\n request,\n // EVENT HANDLING\n events,\n on,\n // PULSE PROPAGATION\n evaluate,\n run,\n runAsync,\n runAfter,\n _enqueue: enqueue,\n _getPulse: getPulse\n};\n\n/**\n * Abstract class for operators that process data tuples.\n * Subclasses must provide a {@link transform} method for operator processing.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {Operator} [source] - The operator from which to receive pulses.\n */\nfunction Transform(init, params) {\n Operator.call(this, init, null, params);\n}\ninherits(Transform, Operator, {\n /**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\n run(pulse) {\n if (pulse.stamp < this.stamp) return pulse.StopPropagation;\n let rv;\n if (this.skip()) {\n this.skip(false);\n } else {\n rv = this.evaluate(pulse);\n }\n rv = rv || pulse;\n if (rv.then) {\n rv = rv.then(_ => this.pulse = _);\n } else if (rv !== pulse.StopPropagation) {\n this.pulse = rv;\n }\n return rv;\n },\n /**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Marshalls parameter values and then invokes {@link transform}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n value (including undefined) will let the input pulse pass through.\n */\n evaluate(pulse) {\n const params = this.marshall(pulse.stamp),\n out = this.transform(params, pulse);\n params.clear();\n return out;\n },\n /**\n * Process incoming pulses.\n * Subclasses should override this method to implement transforms.\n * @param {Parameters} _ - The operator parameter values.\n * @param {Pulse} pulse - The current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n * value (including undefined) will let the input pulse pass through.\n */\n transform() {}\n});\n\nconst transforms = {};\nfunction definition(type) {\n const t = transform(type);\n return t && t.Definition || null;\n}\nfunction transform(type) {\n type = type && type.toLowerCase();\n return hasOwnProperty(transforms, type) ? transforms[type] : null;\n}\n\nexport { Dataflow, EventStream, MultiPulse, Operator, Parameters, Pulse, Transform, UniqueList, asyncCallback, changeset, definition, derive, ingest$1 as ingest, isChangeSet, isTuple, rederive, replace, stableCompare, transform, transforms, tupleid };\n","import { ascending, quantileSorted, deviation, quantile, median } from 'd3-array';\n\nfunction* numbers (values, valueof) {\n if (valueof == null) {\n for (let value of values) {\n if (value != null && value !== '' && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n value = valueof(value, ++index, values);\n if (value != null && value !== '' && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n\nfunction quantiles (array, p, f) {\n const values = Float64Array.from(numbers(array, f));\n\n // don't depend on return value from typed array sort call\n // protects against undefined sort results in Safari (vega/vega-lite#4964)\n values.sort(ascending);\n return p.map(_ => quantileSorted(values, _));\n}\n\nfunction quartiles (array, f) {\n return quantiles(array, [0.25, 0.50, 0.75], f);\n}\n\n// Scott, D. W. (1992) Multivariate Density Estimation:\n// Theory, Practice, and Visualization. Wiley.\nfunction estimateBandwidth (array, f) {\n const n = array.length,\n d = deviation(array, f),\n q = quartiles(array, f),\n h = (q[2] - q[0]) / 1.34,\n v = Math.min(d, h) || d || Math.abs(q[0]) || 1;\n return 1.06 * v * Math.pow(n, -0.2);\n}\n\nfunction bin (_) {\n // determine range\n const maxb = _.maxbins || 20,\n base = _.base || 10,\n logb = Math.log(base),\n div = _.divide || [5, 2];\n let min = _.extent[0],\n max = _.extent[1],\n step,\n level,\n minstep,\n v,\n i,\n n;\n const span = _.span || max - min || Math.abs(min) || 1;\n if (_.step) {\n // if step size is explicitly given, use that\n step = _.step;\n } else if (_.steps) {\n // if provided, limit choice to acceptable step sizes\n v = span / maxb;\n for (i = 0, n = _.steps.length; i < n && _.steps[i] < v; ++i);\n step = _.steps[Math.max(0, i - 1)];\n } else {\n // else use span to determine step size\n level = Math.ceil(Math.log(maxb) / logb);\n minstep = _.minstep || 0;\n step = Math.max(minstep, Math.pow(base, Math.round(Math.log(span) / logb) - level));\n\n // increase step size if too many bins\n while (Math.ceil(span / step) > maxb) {\n step *= base;\n }\n\n // decrease step size if allowed\n for (i = 0, n = div.length; i < n; ++i) {\n v = step / div[i];\n if (v >= minstep && span / v <= maxb) step = v;\n }\n }\n\n // update precision, min and max\n v = Math.log(step);\n const precision = v >= 0 ? 0 : ~~(-v / logb) + 1,\n eps = Math.pow(base, -precision - 1);\n if (_.nice || _.nice === undefined) {\n v = Math.floor(min / step + eps) * step;\n min = min < v ? v - step : v;\n max = Math.ceil(max / step) * step;\n }\n return {\n start: min,\n stop: max === min ? min + step : max,\n step: step\n };\n}\n\nvar random = Math.random;\nfunction setRandom(r) {\n random = r;\n}\n\nfunction bootstrapCI (array, samples, alpha, f) {\n if (!array.length) return [undefined, undefined];\n const values = Float64Array.from(numbers(array, f)),\n n = values.length,\n m = samples;\n let a, i, j, mu;\n for (j = 0, mu = Array(m); j < m; ++j) {\n for (a = 0, i = 0; i < n; ++i) {\n a += values[~~(random() * n)];\n }\n mu[j] = a / n;\n }\n mu.sort(ascending);\n return [quantile(mu, alpha / 2), quantile(mu, 1 - alpha / 2)];\n}\n\n// Dot density binning for dot plot construction.\n// Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n// https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\nfunction dotbin (array, step, smooth, f) {\n f = f || (_ => _);\n const n = array.length,\n v = new Float64Array(n);\n let i = 0,\n j = 1,\n a = f(array[0]),\n b = a,\n w = a + step,\n x;\n for (; j < n; ++j) {\n x = f(array[j]);\n if (x >= w) {\n b = (a + b) / 2;\n for (; i < j; ++i) v[i] = b;\n w = x + step;\n a = x;\n }\n b = x;\n }\n b = (a + b) / 2;\n for (; i < j; ++i) v[i] = b;\n return smooth ? smoothing(v, step + step / 4) : v;\n}\n\n// perform smoothing to reduce variance\n// swap points between \"adjacent\" stacks\n// Wilkinson defines adjacent as within step/4 units\nfunction smoothing(v, thresh) {\n const n = v.length;\n let a = 0,\n b = 1,\n c,\n d;\n\n // get left stack\n while (v[a] === v[b]) ++b;\n while (b < n) {\n // get right stack\n c = b + 1;\n while (v[b] === v[c]) ++c;\n\n // are stacks adjacent?\n // if so, compare sizes and swap as needed\n if (v[b] - v[b - 1] < thresh) {\n d = b + (a + c - b - b >> 1);\n while (d < b) v[d++] = v[b];\n while (d > b) v[d--] = v[a];\n }\n\n // update left stack indices\n a = b;\n b = c;\n }\n return v;\n}\n\nfunction lcg (seed) {\n // Random numbers using a Linear Congruential Generator with seed value\n // Uses glibc values from https://en.wikipedia.org/wiki/Linear_congruential_generator\n return function () {\n seed = (1103515245 * seed + 12345) % 2147483647;\n return seed / 2147483647;\n };\n}\n\nfunction integer (min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n let a, b, d;\n const dist = {\n min(_) {\n if (arguments.length) {\n a = _ || 0;\n d = b - a;\n return dist;\n } else {\n return a;\n }\n },\n max(_) {\n if (arguments.length) {\n b = _ || 0;\n d = b - a;\n return dist;\n } else {\n return b;\n }\n },\n sample() {\n return a + Math.floor(d * random());\n },\n pdf(x) {\n return x === Math.floor(x) && x >= a && x < b ? 1 / d : 0;\n },\n cdf(x) {\n const v = Math.floor(x);\n return v < a ? 0 : v >= b ? 1 : (v - a + 1) / d;\n },\n icdf(p) {\n return p >= 0 && p <= 1 ? a - 1 + Math.floor(p * d) : NaN;\n }\n };\n return dist.min(min).max(max);\n}\n\nconst SQRT2PI = Math.sqrt(2 * Math.PI);\nconst SQRT2 = Math.SQRT2;\n\nlet nextSample = NaN;\nfunction sampleNormal(mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n let x = 0,\n y = 0,\n rds,\n c;\n if (nextSample === nextSample) {\n x = nextSample;\n nextSample = NaN;\n } else {\n do {\n x = random() * 2 - 1;\n y = random() * 2 - 1;\n rds = x * x + y * y;\n } while (rds === 0 || rds > 1);\n c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform\n x *= c;\n nextSample = y * c;\n }\n return mean + x * stdev;\n}\nfunction densityNormal(value, mean, stdev) {\n stdev = stdev == null ? 1 : stdev;\n const z = (value - (mean || 0)) / stdev;\n return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI);\n}\n\n// Approximation from West (2009)\n// Better Approximations to Cumulative Normal Functions\nfunction cumulativeNormal(value, mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n const z = (value - mean) / stdev,\n Z = Math.abs(z);\n let cd;\n if (Z > 37) {\n cd = 0;\n } else {\n const exp = Math.exp(-Z * Z / 2);\n let sum;\n if (Z < 7.07106781186547) {\n sum = 3.52624965998911e-02 * Z + 0.700383064443688;\n sum = sum * Z + 6.37396220353165;\n sum = sum * Z + 33.912866078383;\n sum = sum * Z + 112.079291497871;\n sum = sum * Z + 221.213596169931;\n sum = sum * Z + 220.206867912376;\n cd = exp * sum;\n sum = 8.83883476483184e-02 * Z + 1.75566716318264;\n sum = sum * Z + 16.064177579207;\n sum = sum * Z + 86.7807322029461;\n sum = sum * Z + 296.564248779674;\n sum = sum * Z + 637.333633378831;\n sum = sum * Z + 793.826512519948;\n sum = sum * Z + 440.413735824752;\n cd = cd / sum;\n } else {\n sum = Z + 0.65;\n sum = Z + 4 / sum;\n sum = Z + 3 / sum;\n sum = Z + 2 / sum;\n sum = Z + 1 / sum;\n cd = exp / sum / 2.506628274631;\n }\n }\n return z > 0 ? 1 - cd : cd;\n}\n\n// Approximation of Probit function using inverse error function.\nfunction quantileNormal(p, mean, stdev) {\n if (p < 0 || p > 1) return NaN;\n return (mean || 0) + (stdev == null ? 1 : stdev) * SQRT2 * erfinv(2 * p - 1);\n}\n\n// Approximate inverse error function. Implementation from \"Approximating\n// the erfinv function\" by Mike Giles, GPU Computing Gems, volume 2, 2010.\n// Ported from Apache Commons Math, http://www.apache.org/licenses/LICENSE-2.0\nfunction erfinv(x) {\n // beware that the logarithm argument must be\n // commputed as (1.0 - x) * (1.0 + x),\n // it must NOT be simplified as 1.0 - x * x as this\n // would induce rounding errors near the boundaries +/-1\n let w = -Math.log((1 - x) * (1 + x)),\n p;\n if (w < 6.25) {\n w -= 3.125;\n p = -3.6444120640178196996e-21;\n p = -1.685059138182016589e-19 + p * w;\n p = 1.2858480715256400167e-18 + p * w;\n p = 1.115787767802518096e-17 + p * w;\n p = -1.333171662854620906e-16 + p * w;\n p = 2.0972767875968561637e-17 + p * w;\n p = 6.6376381343583238325e-15 + p * w;\n p = -4.0545662729752068639e-14 + p * w;\n p = -8.1519341976054721522e-14 + p * w;\n p = 2.6335093153082322977e-12 + p * w;\n p = -1.2975133253453532498e-11 + p * w;\n p = -5.4154120542946279317e-11 + p * w;\n p = 1.051212273321532285e-09 + p * w;\n p = -4.1126339803469836976e-09 + p * w;\n p = -2.9070369957882005086e-08 + p * w;\n p = 4.2347877827932403518e-07 + p * w;\n p = -1.3654692000834678645e-06 + p * w;\n p = -1.3882523362786468719e-05 + p * w;\n p = 0.0001867342080340571352 + p * w;\n p = -0.00074070253416626697512 + p * w;\n p = -0.0060336708714301490533 + p * w;\n p = 0.24015818242558961693 + p * w;\n p = 1.6536545626831027356 + p * w;\n } else if (w < 16.0) {\n w = Math.sqrt(w) - 3.25;\n p = 2.2137376921775787049e-09;\n p = 9.0756561938885390979e-08 + p * w;\n p = -2.7517406297064545428e-07 + p * w;\n p = 1.8239629214389227755e-08 + p * w;\n p = 1.5027403968909827627e-06 + p * w;\n p = -4.013867526981545969e-06 + p * w;\n p = 2.9234449089955446044e-06 + p * w;\n p = 1.2475304481671778723e-05 + p * w;\n p = -4.7318229009055733981e-05 + p * w;\n p = 6.8284851459573175448e-05 + p * w;\n p = 2.4031110387097893999e-05 + p * w;\n p = -0.0003550375203628474796 + p * w;\n p = 0.00095328937973738049703 + p * w;\n p = -0.0016882755560235047313 + p * w;\n p = 0.0024914420961078508066 + p * w;\n p = -0.0037512085075692412107 + p * w;\n p = 0.005370914553590063617 + p * w;\n p = 1.0052589676941592334 + p * w;\n p = 3.0838856104922207635 + p * w;\n } else if (Number.isFinite(w)) {\n w = Math.sqrt(w) - 5.0;\n p = -2.7109920616438573243e-11;\n p = -2.5556418169965252055e-10 + p * w;\n p = 1.5076572693500548083e-09 + p * w;\n p = -3.7894654401267369937e-09 + p * w;\n p = 7.6157012080783393804e-09 + p * w;\n p = -1.4960026627149240478e-08 + p * w;\n p = 2.9147953450901080826e-08 + p * w;\n p = -6.7711997758452339498e-08 + p * w;\n p = 2.2900482228026654717e-07 + p * w;\n p = -9.9298272942317002539e-07 + p * w;\n p = 4.5260625972231537039e-06 + p * w;\n p = -1.9681778105531670567e-05 + p * w;\n p = 7.5995277030017761139e-05 + p * w;\n p = -0.00021503011930044477347 + p * w;\n p = -0.00013871931833623122026 + p * w;\n p = 1.0103004648645343977 + p * w;\n p = 4.8499064014085844221 + p * w;\n } else {\n p = Infinity;\n }\n return p * x;\n}\nfunction gaussian (mean, stdev) {\n let mu, sigma;\n const dist = {\n mean(_) {\n if (arguments.length) {\n mu = _ || 0;\n return dist;\n } else {\n return mu;\n }\n },\n stdev(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n return dist;\n } else {\n return sigma;\n }\n },\n sample: () => sampleNormal(mu, sigma),\n pdf: value => densityNormal(value, mu, sigma),\n cdf: value => cumulativeNormal(value, mu, sigma),\n icdf: p => quantileNormal(p, mu, sigma)\n };\n return dist.mean(mean).stdev(stdev);\n}\n\nfunction kde (support, bandwidth) {\n const kernel = gaussian();\n let n = 0;\n const dist = {\n data(_) {\n if (arguments.length) {\n support = _;\n n = _ ? _.length : 0;\n return dist.bandwidth(bandwidth);\n } else {\n return support;\n }\n },\n bandwidth(_) {\n if (!arguments.length) return bandwidth;\n bandwidth = _;\n if (!bandwidth && support) bandwidth = estimateBandwidth(support);\n return dist;\n },\n sample() {\n return support[~~(random() * n)] + bandwidth * kernel.sample();\n },\n pdf(x) {\n let y = 0,\n i = 0;\n for (; i < n; ++i) {\n y += kernel.pdf((x - support[i]) / bandwidth);\n }\n return y / bandwidth / n;\n },\n cdf(x) {\n let y = 0,\n i = 0;\n for (; i < n; ++i) {\n y += kernel.cdf((x - support[i]) / bandwidth);\n }\n return y / n;\n },\n icdf() {\n throw Error('KDE icdf not supported.');\n }\n };\n return dist.data(support);\n}\n\nfunction sampleLogNormal(mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n return Math.exp(mean + sampleNormal() * stdev);\n}\nfunction densityLogNormal(value, mean, stdev) {\n if (value <= 0) return 0;\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n const z = (Math.log(value) - mean) / stdev;\n return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI * value);\n}\nfunction cumulativeLogNormal(value, mean, stdev) {\n return cumulativeNormal(Math.log(value), mean, stdev);\n}\nfunction quantileLogNormal(p, mean, stdev) {\n return Math.exp(quantileNormal(p, mean, stdev));\n}\nfunction lognormal (mean, stdev) {\n let mu, sigma;\n const dist = {\n mean(_) {\n if (arguments.length) {\n mu = _ || 0;\n return dist;\n } else {\n return mu;\n }\n },\n stdev(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n return dist;\n } else {\n return sigma;\n }\n },\n sample: () => sampleLogNormal(mu, sigma),\n pdf: value => densityLogNormal(value, mu, sigma),\n cdf: value => cumulativeLogNormal(value, mu, sigma),\n icdf: p => quantileLogNormal(p, mu, sigma)\n };\n return dist.mean(mean).stdev(stdev);\n}\n\nfunction mixture (dists, weights) {\n let m = 0,\n w;\n function normalize(x) {\n const w = [];\n let sum = 0,\n i;\n for (i = 0; i < m; ++i) {\n sum += w[i] = x[i] == null ? 1 : +x[i];\n }\n for (i = 0; i < m; ++i) {\n w[i] /= sum;\n }\n return w;\n }\n const dist = {\n weights(_) {\n if (arguments.length) {\n w = normalize(weights = _ || []);\n return dist;\n }\n return weights;\n },\n distributions(_) {\n if (arguments.length) {\n if (_) {\n m = _.length;\n dists = _;\n } else {\n m = 0;\n dists = [];\n }\n return dist.weights(weights);\n }\n return dists;\n },\n sample() {\n const r = random();\n let d = dists[m - 1],\n v = w[0],\n i = 0;\n\n // first select distribution\n for (; i < m - 1; v += w[++i]) {\n if (r < v) {\n d = dists[i];\n break;\n }\n }\n // then sample from it\n return d.sample();\n },\n pdf(x) {\n let p = 0,\n i = 0;\n for (; i < m; ++i) {\n p += w[i] * dists[i].pdf(x);\n }\n return p;\n },\n cdf(x) {\n let p = 0,\n i = 0;\n for (; i < m; ++i) {\n p += w[i] * dists[i].cdf(x);\n }\n return p;\n },\n icdf() {\n throw Error('Mixture icdf not supported.');\n }\n };\n return dist.distributions(dists).weights(weights);\n}\n\nfunction sampleUniform(min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return min + (max - min) * random();\n}\nfunction densityUniform(value, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return value >= min && value <= max ? 1 / (max - min) : 0;\n}\nfunction cumulativeUniform(value, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return value < min ? 0 : value > max ? 1 : (value - min) / (max - min);\n}\nfunction quantileUniform(p, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return p >= 0 && p <= 1 ? min + p * (max - min) : NaN;\n}\nfunction uniform (min, max) {\n let a, b;\n const dist = {\n min(_) {\n if (arguments.length) {\n a = _ || 0;\n return dist;\n } else {\n return a;\n }\n },\n max(_) {\n if (arguments.length) {\n b = _ == null ? 1 : _;\n return dist;\n } else {\n return b;\n }\n },\n sample: () => sampleUniform(a, b),\n pdf: value => densityUniform(value, a, b),\n cdf: value => cumulativeUniform(value, a, b),\n icdf: p => quantileUniform(p, a, b)\n };\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return dist.min(min).max(max);\n}\n\nfunction constant (data, x, y) {\n let mean = 0,\n n = 0;\n for (const d of data) {\n const val = y(d);\n if (x(d) == null || val == null || isNaN(val)) continue;\n mean += (val - mean) / ++n;\n }\n return {\n coef: [mean],\n predict: () => mean,\n rSquared: 0\n };\n}\n\n// Ordinary Least Squares\nfunction ols (uX, uY, uXY, uX2) {\n const delta = uX2 - uX * uX,\n slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta,\n intercept = uY - slope * uX;\n return [intercept, slope];\n}\n\nfunction points(data, x, y, sort) {\n data = data.filter(d => {\n let u = x(d),\n v = y(d);\n return u != null && (u = +u) >= u && v != null && (v = +v) >= v;\n });\n if (sort) {\n data.sort((a, b) => x(a) - x(b));\n }\n const n = data.length,\n X = new Float64Array(n),\n Y = new Float64Array(n);\n\n // extract values, calculate means\n let i = 0,\n ux = 0,\n uy = 0,\n xv,\n yv,\n d;\n for (d of data) {\n X[i] = xv = +x(d);\n Y[i] = yv = +y(d);\n ++i;\n ux += (xv - ux) / i;\n uy += (yv - uy) / i;\n }\n\n // mean center the data\n for (i = 0; i < n; ++i) {\n X[i] -= ux;\n Y[i] -= uy;\n }\n return [X, Y, ux, uy];\n}\nfunction visitPoints(data, x, y, callback) {\n let i = -1,\n u,\n v;\n for (const d of data) {\n u = x(d);\n v = y(d);\n if (u != null && (u = +u) >= u && v != null && (v = +v) >= v) {\n callback(u, v, ++i);\n }\n }\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction rSquared (data, x, y, uY, predict) {\n let SSE = 0,\n SST = 0;\n visitPoints(data, x, y, (dx, dy) => {\n const sse = dy - predict(dx),\n sst = dy - uY;\n SSE += sse * sse;\n SST += sst * sst;\n });\n return 1 - SSE / SST;\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction linear (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] + coef[1] * x;\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction log (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n dx = Math.log(dx);\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] + coef[1] * Math.log(x);\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n\nfunction exp (data, x, y) {\n // eslint-disable-next-line no-unused-vars\n const [xv, yv, ux, uy] = points(data, x, y);\n let YL = 0,\n XY = 0,\n XYL = 0,\n X2Y = 0,\n n = 0,\n dx,\n ly,\n xy;\n visitPoints(data, x, y, (_, dy) => {\n dx = xv[n++];\n ly = Math.log(dy);\n xy = dx * dy;\n YL += (dy * ly - YL) / n;\n XY += (xy - XY) / n;\n XYL += (xy * ly - XYL) / n;\n X2Y += (dx * xy - X2Y) / n;\n });\n const [c0, c1] = ols(XY / uy, YL / uy, XYL / uy, X2Y / uy),\n predict = x => Math.exp(c0 + c1 * (x - ux));\n return {\n coef: [Math.exp(c0 - c1 * ux), c1],\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction pow (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n YS = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n const lx = Math.log(dx),\n ly = Math.log(dy);\n ++n;\n X += (lx - X) / n;\n Y += (ly - Y) / n;\n XY += (lx * ly - XY) / n;\n X2 += (lx * lx - X2) / n;\n YS += (dy - YS) / n;\n });\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] * Math.pow(x, coef[1]);\n coef[0] = Math.exp(coef[0]);\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, YS, predict)\n };\n}\n\nfunction quad (data, x, y) {\n const [xv, yv, ux, uy] = points(data, x, y),\n n = xv.length;\n let X2 = 0,\n X3 = 0,\n X4 = 0,\n XY = 0,\n X2Y = 0,\n i,\n dx,\n dy,\n x2;\n for (i = 0; i < n;) {\n dx = xv[i];\n dy = yv[i++];\n x2 = dx * dx;\n X2 += (x2 - X2) / i;\n X3 += (x2 * dx - X3) / i;\n X4 += (x2 * x2 - X4) / i;\n XY += (dx * dy - XY) / i;\n X2Y += (x2 * dy - X2Y) / i;\n }\n const X2X2 = X4 - X2 * X2,\n d = X2 * X2X2 - X3 * X3,\n a = (X2Y * X2 - XY * X3) / d,\n b = (XY * X2X2 - X2Y * X3) / d,\n c = -a * X2,\n predict = x => {\n x = x - ux;\n return a * x * x + b * x + c + uy;\n };\n\n // transform coefficients back from mean-centered space\n return {\n coef: [c - b * ux + a * ux * ux + uy, b - 2 * a * ux, a],\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n// ... which was adapted from regression-js by Tom Alexander\n// Source: https://github.com/Tom-Alexander/regression-js/blob/master/src/regression.js#L246\n// License: https://github.com/Tom-Alexander/regression-js/blob/master/LICENSE\nfunction poly (data, x, y, order) {\n // use more efficient methods for lower orders\n if (order === 0) return constant(data, x, y);\n if (order === 1) return linear(data, x, y);\n if (order === 2) return quad(data, x, y);\n const [xv, yv, ux, uy] = points(data, x, y),\n n = xv.length,\n lhs = [],\n rhs = [],\n k = order + 1;\n let i, j, l, v, c;\n for (i = 0; i < k; ++i) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i) * yv[l];\n }\n lhs.push(v);\n c = new Float64Array(k);\n for (j = 0; j < k; ++j) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i + j);\n }\n c[j] = v;\n }\n rhs.push(c);\n }\n rhs.push(lhs);\n const coef = gaussianElimination(rhs),\n predict = x => {\n x -= ux;\n let y = uy + coef[0] + coef[1] * x + coef[2] * x * x;\n for (i = 3; i < k; ++i) y += coef[i] * Math.pow(x, i);\n return y;\n };\n return {\n coef: uncenter(k, coef, -ux, uy),\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\nfunction uncenter(k, a, x, y) {\n const z = Array(k);\n let i, j, v, c;\n\n // initialize to zero\n for (i = 0; i < k; ++i) z[i] = 0;\n\n // polynomial expansion\n for (i = k - 1; i >= 0; --i) {\n v = a[i];\n c = 1;\n z[i] += v;\n for (j = 1; j <= i; ++j) {\n c *= (i + 1 - j) / j; // binomial coefficent\n z[i - j] += v * Math.pow(x, j) * c;\n }\n }\n\n // bias term\n z[0] += y;\n return z;\n}\n\n// Given an array for a two-dimensional matrix and the polynomial order,\n// solve A * x = b using Gaussian elimination.\nfunction gaussianElimination(matrix) {\n const n = matrix.length - 1,\n coef = [];\n let i, j, k, r, t;\n for (i = 0; i < n; ++i) {\n r = i; // max row\n for (j = i + 1; j < n; ++j) {\n if (Math.abs(matrix[i][j]) > Math.abs(matrix[i][r])) {\n r = j;\n }\n }\n for (k = i; k < n + 1; ++k) {\n t = matrix[k][i];\n matrix[k][i] = matrix[k][r];\n matrix[k][r] = t;\n }\n for (j = i + 1; j < n; ++j) {\n for (k = n; k >= i; k--) {\n matrix[k][j] -= matrix[k][i] * matrix[i][j] / matrix[i][i];\n }\n }\n }\n for (j = n - 1; j >= 0; --j) {\n t = 0;\n for (k = j + 1; k < n; ++k) {\n t += matrix[k][j] * coef[k];\n }\n coef[j] = (matrix[n][j] - t) / matrix[j][j];\n }\n return coef;\n}\n\nconst maxiters = 2,\n epsilon = 1e-12;\n\n// Adapted from science.js by Jason Davies\n// Source: https://github.com/jasondavies/science.js/blob/master/src/stats/loess.js\n// License: https://github.com/jasondavies/science.js/blob/master/LICENSE\nfunction loess (data, x, y, bandwidth) {\n const [xv, yv, ux, uy] = points(data, x, y, true),\n n = xv.length,\n bw = Math.max(2, ~~(bandwidth * n)),\n // # nearest neighbors\n yhat = new Float64Array(n),\n residuals = new Float64Array(n),\n robustWeights = new Float64Array(n).fill(1);\n for (let iter = -1; ++iter <= maxiters;) {\n const interval = [0, bw - 1];\n for (let i = 0; i < n; ++i) {\n const dx = xv[i],\n i0 = interval[0],\n i1 = interval[1],\n edge = dx - xv[i0] > xv[i1] - dx ? i0 : i1;\n let W = 0,\n X = 0,\n Y = 0,\n XY = 0,\n X2 = 0;\n const denom = 1 / Math.abs(xv[edge] - dx || 1); // avoid singularity!\n\n for (let k = i0; k <= i1; ++k) {\n const xk = xv[k],\n yk = yv[k],\n w = tricube(Math.abs(dx - xk) * denom) * robustWeights[k],\n xkw = xk * w;\n W += w;\n X += xkw;\n Y += yk * w;\n XY += yk * xkw;\n X2 += xk * xkw;\n }\n\n // linear regression fit\n const [a, b] = ols(X / W, Y / W, XY / W, X2 / W);\n yhat[i] = a + b * dx;\n residuals[i] = Math.abs(yv[i] - yhat[i]);\n updateInterval(xv, i + 1, interval);\n }\n if (iter === maxiters) {\n break;\n }\n const medianResidual = median(residuals);\n if (Math.abs(medianResidual) < epsilon) break;\n for (let i = 0, arg, w; i < n; ++i) {\n arg = residuals[i] / (6 * medianResidual);\n // default to epsilon (rather than zero) for large deviations\n // keeping weights tiny but non-zero prevents singularites\n robustWeights[i] = arg >= 1 ? epsilon : (w = 1 - arg * arg) * w;\n }\n }\n return output(xv, yhat, ux, uy);\n}\n\n// weighting kernel for local regression\nfunction tricube(x) {\n return (x = 1 - x * x * x) * x * x;\n}\n\n// advance sliding window interval of nearest neighbors\nfunction updateInterval(xv, i, interval) {\n const val = xv[i];\n let left = interval[0],\n right = interval[1] + 1;\n if (right >= xv.length) return;\n\n // step right if distance to new right edge is <= distance to old left edge\n // step when distance is equal to ensure movement over duplicate x values\n while (i > left && xv[right] - val <= val - xv[left]) {\n interval[0] = ++left;\n interval[1] = right;\n ++right;\n }\n}\n\n// generate smoothed output points\n// average points with repeated x values\nfunction output(xv, yhat, ux, uy) {\n const n = xv.length,\n out = [];\n let i = 0,\n cnt = 0,\n prev = [],\n v;\n for (; i < n; ++i) {\n v = xv[i] + ux;\n if (prev[0] === v) {\n // average output values via online update\n prev[1] += (yhat[i] - prev[1]) / ++cnt;\n } else {\n // add new output point\n cnt = 0;\n prev[1] += uy;\n prev = [v, yhat[i]];\n out.push(prev);\n }\n }\n prev[1] += uy;\n return out;\n}\n\n// subdivide up to accuracy of 0.5 degrees\nconst MIN_RADIANS = 0.5 * Math.PI / 180;\n\n// Adaptively sample an interpolated function over a domain extent\nfunction sampleCurve (f, extent, minSteps, maxSteps) {\n minSteps = minSteps || 25;\n maxSteps = Math.max(minSteps, maxSteps || 200);\n const point = x => [x, f(x)],\n minX = extent[0],\n maxX = extent[1],\n span = maxX - minX,\n stop = span / maxSteps,\n prev = [point(minX)],\n next = [];\n if (minSteps === maxSteps) {\n // no adaptation, sample uniform grid directly and return\n for (let i = 1; i < maxSteps; ++i) {\n prev.push(point(minX + i / minSteps * span));\n }\n prev.push(point(maxX));\n return prev;\n } else {\n // sample minimum points on uniform grid\n // then move on to perform adaptive refinement\n next.push(point(maxX));\n for (let i = minSteps; --i > 0;) {\n next.push(point(minX + i / minSteps * span));\n }\n }\n let p0 = prev[0];\n let p1 = next[next.length - 1];\n const sx = 1 / span;\n const sy = scaleY(p0[1], next);\n while (p1) {\n // midpoint for potential curve subdivision\n const pm = point((p0[0] + p1[0]) / 2);\n const dx = pm[0] - p0[0] >= stop;\n if (dx && angleDelta(p0, pm, p1, sx, sy) > MIN_RADIANS) {\n // maximum resolution has not yet been met, and\n // subdivision midpoint is sufficiently different from endpoint\n // save subdivision, push midpoint onto the visitation stack\n next.push(pm);\n } else {\n // subdivision midpoint sufficiently similar to endpoint\n // skip subdivision, store endpoint, move to next point on the stack\n p0 = p1;\n prev.push(p1);\n next.pop();\n }\n p1 = next[next.length - 1];\n }\n return prev;\n}\nfunction scaleY(init, points) {\n let ymin = init;\n let ymax = init;\n const n = points.length;\n for (let i = 0; i < n; ++i) {\n const y = points[i][1];\n if (y < ymin) ymin = y;\n if (y > ymax) ymax = y;\n }\n return 1 / (ymax - ymin);\n}\nfunction angleDelta(p, q, r, sx, sy) {\n const a0 = Math.atan2(sy * (r[1] - p[1]), sx * (r[0] - p[0])),\n a1 = Math.atan2(sy * (q[1] - p[1]), sx * (q[0] - p[0]));\n return Math.abs(a0 - a1);\n}\n\nexport { estimateBandwidth as bandwidthNRD, bin, bootstrapCI, cumulativeLogNormal, cumulativeNormal, cumulativeUniform, densityLogNormal, densityNormal, densityUniform, dotbin, quantileLogNormal, quantileNormal, quantileUniform, quantiles, quartiles, random, integer as randomInteger, kde as randomKDE, lcg as randomLCG, lognormal as randomLogNormal, mixture as randomMixture, gaussian as randomNormal, uniform as randomUniform, constant as regressionConstant, exp as regressionExp, linear as regressionLinear, loess as regressionLoess, log as regressionLog, poly as regressionPoly, pow as regressionPow, quad as regressionQuad, sampleCurve, sampleLogNormal, sampleNormal, sampleUniform, setRandom };\n","import { extend, identity, field, hasOwnProperty, extentIndex, inherits, array, accessorName, error, accessorFields, accessor, toNumber, merge, compare, truthy, extent, span, fastmap, isArray, key, ascending, peek, zero, constant } from 'vega-util';\nimport { tupleid, Transform, replace, ingest, stableCompare, Operator, derive, rederive } from 'vega-dataflow';\nimport { quartiles, bootstrapCI, bin, randomKDE, randomMixture, randomNormal, randomLogNormal, randomUniform, sampleCurve, dotbin, quantiles, random } from 'vega-statistics';\nimport { median, mean, min, max, range, bisector } from 'd3-array';\nimport { TIME_UNITS, utcInterval, timeInterval, timeBin, timeUnits, utcFloor, timeFloor } from 'vega-time';\n\nfunction multikey(f) {\n return x => {\n const n = f.length;\n let i = 1,\n k = String(f[0](x));\n for (; i < n; ++i) {\n k += '|' + f[i](x);\n }\n return k;\n };\n}\nfunction groupkey(fields) {\n return !fields || !fields.length ? function () {\n return '';\n } : fields.length === 1 ? fields[0] : multikey(fields);\n}\n\nfunction measureName(op, field, as) {\n return as || op + (!field ? '' : '_' + field);\n}\nconst noop = () => {};\nconst base_op = {\n init: noop,\n add: noop,\n rem: noop,\n idx: 0\n};\nconst AggregateOps = {\n values: {\n init: m => m.cell.store = true,\n value: m => m.cell.data.values(),\n idx: -1\n },\n count: {\n value: m => m.cell.num\n },\n __count__: {\n value: m => m.missing + m.valid\n },\n missing: {\n value: m => m.missing\n },\n valid: {\n value: m => m.valid\n },\n sum: {\n init: m => m.sum = 0,\n value: m => m.sum,\n add: (m, v) => m.sum += +v,\n rem: (m, v) => m.sum -= v\n },\n product: {\n init: m => m.product = 1,\n value: m => m.valid ? m.product : undefined,\n add: (m, v) => m.product *= v,\n rem: (m, v) => m.product /= v\n },\n mean: {\n init: m => m.mean = 0,\n value: m => m.valid ? m.mean : undefined,\n add: (m, v) => (m.mean_d = v - m.mean, m.mean += m.mean_d / m.valid),\n rem: (m, v) => (m.mean_d = v - m.mean, m.mean -= m.valid ? m.mean_d / m.valid : m.mean)\n },\n average: {\n value: m => m.valid ? m.mean : undefined,\n req: ['mean'],\n idx: 1\n },\n variance: {\n init: m => m.dev = 0,\n value: m => m.valid > 1 ? m.dev / (m.valid - 1) : undefined,\n add: (m, v) => m.dev += m.mean_d * (v - m.mean),\n rem: (m, v) => m.dev -= m.mean_d * (v - m.mean),\n req: ['mean'],\n idx: 1\n },\n variancep: {\n value: m => m.valid > 1 ? m.dev / m.valid : undefined,\n req: ['variance'],\n idx: 2\n },\n stdev: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / (m.valid - 1)) : undefined,\n req: ['variance'],\n idx: 2\n },\n stdevp: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / m.valid) : undefined,\n req: ['variance'],\n idx: 2\n },\n stderr: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / (m.valid * (m.valid - 1))) : undefined,\n req: ['variance'],\n idx: 2\n },\n distinct: {\n value: m => m.cell.data.distinct(m.get),\n req: ['values'],\n idx: 3\n },\n ci0: {\n value: m => m.cell.data.ci0(m.get),\n req: ['values'],\n idx: 3\n },\n ci1: {\n value: m => m.cell.data.ci1(m.get),\n req: ['values'],\n idx: 3\n },\n median: {\n value: m => m.cell.data.q2(m.get),\n req: ['values'],\n idx: 3\n },\n q1: {\n value: m => m.cell.data.q1(m.get),\n req: ['values'],\n idx: 3\n },\n q3: {\n value: m => m.cell.data.q3(m.get),\n req: ['values'],\n idx: 3\n },\n min: {\n init: m => m.min = undefined,\n value: m => m.min = Number.isNaN(m.min) ? m.cell.data.min(m.get) : m.min,\n add: (m, v) => {\n if (v < m.min || m.min === undefined) m.min = v;\n },\n rem: (m, v) => {\n if (v <= m.min) m.min = NaN;\n },\n req: ['values'],\n idx: 4\n },\n max: {\n init: m => m.max = undefined,\n value: m => m.max = Number.isNaN(m.max) ? m.cell.data.max(m.get) : m.max,\n add: (m, v) => {\n if (v > m.max || m.max === undefined) m.max = v;\n },\n rem: (m, v) => {\n if (v >= m.max) m.max = NaN;\n },\n req: ['values'],\n idx: 4\n },\n argmin: {\n init: m => m.argmin = undefined,\n value: m => m.argmin || m.cell.data.argmin(m.get),\n add: (m, v, t) => {\n if (v < m.min) m.argmin = t;\n },\n rem: (m, v) => {\n if (v <= m.min) m.argmin = undefined;\n },\n req: ['min', 'values'],\n idx: 3\n },\n argmax: {\n init: m => m.argmax = undefined,\n value: m => m.argmax || m.cell.data.argmax(m.get),\n add: (m, v, t) => {\n if (v > m.max) m.argmax = t;\n },\n rem: (m, v) => {\n if (v >= m.max) m.argmax = undefined;\n },\n req: ['max', 'values'],\n idx: 3\n }\n};\nconst ValidAggregateOps = Object.keys(AggregateOps).filter(d => d !== '__count__');\nfunction measure(key, value) {\n return out => extend({\n name: key,\n out: out || key\n }, base_op, value);\n}\n[...ValidAggregateOps, '__count__'].forEach(key => {\n AggregateOps[key] = measure(key, AggregateOps[key]);\n});\nfunction createMeasure(op, name) {\n return AggregateOps[op](name);\n}\nfunction compareIndex(a, b) {\n return a.idx - b.idx;\n}\nfunction resolve(agg) {\n const map = {};\n agg.forEach(a => map[a.name] = a);\n const getreqs = a => {\n if (!a.req) return;\n a.req.forEach(key => {\n if (!map[key]) getreqs(map[key] = AggregateOps[key]());\n });\n };\n agg.forEach(getreqs);\n return Object.values(map).sort(compareIndex);\n}\nfunction init() {\n this.valid = 0;\n this.missing = 0;\n this._ops.forEach(op => op.init(this));\n}\nfunction add(v, t) {\n if (v == null || v === '') {\n ++this.missing;\n return;\n }\n if (v !== v) return;\n ++this.valid;\n this._ops.forEach(op => op.add(this, v, t));\n}\nfunction rem(v, t) {\n if (v == null || v === '') {\n --this.missing;\n return;\n }\n if (v !== v) return;\n --this.valid;\n this._ops.forEach(op => op.rem(this, v, t));\n}\nfunction set(t) {\n this._out.forEach(op => t[op.out] = op.value(this));\n return t;\n}\nfunction compileMeasures(agg, field) {\n const get = field || identity,\n ops = resolve(agg),\n out = agg.slice().sort(compareIndex);\n function ctr(cell) {\n this._ops = ops;\n this._out = out;\n this.cell = cell;\n this.init();\n }\n ctr.prototype.init = init;\n ctr.prototype.add = add;\n ctr.prototype.rem = rem;\n ctr.prototype.set = set;\n ctr.prototype.get = get;\n ctr.fields = agg.map(op => op.out);\n return ctr;\n}\n\nfunction TupleStore(key) {\n this._key = key ? field(key) : tupleid;\n this.reset();\n}\nconst prototype$1 = TupleStore.prototype;\nprototype$1.reset = function () {\n this._add = [];\n this._rem = [];\n this._ext = null;\n this._get = null;\n this._q = null;\n};\nprototype$1.add = function (v) {\n this._add.push(v);\n};\nprototype$1.rem = function (v) {\n this._rem.push(v);\n};\nprototype$1.values = function () {\n this._get = null;\n if (this._rem.length === 0) return this._add;\n const a = this._add,\n r = this._rem,\n k = this._key,\n n = a.length,\n m = r.length,\n x = Array(n - m),\n map = {};\n let i, j, v;\n\n // use unique key field to clear removed values\n for (i = 0; i < m; ++i) {\n map[k(r[i])] = 1;\n }\n for (i = 0, j = 0; i < n; ++i) {\n if (map[k(v = a[i])]) {\n map[k(v)] = 0;\n } else {\n x[j++] = v;\n }\n }\n this._rem = [];\n return this._add = x;\n};\n\n// memoizing statistics methods\n\nprototype$1.distinct = function (get) {\n const v = this.values(),\n map = {};\n let n = v.length,\n count = 0,\n s;\n while (--n >= 0) {\n s = get(v[n]) + '';\n if (!hasOwnProperty(map, s)) {\n map[s] = 1;\n ++count;\n }\n }\n return count;\n};\nprototype$1.extent = function (get) {\n if (this._get !== get || !this._ext) {\n const v = this.values(),\n i = extentIndex(v, get);\n this._ext = [v[i[0]], v[i[1]]];\n this._get = get;\n }\n return this._ext;\n};\nprototype$1.argmin = function (get) {\n return this.extent(get)[0] || {};\n};\nprototype$1.argmax = function (get) {\n return this.extent(get)[1] || {};\n};\nprototype$1.min = function (get) {\n const m = this.extent(get)[0];\n return m != null ? get(m) : undefined;\n};\nprototype$1.max = function (get) {\n const m = this.extent(get)[1];\n return m != null ? get(m) : undefined;\n};\nprototype$1.quartile = function (get) {\n if (this._get !== get || !this._q) {\n this._q = quartiles(this.values(), get);\n this._get = get;\n }\n return this._q;\n};\nprototype$1.q1 = function (get) {\n return this.quartile(get)[0];\n};\nprototype$1.q2 = function (get) {\n return this.quartile(get)[1];\n};\nprototype$1.q3 = function (get) {\n return this.quartile(get)[2];\n};\nprototype$1.ci = function (get) {\n if (this._get !== get || !this._ci) {\n this._ci = bootstrapCI(this.values(), 1000, 0.05, get);\n this._get = get;\n }\n return this._ci;\n};\nprototype$1.ci0 = function (get) {\n return this.ci(get)[0];\n};\nprototype$1.ci1 = function (get) {\n return this.ci(get)[1];\n};\n\n/**\n * Group-by aggregation operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {Array} [params.fields] - An array of accessors to aggregate.\n * @param {Array} [params.ops] - An array of strings indicating aggregation operations.\n * @param {Array} [params.as] - An array of output field names for aggregated values.\n * @param {boolean} [params.cross=false] - A flag indicating that the full\n * cross-product of groupby values should be generated, including empty cells.\n * If true, the drop parameter is ignored and empty cells are retained.\n * @param {boolean} [params.drop=true] - A flag indicating if empty cells should be removed.\n */\nfunction Aggregate(params) {\n Transform.call(this, null, params);\n this._adds = []; // array of added output tuples\n this._mods = []; // array of modified output tuples\n this._alen = 0; // number of active added tuples\n this._mlen = 0; // number of active modified tuples\n this._drop = true; // should empty aggregation cells be removed\n this._cross = false; // produce full cross-product of group-by values\n\n this._dims = []; // group-by dimension accessors\n this._dnames = []; // group-by dimension names\n\n this._measures = []; // collection of aggregation monoids\n this._countOnly = false; // flag indicating only count aggregation\n this._counts = null; // collection of count fields\n this._prev = null; // previous aggregation cells\n\n this._inputs = null; // array of dependent input tuple field names\n this._outputs = null; // array of output tuple field names\n}\n\nAggregate.Definition = {\n 'type': 'Aggregate',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidAggregateOps\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'drop',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'cross',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(Aggregate, Transform, {\n transform(_, pulse) {\n const aggr = this,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n mod = _.modified();\n aggr.stamp = out.stamp;\n if (aggr.value && (mod || pulse.modified(aggr._inputs, true))) {\n aggr._prev = aggr.value;\n aggr.value = mod ? aggr.init(_) : Object.create(null);\n pulse.visit(pulse.SOURCE, t => aggr.add(t));\n } else {\n aggr.value = aggr.value || aggr.init(_);\n pulse.visit(pulse.REM, t => aggr.rem(t));\n pulse.visit(pulse.ADD, t => aggr.add(t));\n }\n\n // Indicate output fields and return aggregate tuples.\n out.modifies(aggr._outputs);\n\n // Should empty cells be dropped?\n aggr._drop = _.drop !== false;\n\n // If domain cross-product requested, generate empty cells as needed\n // and ensure that empty cells are not dropped\n if (_.cross && aggr._dims.length > 1) {\n aggr._drop = false;\n aggr.cross();\n }\n if (pulse.clean() && aggr._drop) {\n out.clean(true).runAfter(() => this.clean());\n }\n return aggr.changes(out);\n },\n cross() {\n const aggr = this,\n curr = aggr.value,\n dims = aggr._dnames,\n vals = dims.map(() => ({})),\n n = dims.length;\n\n // collect all group-by domain values\n function collect(cells) {\n let key, i, t, v;\n for (key in cells) {\n t = cells[key].tuple;\n for (i = 0; i < n; ++i) {\n vals[i][v = t[dims[i]]] = v;\n }\n }\n }\n collect(aggr._prev);\n collect(curr);\n\n // iterate over key cross-product, create cells as needed\n function generate(base, tuple, index) {\n const name = dims[index],\n v = vals[index++];\n for (const k in v) {\n const key = base ? base + '|' + k : k;\n tuple[name] = v[k];\n if (index < n) generate(key, tuple, index);else if (!curr[key]) aggr.cell(key, tuple);\n }\n }\n generate('', {}, 0);\n },\n init(_) {\n // initialize input and output fields\n const inputs = this._inputs = [],\n outputs = this._outputs = [],\n inputMap = {};\n function inputVisit(get) {\n const fields = array(accessorFields(get)),\n n = fields.length;\n let i = 0,\n f;\n for (; i < n; ++i) {\n if (!inputMap[f = fields[i]]) {\n inputMap[f] = 1;\n inputs.push(f);\n }\n }\n }\n\n // initialize group-by dimensions\n this._dims = array(_.groupby);\n this._dnames = this._dims.map(d => {\n const dname = accessorName(d);\n inputVisit(d);\n outputs.push(dname);\n return dname;\n });\n this.cellkey = _.key ? _.key : groupkey(this._dims);\n\n // initialize aggregate measures\n this._countOnly = true;\n this._counts = [];\n this._measures = [];\n const fields = _.fields || [null],\n ops = _.ops || ['count'],\n as = _.as || [],\n n = fields.length,\n map = {};\n let field, op, m, mname, outname, i;\n if (n !== ops.length) {\n error('Unmatched number of fields and aggregate ops.');\n }\n for (i = 0; i < n; ++i) {\n field = fields[i];\n op = ops[i];\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n mname = accessorName(field);\n outname = measureName(op, mname, as[i]);\n outputs.push(outname);\n if (op === 'count') {\n this._counts.push(outname);\n continue;\n }\n m = map[mname];\n if (!m) {\n inputVisit(field);\n m = map[mname] = [];\n m.field = field;\n this._measures.push(m);\n }\n if (op !== 'count') this._countOnly = false;\n m.push(createMeasure(op, outname));\n }\n this._measures = this._measures.map(m => compileMeasures(m, m.field));\n return Object.create(null); // aggregation cells (this.value)\n },\n\n // -- Cell Management -----\n\n cellkey: groupkey(),\n cell(key, t) {\n let cell = this.value[key];\n if (!cell) {\n cell = this.value[key] = this.newcell(key, t);\n this._adds[this._alen++] = cell;\n } else if (cell.num === 0 && this._drop && cell.stamp < this.stamp) {\n cell.stamp = this.stamp;\n this._adds[this._alen++] = cell;\n } else if (cell.stamp < this.stamp) {\n cell.stamp = this.stamp;\n this._mods[this._mlen++] = cell;\n }\n return cell;\n },\n newcell(key, t) {\n const cell = {\n key: key,\n num: 0,\n agg: null,\n tuple: this.newtuple(t, this._prev && this._prev[key]),\n stamp: this.stamp,\n store: false\n };\n if (!this._countOnly) {\n const measures = this._measures,\n n = measures.length;\n cell.agg = Array(n);\n for (let i = 0; i < n; ++i) {\n cell.agg[i] = new measures[i](cell);\n }\n }\n if (cell.store) {\n cell.data = new TupleStore();\n }\n return cell;\n },\n newtuple(t, p) {\n const names = this._dnames,\n dims = this._dims,\n n = dims.length,\n x = {};\n for (let i = 0; i < n; ++i) {\n x[names[i]] = dims[i](t);\n }\n return p ? replace(p.tuple, x) : ingest(x);\n },\n clean() {\n const cells = this.value;\n for (const key in cells) {\n if (cells[key].num === 0) {\n delete cells[key];\n }\n }\n },\n // -- Process Tuples -----\n\n add(t) {\n const key = this.cellkey(t),\n cell = this.cell(key, t);\n cell.num += 1;\n if (this._countOnly) return;\n if (cell.store) cell.data.add(t);\n const agg = cell.agg;\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].add(agg[i].get(t), t);\n }\n },\n rem(t) {\n const key = this.cellkey(t),\n cell = this.cell(key, t);\n cell.num -= 1;\n if (this._countOnly) return;\n if (cell.store) cell.data.rem(t);\n const agg = cell.agg;\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].rem(agg[i].get(t), t);\n }\n },\n celltuple(cell) {\n const tuple = cell.tuple,\n counts = this._counts;\n\n // consolidate stored values\n if (cell.store) {\n cell.data.values();\n }\n\n // update tuple properties\n for (let i = 0, n = counts.length; i < n; ++i) {\n tuple[counts[i]] = cell.num;\n }\n if (!this._countOnly) {\n const agg = cell.agg;\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].set(tuple);\n }\n }\n return tuple;\n },\n changes(out) {\n const adds = this._adds,\n mods = this._mods,\n prev = this._prev,\n drop = this._drop,\n add = out.add,\n rem = out.rem,\n mod = out.mod;\n let cell, key, i, n;\n if (prev) for (key in prev) {\n cell = prev[key];\n if (!drop || cell.num) rem.push(cell.tuple);\n }\n for (i = 0, n = this._alen; i < n; ++i) {\n add.push(this.celltuple(adds[i]));\n adds[i] = null; // for garbage collection\n }\n\n for (i = 0, n = this._mlen; i < n; ++i) {\n cell = mods[i];\n (cell.num === 0 && drop ? rem : mod).push(this.celltuple(cell));\n mods[i] = null; // for garbage collection\n }\n\n this._alen = this._mlen = 0; // reset list of active cells\n this._prev = null;\n return out;\n }\n});\n\n// epsilon bias to offset floating point error (#1737)\nconst EPSILON$1 = 1e-14;\n\n/**\n * Generates a binning function for discretizing data.\n * @constructor\n * @param {object} params - The parameters for this operator. The\n * provided values should be valid options for the {@link bin} function.\n * @param {function(object): *} params.field - The data field to bin.\n */\nfunction Bin(params) {\n Transform.call(this, null, params);\n}\nBin.Definition = {\n 'type': 'Bin',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'interval',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'anchor',\n 'type': 'number'\n }, {\n 'name': 'maxbins',\n 'type': 'number',\n 'default': 20\n }, {\n 'name': 'base',\n 'type': 'number',\n 'default': 10\n }, {\n 'name': 'divide',\n 'type': 'number',\n 'array': true,\n 'default': [5, 2]\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'span',\n 'type': 'number'\n }, {\n 'name': 'step',\n 'type': 'number'\n }, {\n 'name': 'steps',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'minstep',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'name',\n 'type': 'string'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['bin0', 'bin1']\n }]\n};\ninherits(Bin, Transform, {\n transform(_, pulse) {\n const band = _.interval !== false,\n bins = this._bins(_),\n start = bins.start,\n step = bins.step,\n as = _.as || ['bin0', 'bin1'],\n b0 = as[0],\n b1 = as[1];\n let flag;\n if (_.modified()) {\n pulse = pulse.reflow(true);\n flag = pulse.SOURCE;\n } else {\n flag = pulse.modified(accessorFields(_.field)) ? pulse.ADD_MOD : pulse.ADD;\n }\n pulse.visit(flag, band ? t => {\n const v = bins(t);\n // minimum bin value (inclusive)\n t[b0] = v;\n // maximum bin value (exclusive)\n // use convoluted math for better floating point agreement\n // see https://github.com/vega/vega/issues/830\n // infinite values propagate through this formula! #2227\n t[b1] = v == null ? null : start + step * (1 + (v - start) / step);\n } : t => t[b0] = bins(t));\n return pulse.modifies(band ? as : b0);\n },\n _bins(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n const field = _.field,\n bins = bin(_),\n step = bins.step;\n let start = bins.start,\n stop = start + Math.ceil((bins.stop - start) / step) * step,\n a,\n d;\n if ((a = _.anchor) != null) {\n d = a - (start + step * Math.floor((a - start) / step));\n start += d;\n stop += d;\n }\n const f = function (t) {\n let v = toNumber(field(t));\n return v == null ? null : v < start ? -Infinity : v > stop ? +Infinity : (v = Math.max(start, Math.min(v, stop - step)), start + step * Math.floor(EPSILON$1 + (v - start) / step));\n };\n f.start = start;\n f.stop = bins.stop;\n f.step = step;\n return this.value = accessor(f, accessorFields(field), _.name || 'bin_' + accessorName(field));\n }\n});\n\nfunction SortedList (idFunc, source, input) {\n const $ = idFunc;\n let data = source || [],\n add = input || [],\n rem = {},\n cnt = 0;\n return {\n add: t => add.push(t),\n remove: t => rem[$(t)] = ++cnt,\n size: () => data.length,\n data: (compare, resort) => {\n if (cnt) {\n data = data.filter(t => !rem[$(t)]);\n rem = {};\n cnt = 0;\n }\n if (resort && compare) {\n data.sort(compare);\n }\n if (add.length) {\n data = compare ? merge(compare, data, add.sort(compare)) : data.concat(add);\n add = [];\n }\n return data;\n }\n };\n}\n\n/**\n * Collects all data tuples that pass through this operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for additionally sorting the collected tuples.\n */\nfunction Collect(params) {\n Transform.call(this, [], params);\n}\nCollect.Definition = {\n 'type': 'Collect',\n 'metadata': {\n 'source': true\n },\n 'params': [{\n 'name': 'sort',\n 'type': 'compare'\n }]\n};\ninherits(Collect, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.ALL),\n list = SortedList(tupleid, this.value, out.materialize(out.ADD).add),\n sort = _.sort,\n mod = pulse.changed() || sort && (_.modified('sort') || pulse.modified(sort.fields));\n out.visit(out.REM, list.remove);\n this.modified(mod);\n this.value = out.source = list.data(stableCompare(sort), mod);\n\n // propagate tree root if defined\n if (pulse.source && pulse.source.root) {\n this.value.root = pulse.source.root;\n }\n return out;\n }\n});\n\n/**\n * Generates a comparator function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - The fields to compare.\n * @param {Array} [params.orders] - The sort orders.\n * Each entry should be one of \"ascending\" (default) or \"descending\".\n */\nfunction Compare(params) {\n Operator.call(this, null, update$5, params);\n}\ninherits(Compare, Operator);\nfunction update$5(_) {\n return this.value && !_.modified() ? this.value : compare(_.fields, _.orders);\n}\n\n/**\n * Count regexp-defined pattern occurrences in a text field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the text field.\n * @param {string} [params.pattern] - RegExp string defining the text pattern.\n * @param {string} [params.case] - One of 'lower', 'upper' or null (mixed) case.\n * @param {string} [params.stopwords] - RegExp string of words to ignore.\n */\nfunction CountPattern(params) {\n Transform.call(this, null, params);\n}\nCountPattern.Definition = {\n 'type': 'CountPattern',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'case',\n 'type': 'enum',\n 'values': ['upper', 'lower', 'mixed'],\n 'default': 'mixed'\n }, {\n 'name': 'pattern',\n 'type': 'string',\n 'default': '[\\\\w\"]+'\n }, {\n 'name': 'stopwords',\n 'type': 'string',\n 'default': ''\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['text', 'count']\n }]\n};\nfunction tokenize(text, tcase, match) {\n switch (tcase) {\n case 'upper':\n text = text.toUpperCase();\n break;\n case 'lower':\n text = text.toLowerCase();\n break;\n }\n return text.match(match);\n}\ninherits(CountPattern, Transform, {\n transform(_, pulse) {\n const process = update => tuple => {\n var tokens = tokenize(get(tuple), _.case, match) || [],\n t;\n for (var i = 0, n = tokens.length; i < n; ++i) {\n if (!stop.test(t = tokens[i])) update(t);\n }\n };\n const init = this._parameterCheck(_, pulse),\n counts = this._counts,\n match = this._match,\n stop = this._stop,\n get = _.field,\n as = _.as || ['text', 'count'],\n add = process(t => counts[t] = 1 + (counts[t] || 0)),\n rem = process(t => counts[t] -= 1);\n if (init) {\n pulse.visit(pulse.SOURCE, add);\n } else {\n pulse.visit(pulse.ADD, add);\n pulse.visit(pulse.REM, rem);\n }\n return this._finish(pulse, as); // generate output tuples\n },\n\n _parameterCheck(_, pulse) {\n let init = false;\n if (_.modified('stopwords') || !this._stop) {\n this._stop = new RegExp('^' + (_.stopwords || '') + '$', 'i');\n init = true;\n }\n if (_.modified('pattern') || !this._match) {\n this._match = new RegExp(_.pattern || '[\\\\w\\']+', 'g');\n init = true;\n }\n if (_.modified('field') || pulse.modified(_.field.fields)) {\n init = true;\n }\n if (init) this._counts = {};\n return init;\n },\n _finish(pulse, as) {\n const counts = this._counts,\n tuples = this._tuples || (this._tuples = {}),\n text = as[0],\n count = as[1],\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n let w, t, c;\n for (w in counts) {\n t = tuples[w];\n c = counts[w] || 0;\n if (!t && c) {\n tuples[w] = t = ingest({});\n t[text] = w;\n t[count] = c;\n out.add.push(t);\n } else if (c === 0) {\n if (t) out.rem.push(t);\n counts[w] = null;\n tuples[w] = null;\n } else if (t[count] !== c) {\n t[count] = c;\n out.mod.push(t);\n }\n }\n return out.modifies(as);\n }\n});\n\n/**\n * Perform a cross-product of a tuple stream with itself.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object):boolean} [params.filter] - An optional filter\n * function for selectively including tuples in the cross product.\n * @param {Array} [params.as] - The names of the output fields.\n */\nfunction Cross(params) {\n Transform.call(this, null, params);\n}\nCross.Definition = {\n 'type': 'Cross',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'filter',\n 'type': 'expr'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['a', 'b']\n }]\n};\ninherits(Cross, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n as = _.as || ['a', 'b'],\n a = as[0],\n b = as[1],\n reset = !this.value || pulse.changed(pulse.ADD_REM) || _.modified('as') || _.modified('filter');\n let data = this.value;\n if (reset) {\n if (data) out.rem = data;\n data = pulse.materialize(pulse.SOURCE).source;\n out.add = this.value = cross(data, a, b, _.filter || truthy);\n } else {\n out.mod = data;\n }\n out.source = this.value;\n return out.modifies(as);\n }\n});\nfunction cross(input, a, b, filter) {\n var data = [],\n t = {},\n n = input.length,\n i = 0,\n j,\n left;\n for (; i < n; ++i) {\n t[a] = left = input[i];\n for (j = 0; j < n; ++j) {\n t[b] = input[j];\n if (filter(t)) {\n data.push(ingest(t));\n t = {};\n t[a] = left;\n }\n }\n }\n return data;\n}\n\nconst Distributions = {\n kde: randomKDE,\n mixture: randomMixture,\n normal: randomNormal,\n lognormal: randomLogNormal,\n uniform: randomUniform\n};\nconst DISTRIBUTIONS = 'distributions',\n FUNCTION = 'function',\n FIELD = 'field';\n\n/**\n * Parse a parameter object for a probability distribution.\n * @param {object} def - The distribution parameter object.\n * @param {function():Array} - A method for requesting\n * source data. Used for distributions (such as KDE) that\n * require sample data points. This method will only be\n * invoked if the 'from' parameter for a target data source\n * is not provided. Typically this method returns backing\n * source data for a Pulse object.\n * @return {object} - The output distribution object.\n */\nfunction parse(def, data) {\n const func = def[FUNCTION];\n if (!hasOwnProperty(Distributions, func)) {\n error('Unknown distribution function: ' + func);\n }\n const d = Distributions[func]();\n for (const name in def) {\n // if data field, extract values\n if (name === FIELD) {\n d.data((def.from || data()).map(def[name]));\n }\n\n // if distribution mixture, recurse to parse each definition\n else if (name === DISTRIBUTIONS) {\n d[name](def[name].map(_ => parse(_, data)));\n }\n\n // otherwise, simply set the parameter\n else if (typeof d[name] === FUNCTION) {\n d[name](def[name]);\n }\n }\n return d;\n}\n\n/**\n * Grid sample points for a probability density. Given a distribution and\n * a sampling extent, will generate points suitable for plotting either\n * PDF (probability density function) or CDF (cumulative distribution\n * function) curves.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.distribution - The probability distribution. This\n * is an object parameter dependent on the distribution type.\n * @param {string} [params.method='pdf'] - The distribution method to sample.\n * One of 'pdf' or 'cdf'.\n * @param {Array} [params.extent] - The [min, max] extent over which\n * to sample the distribution. This argument is required in most cases, but\n * can be omitted if the distribution (e.g., 'kde') supports a 'data' method\n * that returns numerical sample points from which the extent can be deduced.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\nfunction Density(params) {\n Transform.call(this, null, params);\n}\nconst distributions = [{\n 'key': {\n 'function': 'normal'\n },\n 'params': [{\n 'name': 'mean',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'stdev',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'lognormal'\n },\n 'params': [{\n 'name': 'mean',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'stdev',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'uniform'\n },\n 'params': [{\n 'name': 'min',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'max',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'kde'\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'from',\n 'type': 'data'\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0\n }]\n}];\nconst mixture = {\n 'key': {\n 'function': 'mixture'\n },\n 'params': [{\n 'name': 'distributions',\n 'type': 'param',\n 'array': true,\n 'params': distributions\n }, {\n 'name': 'weights',\n 'type': 'number',\n 'array': true\n }]\n};\nDensity.Definition = {\n 'type': 'Density',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'steps',\n 'type': 'number'\n }, {\n 'name': 'minsteps',\n 'type': 'number',\n 'default': 25\n }, {\n 'name': 'maxsteps',\n 'type': 'number',\n 'default': 200\n }, {\n 'name': 'method',\n 'type': 'string',\n 'default': 'pdf',\n 'values': ['pdf', 'cdf']\n }, {\n 'name': 'distribution',\n 'type': 'param',\n 'params': distributions.concat(mixture)\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['value', 'density']\n }]\n};\ninherits(Density, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const dist = parse(_.distribution, source(pulse)),\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200;\n let method = _.method || 'pdf';\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n if (!_.extent && !dist.data) {\n error('Missing density extent parameter.');\n }\n method = dist[method];\n const as = _.as || ['value', 'density'],\n domain = _.extent || extent(dist.data()),\n values = sampleCurve(method, domain, minsteps, maxsteps).map(v => {\n const tuple = {};\n tuple[as[0]] = v[0];\n tuple[as[1]] = v[1];\n return ingest(tuple);\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\nfunction source(pulse) {\n return () => pulse.materialize(pulse.SOURCE).source;\n}\n\n// use either provided alias or accessor field name\nfunction fieldNames(fields, as) {\n if (!fields) return null;\n return fields.map((f, i) => as[i] || accessorName(f));\n}\nfunction partition$1(data, groupby, field) {\n const groups = [],\n get = f => f(t);\n let map, i, n, t, k, g;\n\n // partition data points into groups\n if (groupby == null) {\n groups.push(data.map(field));\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n g.push(field(t));\n }\n }\n return groups;\n}\n\nconst Output = 'bin';\n\n/**\n * Dot density binning for dot plot construction.\n * Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n * https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to bin.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {number} [params.step] - The step size (bin width) within which dots should be\n * stacked. Defaults to 1/30 of the extent of the data *field*.\n * @param {boolean} [params.smooth=false] - A boolean flag indicating if dot density\n * stacks should be smoothed to reduce variance.\n */\nfunction DotBin(params) {\n Transform.call(this, null, params);\n}\nDotBin.Definition = {\n 'type': 'DotBin',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number'\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': Output\n }]\n};\nconst autostep = (data, field) => span(extent(data, field)) / 30;\ninherits(DotBin, Transform, {\n transform(_, pulse) {\n if (this.value && !(_.modified() || pulse.changed())) {\n return pulse; // early exit\n }\n\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(pulse.source, _.groupby, identity),\n smooth = _.smooth || false,\n field = _.field,\n step = _.step || autostep(source, field),\n sort = stableCompare((a, b) => field(a) - field(b)),\n as = _.as || Output,\n n = groups.length;\n\n // compute dotplot bins per group\n let min = Infinity,\n max = -Infinity,\n i = 0,\n j;\n for (; i < n; ++i) {\n const g = groups[i].sort(sort);\n j = -1;\n for (const v of dotbin(g, step, smooth, field)) {\n if (v < min) min = v;\n if (v > max) max = v;\n g[++j][as] = v;\n }\n }\n this.value = {\n start: min,\n stop: max,\n step: step\n };\n return pulse.reflow(true).modifies(as);\n }\n});\n\n/**\n * Wraps an expression function with access to external parameters.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function} params.expr - The expression function. The\n * function should accept both a datum and a parameter object.\n * This operator's value will be a new function that wraps the\n * expression function with access to this operator's parameters.\n */\nfunction Expression(params) {\n Operator.call(this, null, update$4, params);\n this.modified(true);\n}\ninherits(Expression, Operator);\nfunction update$4(_) {\n const expr = _.expr;\n return this.value && !_.modified('expr') ? this.value : accessor(datum => expr(datum, _), accessorFields(expr), accessorName(expr));\n}\n\n/**\n * Computes extents (min/max) for a data field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field over which to compute extends.\n */\nfunction Extent(params) {\n Transform.call(this, [undefined, undefined], params);\n}\nExtent.Definition = {\n 'type': 'Extent',\n 'metadata': {},\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }]\n};\ninherits(Extent, Transform, {\n transform(_, pulse) {\n const extent = this.value,\n field = _.field,\n mod = pulse.changed() || pulse.modified(field.fields) || _.modified('field');\n let min = extent[0],\n max = extent[1];\n if (mod || min == null) {\n min = +Infinity;\n max = -Infinity;\n }\n pulse.visit(mod ? pulse.SOURCE : pulse.ADD, t => {\n const v = toNumber(field(t));\n if (v != null) {\n // NaNs will fail all comparisons!\n if (v < min) min = v;\n if (v > max) max = v;\n }\n });\n if (!Number.isFinite(min) || !Number.isFinite(max)) {\n let name = accessorName(field);\n if (name) name = ` for field \"${name}\"`;\n pulse.dataflow.warn(`Infinite extent${name}: [${min}, ${max}]`);\n min = max = undefined;\n }\n this.value = [min, max];\n }\n});\n\n/**\n * Provides a bridge between a parent transform and a target subflow that\n * consumes only a subset of the tuples that pass through the parent.\n * @constructor\n * @param {Pulse} pulse - A pulse to use as the value of this operator.\n * @param {Transform} parent - The parent transform (typically a Facet instance).\n */\nfunction Subflow(pulse, parent) {\n Operator.call(this, pulse);\n this.parent = parent;\n this.count = 0;\n}\ninherits(Subflow, Operator, {\n /**\n * Routes pulses from this subflow to a target transform.\n * @param {Transform} target - A transform that receives the subflow of tuples.\n */\n connect(target) {\n this.detachSubflow = target.detachSubflow;\n this.targets().add(target);\n return target.source = this;\n },\n /**\n * Add an 'add' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being added.\n */\n add(t) {\n this.count += 1;\n this.value.add.push(t);\n },\n /**\n * Add a 'rem' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being removed.\n */\n rem(t) {\n this.count -= 1;\n this.value.rem.push(t);\n },\n /**\n * Add a 'mod' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being modified.\n */\n mod(t) {\n this.value.mod.push(t);\n },\n /**\n * Re-initialize this operator's pulse value.\n * @param {Pulse} pulse - The pulse to copy from.\n * @see Pulse.init\n */\n init(pulse) {\n this.value.init(pulse, pulse.NO_SOURCE);\n },\n /**\n * Evaluate this operator. This method overrides the\n * default behavior to simply return the contained pulse value.\n * @return {Pulse}\n */\n evaluate() {\n // assert: this.value.stamp === pulse.stamp\n return this.value;\n }\n});\n\n/**\n * Facets a dataflow into a set of subflows based on a key.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): *} params.key - The key field to facet by.\n */\nfunction Facet(params) {\n Transform.call(this, {}, params);\n this._keys = fastmap(); // cache previously calculated key values\n\n // keep track of active subflows, use as targets array for listeners\n // this allows us to limit propagation to only updated subflows\n const a = this._targets = [];\n a.active = 0;\n a.forEach = f => {\n for (let i = 0, n = a.active; i < n; ++i) {\n f(a[i], i, a);\n }\n };\n}\ninherits(Facet, Transform, {\n activate(flow) {\n this._targets[this._targets.active++] = flow;\n },\n // parent argument provided by PreFacet subclass\n subflow(key, flow, pulse, parent) {\n const flows = this.value;\n let sf = hasOwnProperty(flows, key) && flows[key],\n df,\n p;\n if (!sf) {\n p = parent || (p = this._group[key]) && p.tuple;\n df = pulse.dataflow;\n sf = new Subflow(pulse.fork(pulse.NO_SOURCE), this);\n df.add(sf).connect(flow(df, key, p));\n flows[key] = sf;\n this.activate(sf);\n } else if (sf.value.stamp < pulse.stamp) {\n sf.init(pulse);\n this.activate(sf);\n }\n return sf;\n },\n clean() {\n const flows = this.value;\n let detached = 0;\n for (const key in flows) {\n if (flows[key].count === 0) {\n const detach = flows[key].detachSubflow;\n if (detach) detach();\n delete flows[key];\n ++detached;\n }\n }\n\n // remove inactive targets from the active targets array\n if (detached) {\n const active = this._targets.filter(sf => sf && sf.count > 0);\n this.initTargets(active);\n }\n },\n initTargets(act) {\n const a = this._targets,\n n = a.length,\n m = act ? act.length : 0;\n let i = 0;\n for (; i < m; ++i) {\n a[i] = act[i];\n }\n for (; i < n && a[i] != null; ++i) {\n a[i] = null; // ensure old flows can be garbage collected\n }\n\n a.active = m;\n },\n transform(_, pulse) {\n const df = pulse.dataflow,\n key = _.key,\n flow = _.subflow,\n cache = this._keys,\n rekey = _.modified('key'),\n subflow = key => this.subflow(key, flow, pulse);\n this._group = _.group || {};\n this.initTargets(); // reset list of active subflows\n\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t),\n k = cache.get(id);\n if (k !== undefined) {\n cache.delete(id);\n subflow(k).rem(t);\n }\n });\n pulse.visit(pulse.ADD, t => {\n const k = key(t);\n cache.set(tupleid(t), k);\n subflow(k).add(t);\n });\n if (rekey || pulse.modified(key.fields)) {\n pulse.visit(pulse.MOD, t => {\n const id = tupleid(t),\n k0 = cache.get(id),\n k1 = key(t);\n if (k0 === k1) {\n subflow(k1).mod(t);\n } else {\n cache.set(id, k1);\n subflow(k0).rem(t);\n subflow(k1).add(t);\n }\n });\n } else if (pulse.changed(pulse.MOD)) {\n pulse.visit(pulse.MOD, t => {\n subflow(cache.get(tupleid(t))).mod(t);\n });\n }\n if (rekey) {\n pulse.visit(pulse.REFLOW, t => {\n const id = tupleid(t),\n k0 = cache.get(id),\n k1 = key(t);\n if (k0 !== k1) {\n cache.set(id, k1);\n subflow(k0).rem(t);\n subflow(k1).add(t);\n }\n });\n }\n if (pulse.clean()) {\n df.runAfter(() => {\n this.clean();\n cache.clean();\n });\n } else if (cache.empty > df.cleanThreshold) {\n df.runAfter(cache.clean);\n }\n return pulse;\n }\n});\n\n/**\n * Generates one or more field accessor functions.\n * If the 'name' parameter is an array, an array of field accessors\n * will be created and the 'as' parameter will be ignored.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.name - The field name(s) to access.\n * @param {string} params.as - The accessor function name.\n */\nfunction Field(params) {\n Operator.call(this, null, update$3, params);\n}\ninherits(Field, Operator);\nfunction update$3(_) {\n return this.value && !_.modified() ? this.value : isArray(_.name) ? array(_.name).map(f => field(f)) : field(_.name, _.as);\n}\n\n/**\n * Filters data tuples according to a predicate function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The predicate expression function\n * that determines a tuple's filter status. Truthy values pass the filter.\n */\nfunction Filter(params) {\n Transform.call(this, fastmap(), params);\n}\nFilter.Definition = {\n 'type': 'Filter',\n 'metadata': {\n 'changes': true\n },\n 'params': [{\n 'name': 'expr',\n 'type': 'expr',\n 'required': true\n }]\n};\ninherits(Filter, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow,\n cache = this.value,\n // cache ids of filtered tuples\n output = pulse.fork(),\n add = output.add,\n rem = output.rem,\n mod = output.mod,\n test = _.expr;\n let isMod = true;\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n if (!cache.has(id)) rem.push(t);else cache.delete(id);\n });\n pulse.visit(pulse.ADD, t => {\n if (test(t, _)) add.push(t);else cache.set(tupleid(t), 1);\n });\n function revisit(t) {\n const id = tupleid(t),\n b = test(t, _),\n s = cache.get(id);\n if (b && s) {\n cache.delete(id);\n add.push(t);\n } else if (!b && !s) {\n cache.set(id, 1);\n rem.push(t);\n } else if (isMod && b && !s) {\n mod.push(t);\n }\n }\n pulse.visit(pulse.MOD, revisit);\n if (_.modified()) {\n isMod = false;\n pulse.visit(pulse.REFLOW, revisit);\n }\n if (cache.empty > df.cleanThreshold) df.runAfter(cache.clean);\n return output;\n }\n});\n\n/**\n * Flattens array-typed field values into new data objects.\n * If multiple fields are specified, they are treated as parallel arrays,\n * with output values included for each matching index (or null if missing).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of field\n * accessors for the tuple fields that should be flattened.\n * @param {string} [params.index] - Optional output field name for index\n * value. If unspecified, no index field is included in the output.\n * @param {Array} [params.as] - Output field names for flattened\n * array fields. Any unspecified fields will use the field name provided\n * by the fields accessors.\n */\nfunction Flatten(params) {\n Transform.call(this, [], params);\n}\nFlatten.Definition = {\n 'type': 'Flatten',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'index',\n 'type': 'string'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Flatten, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(fields, _.as || []),\n index = _.index || null,\n m = as.length;\n\n // remove any previous results\n out.rem = this.value;\n\n // generate flattened tuples\n pulse.visit(pulse.SOURCE, t => {\n const arrays = fields.map(f => f(t)),\n maxlen = arrays.reduce((l, a) => Math.max(l, a.length), 0);\n let i = 0,\n j,\n d,\n v;\n for (; i < maxlen; ++i) {\n d = derive(t);\n for (j = 0; j < m; ++j) {\n d[as[j]] = (v = arrays[j][i]) == null ? null : v;\n }\n if (index) {\n d[index] = i;\n }\n out.add.push(d);\n }\n });\n this.value = out.source = out.add;\n if (index) out.modifies(index);\n return out.modifies(as);\n }\n});\n\n/**\n * Folds one more tuple fields into multiple tuples in which the field\n * name and values are available under new 'key' and 'value' fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.fields - An array of field accessors\n * for the tuple fields that should be folded.\n * @param {Array} [params.as] - Output field names for folded key\n * and value fields, defaults to ['key', 'value'].\n */\nfunction Fold(params) {\n Transform.call(this, [], params);\n}\nFold.Definition = {\n 'type': 'Fold',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['key', 'value']\n }]\n};\ninherits(Fold, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n fnames = fields.map(accessorName),\n as = _.as || ['key', 'value'],\n k = as[0],\n v = as[1],\n n = fields.length;\n out.rem = this.value;\n pulse.visit(pulse.SOURCE, t => {\n for (let i = 0, d; i < n; ++i) {\n d = derive(t);\n d[k] = fnames[i];\n d[v] = fields[i](t);\n out.add.push(d);\n }\n });\n this.value = out.source = out.add;\n return out.modifies(as);\n }\n});\n\n/**\n * Invokes a function for each data tuple and saves the results as a new field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The formula function to invoke for each tuple.\n * @param {string} params.as - The field name under which to save the result.\n * @param {boolean} [params.initonly=false] - If true, the formula is applied to\n * added tuples only, and does not update in response to modifications.\n */\nfunction Formula(params) {\n Transform.call(this, null, params);\n}\nFormula.Definition = {\n 'type': 'Formula',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'expr',\n 'type': 'expr',\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'required': true\n }, {\n 'name': 'initonly',\n 'type': 'boolean'\n }]\n};\ninherits(Formula, Transform, {\n transform(_, pulse) {\n const func = _.expr,\n as = _.as,\n mod = _.modified(),\n flag = _.initonly ? pulse.ADD : mod ? pulse.SOURCE : pulse.modified(func.fields) || pulse.modified(as) ? pulse.ADD_MOD : pulse.ADD;\n if (mod) {\n // parameters updated, need to reflow\n pulse = pulse.materialize().reflow(true);\n }\n if (!_.initonly) {\n pulse.modifies(as);\n }\n return pulse.visit(flag, t => t[as] = func(t, _));\n }\n});\n\n/**\n * Generates data tuples using a provided generator function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Parameters): object} params.generator - A tuple generator\n * function. This function is given the operator parameters as input.\n * Changes to any additional parameters will not trigger re-calculation\n * of previously generated tuples. Only future tuples are affected.\n * @param {number} params.size - The number of tuples to produce.\n */\nfunction Generate(params) {\n Transform.call(this, [], params);\n}\ninherits(Generate, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.ALL),\n gen = _.generator;\n let data = this.value,\n num = _.size - data.length,\n add,\n rem,\n t;\n if (num > 0) {\n // need more tuples, generate and add\n for (add = []; --num >= 0;) {\n add.push(t = ingest(gen(_)));\n data.push(t);\n }\n out.add = out.add.length ? out.materialize(out.ADD).add.concat(add) : add;\n } else {\n // need fewer tuples, remove\n rem = data.slice(0, -num);\n out.rem = out.rem.length ? out.materialize(out.REM).rem.concat(rem) : rem;\n data = data.slice(-num);\n }\n out.source = this.value = data;\n return out;\n }\n});\n\nconst Methods = {\n value: 'value',\n median: median,\n mean: mean,\n min: min,\n max: max\n};\nconst Empty = [];\n\n/**\n * Impute missing values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to impute.\n * @param {Array} [params.groupby] - An array of\n * accessors to determine series within which to perform imputation.\n * @param {function(object): *} params.key - An accessor for a key value.\n * Each key value should be unique within a group. New tuples will be\n * imputed for any key values that are not found within a group.\n * @param {Array<*>} [params.keyvals] - Optional array of required key\n * values. New tuples will be imputed for any key values that are not\n * found within a group. In addition, these values will be automatically\n * augmented with the key values observed in the input data.\n * @param {string} [method='value'] - The imputation method to use. One of\n * 'value', 'mean', 'median', 'max', 'min'.\n * @param {*} [value=0] - The constant value to use for imputation\n * when using method 'value'.\n */\nfunction Impute(params) {\n Transform.call(this, [], params);\n}\nImpute.Definition = {\n 'type': 'Impute',\n 'metadata': {\n 'changes': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'keyvals',\n 'array': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'value',\n 'values': ['value', 'mean', 'median', 'max', 'min']\n }, {\n 'name': 'value',\n 'default': 0\n }]\n};\nfunction getValue(_) {\n var m = _.method || Methods.value,\n v;\n if (Methods[m] == null) {\n error('Unrecognized imputation method: ' + m);\n } else if (m === Methods.value) {\n v = _.value !== undefined ? _.value : 0;\n return () => v;\n } else {\n return Methods[m];\n }\n}\nfunction getField(_) {\n const f = _.field;\n return t => t ? f(t) : NaN;\n}\ninherits(Impute, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n impute = getValue(_),\n field = getField(_),\n fName = accessorName(_.field),\n kName = accessorName(_.key),\n gNames = (_.groupby || []).map(accessorName),\n groups = partition(pulse.source, _.groupby, _.key, _.keyvals),\n curr = [],\n prev = this.value,\n m = groups.domain.length,\n group,\n value,\n gVals,\n kVal,\n g,\n i,\n j,\n l,\n n,\n t;\n for (g = 0, l = groups.length; g < l; ++g) {\n group = groups[g];\n gVals = group.values;\n value = NaN;\n\n // add tuples for missing values\n for (j = 0; j < m; ++j) {\n if (group[j] != null) continue;\n kVal = groups.domain[j];\n t = {\n _impute: true\n };\n for (i = 0, n = gVals.length; i < n; ++i) t[gNames[i]] = gVals[i];\n t[kName] = kVal;\n t[fName] = Number.isNaN(value) ? value = impute(group, field) : value;\n curr.push(ingest(t));\n }\n }\n\n // update pulse with imputed tuples\n if (curr.length) out.add = out.materialize(out.ADD).add.concat(curr);\n if (prev.length) out.rem = out.materialize(out.REM).rem.concat(prev);\n this.value = curr;\n return out;\n }\n});\nfunction partition(data, groupby, key, keyvals) {\n var get = f => f(t),\n groups = [],\n domain = keyvals ? keyvals.slice() : [],\n kMap = {},\n gMap = {},\n gVals,\n gKey,\n group,\n i,\n j,\n k,\n n,\n t;\n domain.forEach((k, i) => kMap[k] = i + 1);\n for (i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = key(t);\n j = kMap[k] || (kMap[k] = domain.push(k));\n gKey = (gVals = groupby ? groupby.map(get) : Empty) + '';\n if (!(group = gMap[gKey])) {\n group = gMap[gKey] = [];\n groups.push(group);\n group.values = gVals;\n }\n group[j - 1] = t;\n }\n groups.domain = domain;\n return groups;\n}\n\n/**\n * Extend input tuples with aggregate values.\n * Calcuates aggregate values and joins them with the input stream.\n * @constructor\n */\nfunction JoinAggregate(params) {\n Aggregate.call(this, params);\n}\nJoinAggregate.Definition = {\n 'type': 'JoinAggregate',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidAggregateOps\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(JoinAggregate, Aggregate, {\n transform(_, pulse) {\n const aggr = this,\n mod = _.modified();\n let cells;\n\n // process all input tuples to calculate aggregates\n if (aggr.value && (mod || pulse.modified(aggr._inputs, true))) {\n cells = aggr.value = mod ? aggr.init(_) : {};\n pulse.visit(pulse.SOURCE, t => aggr.add(t));\n } else {\n cells = aggr.value = aggr.value || this.init(_);\n pulse.visit(pulse.REM, t => aggr.rem(t));\n pulse.visit(pulse.ADD, t => aggr.add(t));\n }\n\n // update aggregation cells\n aggr.changes();\n\n // write aggregate values to input tuples\n pulse.visit(pulse.SOURCE, t => {\n extend(t, cells[aggr.cellkey(t)].tuple);\n });\n return pulse.reflow(mod).modifies(this._outputs);\n },\n changes() {\n const adds = this._adds,\n mods = this._mods;\n let i, n;\n for (i = 0, n = this._alen; i < n; ++i) {\n this.celltuple(adds[i]);\n adds[i] = null; // for garbage collection\n }\n\n for (i = 0, n = this._mlen; i < n; ++i) {\n this.celltuple(mods[i]);\n mods[i] = null; // for garbage collection\n }\n\n this._alen = this._mlen = 0; // reset list of active cells\n }\n});\n\n/**\n * Compute kernel density estimates (KDE) for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {function(object): *} params.field - An accessor for the data field\n * to estimate.\n * @param {number} [params.bandwidth=0] - The KDE kernel bandwidth.\n * If zero or unspecified, the bandwidth is automatically determined.\n * @param {boolean} [params.counts=false] - A boolean flag indicating if the\n * output values should be probability estimates (false, default) or\n * smoothed counts (true).\n * @param {string} [params.cumulative=false] - A boolean flag indicating if a\n * density (false) or cumulative distribution (true) should be generated.\n * @param {Array} [params.extent] - The domain extent over which to\n * plot the density. If unspecified, the [min, max] data extent is used.\n * @param {string} [params.resolve='independent'] - Indicates how parameters for\n * multiple densities should be resolved. If \"independent\" (the default), each\n * density may have its own domain extent and dynamic number of curve sample\n * steps. If \"shared\", the KDE transform will ensure that all densities are\n * defined over a shared domain and curve steps, enabling stacking.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\nfunction KDE(params) {\n Transform.call(this, null, params);\n}\nKDE.Definition = {\n 'type': 'KDE',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'cumulative',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'counts',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'steps',\n 'type': 'number'\n }, {\n 'name': 'minsteps',\n 'type': 'number',\n 'default': 25\n }, {\n 'name': 'maxsteps',\n 'type': 'number',\n 'default': 200\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['value', 'density']\n }]\n};\ninherits(KDE, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(source, _.groupby, _.field),\n names = (_.groupby || []).map(accessorName),\n bandwidth = _.bandwidth,\n method = _.cumulative ? 'cdf' : 'pdf',\n as = _.as || ['value', 'density'],\n values = [];\n let domain = _.extent,\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200;\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n if (_.resolve === 'shared') {\n if (!domain) domain = extent(source, _.field);\n minsteps = maxsteps = _.steps || maxsteps;\n }\n groups.forEach(g => {\n const density = randomKDE(g, bandwidth)[method],\n scale = _.counts ? g.length : 1,\n local = domain || extent(g);\n sampleCurve(density, local, minsteps, maxsteps).forEach(v => {\n const t = {};\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = v[0];\n t[as[1]] = v[1] * scale;\n values.push(ingest(t));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\n\n/**\n * Generates a key function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - The field name(s) for the key function.\n * @param {boolean} params.flat - A boolean flag indicating if the field names\n * should be treated as flat property names, side-stepping nested field\n * lookups normally indicated by dot or bracket notation.\n */\nfunction Key(params) {\n Operator.call(this, null, update$2, params);\n}\ninherits(Key, Operator);\nfunction update$2(_) {\n return this.value && !_.modified() ? this.value : key(_.fields, _.flat);\n}\n\n/**\n * Load and parse data from an external source. Marshalls parameter\n * values and then invokes the Dataflow request method.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.url - The URL to load from.\n * @param {object} params.format - The data format options.\n */\nfunction Load(params) {\n Transform.call(this, [], params);\n this._pending = null;\n}\ninherits(Load, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow;\n if (this._pending) {\n // update state and return pulse\n return output(this, pulse, this._pending);\n }\n if (stop(_)) return pulse.StopPropagation;\n if (_.values) {\n // parse and ingest values, return output pulse\n return output(this, pulse, df.parse(_.values, _.format));\n } else if (_.async) {\n // return promise for non-blocking async loading\n const p = df.request(_.url, _.format).then(res => {\n this._pending = array(res.data);\n return df => df.touch(this);\n });\n return {\n async: p\n };\n } else {\n // return promise for synchronous loading\n return df.request(_.url, _.format).then(res => output(this, pulse, array(res.data)));\n }\n }\n});\nfunction stop(_) {\n return _.modified('async') && !(_.modified('values') || _.modified('url') || _.modified('format'));\n}\nfunction output(op, pulse, data) {\n data.forEach(ingest);\n const out = pulse.fork(pulse.NO_FIELDS & pulse.NO_SOURCE);\n out.rem = op.value;\n op.value = out.source = out.add = data;\n op._pending = null;\n if (out.rem.length) out.clean(true);\n return out;\n}\n\n/**\n * Extend tuples by joining them with values from a lookup table.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Map} params.index - The lookup table map.\n * @param {Array} params.as - Output field names for each lookup value.\n * @param {*} [params.default] - A default value to use if lookup fails.\n */\nfunction Lookup(params) {\n Transform.call(this, {}, params);\n}\nLookup.Definition = {\n 'type': 'Lookup',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'index',\n 'type': 'index',\n 'params': [{\n 'name': 'from',\n 'type': 'data',\n 'required': true\n }, {\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }]\n }, {\n 'name': 'values',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }, {\n 'name': 'default',\n 'default': null\n }]\n};\ninherits(Lookup, Transform, {\n transform(_, pulse) {\n const keys = _.fields,\n index = _.index,\n values = _.values,\n defaultValue = _.default == null ? null : _.default,\n reset = _.modified(),\n n = keys.length;\n let flag = reset ? pulse.SOURCE : pulse.ADD,\n out = pulse,\n as = _.as,\n set,\n m,\n mods;\n if (values) {\n m = values.length;\n if (n > 1 && !as) {\n error('Multi-field lookup requires explicit \"as\" parameter.');\n }\n if (as && as.length !== n * m) {\n error('The \"as\" parameter has too few output field names.');\n }\n as = as || values.map(accessorName);\n set = function (t) {\n for (var i = 0, k = 0, j, v; i < n; ++i) {\n v = index.get(keys[i](t));\n if (v == null) for (j = 0; j < m; ++j, ++k) t[as[k]] = defaultValue;else for (j = 0; j < m; ++j, ++k) t[as[k]] = values[j](v);\n }\n };\n } else {\n if (!as) {\n error('Missing output field names.');\n }\n set = function (t) {\n for (var i = 0, v; i < n; ++i) {\n v = index.get(keys[i](t));\n t[as[i]] = v == null ? defaultValue : v;\n }\n };\n }\n if (reset) {\n out = pulse.reflow(true);\n } else {\n mods = keys.some(k => pulse.modified(k.fields));\n flag |= mods ? pulse.MOD : 0;\n }\n pulse.visit(flag, set);\n return out.modifies(as);\n }\n});\n\n/**\n * Computes global min/max extents over a collection of extents.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array>} params.extents - The input extents.\n */\nfunction MultiExtent(params) {\n Operator.call(this, null, update$1, params);\n}\ninherits(MultiExtent, Operator);\nfunction update$1(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n const ext = _.extents,\n n = ext.length;\n let min = +Infinity,\n max = -Infinity,\n i,\n e;\n for (i = 0; i < n; ++i) {\n e = ext[i];\n if (e[0] < min) min = e[0];\n if (e[1] > max) max = e[1];\n }\n return [min, max];\n}\n\n/**\n * Merge a collection of value arrays.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array>} params.values - The input value arrrays.\n */\nfunction MultiValues(params) {\n Operator.call(this, null, update, params);\n}\ninherits(MultiValues, Operator);\nfunction update(_) {\n return this.value && !_.modified() ? this.value : _.values.reduce((data, _) => data.concat(_), []);\n}\n\n/**\n * Operator whose value is simply its parameter hash. This operator is\n * useful for enabling reactive updates to values of nested objects.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Params(params) {\n Transform.call(this, null, params);\n}\ninherits(Params, Transform, {\n transform(_, pulse) {\n this.modified(_.modified());\n this.value = _;\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); // do not pass tuples\n }\n});\n\n/**\n * Aggregate and pivot selected field values to become new fields.\n * This operator is useful to construction cross-tabulations.\n * @constructor\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby. These fields act just like groupby fields of an Aggregate transform.\n * @param {function(object): *} params.field - The field to pivot on. The unique\n * values of this field become new field names in the output stream.\n * @param {function(object): *} params.value - The field to populate pivoted fields.\n * The aggregate values of this field become the values of the new pivoted fields.\n * @param {string} [params.op] - The aggregation operation for the value field,\n * applied per cell in the output stream. The default is \"sum\".\n * @param {number} [params.limit] - An optional parameter indicating the maximum\n * number of pivoted fields to generate. The pivoted field names are sorted in\n * ascending order prior to enforcing the limit.\n */\nfunction Pivot(params) {\n Aggregate.call(this, params);\n}\nPivot.Definition = {\n 'type': 'Pivot',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'value',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'op',\n 'type': 'enum',\n 'values': ValidAggregateOps,\n 'default': 'sum'\n }, {\n 'name': 'limit',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(Pivot, Aggregate, {\n _transform: Aggregate.prototype.transform,\n transform(_, pulse) {\n return this._transform(aggregateParams(_, pulse), pulse);\n }\n});\n\n// Shoehorn a pivot transform into an aggregate transform!\n// First collect all unique pivot field values.\n// Then generate aggregate fields for each output pivot field.\nfunction aggregateParams(_, pulse) {\n const key = _.field,\n value = _.value,\n op = (_.op === 'count' ? '__count__' : _.op) || 'sum',\n fields = accessorFields(key).concat(accessorFields(value)),\n keys = pivotKeys(key, _.limit || 0, pulse);\n\n // if data stream content changes, pivot fields may change\n // flag parameter modification to ensure re-initialization\n if (pulse.changed()) _.set('__pivot__', null, null, true);\n return {\n key: _.key,\n groupby: _.groupby,\n ops: keys.map(() => op),\n fields: keys.map(k => get(k, key, value, fields)),\n as: keys.map(k => k + ''),\n modified: _.modified.bind(_)\n };\n}\n\n// Generate aggregate field accessor.\n// Output NaN for non-existent values; aggregator will ignore!\nfunction get(k, key, value, fields) {\n return accessor(d => key(d) === k ? value(d) : NaN, fields, k + '');\n}\n\n// Collect (and optionally limit) all unique pivot values.\nfunction pivotKeys(key, limit, pulse) {\n const map = {},\n list = [];\n pulse.visit(pulse.SOURCE, t => {\n const k = key(t);\n if (!map[k]) {\n map[k] = 1;\n list.push(k);\n }\n });\n list.sort(ascending);\n return limit ? list.slice(0, limit) : list;\n}\n\n/**\n * Partitions pre-faceted data into tuple subflows.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): Array} params.field - The field\n * accessor for an array of subflow tuple objects.\n */\nfunction PreFacet(params) {\n Facet.call(this, params);\n}\ninherits(PreFacet, Facet, {\n transform(_, pulse) {\n const flow = _.subflow,\n field = _.field,\n subflow = t => this.subflow(tupleid(t), flow, pulse, t);\n if (_.modified('field') || field && pulse.modified(accessorFields(field))) {\n error('PreFacet does not support field modification.');\n }\n this.initTargets(); // reset list of active subflows\n\n if (field) {\n pulse.visit(pulse.MOD, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.mod(_));\n });\n pulse.visit(pulse.ADD, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.add(ingest(_)));\n });\n pulse.visit(pulse.REM, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.rem(_));\n });\n } else {\n pulse.visit(pulse.MOD, t => subflow(t).mod(t));\n pulse.visit(pulse.ADD, t => subflow(t).add(t));\n pulse.visit(pulse.REM, t => subflow(t).rem(t));\n }\n if (pulse.clean()) {\n pulse.runAfter(() => this.clean());\n }\n return pulse;\n }\n});\n\n/**\n * Performs a relational projection, copying selected fields from source\n * tuples to a new set of derived tuples.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.as] - Output field names for each projected\n * field. Any unspecified fields will use the field name provided by\n * the field accessor.\n */\nfunction Project(params) {\n Transform.call(this, null, params);\n}\nProject.Definition = {\n 'type': 'Project',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }]\n};\ninherits(Project, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(_.fields, _.as || []),\n derive = fields ? (s, t) => project(s, t, fields, as) : rederive;\n let lut;\n if (this.value) {\n lut = this.value;\n } else {\n pulse = pulse.addAll();\n lut = this.value = {};\n }\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n pulse.visit(pulse.ADD, t => {\n const dt = derive(t, ingest({}));\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n pulse.visit(pulse.MOD, t => {\n out.mod.push(derive(t, lut[tupleid(t)]));\n });\n return out;\n }\n});\nfunction project(s, t, fields, as) {\n for (let i = 0, n = fields.length; i < n; ++i) {\n t[as[i]] = fields[i](s);\n }\n return t;\n}\n\n/**\n * Proxy the value of another operator as a pure signal value.\n * Ensures no tuples are propagated.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {*} params.value - The value to proxy, becomes the value of this operator.\n */\nfunction Proxy(params) {\n Transform.call(this, null, params);\n}\ninherits(Proxy, Transform, {\n transform(_, pulse) {\n this.value = _.value;\n return _.modified('value') ? pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS) : pulse.StopPropagation;\n }\n});\n\n/**\n * Generates sample quantile values from an input data stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the data field\n * over which to calculate quantile values.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {Array} [params.probs] - An array of probabilities in\n * the range (0, 1) for which to compute quantile values. If not specified,\n * the *step* parameter will be used.\n * @param {Array} [params.step=0.01] - A probability step size for\n * sampling quantile values. All values from one-half the step size up to\n * 1 (exclusive) will be sampled. This parameter is only used if the\n * *quantiles* parameter is not provided.\n */\nfunction Quantile(params) {\n Transform.call(this, null, params);\n}\nQuantile.Definition = {\n 'type': 'Quantile',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'probs',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 0.01\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['prob', 'value']\n }]\n};\nconst EPSILON = 1e-14;\ninherits(Quantile, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n as = _.as || ['prob', 'value'];\n if (this.value && !_.modified() && !pulse.changed()) {\n out.source = this.value;\n return out;\n }\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(source, _.groupby, _.field),\n names = (_.groupby || []).map(accessorName),\n values = [],\n step = _.step || 0.01,\n p = _.probs || range(step / 2, 1 - EPSILON, step),\n n = p.length;\n groups.forEach(g => {\n const q = quantiles(g, p);\n for (let i = 0; i < n; ++i) {\n const t = {};\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = p[i];\n t[as[1]] = q[i];\n values.push(ingest(t));\n }\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n return out;\n }\n});\n\n/**\n * Relays a data stream between data processing pipelines.\n * If the derive parameter is set, this transform will create derived\n * copies of observed tuples. This provides derived data streams in which\n * modifications to the tuples do not pollute an upstream data source.\n * @param {object} params - The parameters for this operator.\n * @param {number} [params.derive=false] - Boolean flag indicating if\n * the transform should make derived copies of incoming tuples.\n * @constructor\n */\nfunction Relay(params) {\n Transform.call(this, null, params);\n}\ninherits(Relay, Transform, {\n transform(_, pulse) {\n let out, lut;\n if (this.value) {\n lut = this.value;\n } else {\n out = pulse = pulse.addAll();\n lut = this.value = {};\n }\n if (_.derive) {\n out = pulse.fork(pulse.NO_SOURCE);\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n pulse.visit(pulse.ADD, t => {\n const dt = derive(t);\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n pulse.visit(pulse.MOD, t => {\n const dt = lut[tupleid(t)];\n for (const k in t) {\n dt[k] = t[k];\n // down stream writes may overwrite re-derived tuples\n // conservatively mark all source fields as modified\n out.modifies(k);\n }\n out.mod.push(dt);\n });\n }\n return out;\n }\n});\n\n/**\n * Samples tuples passing through this operator.\n * Uses reservoir sampling to maintain a representative sample.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {number} [params.size=1000] - The maximum number of samples.\n */\nfunction Sample(params) {\n Transform.call(this, [], params);\n this.count = 0;\n}\nSample.Definition = {\n 'type': 'Sample',\n 'metadata': {},\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'default': 1000\n }]\n};\ninherits(Sample, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n mod = _.modified('size'),\n num = _.size,\n map = this.value.reduce((m, t) => (m[tupleid(t)] = 1, m), {});\n let res = this.value,\n cnt = this.count,\n cap = 0;\n\n // sample reservoir update function\n function update(t) {\n let p, idx;\n if (res.length < num) {\n res.push(t);\n } else {\n idx = ~~((cnt + 1) * random());\n if (idx < res.length && idx >= cap) {\n p = res[idx];\n if (map[tupleid(p)]) out.rem.push(p); // eviction\n res[idx] = t;\n }\n }\n ++cnt;\n }\n if (pulse.rem.length) {\n // find all tuples that should be removed, add to output\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n if (map[id]) {\n map[id] = -1;\n out.rem.push(t);\n }\n --cnt;\n });\n\n // filter removed tuples out of the sample reservoir\n res = res.filter(t => map[tupleid(t)] !== -1);\n }\n if ((pulse.rem.length || mod) && res.length < num && pulse.source) {\n // replenish sample if backing data source is available\n cap = cnt = res.length;\n pulse.visit(pulse.SOURCE, t => {\n // update, but skip previously sampled tuples\n if (!map[tupleid(t)]) update(t);\n });\n cap = -1;\n }\n if (mod && res.length > num) {\n const n = res.length - num;\n for (let i = 0; i < n; ++i) {\n map[tupleid(res[i])] = -1;\n out.rem.push(res[i]);\n }\n res = res.slice(n);\n }\n if (pulse.mod.length) {\n // propagate modified tuples in the sample reservoir\n pulse.visit(pulse.MOD, t => {\n if (map[tupleid(t)]) out.mod.push(t);\n });\n }\n if (pulse.add.length) {\n // update sample reservoir\n pulse.visit(pulse.ADD, update);\n }\n if (pulse.add.length || cap < 0) {\n // output newly added tuples\n out.add = res.filter(t => !map[tupleid(t)]);\n }\n this.count = cnt;\n this.value = out.source = res;\n return out;\n }\n});\n\n/**\n * Generates data tuples for a specified sequence range of numbers.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {number} params.start - The first number in the sequence.\n * @param {number} params.stop - The last number (exclusive) in the sequence.\n * @param {number} [params.step=1] - The step size between numbers in the sequence.\n */\nfunction Sequence(params) {\n Transform.call(this, null, params);\n}\nSequence.Definition = {\n 'type': 'Sequence',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'start',\n 'type': 'number',\n 'required': true\n }, {\n 'name': 'stop',\n 'type': 'number',\n 'required': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'data'\n }]\n};\ninherits(Sequence, Transform, {\n transform(_, pulse) {\n if (this.value && !_.modified()) return;\n const out = pulse.materialize().fork(pulse.MOD),\n as = _.as || 'data';\n out.rem = this.value ? pulse.rem.concat(this.value) : pulse.rem;\n this.value = range(_.start, _.stop, _.step || 1).map(v => {\n const t = {};\n t[as] = v;\n return ingest(t);\n });\n out.add = pulse.add.concat(this.value);\n return out;\n }\n});\n\n/**\n * Propagates a new pulse without any tuples so long as the input\n * pulse contains some added, removed or modified tuples.\n * @param {object} params - The parameters for this operator.\n * @constructor\n */\nfunction Sieve(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\n\ninherits(Sieve, Transform, {\n transform(_, pulse) {\n this.value = pulse.source;\n return pulse.changed() ? pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS) : pulse.StopPropagation;\n }\n});\n\n/**\n * Discretize dates to specific time units.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The data field containing date/time values.\n */\nfunction TimeUnit(params) {\n Transform.call(this, null, params);\n}\nconst OUTPUT = ['unit0', 'unit1'];\nTimeUnit.Definition = {\n 'type': 'TimeUnit',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'interval',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'units',\n 'type': 'enum',\n 'values': TIME_UNITS,\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'maxbins',\n 'type': 'number',\n 'default': 40\n }, {\n 'name': 'extent',\n 'type': 'date',\n 'array': true\n }, {\n 'name': 'timezone',\n 'type': 'enum',\n 'default': 'local',\n 'values': ['local', 'utc']\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': OUTPUT\n }]\n};\ninherits(TimeUnit, Transform, {\n transform(_, pulse) {\n const field = _.field,\n band = _.interval !== false,\n utc = _.timezone === 'utc',\n floor = this._floor(_, pulse),\n offset = (utc ? utcInterval : timeInterval)(floor.unit).offset,\n as = _.as || OUTPUT,\n u0 = as[0],\n u1 = as[1],\n step = floor.step;\n let min = floor.start || Infinity,\n max = floor.stop || -Infinity,\n flag = pulse.ADD;\n if (_.modified() || pulse.changed(pulse.REM) || pulse.modified(accessorFields(field))) {\n pulse = pulse.reflow(true);\n flag = pulse.SOURCE;\n min = Infinity;\n max = -Infinity;\n }\n pulse.visit(flag, t => {\n const v = field(t);\n let a, b;\n if (v == null) {\n t[u0] = null;\n if (band) t[u1] = null;\n } else {\n t[u0] = a = b = floor(v);\n if (band) t[u1] = b = offset(a, step);\n if (a < min) min = a;\n if (b > max) max = b;\n }\n });\n floor.start = min;\n floor.stop = max;\n return pulse.modifies(band ? as : u0);\n },\n _floor(_, pulse) {\n const utc = _.timezone === 'utc';\n\n // get parameters\n const {\n units,\n step\n } = _.units ? {\n units: _.units,\n step: _.step || 1\n } : timeBin({\n extent: _.extent || extent(pulse.materialize(pulse.SOURCE).source, _.field),\n maxbins: _.maxbins\n });\n\n // check / standardize time units\n const tunits = timeUnits(units),\n prev = this.value || {},\n floor = (utc ? utcFloor : timeFloor)(tunits, step);\n floor.unit = peek(tunits);\n floor.units = tunits;\n floor.step = step;\n floor.start = prev.start;\n floor.stop = prev.stop;\n return this.value = floor;\n }\n});\n\n/**\n * An index that maps from unique, string-coerced, field values to tuples.\n * Assumes that the field serves as a unique key with no duplicate values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field accessor to index.\n */\nfunction TupleIndex(params) {\n Transform.call(this, fastmap(), params);\n}\ninherits(TupleIndex, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow,\n field = _.field,\n index = this.value,\n set = t => index.set(field(t), t);\n let mod = true;\n if (_.modified('field') || pulse.modified(field.fields)) {\n index.clear();\n pulse.visit(pulse.SOURCE, set);\n } else if (pulse.changed()) {\n pulse.visit(pulse.REM, t => index.delete(field(t)));\n pulse.visit(pulse.ADD, set);\n } else {\n mod = false;\n }\n this.modified(mod);\n if (index.empty > df.cleanThreshold) df.runAfter(index.clean);\n return pulse.fork();\n }\n});\n\n/**\n * Extracts an array of values. Assumes the source data has already been\n * reduced as needed (e.g., by an upstream Aggregate transform).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The domain field to extract.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting the values. The comparator will be\n * applied to backing tuples prior to value extraction.\n */\nfunction Values(params) {\n Transform.call(this, null, params);\n}\ninherits(Values, Transform, {\n transform(_, pulse) {\n const run = !this.value || _.modified('field') || _.modified('sort') || pulse.changed() || _.sort && pulse.modified(_.sort.fields);\n if (run) {\n this.value = (_.sort ? pulse.source.slice().sort(stableCompare(_.sort)) : pulse.source).map(_.field);\n }\n }\n});\n\nfunction WindowOp(op, field, param, as) {\n const fn = WindowOps[op](field, param);\n return {\n init: fn.init || zero,\n update: function (w, t) {\n t[as] = fn.next(w);\n }\n };\n}\nconst WindowOps = {\n row_number: function () {\n return {\n next: w => w.index + 1\n };\n },\n rank: function () {\n let rank;\n return {\n init: () => rank = 1,\n next: w => {\n const i = w.index,\n data = w.data;\n return i && w.compare(data[i - 1], data[i]) ? rank = i + 1 : rank;\n }\n };\n },\n dense_rank: function () {\n let drank;\n return {\n init: () => drank = 1,\n next: w => {\n const i = w.index,\n d = w.data;\n return i && w.compare(d[i - 1], d[i]) ? ++drank : drank;\n }\n };\n },\n percent_rank: function () {\n const rank = WindowOps.rank(),\n next = rank.next;\n return {\n init: rank.init,\n next: w => (next(w) - 1) / (w.data.length - 1)\n };\n },\n cume_dist: function () {\n let cume;\n return {\n init: () => cume = 0,\n next: w => {\n const d = w.data,\n c = w.compare;\n let i = w.index;\n if (cume < i) {\n while (i + 1 < d.length && !c(d[i], d[i + 1])) ++i;\n cume = i;\n }\n return (1 + cume) / d.length;\n }\n };\n },\n ntile: function (field, num) {\n num = +num;\n if (!(num > 0)) error('ntile num must be greater than zero.');\n const cume = WindowOps.cume_dist(),\n next = cume.next;\n return {\n init: cume.init,\n next: w => Math.ceil(num * next(w))\n };\n },\n lag: function (field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n const i = w.index - offset;\n return i >= 0 ? field(w.data[i]) : null;\n }\n };\n },\n lead: function (field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n const i = w.index + offset,\n d = w.data;\n return i < d.length ? field(d[i]) : null;\n }\n };\n },\n first_value: function (field) {\n return {\n next: w => field(w.data[w.i0])\n };\n },\n last_value: function (field) {\n return {\n next: w => field(w.data[w.i1 - 1])\n };\n },\n nth_value: function (field, nth) {\n nth = +nth;\n if (!(nth > 0)) error('nth_value nth must be greater than zero.');\n return {\n next: w => {\n const i = w.i0 + (nth - 1);\n return i < w.i1 ? field(w.data[i]) : null;\n }\n };\n },\n prev_value: function (field) {\n let prev;\n return {\n init: () => prev = null,\n next: w => {\n const v = field(w.data[w.index]);\n return v != null ? prev = v : prev;\n }\n };\n },\n next_value: function (field) {\n let v, i;\n return {\n init: () => (v = null, i = -1),\n next: w => {\n const d = w.data;\n return w.index <= i ? v : (i = find(field, d, w.index)) < 0 ? (i = d.length, v = null) : v = field(d[i]);\n }\n };\n }\n};\nfunction find(field, data, index) {\n for (let n = data.length; index < n; ++index) {\n const v = field(data[index]);\n if (v != null) return index;\n }\n return -1;\n}\nconst ValidWindowOps = Object.keys(WindowOps);\n\nfunction WindowState(_) {\n const ops = array(_.ops),\n fields = array(_.fields),\n params = array(_.params),\n as = array(_.as),\n outputs = this.outputs = [],\n windows = this.windows = [],\n inputs = {},\n map = {},\n counts = [],\n measures = [];\n let countOnly = true;\n function visitInputs(f) {\n array(accessorFields(f)).forEach(_ => inputs[_] = 1);\n }\n visitInputs(_.sort);\n ops.forEach((op, i) => {\n const field = fields[i],\n mname = accessorName(field),\n name = measureName(op, mname, as[i]);\n visitInputs(field);\n outputs.push(name);\n\n // Window operation\n if (hasOwnProperty(WindowOps, op)) {\n windows.push(WindowOp(op, fields[i], params[i], name));\n }\n\n // Aggregate operation\n else {\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n if (op === 'count') {\n counts.push(name);\n return;\n }\n countOnly = false;\n let m = map[mname];\n if (!m) {\n m = map[mname] = [];\n m.field = field;\n measures.push(m);\n }\n m.push(createMeasure(op, name));\n }\n });\n if (counts.length || measures.length) {\n this.cell = cell(measures, counts, countOnly);\n }\n this.inputs = Object.keys(inputs);\n}\nconst prototype = WindowState.prototype;\nprototype.init = function () {\n this.windows.forEach(_ => _.init());\n if (this.cell) this.cell.init();\n};\nprototype.update = function (w, t) {\n const cell = this.cell,\n wind = this.windows,\n data = w.data,\n m = wind && wind.length;\n let j;\n if (cell) {\n for (j = w.p0; j < w.i0; ++j) cell.rem(data[j]);\n for (j = w.p1; j < w.i1; ++j) cell.add(data[j]);\n cell.set(t);\n }\n for (j = 0; j < m; ++j) wind[j].update(w, t);\n};\nfunction cell(measures, counts, countOnly) {\n measures = measures.map(m => compileMeasures(m, m.field));\n const cell = {\n num: 0,\n agg: null,\n store: false,\n count: counts\n };\n if (!countOnly) {\n var n = measures.length,\n a = cell.agg = Array(n),\n i = 0;\n for (; i < n; ++i) a[i] = new measures[i](cell);\n }\n if (cell.store) {\n var store = cell.data = new TupleStore();\n }\n cell.add = function (t) {\n cell.num += 1;\n if (countOnly) return;\n if (store) store.add(t);\n for (let i = 0; i < n; ++i) {\n a[i].add(a[i].get(t), t);\n }\n };\n cell.rem = function (t) {\n cell.num -= 1;\n if (countOnly) return;\n if (store) store.rem(t);\n for (let i = 0; i < n; ++i) {\n a[i].rem(a[i].get(t), t);\n }\n };\n cell.set = function (t) {\n let i, n;\n\n // consolidate stored values\n if (store) store.values();\n\n // update tuple properties\n for (i = 0, n = counts.length; i < n; ++i) t[counts[i]] = cell.num;\n if (!countOnly) for (i = 0, n = a.length; i < n; ++i) a[i].set(t);\n };\n cell.init = function () {\n cell.num = 0;\n if (store) store.reset();\n for (let i = 0; i < n; ++i) a[i].init();\n };\n return cell;\n}\n\n/**\n * Perform window calculations and write results to the input stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator function for sorting tuples within a window.\n * @param {Array} [params.groupby] - An array of accessors by which to partition tuples into separate windows.\n * @param {Array} params.ops - An array of strings indicating window operations to perform.\n * @param {Array} [params.fields] - An array of accessors\n * for data fields to use as inputs to window operations.\n * @param {Array<*>} [params.params] - An array of parameter values for window operations.\n * @param {Array} [params.as] - An array of output field names for window operations.\n * @param {Array} [params.frame] - Window frame definition as two-element array.\n * @param {boolean} [params.ignorePeers=false] - If true, base window frame boundaries on row\n * number alone, ignoring peers with identical sort values. If false (default),\n * the window boundaries will be adjusted to include peer values.\n */\nfunction Window(params) {\n Transform.call(this, {}, params);\n this._mlen = 0;\n this._mods = [];\n}\nWindow.Definition = {\n 'type': 'Window',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidWindowOps.concat(ValidAggregateOps)\n }, {\n 'name': 'params',\n 'type': 'number',\n 'null': true,\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'frame',\n 'type': 'number',\n 'null': true,\n 'array': true,\n 'length': 2,\n 'default': [null, 0]\n }, {\n 'name': 'ignorePeers',\n 'type': 'boolean',\n 'default': false\n }]\n};\ninherits(Window, Transform, {\n transform(_, pulse) {\n this.stamp = pulse.stamp;\n const mod = _.modified(),\n cmp = stableCompare(_.sort),\n key = groupkey(_.groupby),\n group = t => this.group(key(t));\n\n // initialize window state\n let state = this.state;\n if (!state || mod) {\n state = this.state = new WindowState(_);\n }\n\n // partition input tuples\n if (mod || pulse.modified(state.inputs)) {\n this.value = {};\n pulse.visit(pulse.SOURCE, t => group(t).add(t));\n } else {\n pulse.visit(pulse.REM, t => group(t).remove(t));\n pulse.visit(pulse.ADD, t => group(t).add(t));\n }\n\n // perform window calculations for each modified partition\n for (let i = 0, n = this._mlen; i < n; ++i) {\n processPartition(this._mods[i], state, cmp, _);\n }\n this._mlen = 0;\n this._mods = [];\n\n // TODO don't reflow everything?\n return pulse.reflow(mod).modifies(state.outputs);\n },\n group(key) {\n let group = this.value[key];\n if (!group) {\n group = this.value[key] = SortedList(tupleid);\n group.stamp = -1;\n }\n if (group.stamp < this.stamp) {\n group.stamp = this.stamp;\n this._mods[this._mlen++] = group;\n }\n return group;\n }\n});\nfunction processPartition(list, state, cmp, _) {\n const sort = _.sort,\n range = sort && !_.ignorePeers,\n frame = _.frame || [null, 0],\n data = list.data(cmp),\n // use cmp for stable sort\n n = data.length,\n b = range ? bisector(sort) : null,\n w = {\n i0: 0,\n i1: 0,\n p0: 0,\n p1: 0,\n index: 0,\n data: data,\n compare: sort || constant(-1)\n };\n state.init();\n for (let i = 0; i < n; ++i) {\n setWindow(w, frame, i, n);\n if (range) adjustRange(w, b);\n state.update(w, data[i]);\n }\n}\nfunction setWindow(w, f, i, n) {\n w.p0 = w.i0;\n w.p1 = w.i1;\n w.i0 = f[0] == null ? 0 : Math.max(0, i - Math.abs(f[0]));\n w.i1 = f[1] == null ? n : Math.min(n, i + Math.abs(f[1]) + 1);\n w.index = i;\n}\n\n// if frame type is 'range', adjust window for peer values\nfunction adjustRange(w, bisect) {\n const r0 = w.i0,\n r1 = w.i1 - 1,\n c = w.compare,\n d = w.data,\n n = d.length - 1;\n if (r0 > 0 && !c(d[r0], d[r0 - 1])) w.i0 = bisect.left(d, d[r0]);\n if (r1 < n && !c(d[r1], d[r1 + 1])) w.i1 = bisect.right(d, d[r1]);\n}\n\nexport { Aggregate as aggregate, Bin as bin, Collect as collect, Compare as compare, CountPattern as countpattern, Cross as cross, Density as density, DotBin as dotbin, Expression as expression, Extent as extent, Facet as facet, Field as field, Filter as filter, Flatten as flatten, Fold as fold, Formula as formula, Generate as generate, Impute as impute, JoinAggregate as joinaggregate, KDE as kde, Key as key, Load as load, Lookup as lookup, MultiExtent as multiextent, MultiValues as multivalues, Params as params, Pivot as pivot, PreFacet as prefacet, Project as project, Proxy as proxy, Quantile as quantile, Relay as relay, Sample as sample, Sequence as sequence, Sieve as sieve, Subflow as subflow, TimeUnit as timeunit, TupleIndex as tupleindex, Values as values, Window as window };\n","function domCanvas(w, h) {\n if (typeof document !== 'undefined' && document.createElement) {\n const c = document.createElement('canvas');\n if (c && c.getContext) {\n c.width = w;\n c.height = h;\n return c;\n }\n }\n return null;\n}\nconst domImage = () => typeof Image !== 'undefined' ? Image : null;\n\nexport { domCanvas as canvas, domCanvas, domImage as image };\n","import { toNumber, peek, toSet, array, constant, isNumber, span, isObject, isString, error, isArray } from 'vega-util';\nimport { bisectRight, range, bisect } from 'd3-array';\nimport * as $ from 'd3-scale';\nimport { scaleOrdinal, tickFormat as tickFormat$1 } from 'd3-scale';\nexport { scaleImplicit } from 'd3-scale';\nimport * as $$1 from 'd3-interpolate';\nimport { timeInterval, utcInterval } from 'vega-time';\n\nfunction bandSpace (count, paddingInner, paddingOuter) {\n const space = count - paddingInner + paddingOuter * 2;\n return count ? space > 0 ? space : 1 : 0;\n}\n\nconst Identity = 'identity';\nconst Linear = 'linear';\nconst Log = 'log';\nconst Pow = 'pow';\nconst Sqrt = 'sqrt';\nconst Symlog = 'symlog';\nconst Time = 'time';\nconst UTC = 'utc';\nconst Sequential = 'sequential';\nconst Diverging = 'diverging';\nconst Quantile = 'quantile';\nconst Quantize = 'quantize';\nconst Threshold = 'threshold';\nconst Ordinal = 'ordinal';\nconst Point = 'point';\nconst Band = 'band';\nconst BinOrdinal = 'bin-ordinal';\n\n// categories\nconst Continuous = 'continuous';\nconst Discrete = 'discrete';\nconst Discretizing = 'discretizing';\nconst Interpolating = 'interpolating';\nconst Temporal = 'temporal';\n\nfunction invertRange (scale) {\n return function (_) {\n let lo = _[0],\n hi = _[1],\n t;\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n return [scale.invert(lo), scale.invert(hi)];\n };\n}\n\nfunction invertRangeExtent (scale) {\n return function (_) {\n const range = scale.range();\n let lo = _[0],\n hi = _[1],\n min = -1,\n max,\n t,\n i,\n n;\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n for (i = 0, n = range.length; i < n; ++i) {\n if (range[i] >= lo && range[i] <= hi) {\n if (min < 0) min = i;\n max = i;\n }\n }\n if (min < 0) return undefined;\n lo = scale.invertExtent(range[min]);\n hi = scale.invertExtent(range[max]);\n return [lo[0] === undefined ? lo[1] : lo[0], hi[1] === undefined ? hi[0] : hi[1]];\n };\n}\n\nfunction band() {\n const scale = scaleOrdinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range;\n let range$1 = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n delete scale.unknown;\n function rescale() {\n const n = domain().length,\n reverse = range$1[1] < range$1[0],\n stop = range$1[1 - reverse],\n space = bandSpace(n, paddingInner, paddingOuter);\n let start = range$1[reverse - 0];\n step = (stop - start) / (space || 1);\n if (round) {\n step = Math.floor(step);\n }\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) {\n start = Math.round(start);\n bandwidth = Math.round(bandwidth);\n }\n const values = range(n).map(i => start + step * i);\n return ordinalRange(reverse ? values.reverse() : values);\n }\n scale.domain = function (_) {\n if (arguments.length) {\n domain(_);\n return rescale();\n } else {\n return domain();\n }\n };\n scale.range = function (_) {\n if (arguments.length) {\n range$1 = [+_[0], +_[1]];\n return rescale();\n } else {\n return range$1.slice();\n }\n };\n scale.rangeRound = function (_) {\n range$1 = [+_[0], +_[1]];\n round = true;\n return rescale();\n };\n scale.bandwidth = function () {\n return bandwidth;\n };\n scale.step = function () {\n return step;\n };\n scale.round = function (_) {\n if (arguments.length) {\n round = !!_;\n return rescale();\n } else {\n return round;\n }\n };\n scale.padding = function (_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n paddingInner = paddingOuter;\n return rescale();\n } else {\n return paddingInner;\n }\n };\n scale.paddingInner = function (_) {\n if (arguments.length) {\n paddingInner = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingInner;\n }\n };\n scale.paddingOuter = function (_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingOuter;\n }\n };\n scale.align = function (_) {\n if (arguments.length) {\n align = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return align;\n }\n };\n scale.invertRange = function (_) {\n // bail if range has null or undefined values\n if (_[0] == null || _[1] == null) return;\n const reverse = range$1[1] < range$1[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1;\n let lo = +_[0],\n hi = +_[1],\n a,\n b,\n t;\n\n // bail if either range endpoint is invalid\n if (lo !== lo || hi !== hi) return;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n if (hi < values[0] || lo > range$1[1 - reverse]) return;\n\n // binary search to index into scale range\n a = Math.max(0, bisectRight(values, lo) - 1);\n b = lo === hi ? a : bisectRight(values, hi) - 1;\n\n // increment index a if lo is within padding gap\n if (lo - values[a] > bandwidth + 1e-10) ++a;\n if (reverse) {\n // map + swap\n t = a;\n a = n - b;\n b = n - t;\n }\n return a > b ? undefined : domain().slice(a, b + 1);\n };\n scale.invert = function (_) {\n const value = scale.invertRange([_, _]);\n return value ? value[0] : value;\n };\n scale.copy = function () {\n return band().domain(domain()).range(range$1).round(round).paddingInner(paddingInner).paddingOuter(paddingOuter).align(align);\n };\n return rescale();\n}\nfunction pointish(scale) {\n const copy = scale.copy;\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n scale.copy = function () {\n return pointish(copy());\n };\n return scale;\n}\nfunction point() {\n return pointish(band().paddingInner(1));\n}\n\nvar map = Array.prototype.map;\nfunction numbers(_) {\n return map.call(_, toNumber);\n}\n\nconst slice = Array.prototype.slice;\n\nfunction scaleBinOrdinal() {\n let domain = [],\n range = [];\n function scale(x) {\n return x == null || x !== x ? undefined : range[(bisect(domain, x) - 1) % range.length];\n }\n scale.domain = function (_) {\n if (arguments.length) {\n domain = numbers(_);\n return scale;\n } else {\n return domain.slice();\n }\n };\n scale.range = function (_) {\n if (arguments.length) {\n range = slice.call(_);\n return scale;\n } else {\n return range.slice();\n }\n };\n scale.tickFormat = function (count, specifier) {\n return tickFormat$1(domain[0], peek(domain), count == null ? 10 : count, specifier);\n };\n scale.copy = function () {\n return scaleBinOrdinal().domain(scale.domain()).range(scale.range());\n };\n return scale;\n}\n\n/** Private scale registry: should not be exported */\nconst scales = new Map();\nconst VEGA_SCALE = Symbol('vega_scale');\nfunction registerScale(scale) {\n scale[VEGA_SCALE] = true;\n return scale;\n}\n\n/**\n * Return true if object was created by a constructor from the vega-scale `scale` function.\n */\nfunction isRegisteredScale(scale) {\n return scale && scale[VEGA_SCALE] === true;\n}\n\n/**\n * Augment scales with their type and needed inverse methods.\n */\nfunction create(type, constructor, metadata) {\n const ctr = function scale() {\n const s = constructor();\n if (!s.invertRange) {\n s.invertRange = s.invert ? invertRange(s) : s.invertExtent ? invertRangeExtent(s) : undefined;\n }\n s.type = type;\n return registerScale(s);\n };\n ctr.metadata = toSet(array(metadata));\n return ctr;\n}\n\n/**\n * Registry function for adding and accessing scale constructor functions.\n * The *type* argument is a String indicating the name of the scale type.\n *\n * If the *scale* argument is not specified, this method returns the matching scale constructor in the registry, or `null` if not found.\n * If the *scale* argument is provided, it must be a scale constructor function to add to the registry under the given *type* name.\n * The *metadata* argument provides additional information to guide appropriate use of scales within Vega.\n *\n * *metadata* can be either a string or string array. The valid string values are:\n * - `\"continuous\"` - the scale is defined over a continuous-valued domain.\n * - `\"discrete\"` - the scale is defined over a discrete domain and range.\n * - `\"discretizing\"` - the scale discretizes a continuous domain to a discrete range.\n * - `\"interpolating\"` - the scale range is defined using a color interpolator.\n * - `\"log\"` - the scale performs a logarithmic transform of the continuous domain.\n * - `\"temporal\"` - the scale domain is defined over date-time values.\n */\nfunction scale(type, scale, metadata) {\n if (arguments.length > 1) {\n scales.set(type, create(type, scale, metadata));\n return this;\n } else {\n return isValidScaleType(type) ? scales.get(type) : undefined;\n }\n}\n\n// identity scale\nscale(Identity, $.scaleIdentity);\n\n// continuous scales\nscale(Linear, $.scaleLinear, Continuous);\nscale(Log, $.scaleLog, [Continuous, Log]);\nscale(Pow, $.scalePow, Continuous);\nscale(Sqrt, $.scaleSqrt, Continuous);\nscale(Symlog, $.scaleSymlog, Continuous);\nscale(Time, $.scaleTime, [Continuous, Temporal]);\nscale(UTC, $.scaleUtc, [Continuous, Temporal]);\n\n// sequential scales\nscale(Sequential, $.scaleSequential, [Continuous, Interpolating]); // backwards compat\nscale(`${Sequential}-${Linear}`, $.scaleSequential, [Continuous, Interpolating]);\nscale(`${Sequential}-${Log}`, $.scaleSequentialLog, [Continuous, Interpolating, Log]);\nscale(`${Sequential}-${Pow}`, $.scaleSequentialPow, [Continuous, Interpolating]);\nscale(`${Sequential}-${Sqrt}`, $.scaleSequentialSqrt, [Continuous, Interpolating]);\nscale(`${Sequential}-${Symlog}`, $.scaleSequentialSymlog, [Continuous, Interpolating]);\n\n// diverging scales\nscale(`${Diverging}-${Linear}`, $.scaleDiverging, [Continuous, Interpolating]);\nscale(`${Diverging}-${Log}`, $.scaleDivergingLog, [Continuous, Interpolating, Log]);\nscale(`${Diverging}-${Pow}`, $.scaleDivergingPow, [Continuous, Interpolating]);\nscale(`${Diverging}-${Sqrt}`, $.scaleDivergingSqrt, [Continuous, Interpolating]);\nscale(`${Diverging}-${Symlog}`, $.scaleDivergingSymlog, [Continuous, Interpolating]);\n\n// discretizing scales\nscale(Quantile, $.scaleQuantile, [Discretizing, Quantile]);\nscale(Quantize, $.scaleQuantize, Discretizing);\nscale(Threshold, $.scaleThreshold, Discretizing);\n\n// discrete scales\nscale(BinOrdinal, scaleBinOrdinal, [Discrete, Discretizing]);\nscale(Ordinal, $.scaleOrdinal, Discrete);\nscale(Band, band, Discrete);\nscale(Point, point, Discrete);\nfunction isValidScaleType(type) {\n return scales.has(type);\n}\nfunction hasType(key, type) {\n const s = scales.get(key);\n return s && s.metadata[type];\n}\nfunction isContinuous(key) {\n return hasType(key, Continuous);\n}\nfunction isDiscrete(key) {\n return hasType(key, Discrete);\n}\nfunction isDiscretizing(key) {\n return hasType(key, Discretizing);\n}\nfunction isLogarithmic(key) {\n return hasType(key, Log);\n}\nfunction isTemporal(key) {\n return hasType(key, Temporal);\n}\nfunction isInterpolating(key) {\n return hasType(key, Interpolating);\n}\nfunction isQuantile(key) {\n return hasType(key, Quantile);\n}\n\nconst scaleProps = ['clamp', 'base', 'constant', 'exponent'];\nfunction interpolateRange(interpolator, range) {\n const start = range[0],\n span = peek(range) - start;\n return function (i) {\n return interpolator(start + i * span);\n };\n}\nfunction interpolateColors(colors, type, gamma) {\n return $$1.piecewise(interpolate(type || 'rgb', gamma), colors);\n}\nfunction quantizeInterpolator(interpolator, count) {\n const samples = new Array(count),\n n = count + 1;\n for (let i = 0; i < count;) samples[i] = interpolator(++i / n);\n return samples;\n}\nfunction scaleCopy(scale) {\n const t = scale.type,\n s = scale.copy();\n s.type = t;\n return s;\n}\nfunction scaleFraction(scale$1, min, max) {\n const delta = max - min;\n let i, t, s;\n if (!delta || !Number.isFinite(delta)) {\n return constant(0.5);\n } else {\n i = (t = scale$1.type).indexOf('-');\n t = i < 0 ? t : t.slice(i + 1);\n s = scale(t)().domain([min, max]).range([0, 1]);\n scaleProps.forEach(m => scale$1[m] ? s[m](scale$1[m]()) : 0);\n return s;\n }\n}\nfunction interpolate(type, gamma) {\n const interp = $$1[method(type)];\n return gamma != null && interp && interp.gamma ? interp.gamma(gamma) : interp;\n}\nfunction method(type) {\n return 'interpolate' + type.toLowerCase().split('-').map(s => s[0].toUpperCase() + s.slice(1)).join('');\n}\n\nconst continuous = {\n blues: 'cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90',\n greens: 'd3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429',\n greys: 'e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e',\n oranges: 'fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303',\n purples: 'e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c',\n reds: 'fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13',\n blueGreen: 'd5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429',\n bluePurple: 'ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71',\n greenBlue: 'd3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1',\n orangeRed: 'fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403',\n purpleBlue: 'dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281',\n purpleBlueGreen: 'dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353',\n purpleRed: 'dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a',\n redPurple: 'fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174',\n yellowGreen: 'e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034',\n yellowOrangeBrown: 'feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204',\n yellowOrangeRed: 'fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225',\n blueOrange: '134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07',\n brownBlueGreen: '704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147',\n purpleGreen: '5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29',\n purpleOrange: '4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07',\n redBlue: '8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85',\n redGrey: '8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434',\n yellowGreenBlue: 'eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185',\n redYellowBlue: 'a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695',\n redYellowGreen: 'a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837',\n pinkYellowGreen: '8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419',\n spectral: '9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2',\n viridis: '440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725',\n magma: '0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf',\n inferno: '0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4',\n plasma: '0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921',\n cividis: '00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647',\n rainbow: '6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa',\n sinebow: 'ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040',\n turbo: '23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00',\n browns: 'eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632',\n tealBlues: 'bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985',\n teals: 'bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667',\n warmGreys: 'dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e',\n goldGreen: 'f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36',\n goldOrange: 'f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26',\n goldRed: 'f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e',\n lightGreyRed: 'efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b',\n lightGreyTeal: 'e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc',\n lightMulti: 'e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c',\n lightOrange: 'f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b',\n lightTealBlue: 'e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988',\n darkBlue: '3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff',\n darkGold: '3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff',\n darkGreen: '3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa',\n darkMulti: '3737371f5287197d8c29a86995ce3fffe800ffffff',\n darkRed: '3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c'\n};\nconst discrete = {\n category10: '1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf',\n category20: '1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5',\n category20b: '393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6',\n category20c: '3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9',\n tableau10: '4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac',\n tableau20: '4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5',\n accent: '7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666',\n dark2: '1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666',\n paired: 'a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928',\n pastel1: 'fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2',\n pastel2: 'b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc',\n set1: 'e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999',\n set2: '66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3',\n set3: '8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f'\n};\n\nfunction colors(palette) {\n const n = palette.length / 6 | 0,\n c = new Array(n);\n for (let i = 0; i < n;) {\n c[i] = '#' + palette.slice(i * 6, ++i * 6);\n }\n return c;\n}\nfunction apply(_, f) {\n for (const k in _) scheme(k, f(_[k]));\n}\nconst schemes = {};\napply(discrete, colors);\napply(continuous, _ => interpolateColors(colors(_)));\nfunction scheme(name, scheme) {\n name = name && name.toLowerCase();\n if (arguments.length > 1) {\n schemes[name] = scheme;\n return this;\n } else {\n return schemes[name];\n }\n}\n\nconst SymbolLegend = 'symbol';\nconst DiscreteLegend = 'discrete';\nconst GradientLegend = 'gradient';\n\nconst defaultFormatter = value => isArray(value) ? value.map(v => String(v)) : String(value);\nconst ascending = (a, b) => a[1] - b[1];\nconst descending = (a, b) => b[1] - a[1];\n\n/**\n * Determine the tick count or interval function.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} count - The desired tick count or interval specifier.\n * @param {number} minStep - The desired minimum step between tick values.\n * @return {*} - The tick count or interval function.\n */\nfunction tickCount(scale, count, minStep) {\n let step;\n if (isNumber(count)) {\n if (scale.bins) {\n count = Math.max(count, scale.bins.length);\n }\n if (minStep != null) {\n count = Math.min(count, Math.floor(span(scale.domain()) / minStep || 1));\n }\n }\n if (isObject(count)) {\n step = count.step;\n count = count.interval;\n }\n if (isString(count)) {\n count = scale.type === Time ? timeInterval(count) : scale.type == UTC ? utcInterval(count) : error('Only time and utc scales accept interval strings.');\n if (step) count = count.every(step);\n }\n return count;\n}\n\n/**\n * Filter a set of candidate tick values, ensuring that only tick values\n * that lie within the scale range are included.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {Array<*>} ticks - The candidate tick values.\n * @param {*} count - The tick count or interval function.\n * @return {Array<*>} - The filtered tick values.\n */\nfunction validTicks(scale, ticks, count) {\n let range = scale.range(),\n lo = range[0],\n hi = peek(range),\n cmp = ascending;\n if (lo > hi) {\n range = hi;\n hi = lo;\n lo = range;\n cmp = descending;\n }\n lo = Math.floor(lo);\n hi = Math.ceil(hi);\n\n // filter ticks to valid values within the range\n // additionally sort ticks in range order (#2579)\n ticks = ticks.map(v => [v, scale(v)]).filter(_ => lo <= _[1] && _[1] <= hi).sort(cmp).map(_ => _[0]);\n if (count > 0 && ticks.length > 1) {\n const endpoints = [ticks[0], peek(ticks)];\n while (ticks.length > count && ticks.length >= 3) {\n ticks = ticks.filter((_, i) => !(i % 2));\n }\n if (ticks.length < 3) {\n ticks = endpoints;\n }\n }\n return ticks;\n}\n\n/**\n * Generate tick values for the given scale and approximate tick count or\n * interval value. If the scale has a 'ticks' method, it will be used to\n * generate the ticks, with the count argument passed as a parameter. If the\n * scale lacks a 'ticks' method, the full scale domain will be returned.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} [count] - The approximate number of desired ticks.\n * @return {Array<*>} - The generated tick values.\n */\nfunction tickValues(scale, count) {\n return scale.bins ? validTicks(scale, scale.bins) : scale.ticks ? scale.ticks(count) : scale.domain();\n}\n\n/**\n * Generate a label format function for a scale. If the scale has a\n * 'tickFormat' method, it will be used to generate the formatter, with the\n * count and specifier arguments passed as parameters. If the scale lacks a\n * 'tickFormat' method, the returned formatter performs simple string coercion.\n * If the input scale is a logarithmic scale and the format specifier does not\n * indicate a desired decimal precision, a special variable precision formatter\n * that automatically trims trailing zeroes will be generated.\n * @param {Scale} scale - The scale for which to generate the label formatter.\n * @param {*} [count] - The approximate number of desired ticks.\n * @param {string} [specifier] - The format specifier. Must be a legal d3\n * specifier string (see https://github.com/d3/d3-format#formatSpecifier) or\n * time multi-format specifier object.\n * @return {function(*):string} - The generated label formatter.\n */\nfunction tickFormat(locale, scale, count, specifier, formatType, noSkip) {\n const type = scale.type;\n let format = defaultFormatter;\n if (type === Time || formatType === Time) {\n format = locale.timeFormat(specifier);\n } else if (type === UTC || formatType === UTC) {\n format = locale.utcFormat(specifier);\n } else if (isLogarithmic(type)) {\n const varfmt = locale.formatFloat(specifier);\n if (noSkip || scale.bins) {\n format = varfmt;\n } else {\n const test = tickLog(scale, count, false);\n format = _ => test(_) ? varfmt(_) : '';\n }\n } else if (scale.tickFormat) {\n // if d3 scale has tickFormat, it must be continuous\n const d = scale.domain();\n format = locale.formatSpan(d[0], d[d.length - 1], count, specifier);\n } else if (specifier) {\n format = locale.format(specifier);\n }\n return format;\n}\nfunction tickLog(scale, count, values) {\n const ticks = tickValues(scale, count),\n base = scale.base(),\n logb = Math.log(base),\n k = Math.max(1, base * count / ticks.length);\n\n // apply d3-scale's log format filter criteria\n const test = d => {\n let i = d / Math.pow(base, Math.round(Math.log(d) / logb));\n if (i * base < base - 0.5) i *= base;\n return i <= k;\n };\n return values ? ticks.filter(test) : test;\n}\n\nconst symbols = {\n [Quantile]: 'quantiles',\n [Quantize]: 'thresholds',\n [Threshold]: 'domain'\n};\nconst formats = {\n [Quantile]: 'quantiles',\n [Quantize]: 'domain'\n};\nfunction labelValues(scale, count) {\n return scale.bins ? binValues(scale.bins) : scale.type === Log ? tickLog(scale, count, true) : symbols[scale.type] ? thresholdValues(scale[symbols[scale.type]]()) : tickValues(scale, count);\n}\nfunction thresholdFormat(locale, scale, specifier) {\n const _ = scale[formats[scale.type]](),\n n = _.length;\n let d = n > 1 ? _[1] - _[0] : _[0],\n i;\n for (i = 1; i < n; ++i) {\n d = Math.min(d, _[i] - _[i - 1]);\n }\n\n // tickCount = 3 ticks times 10 for increased resolution\n return locale.formatSpan(0, d, 3 * 10, specifier);\n}\nfunction thresholdValues(thresholds) {\n const values = [-Infinity].concat(thresholds);\n values.max = +Infinity;\n return values;\n}\nfunction binValues(bins) {\n const values = bins.slice(0, -1);\n values.max = peek(bins);\n return values;\n}\nconst isDiscreteRange = scale => symbols[scale.type] || scale.bins;\nfunction labelFormat(locale, scale, count, type, specifier, formatType, noSkip) {\n const format = formats[scale.type] && formatType !== Time && formatType !== UTC ? thresholdFormat(locale, scale, specifier) : tickFormat(locale, scale, count, specifier, formatType, noSkip);\n return type === SymbolLegend && isDiscreteRange(scale) ? formatRange(format) : type === DiscreteLegend ? formatDiscrete(format) : formatPoint(format);\n}\nconst formatRange = format => (value, index, array) => {\n const limit = get(array[index + 1], get(array.max, +Infinity)),\n lo = formatValue(value, format),\n hi = formatValue(limit, format);\n return lo && hi ? lo + ' \\u2013 ' + hi : hi ? '< ' + hi : '\\u2265 ' + lo;\n};\nconst get = (value, dflt) => value != null ? value : dflt;\nconst formatDiscrete = format => (value, index) => index ? format(value) : null;\nconst formatPoint = format => value => format(value);\nconst formatValue = (value, format) => Number.isFinite(value) ? format(value) : null;\nfunction labelFraction(scale) {\n const domain = scale.domain(),\n count = domain.length - 1;\n let lo = +domain[0],\n hi = +peek(domain),\n span = hi - lo;\n if (scale.type === Threshold) {\n const adjust = count ? span / count : 0.1;\n lo -= adjust;\n hi += adjust;\n span = hi - lo;\n }\n return value => (value - lo) / span;\n}\n\nfunction format(locale, scale, specifier, formatType) {\n const type = formatType || scale.type;\n\n // replace abbreviated time specifiers to improve screen reader experience\n if (isString(specifier) && isTemporal(type)) {\n specifier = specifier.replace(/%a/g, '%A').replace(/%b/g, '%B');\n }\n return !specifier && type === Time ? locale.timeFormat('%A, %d %B %Y, %X') : !specifier && type === UTC ? locale.utcFormat('%A, %d %B %Y, %X UTC') : labelFormat(locale, scale, 5, null, specifier, formatType, true);\n}\nfunction domainCaption(locale, scale, opt) {\n opt = opt || {};\n const max = Math.max(3, opt.maxlen || 7),\n fmt = format(locale, scale, opt.format, opt.formatType);\n\n // if scale breaks domain into bins, describe boundaries\n if (isDiscretizing(scale.type)) {\n const v = labelValues(scale).slice(1).map(fmt),\n n = v.length;\n return `${n} boundar${n === 1 ? 'y' : 'ies'}: ${v.join(', ')}`;\n }\n\n // if scale domain is discrete, list values\n else if (isDiscrete(scale.type)) {\n const d = scale.domain(),\n n = d.length,\n v = n > max ? d.slice(0, max - 2).map(fmt).join(', ') + ', ending with ' + d.slice(-1).map(fmt) : d.map(fmt).join(', ');\n return `${n} value${n === 1 ? '' : 's'}: ${v}`;\n }\n\n // if scale domain is continuous, describe value range\n else {\n const d = scale.domain();\n return `values from ${fmt(d[0])} to ${fmt(peek(d))}`;\n }\n}\n\nexport { Band, BinOrdinal, DiscreteLegend, Diverging, GradientLegend, Identity, Linear, Log, Ordinal, Point, Pow, Quantile, Quantize, Sequential, Sqrt, SymbolLegend, Symlog, Threshold, Time, UTC, bandSpace, domainCaption, interpolate, interpolateColors, interpolateRange, isContinuous, isDiscrete, isDiscretizing, isInterpolating, isLogarithmic, isQuantile, isRegisteredScale, isTemporal, isValidScaleType, labelFormat, labelFraction, labelValues, quantizeInterpolator, registerScale, scale, scaleCopy, scaleFraction, scheme, tickCount, tickFormat, tickValues, validTicks };\n","import { hasOwnProperty, isFunction, inherits, truthy, lruCache, isArray, error, toSet, array, peek, extend, isNumber, isObject } from 'vega-util';\nimport { curveBasis, curveBasisClosed, curveBasisOpen, curveBundle, curveCardinal, curveCardinalOpen, curveCardinalClosed, curveCatmullRom, curveCatmullRomClosed, curveCatmullRomOpen, curveLinear, curveLinearClosed, curveMonotoneY, curveMonotoneX, curveNatural, curveStep, curveStepAfter, curveStepBefore, arc as arc$2, area as area$2, line as line$2, symbol as symbol$2 } from 'd3-shape';\nimport { path as path$3 } from 'd3-path';\nexport { path } from 'd3-path';\nimport { image as image$1, canvas } from 'vega-canvas';\nimport { loader } from 'vega-loader';\nimport { isDiscrete, domainCaption } from 'vega-scale';\n\nlet gradient_id = 0;\nfunction resetSVGGradientId() {\n gradient_id = 0;\n}\nconst patternPrefix = 'p_';\nfunction isGradient(value) {\n return value && value.gradient;\n}\nfunction gradientRef(g, defs, base) {\n const type = g.gradient;\n let id = g.id,\n prefix = type === 'radial' ? patternPrefix : '';\n\n // check id, assign default values as needed\n if (!id) {\n id = g.id = 'gradient_' + gradient_id++;\n if (type === 'radial') {\n g.x1 = get(g.x1, 0.5);\n g.y1 = get(g.y1, 0.5);\n g.r1 = get(g.r1, 0);\n g.x2 = get(g.x2, 0.5);\n g.y2 = get(g.y2, 0.5);\n g.r2 = get(g.r2, 0.5);\n prefix = patternPrefix;\n } else {\n g.x1 = get(g.x1, 0);\n g.y1 = get(g.y1, 0);\n g.x2 = get(g.x2, 1);\n g.y2 = get(g.y2, 0);\n }\n }\n\n // register definition\n defs[id] = g;\n\n // return url reference\n return 'url(' + (base || '') + '#' + prefix + id + ')';\n}\nfunction get(val, def) {\n return val != null ? val : def;\n}\nfunction Gradient (p0, p1) {\n var stops = [],\n gradient;\n return gradient = {\n gradient: 'linear',\n x1: p0 ? p0[0] : 0,\n y1: p0 ? p0[1] : 0,\n x2: p1 ? p1[0] : 1,\n y2: p1 ? p1[1] : 0,\n stops: stops,\n stop: function (offset, color) {\n stops.push({\n offset: offset,\n color: color\n });\n return gradient;\n }\n };\n}\n\nconst lookup = {\n 'basis': {\n curve: curveBasis\n },\n 'basis-closed': {\n curve: curveBasisClosed\n },\n 'basis-open': {\n curve: curveBasisOpen\n },\n 'bundle': {\n curve: curveBundle,\n tension: 'beta',\n value: 0.85\n },\n 'cardinal': {\n curve: curveCardinal,\n tension: 'tension',\n value: 0\n },\n 'cardinal-open': {\n curve: curveCardinalOpen,\n tension: 'tension',\n value: 0\n },\n 'cardinal-closed': {\n curve: curveCardinalClosed,\n tension: 'tension',\n value: 0\n },\n 'catmull-rom': {\n curve: curveCatmullRom,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-closed': {\n curve: curveCatmullRomClosed,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-open': {\n curve: curveCatmullRomOpen,\n tension: 'alpha',\n value: 0.5\n },\n 'linear': {\n curve: curveLinear\n },\n 'linear-closed': {\n curve: curveLinearClosed\n },\n 'monotone': {\n horizontal: curveMonotoneY,\n vertical: curveMonotoneX\n },\n 'natural': {\n curve: curveNatural\n },\n 'step': {\n curve: curveStep\n },\n 'step-after': {\n curve: curveStepAfter\n },\n 'step-before': {\n curve: curveStepBefore\n }\n};\nfunction curves(type, orientation, tension) {\n var entry = hasOwnProperty(lookup, type) && lookup[type],\n curve = null;\n if (entry) {\n curve = entry.curve || entry[orientation || 'vertical'];\n if (entry.tension && tension != null) {\n curve = curve[entry.tension](tension);\n }\n }\n return curve;\n}\n\nconst paramCounts = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n z: 0,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7\n};\nconst commandPattern = /[mlhvzcsqta]([^mlhvzcsqta]+|$)/gi;\nconst numberPattern = /^[+-]?(([0-9]*\\.[0-9]+)|([0-9]+\\.)|([0-9]+))([eE][+-]?[0-9]+)?/;\nconst spacePattern = /^((\\s+,?\\s*)|(,\\s*))/;\nconst flagPattern = /^[01]/;\nfunction parse(path) {\n const commands = [];\n const matches = path.match(commandPattern) || [];\n matches.forEach(str => {\n let cmd = str[0];\n const type = cmd.toLowerCase();\n\n // parse parameters\n const paramCount = paramCounts[type];\n const params = parseParams(type, paramCount, str.slice(1).trim());\n const count = params.length;\n\n // error checking based on parameter count\n if (count < paramCount || count && count % paramCount !== 0) {\n throw Error('Invalid SVG path, incorrect parameter count');\n }\n\n // register the command\n commands.push([cmd, ...params.slice(0, paramCount)]);\n\n // exit now if we're done, also handles zero-param 'z'\n if (count === paramCount) {\n return;\n }\n\n // handle implicit line-to\n if (type === 'm') {\n cmd = cmd === 'M' ? 'L' : 'l';\n }\n\n // repeat command when given extended param list\n for (let i = paramCount; i < count; i += paramCount) {\n commands.push([cmd, ...params.slice(i, i + paramCount)]);\n }\n });\n return commands;\n}\nfunction parseParams(type, paramCount, segment) {\n const params = [];\n for (let index = 0; paramCount && index < segment.length;) {\n for (let i = 0; i < paramCount; ++i) {\n const pattern = type === 'a' && (i === 3 || i === 4) ? flagPattern : numberPattern;\n const match = segment.slice(index).match(pattern);\n if (match === null) {\n throw Error('Invalid SVG path, incorrect parameter type');\n }\n index += match[0].length;\n params.push(+match[0]);\n const ws = segment.slice(index).match(spacePattern);\n if (ws !== null) {\n index += ws[0].length;\n }\n }\n }\n return params;\n}\n\nconst DegToRad = Math.PI / 180;\nconst Epsilon = 1e-14;\nconst HalfPi = Math.PI / 2;\nconst Tau = Math.PI * 2;\nconst HalfSqrt3 = Math.sqrt(3) / 2;\n\nvar segmentCache = {};\nvar bezierCache = {};\nvar join = [].join;\n\n// Copied from Inkscape svgtopdf, thanks!\nfunction segments(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\n const key = join.call(arguments);\n if (segmentCache[key]) {\n return segmentCache[key];\n }\n const th = rotateX * DegToRad;\n const sin_th = Math.sin(th);\n const cos_th = Math.cos(th);\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n const px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\n const py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\n let pl = px * px / (rx * rx) + py * py / (ry * ry);\n if (pl > 1) {\n pl = Math.sqrt(pl);\n rx *= pl;\n ry *= pl;\n }\n const a00 = cos_th / rx;\n const a01 = sin_th / rx;\n const a10 = -sin_th / ry;\n const a11 = cos_th / ry;\n const x0 = a00 * ox + a01 * oy;\n const y0 = a10 * ox + a11 * oy;\n const x1 = a00 * x + a01 * y;\n const y1 = a10 * x + a11 * y;\n const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\n let sfactor_sq = 1 / d - 0.25;\n if (sfactor_sq < 0) sfactor_sq = 0;\n let sfactor = Math.sqrt(sfactor_sq);\n if (sweep == large) sfactor = -sfactor;\n const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\n const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\n const th0 = Math.atan2(y0 - yc, x0 - xc);\n const th1 = Math.atan2(y1 - yc, x1 - xc);\n let th_arc = th1 - th0;\n if (th_arc < 0 && sweep === 1) {\n th_arc += Tau;\n } else if (th_arc > 0 && sweep === 0) {\n th_arc -= Tau;\n }\n const segs = Math.ceil(Math.abs(th_arc / (HalfPi + 0.001)));\n const result = [];\n for (let i = 0; i < segs; ++i) {\n const th2 = th0 + i * th_arc / segs;\n const th3 = th0 + (i + 1) * th_arc / segs;\n result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\n }\n return segmentCache[key] = result;\n}\nfunction bezier(params) {\n const key = join.call(params);\n if (bezierCache[key]) {\n return bezierCache[key];\n }\n var cx = params[0],\n cy = params[1],\n th0 = params[2],\n th1 = params[3],\n rx = params[4],\n ry = params[5],\n sin_th = params[6],\n cos_th = params[7];\n const a00 = cos_th * rx;\n const a01 = -sin_th * ry;\n const a10 = sin_th * rx;\n const a11 = cos_th * ry;\n const cos_th0 = Math.cos(th0);\n const sin_th0 = Math.sin(th0);\n const cos_th1 = Math.cos(th1);\n const sin_th1 = Math.sin(th1);\n const th_half = 0.5 * (th1 - th0);\n const sin_th_h2 = Math.sin(th_half * 0.5);\n const t = 8 / 3 * sin_th_h2 * sin_th_h2 / Math.sin(th_half);\n const x1 = cx + cos_th0 - t * sin_th0;\n const y1 = cy + sin_th0 + t * cos_th0;\n const x3 = cx + cos_th1;\n const y3 = cy + sin_th1;\n const x2 = x3 + t * sin_th1;\n const y2 = y3 - t * cos_th1;\n return bezierCache[key] = [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3];\n}\n\nconst temp = ['l', 0, 0, 0, 0, 0, 0, 0];\nfunction scale$1(current, sX, sY) {\n const c = temp[0] = current[0];\n if (c === 'a' || c === 'A') {\n temp[1] = sX * current[1];\n temp[2] = sY * current[2];\n temp[3] = current[3];\n temp[4] = current[4];\n temp[5] = current[5];\n temp[6] = sX * current[6];\n temp[7] = sY * current[7];\n } else if (c === 'h' || c === 'H') {\n temp[1] = sX * current[1];\n } else if (c === 'v' || c === 'V') {\n temp[1] = sY * current[1];\n } else {\n for (var i = 1, n = current.length; i < n; ++i) {\n temp[i] = (i % 2 == 1 ? sX : sY) * current[i];\n }\n }\n return temp;\n}\nfunction pathRender (context, path, l, t, sX, sY) {\n var current,\n // current instruction\n previous = null,\n x = 0,\n // current x\n y = 0,\n // current y\n controlX = 0,\n // current control point x\n controlY = 0,\n // current control point y\n tempX,\n tempY,\n tempControlX,\n tempControlY,\n anchorX = 0,\n anchorY = 0;\n if (l == null) l = 0;\n if (t == null) t = 0;\n if (sX == null) sX = 1;\n if (sY == null) sY = sX;\n if (context.beginPath) context.beginPath();\n for (var i = 0, len = path.length; i < len; ++i) {\n current = path[i];\n if (sX !== 1 || sY !== 1) {\n current = scale$1(current, sX, sY);\n }\n switch (current[0]) {\n // first letter\n\n case 'l':\n // lineto, relative\n x += current[1];\n y += current[2];\n context.lineTo(x + l, y + t);\n break;\n case 'L':\n // lineto, absolute\n x = current[1];\n y = current[2];\n context.lineTo(x + l, y + t);\n break;\n case 'h':\n // horizontal lineto, relative\n x += current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'H':\n // horizontal lineto, absolute\n x = current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'v':\n // vertical lineto, relative\n y += current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'V':\n // verical lineto, absolute\n y = current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'm':\n // moveTo, relative\n x += current[1];\n y += current[2];\n anchorX = x;\n anchorY = y;\n context.moveTo(x + l, y + t);\n break;\n case 'M':\n // moveTo, absolute\n x = current[1];\n y = current[2];\n anchorX = x;\n anchorY = y;\n context.moveTo(x + l, y + t);\n break;\n case 'c':\n // bezierCurveTo, relative\n tempX = x + current[5];\n tempY = y + current[6];\n controlX = x + current[3];\n controlY = y + current[4];\n context.bezierCurveTo(x + current[1] + l,\n // x1\n y + current[2] + t,\n // y1\n controlX + l,\n // x2\n controlY + t,\n // y2\n tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n case 'C':\n // bezierCurveTo, absolute\n x = current[5];\n y = current[6];\n controlX = current[3];\n controlY = current[4];\n context.bezierCurveTo(current[1] + l, current[2] + t, controlX + l, controlY + t, x + l, y + t);\n break;\n case 's':\n // shorthand cubic bezierCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.bezierCurveTo(controlX + l, controlY + t, x + current[1] + l, y + current[2] + t, tempX + l, tempY + t);\n\n // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n controlX = x + current[1];\n controlY = y + current[2];\n x = tempX;\n y = tempY;\n break;\n case 'S':\n // shorthand cubic bezierCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.bezierCurveTo(controlX + l, controlY + t, current[1] + l, current[2] + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n controlX = current[1];\n controlY = current[2];\n break;\n case 'q':\n // quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n controlX = x + current[1];\n controlY = y + current[2];\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n case 'Q':\n // quadraticCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n context.quadraticCurveTo(current[1] + l, current[2] + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = current[1];\n controlY = current[2];\n break;\n case 't':\n // shorthand quadraticCurveTo, relative\n\n // transform to absolute x,y\n tempX = x + current[1];\n tempY = y + current[2];\n if (previous[0].match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else if (previous[0] === 't') {\n // calculate reflection of previous control points for t\n controlX = 2 * x - tempControlX;\n controlY = 2 * y - tempControlY;\n } else if (previous[0] === 'q') {\n // calculate reflection of previous control points for q\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n tempControlX = controlX;\n tempControlY = controlY;\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = x + current[1];\n controlY = y + current[2];\n break;\n case 'T':\n tempX = current[1];\n tempY = current[2];\n\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n case 'a':\n drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + x + l, current[7] + y + t]);\n x += current[6];\n y += current[7];\n break;\n case 'A':\n drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + l, current[7] + t]);\n x = current[6];\n y = current[7];\n break;\n case 'z':\n case 'Z':\n x = anchorX;\n y = anchorY;\n context.closePath();\n break;\n }\n previous = current;\n }\n}\nfunction drawArc(context, x, y, coords) {\n const seg = segments(coords[5],\n // end x\n coords[6],\n // end y\n coords[0],\n // radius x\n coords[1],\n // radius y\n coords[3],\n // large flag\n coords[4],\n // sweep flag\n coords[2],\n // rotation\n x, y);\n for (let i = 0; i < seg.length; ++i) {\n const bez = bezier(seg[i]);\n context.bezierCurveTo(bez[0], bez[1], bez[2], bez[3], bez[4], bez[5]);\n }\n}\n\nconst Tan30 = 0.5773502691896257;\nconst builtins = {\n 'circle': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, Tau);\n }\n },\n 'cross': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n s = r / 2.5;\n context.moveTo(-r, -s);\n context.lineTo(-r, s);\n context.lineTo(-s, s);\n context.lineTo(-s, r);\n context.lineTo(s, r);\n context.lineTo(s, s);\n context.lineTo(r, s);\n context.lineTo(r, -s);\n context.lineTo(s, -s);\n context.lineTo(s, -r);\n context.lineTo(-s, -r);\n context.lineTo(-s, -s);\n context.closePath();\n }\n },\n 'diamond': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(-r, 0);\n context.lineTo(0, -r);\n context.lineTo(r, 0);\n context.lineTo(0, r);\n context.closePath();\n }\n },\n 'square': {\n draw: function (context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n },\n 'arrow': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n s = r / 7,\n t = r / 2.5,\n v = r / 8;\n context.moveTo(-s, r);\n context.lineTo(s, r);\n context.lineTo(s, -v);\n context.lineTo(t, -v);\n context.lineTo(0, -r);\n context.lineTo(-t, -v);\n context.lineTo(-s, -v);\n context.closePath();\n }\n },\n 'wedge': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r,\n o = h - r * Tan30,\n b = r / 4;\n context.moveTo(0, -h - o);\n context.lineTo(-b, h - o);\n context.lineTo(b, h - o);\n context.closePath();\n }\n },\n 'triangle': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r,\n o = h - r * Tan30;\n context.moveTo(0, -h - o);\n context.lineTo(-r, h - o);\n context.lineTo(r, h - o);\n context.closePath();\n }\n },\n 'triangle-up': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(0, -h);\n context.lineTo(-r, h);\n context.lineTo(r, h);\n context.closePath();\n }\n },\n 'triangle-down': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(0, h);\n context.lineTo(-r, -h);\n context.lineTo(r, -h);\n context.closePath();\n }\n },\n 'triangle-right': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(h, 0);\n context.lineTo(-h, -r);\n context.lineTo(-h, r);\n context.closePath();\n }\n },\n 'triangle-left': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(-h, 0);\n context.lineTo(h, -r);\n context.lineTo(h, r);\n context.closePath();\n }\n },\n 'stroke': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(-r, 0);\n context.lineTo(r, 0);\n }\n }\n};\nfunction symbols(_) {\n return hasOwnProperty(builtins, _) ? builtins[_] : customSymbol(_);\n}\nvar custom = {};\nfunction customSymbol(path) {\n if (!hasOwnProperty(custom, path)) {\n const parsed = parse(path);\n custom[path] = {\n draw: function (context, size) {\n pathRender(context, parsed, 0, 0, Math.sqrt(size) / 2);\n }\n };\n }\n return custom[path];\n}\n\n// See http://spencermortensen.com/articles/bezier-circle/\nconst C = 0.448084975506; // C = 1 - c\n\nfunction rectangleX(d) {\n return d.x;\n}\nfunction rectangleY(d) {\n return d.y;\n}\nfunction rectangleWidth(d) {\n return d.width;\n}\nfunction rectangleHeight(d) {\n return d.height;\n}\nfunction number(_) {\n return typeof _ === 'function' ? _ : () => +_;\n}\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(value, max));\n}\nfunction vg_rect () {\n var x = rectangleX,\n y = rectangleY,\n width = rectangleWidth,\n height = rectangleHeight,\n crTL = number(0),\n crTR = crTL,\n crBL = crTL,\n crBR = crTL,\n context = null;\n function rectangle(_, x0, y0) {\n var buffer,\n x1 = x0 != null ? x0 : +x.call(this, _),\n y1 = y0 != null ? y0 : +y.call(this, _),\n w = +width.call(this, _),\n h = +height.call(this, _),\n s = Math.min(w, h) / 2,\n tl = clamp(+crTL.call(this, _), 0, s),\n tr = clamp(+crTR.call(this, _), 0, s),\n bl = clamp(+crBL.call(this, _), 0, s),\n br = clamp(+crBR.call(this, _), 0, s);\n if (!context) context = buffer = path$3();\n if (tl <= 0 && tr <= 0 && bl <= 0 && br <= 0) {\n context.rect(x1, y1, w, h);\n } else {\n var x2 = x1 + w,\n y2 = y1 + h;\n context.moveTo(x1 + tl, y1);\n context.lineTo(x2 - tr, y1);\n context.bezierCurveTo(x2 - C * tr, y1, x2, y1 + C * tr, x2, y1 + tr);\n context.lineTo(x2, y2 - br);\n context.bezierCurveTo(x2, y2 - C * br, x2 - C * br, y2, x2 - br, y2);\n context.lineTo(x1 + bl, y2);\n context.bezierCurveTo(x1 + C * bl, y2, x1, y2 - C * bl, x1, y2 - bl);\n context.lineTo(x1, y1 + tl);\n context.bezierCurveTo(x1, y1 + C * tl, x1 + C * tl, y1, x1 + tl, y1);\n context.closePath();\n }\n if (buffer) {\n context = null;\n return buffer + '' || null;\n }\n }\n rectangle.x = function (_) {\n if (arguments.length) {\n x = number(_);\n return rectangle;\n } else {\n return x;\n }\n };\n rectangle.y = function (_) {\n if (arguments.length) {\n y = number(_);\n return rectangle;\n } else {\n return y;\n }\n };\n rectangle.width = function (_) {\n if (arguments.length) {\n width = number(_);\n return rectangle;\n } else {\n return width;\n }\n };\n rectangle.height = function (_) {\n if (arguments.length) {\n height = number(_);\n return rectangle;\n } else {\n return height;\n }\n };\n rectangle.cornerRadius = function (tl, tr, br, bl) {\n if (arguments.length) {\n crTL = number(tl);\n crTR = tr != null ? number(tr) : crTL;\n crBR = br != null ? number(br) : crTL;\n crBL = bl != null ? number(bl) : crTR;\n return rectangle;\n } else {\n return crTL;\n }\n };\n rectangle.context = function (_) {\n if (arguments.length) {\n context = _ == null ? null : _;\n return rectangle;\n } else {\n return context;\n }\n };\n return rectangle;\n}\n\nfunction vg_trail () {\n var x,\n y,\n size,\n defined,\n context = null,\n ready,\n x1,\n y1,\n r1;\n function point(x2, y2, w2) {\n const r2 = w2 / 2;\n if (ready) {\n var ux = y1 - y2,\n uy = x2 - x1;\n if (ux || uy) {\n // get normal vector\n var ud = Math.hypot(ux, uy),\n rx = (ux /= ud) * r1,\n ry = (uy /= ud) * r1,\n t = Math.atan2(uy, ux);\n\n // draw segment\n context.moveTo(x1 - rx, y1 - ry);\n context.lineTo(x2 - ux * r2, y2 - uy * r2);\n context.arc(x2, y2, r2, t - Math.PI, t);\n context.lineTo(x1 + rx, y1 + ry);\n context.arc(x1, y1, r1, t, t + Math.PI);\n } else {\n context.arc(x2, y2, r2, 0, Tau);\n }\n context.closePath();\n } else {\n ready = 1;\n }\n x1 = x2;\n y1 = y2;\n r1 = r2;\n }\n function trail(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n if (context == null) context = buffer = path$3();\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) ready = 0;\n }\n if (defined0) point(+x(d, i, data), +y(d, i, data), +size(d, i, data));\n }\n if (buffer) {\n context = null;\n return buffer + '' || null;\n }\n }\n trail.x = function (_) {\n if (arguments.length) {\n x = _;\n return trail;\n } else {\n return x;\n }\n };\n trail.y = function (_) {\n if (arguments.length) {\n y = _;\n return trail;\n } else {\n return y;\n }\n };\n trail.size = function (_) {\n if (arguments.length) {\n size = _;\n return trail;\n } else {\n return size;\n }\n };\n trail.defined = function (_) {\n if (arguments.length) {\n defined = _;\n return trail;\n } else {\n return defined;\n }\n };\n trail.context = function (_) {\n if (arguments.length) {\n if (_ == null) {\n context = null;\n } else {\n context = _;\n }\n return trail;\n } else {\n return context;\n }\n };\n return trail;\n}\n\nfunction value$1(a, b) {\n return a != null ? a : b;\n}\nconst x = item => item.x || 0,\n y = item => item.y || 0,\n w = item => item.width || 0,\n h = item => item.height || 0,\n xw = item => (item.x || 0) + (item.width || 0),\n yh = item => (item.y || 0) + (item.height || 0),\n sa = item => item.startAngle || 0,\n ea = item => item.endAngle || 0,\n pa = item => item.padAngle || 0,\n ir = item => item.innerRadius || 0,\n or = item => item.outerRadius || 0,\n cr = item => item.cornerRadius || 0,\n tl = item => value$1(item.cornerRadiusTopLeft, item.cornerRadius) || 0,\n tr = item => value$1(item.cornerRadiusTopRight, item.cornerRadius) || 0,\n br = item => value$1(item.cornerRadiusBottomRight, item.cornerRadius) || 0,\n bl = item => value$1(item.cornerRadiusBottomLeft, item.cornerRadius) || 0,\n sz = item => value$1(item.size, 64),\n ts = item => item.size || 1,\n def = item => !(item.defined === false),\n type = item => symbols(item.shape || 'circle');\nconst arcShape = arc$2().startAngle(sa).endAngle(ea).padAngle(pa).innerRadius(ir).outerRadius(or).cornerRadius(cr),\n areavShape = area$2().x(x).y1(y).y0(yh).defined(def),\n areahShape = area$2().y(y).x1(x).x0(xw).defined(def),\n lineShape = line$2().x(x).y(y).defined(def),\n rectShape = vg_rect().x(x).y(y).width(w).height(h).cornerRadius(tl, tr, br, bl),\n symbolShape = symbol$2().type(type).size(sz),\n trailShape = vg_trail().x(x).y(y).defined(def).size(ts);\nfunction hasCornerRadius(item) {\n return item.cornerRadius || item.cornerRadiusTopLeft || item.cornerRadiusTopRight || item.cornerRadiusBottomRight || item.cornerRadiusBottomLeft;\n}\nfunction arc$1(context, item) {\n return arcShape.context(context)(item);\n}\nfunction area$1(context, items) {\n const item = items[0],\n interp = item.interpolate || 'linear';\n return (item.orient === 'horizontal' ? areahShape : areavShape).curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction line$1(context, items) {\n const item = items[0],\n interp = item.interpolate || 'linear';\n return lineShape.curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction rectangle(context, item, x, y) {\n return rectShape.context(context)(item, x, y);\n}\nfunction shape$1(context, item) {\n return (item.mark.shape || item.shape).context(context)(item);\n}\nfunction symbol$1(context, item) {\n return symbolShape.context(context)(item);\n}\nfunction trail$1(context, items) {\n return trailShape.context(context)(items);\n}\n\nvar clip_id = 1;\nfunction resetSVGClipId() {\n clip_id = 1;\n}\nfunction clip$1 (renderer, item, size) {\n var clip = item.clip,\n defs = renderer._defs,\n id = item.clip_id || (item.clip_id = 'clip' + clip_id++),\n c = defs.clipping[id] || (defs.clipping[id] = {\n id: id\n });\n if (isFunction(clip)) {\n c.path = clip(null);\n } else if (hasCornerRadius(size)) {\n c.path = rectangle(null, size, 0, 0);\n } else {\n c.width = size.width || 0;\n c.height = size.height || 0;\n }\n return 'url(#' + id + ')';\n}\n\nfunction Bounds(b) {\n this.clear();\n if (b) this.union(b);\n}\nBounds.prototype = {\n clone() {\n return new Bounds(this);\n },\n clear() {\n this.x1 = +Number.MAX_VALUE;\n this.y1 = +Number.MAX_VALUE;\n this.x2 = -Number.MAX_VALUE;\n this.y2 = -Number.MAX_VALUE;\n return this;\n },\n empty() {\n return this.x1 === +Number.MAX_VALUE && this.y1 === +Number.MAX_VALUE && this.x2 === -Number.MAX_VALUE && this.y2 === -Number.MAX_VALUE;\n },\n equals(b) {\n return this.x1 === b.x1 && this.y1 === b.y1 && this.x2 === b.x2 && this.y2 === b.y2;\n },\n set(x1, y1, x2, y2) {\n if (x2 < x1) {\n this.x2 = x1;\n this.x1 = x2;\n } else {\n this.x1 = x1;\n this.x2 = x2;\n }\n if (y2 < y1) {\n this.y2 = y1;\n this.y1 = y2;\n } else {\n this.y1 = y1;\n this.y2 = y2;\n }\n return this;\n },\n add(x, y) {\n if (x < this.x1) this.x1 = x;\n if (y < this.y1) this.y1 = y;\n if (x > this.x2) this.x2 = x;\n if (y > this.y2) this.y2 = y;\n return this;\n },\n expand(d) {\n this.x1 -= d;\n this.y1 -= d;\n this.x2 += d;\n this.y2 += d;\n return this;\n },\n round() {\n this.x1 = Math.floor(this.x1);\n this.y1 = Math.floor(this.y1);\n this.x2 = Math.ceil(this.x2);\n this.y2 = Math.ceil(this.y2);\n return this;\n },\n scale(s) {\n this.x1 *= s;\n this.y1 *= s;\n this.x2 *= s;\n this.y2 *= s;\n return this;\n },\n translate(dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n },\n rotate(angle, x, y) {\n const p = this.rotatedPoints(angle, x, y);\n return this.clear().add(p[0], p[1]).add(p[2], p[3]).add(p[4], p[5]).add(p[6], p[7]);\n },\n rotatedPoints(angle, x, y) {\n var {\n x1,\n y1,\n x2,\n y2\n } = this,\n cos = Math.cos(angle),\n sin = Math.sin(angle),\n cx = x - x * cos + y * sin,\n cy = y - x * sin - y * cos;\n return [cos * x1 - sin * y1 + cx, sin * x1 + cos * y1 + cy, cos * x1 - sin * y2 + cx, sin * x1 + cos * y2 + cy, cos * x2 - sin * y1 + cx, sin * x2 + cos * y1 + cy, cos * x2 - sin * y2 + cx, sin * x2 + cos * y2 + cy];\n },\n union(b) {\n if (b.x1 < this.x1) this.x1 = b.x1;\n if (b.y1 < this.y1) this.y1 = b.y1;\n if (b.x2 > this.x2) this.x2 = b.x2;\n if (b.y2 > this.y2) this.y2 = b.y2;\n return this;\n },\n intersect(b) {\n if (b.x1 > this.x1) this.x1 = b.x1;\n if (b.y1 > this.y1) this.y1 = b.y1;\n if (b.x2 < this.x2) this.x2 = b.x2;\n if (b.y2 < this.y2) this.y2 = b.y2;\n return this;\n },\n encloses(b) {\n return b && this.x1 <= b.x1 && this.x2 >= b.x2 && this.y1 <= b.y1 && this.y2 >= b.y2;\n },\n alignsWith(b) {\n return b && (this.x1 == b.x1 || this.x2 == b.x2 || this.y1 == b.y1 || this.y2 == b.y2);\n },\n intersects(b) {\n return b && !(this.x2 < b.x1 || this.x1 > b.x2 || this.y2 < b.y1 || this.y1 > b.y2);\n },\n contains(x, y) {\n return !(x < this.x1 || x > this.x2 || y < this.y1 || y > this.y2);\n },\n width() {\n return this.x2 - this.x1;\n },\n height() {\n return this.y2 - this.y1;\n }\n};\n\nfunction Item(mark) {\n this.mark = mark;\n this.bounds = this.bounds || new Bounds();\n}\n\nfunction GroupItem(mark) {\n Item.call(this, mark);\n this.items = this.items || [];\n}\ninherits(GroupItem, Item);\n\nfunction ResourceLoader(customLoader) {\n this._pending = 0;\n this._loader = customLoader || loader();\n}\nfunction increment(loader) {\n loader._pending += 1;\n}\nfunction decrement(loader) {\n loader._pending -= 1;\n}\nResourceLoader.prototype = {\n pending() {\n return this._pending;\n },\n sanitizeURL(uri) {\n const loader = this;\n increment(loader);\n return loader._loader.sanitize(uri, {\n context: 'href'\n }).then(opt => {\n decrement(loader);\n return opt;\n }).catch(() => {\n decrement(loader);\n return null;\n });\n },\n loadImage(uri) {\n const loader = this,\n Image = image$1();\n increment(loader);\n return loader._loader.sanitize(uri, {\n context: 'image'\n }).then(opt => {\n const url = opt.href;\n if (!url || !Image) throw {\n url: url\n };\n const img = new Image();\n\n // set crossOrigin only if cors is defined; empty string sets anonymous mode\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/crossOrigin\n const cors = hasOwnProperty(opt, 'crossOrigin') ? opt.crossOrigin : 'anonymous';\n if (cors != null) img.crossOrigin = cors;\n\n // attempt to load image resource\n img.onload = () => decrement(loader);\n img.onerror = () => decrement(loader);\n img.src = url;\n return img;\n }).catch(e => {\n decrement(loader);\n return {\n complete: false,\n width: 0,\n height: 0,\n src: e && e.url || ''\n };\n });\n },\n ready() {\n const loader = this;\n return new Promise(accept => {\n function poll(value) {\n if (!loader.pending()) accept(value);else setTimeout(() => {\n poll(true);\n }, 10);\n }\n poll(false);\n });\n }\n};\n\nfunction boundStroke (bounds, item, miter) {\n if (item.stroke && item.opacity !== 0 && item.strokeOpacity !== 0) {\n const sw = item.strokeWidth != null ? +item.strokeWidth : 1;\n bounds.expand(sw + (miter ? miterAdjustment(item, sw) : 0));\n }\n return bounds;\n}\nfunction miterAdjustment(item, strokeWidth) {\n // TODO: more sophisticated adjustment? Or miter support in boundContext?\n return item.strokeJoin && item.strokeJoin !== 'miter' ? 0 : strokeWidth;\n}\n\nconst circleThreshold = Tau - 1e-8;\nlet bounds, lx, ly, rot, ma, mb, mc, md;\nconst add = (x, y) => bounds.add(x, y);\nconst addL = (x, y) => add(lx = x, ly = y);\nconst addX = x => add(x, bounds.y1);\nconst addY = y => add(bounds.x1, y);\nconst px = (x, y) => ma * x + mc * y;\nconst py = (x, y) => mb * x + md * y;\nconst addp = (x, y) => add(px(x, y), py(x, y));\nconst addpL = (x, y) => addL(px(x, y), py(x, y));\nfunction boundContext (_, deg) {\n bounds = _;\n if (deg) {\n rot = deg * DegToRad;\n ma = md = Math.cos(rot);\n mb = Math.sin(rot);\n mc = -mb;\n } else {\n ma = md = 1;\n rot = mb = mc = 0;\n }\n return context$1;\n}\nconst context$1 = {\n beginPath() {},\n closePath() {},\n moveTo: addpL,\n lineTo: addpL,\n rect(x, y, w, h) {\n if (rot) {\n addp(x + w, y);\n addp(x + w, y + h);\n addp(x, y + h);\n addpL(x, y);\n } else {\n add(x + w, y + h);\n addL(x, y);\n }\n },\n quadraticCurveTo(x1, y1, x2, y2) {\n const px1 = px(x1, y1),\n py1 = py(x1, y1),\n px2 = px(x2, y2),\n py2 = py(x2, y2);\n quadExtrema(lx, px1, px2, addX);\n quadExtrema(ly, py1, py2, addY);\n addL(px2, py2);\n },\n bezierCurveTo(x1, y1, x2, y2, x3, y3) {\n const px1 = px(x1, y1),\n py1 = py(x1, y1),\n px2 = px(x2, y2),\n py2 = py(x2, y2),\n px3 = px(x3, y3),\n py3 = py(x3, y3);\n cubicExtrema(lx, px1, px2, px3, addX);\n cubicExtrema(ly, py1, py2, py3, addY);\n addL(px3, py3);\n },\n arc(cx, cy, r, sa, ea, ccw) {\n sa += rot;\n ea += rot;\n\n // store last point on path\n lx = r * Math.cos(ea) + cx;\n ly = r * Math.sin(ea) + cy;\n if (Math.abs(ea - sa) > circleThreshold) {\n // treat as full circle\n add(cx - r, cy - r);\n add(cx + r, cy + r);\n } else {\n const update = a => add(r * Math.cos(a) + cx, r * Math.sin(a) + cy);\n let s, i;\n\n // sample end points\n update(sa);\n update(ea);\n\n // sample interior points aligned with 90 degrees\n if (ea !== sa) {\n sa = sa % Tau;\n if (sa < 0) sa += Tau;\n ea = ea % Tau;\n if (ea < 0) ea += Tau;\n if (ea < sa) {\n ccw = !ccw; // flip direction\n s = sa;\n sa = ea;\n ea = s; // swap end-points\n }\n\n if (ccw) {\n ea -= Tau;\n s = sa - sa % HalfPi;\n for (i = 0; i < 4 && s > ea; ++i, s -= HalfPi) update(s);\n } else {\n s = sa - sa % HalfPi + HalfPi;\n for (i = 0; i < 4 && s < ea; ++i, s = s + HalfPi) update(s);\n }\n }\n }\n }\n};\nfunction quadExtrema(x0, x1, x2, cb) {\n const t = (x0 - x1) / (x0 + x2 - 2 * x1);\n if (0 < t && t < 1) cb(x0 + (x1 - x0) * t);\n}\nfunction cubicExtrema(x0, x1, x2, x3, cb) {\n const a = x3 - x0 + 3 * x1 - 3 * x2,\n b = x0 + x2 - 2 * x1,\n c = x0 - x1;\n let t0 = 0,\n t1 = 0,\n r;\n\n // solve for parameter t\n if (Math.abs(a) > Epsilon) {\n // quadratic equation\n r = b * b + c * a;\n if (r >= 0) {\n r = Math.sqrt(r);\n t0 = (-b + r) / a;\n t1 = (-b - r) / a;\n }\n } else {\n // linear equation\n t0 = 0.5 * c / b;\n }\n\n // calculate position\n if (0 < t0 && t0 < 1) cb(cubic(t0, x0, x1, x2, x3));\n if (0 < t1 && t1 < 1) cb(cubic(t1, x0, x1, x2, x3));\n}\nfunction cubic(t, x0, x1, x2, x3) {\n const s = 1 - t,\n s2 = s * s,\n t2 = t * t;\n return s2 * s * x0 + 3 * s2 * t * x1 + 3 * s * t2 * x2 + t2 * t * x3;\n}\n\nvar context = (context = canvas(1, 1)) ? context.getContext('2d') : null;\n\nconst b = new Bounds();\nfunction intersectPath(draw) {\n return function (item, brush) {\n // rely on (inaccurate) bounds intersection if no context\n if (!context) return true;\n\n // add path to offscreen graphics context\n draw(context, item);\n\n // get bounds intersection region\n b.clear().union(item.bounds).intersect(brush).round();\n const {\n x1,\n y1,\n x2,\n y2\n } = b;\n\n // iterate over intersection region\n // perform fine grained inclusion test\n for (let y = y1; y <= y2; ++y) {\n for (let x = x1; x <= x2; ++x) {\n if (context.isPointInPath(x, y)) {\n return true;\n }\n }\n }\n\n // false if no hits in intersection region\n return false;\n };\n}\nfunction intersectPoint(item, box) {\n return box.contains(item.x || 0, item.y || 0);\n}\nfunction intersectRect(item, box) {\n const x = item.x || 0,\n y = item.y || 0,\n w = item.width || 0,\n h = item.height || 0;\n return box.intersects(b.set(x, y, x + w, y + h));\n}\nfunction intersectRule(item, box) {\n const x = item.x || 0,\n y = item.y || 0,\n x2 = item.x2 != null ? item.x2 : x,\n y2 = item.y2 != null ? item.y2 : y;\n return intersectBoxLine(box, x, y, x2, y2);\n}\nfunction intersectBoxLine(box, x, y, u, v) {\n const {\n x1,\n y1,\n x2,\n y2\n } = box,\n dx = u - x,\n dy = v - y;\n let t0 = 0,\n t1 = 1,\n p,\n q,\n r,\n e;\n for (e = 0; e < 4; ++e) {\n if (e === 0) {\n p = -dx;\n q = -(x1 - x);\n }\n if (e === 1) {\n p = dx;\n q = x2 - x;\n }\n if (e === 2) {\n p = -dy;\n q = -(y1 - y);\n }\n if (e === 3) {\n p = dy;\n q = y2 - y;\n }\n if (Math.abs(p) < 1e-10 && q < 0) return false;\n r = q / p;\n if (p < 0) {\n if (r > t1) return false;else if (r > t0) t0 = r;\n } else if (p > 0) {\n if (r < t0) return false;else if (r < t1) t1 = r;\n }\n }\n return true;\n}\n\nfunction blend (context, item) {\n context.globalCompositeOperation = item.blend || 'source-over';\n}\n\nfunction value (value, dflt) {\n return value == null ? dflt : value;\n}\n\nfunction addStops(gradient, stops) {\n const n = stops.length;\n for (let i = 0; i < n; ++i) {\n gradient.addColorStop(stops[i].offset, stops[i].color);\n }\n return gradient;\n}\nfunction gradient (context, spec, bounds) {\n const w = bounds.width(),\n h = bounds.height();\n let gradient;\n if (spec.gradient === 'radial') {\n gradient = context.createRadialGradient(bounds.x1 + value(spec.x1, 0.5) * w, bounds.y1 + value(spec.y1, 0.5) * h, Math.max(w, h) * value(spec.r1, 0), bounds.x1 + value(spec.x2, 0.5) * w, bounds.y1 + value(spec.y2, 0.5) * h, Math.max(w, h) * value(spec.r2, 0.5));\n } else {\n // linear gradient\n const x1 = value(spec.x1, 0),\n y1 = value(spec.y1, 0),\n x2 = value(spec.x2, 1),\n y2 = value(spec.y2, 0);\n if (x1 === x2 || y1 === y2 || w === h) {\n // axis aligned: use normal gradient\n gradient = context.createLinearGradient(bounds.x1 + x1 * w, bounds.y1 + y1 * h, bounds.x1 + x2 * w, bounds.y1 + y2 * h);\n } else {\n // not axis aligned: render gradient into a pattern (#2365)\n // this allows us to use normalized bounding box coordinates\n const image = canvas(Math.ceil(w), Math.ceil(h)),\n ictx = image.getContext('2d');\n ictx.scale(w, h);\n ictx.fillStyle = addStops(ictx.createLinearGradient(x1, y1, x2, y2), spec.stops);\n ictx.fillRect(0, 0, w, h);\n return context.createPattern(image, 'no-repeat');\n }\n }\n return addStops(gradient, spec.stops);\n}\n\nfunction color (context, item, value) {\n return isGradient(value) ? gradient(context, value, item.bounds) : value;\n}\n\nfunction fill (context, item, opacity) {\n opacity *= item.fillOpacity == null ? 1 : item.fillOpacity;\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.fillStyle = color(context, item, item.fill);\n return true;\n } else {\n return false;\n }\n}\n\nvar Empty = [];\nfunction stroke (context, item, opacity) {\n var lw = (lw = item.strokeWidth) != null ? lw : 1;\n if (lw <= 0) return false;\n opacity *= item.strokeOpacity == null ? 1 : item.strokeOpacity;\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.strokeStyle = color(context, item, item.stroke);\n context.lineWidth = lw;\n context.lineCap = item.strokeCap || 'butt';\n context.lineJoin = item.strokeJoin || 'miter';\n context.miterLimit = item.strokeMiterLimit || 10;\n if (context.setLineDash) {\n context.setLineDash(item.strokeDash || Empty);\n context.lineDashOffset = item.strokeDashOffset || 0;\n }\n return true;\n } else {\n return false;\n }\n}\n\nfunction compare(a, b) {\n return a.zindex - b.zindex || a.index - b.index;\n}\nfunction zorder(scene) {\n if (!scene.zdirty) return scene.zitems;\n var items = scene.items,\n output = [],\n item,\n i,\n n;\n for (i = 0, n = items.length; i < n; ++i) {\n item = items[i];\n item.index = i;\n if (item.zindex) output.push(item);\n }\n scene.zdirty = false;\n return scene.zitems = output.sort(compare);\n}\nfunction visit(scene, visitor) {\n var items = scene.items,\n i,\n n;\n if (!items || !items.length) return;\n const zitems = zorder(scene);\n if (zitems && zitems.length) {\n for (i = 0, n = items.length; i < n; ++i) {\n if (!items[i].zindex) visitor(items[i]);\n }\n items = zitems;\n }\n for (i = 0, n = items.length; i < n; ++i) {\n visitor(items[i]);\n }\n}\nfunction pickVisit(scene, visitor) {\n var items = scene.items,\n hit,\n i;\n if (!items || !items.length) return null;\n const zitems = zorder(scene);\n if (zitems && zitems.length) items = zitems;\n for (i = items.length; --i >= 0;) {\n if (hit = visitor(items[i])) return hit;\n }\n if (items === zitems) {\n for (items = scene.items, i = items.length; --i >= 0;) {\n if (!items[i].zindex) {\n if (hit = visitor(items[i])) return hit;\n }\n }\n }\n return null;\n}\n\nfunction drawAll(path) {\n return function (context, scene, bounds) {\n visit(scene, item => {\n if (!bounds || bounds.intersects(item.bounds)) {\n drawPath(path, context, item, item);\n }\n });\n };\n}\nfunction drawOne(path) {\n return function (context, scene, bounds) {\n if (scene.items.length && (!bounds || bounds.intersects(scene.bounds))) {\n drawPath(path, context, scene.items[0], scene.items);\n }\n };\n}\nfunction drawPath(path, context, item, items) {\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity === 0) return;\n if (path(context, items)) return;\n blend(context, item);\n if (item.fill && fill(context, item, opacity)) {\n context.fill();\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.stroke();\n }\n}\n\nfunction pick$1(test) {\n test = test || truthy;\n return function (context, scene, x, y, gx, gy) {\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return pickVisit(scene, item => {\n const b = item.bounds;\n // first hit test against bounding box\n if (b && !b.contains(gx, gy) || !b) return;\n // if in bounding box, perform more careful test\n if (test(context, item, x, y, gx, gy)) return item;\n });\n };\n}\nfunction hitPath(path, filled) {\n return function (context, o, x, y) {\n var item = Array.isArray(o) ? o[0] : o,\n fill = filled == null ? item.fill : filled,\n stroke = item.stroke && context.isPointInStroke,\n lw,\n lc;\n if (stroke) {\n lw = item.strokeWidth;\n lc = item.strokeCap;\n context.lineWidth = lw != null ? lw : 1;\n context.lineCap = lc != null ? lc : 'butt';\n }\n return path(context, o) ? false : fill && context.isPointInPath(x, y) || stroke && context.isPointInStroke(x, y);\n };\n}\nfunction pickPath(path) {\n return pick$1(hitPath(path));\n}\n\nfunction translate(x, y) {\n return 'translate(' + x + ',' + y + ')';\n}\nfunction rotate(a) {\n return 'rotate(' + a + ')';\n}\nfunction scale(scaleX, scaleY) {\n return 'scale(' + scaleX + ',' + scaleY + ')';\n}\nfunction translateItem(item) {\n return translate(item.x || 0, item.y || 0);\n}\nfunction rotateItem(item) {\n return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '');\n}\nfunction transformItem(item) {\n return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '') + (item.scaleX || item.scaleY ? ' ' + scale(item.scaleX || 1, item.scaleY || 1) : '');\n}\n\nfunction markItemPath (type, shape, isect) {\n function attr(emit, item) {\n emit('transform', rotateItem(item));\n emit('d', shape(null, item));\n }\n function bound(bounds, item) {\n shape(boundContext(bounds, item.angle), item);\n return boundStroke(bounds, item).translate(item.x || 0, item.y || 0);\n }\n function draw(context, item) {\n var x = item.x || 0,\n y = item.y || 0,\n a = item.angle || 0;\n context.translate(x, y);\n if (a) context.rotate(a *= DegToRad);\n context.beginPath();\n shape(context, item);\n if (a) context.rotate(-a);\n context.translate(-x, -y);\n }\n return {\n type: type,\n tag: 'path',\n nested: false,\n attr: attr,\n bound: bound,\n draw: drawAll(draw),\n pick: pickPath(draw),\n isect: isect || intersectPath(draw)\n };\n}\n\nvar arc = markItemPath('arc', arc$1);\n\nfunction pickArea(a, p) {\n var v = a[0].orient === 'horizontal' ? p[1] : p[0],\n z = a[0].orient === 'horizontal' ? 'y' : 'x',\n i = a.length,\n min = +Infinity,\n hit,\n d;\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n d = Math.abs(a[i][z] - v);\n if (d < min) {\n min = d;\n hit = a[i];\n }\n }\n return hit;\n}\nfunction pickLine(a, p) {\n var t = Math.pow(a[0].strokeWidth || 1, 2),\n i = a.length,\n dx,\n dy,\n dd;\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n if (dd < t) return a[i];\n }\n return null;\n}\nfunction pickTrail(a, p) {\n var i = a.length,\n dx,\n dy,\n dd;\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n dx = a[i].size || 1;\n if (dd < dx * dx) return a[i];\n }\n return null;\n}\n\nfunction markMultiItemPath (type, shape, tip) {\n function attr(emit, item) {\n var items = item.mark.items;\n if (items.length) emit('d', shape(null, items));\n }\n function bound(bounds, mark) {\n var items = mark.items;\n if (items.length === 0) {\n return bounds;\n } else {\n shape(boundContext(bounds), items);\n return boundStroke(bounds, items[0]);\n }\n }\n function draw(context, items) {\n context.beginPath();\n shape(context, items);\n }\n const hit = hitPath(draw);\n function pick(context, scene, x, y, gx, gy) {\n var items = scene.items,\n b = scene.bounds;\n if (!items || !items.length || b && !b.contains(gx, gy)) {\n return null;\n }\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return hit(context, items, x, y) ? items[0] : null;\n }\n return {\n type: type,\n tag: 'path',\n nested: true,\n attr: attr,\n bound: bound,\n draw: drawOne(draw),\n pick: pick,\n isect: intersectPoint,\n tip: tip\n };\n}\n\nvar area = markMultiItemPath('area', area$1, pickArea);\n\nfunction clip (context, scene) {\n var clip = scene.clip;\n context.save();\n if (isFunction(clip)) {\n context.beginPath();\n clip(context);\n context.clip();\n } else {\n clipGroup(context, scene.group);\n }\n}\nfunction clipGroup(context, group) {\n context.beginPath();\n hasCornerRadius(group) ? rectangle(context, group, 0, 0) : context.rect(0, 0, group.width || 0, group.height || 0);\n context.clip();\n}\n\nfunction offset$1(item) {\n const sw = value(item.strokeWidth, 1);\n return item.strokeOffset != null ? item.strokeOffset : item.stroke && sw > 0.5 && sw < 1.5 ? 0.5 - Math.abs(sw - 1) : 0;\n}\nfunction attr$5(emit, item) {\n emit('transform', translateItem(item));\n}\nfunction emitRectangle(emit, item) {\n const off = offset$1(item);\n emit('d', rectangle(null, item, off, off));\n}\nfunction background(emit, item) {\n emit('class', 'background');\n emit('aria-hidden', true);\n emitRectangle(emit, item);\n}\nfunction foreground(emit, item) {\n emit('class', 'foreground');\n emit('aria-hidden', true);\n if (item.strokeForeground) {\n emitRectangle(emit, item);\n } else {\n emit('d', '');\n }\n}\nfunction content(emit, item, renderer) {\n const url = item.clip ? clip$1(renderer, item, item) : null;\n emit('clip-path', url);\n}\nfunction bound$5(bounds, group) {\n if (!group.clip && group.items) {\n const items = group.items,\n m = items.length;\n for (let j = 0; j < m; ++j) {\n bounds.union(items[j].bounds);\n }\n }\n if ((group.clip || group.width || group.height) && !group.noBound) {\n bounds.add(0, 0).add(group.width || 0, group.height || 0);\n }\n boundStroke(bounds, group);\n return bounds.translate(group.x || 0, group.y || 0);\n}\nfunction rectanglePath(context, group, x, y) {\n const off = offset$1(group);\n context.beginPath();\n rectangle(context, group, (x || 0) + off, (y || 0) + off);\n}\nconst hitBackground = hitPath(rectanglePath);\nconst hitForeground = hitPath(rectanglePath, false);\nconst hitCorner = hitPath(rectanglePath, true);\nfunction draw$4(context, scene, bounds) {\n visit(scene, group => {\n const gx = group.x || 0,\n gy = group.y || 0,\n fore = group.strokeForeground,\n opacity = group.opacity == null ? 1 : group.opacity;\n\n // draw group background\n if ((group.stroke || group.fill) && opacity) {\n rectanglePath(context, group, gx, gy);\n blend(context, group);\n if (group.fill && fill(context, group, opacity)) {\n context.fill();\n }\n if (group.stroke && !fore && stroke(context, group, opacity)) {\n context.stroke();\n }\n }\n\n // setup graphics context, set clip and bounds\n context.save();\n context.translate(gx, gy);\n if (group.clip) clipGroup(context, group);\n if (bounds) bounds.translate(-gx, -gy);\n\n // draw group contents\n visit(group, item => {\n this.draw(context, item, bounds);\n });\n\n // restore graphics context\n if (bounds) bounds.translate(gx, gy);\n context.restore();\n\n // draw group foreground\n if (fore && group.stroke && opacity) {\n rectanglePath(context, group, gx, gy);\n blend(context, group);\n if (stroke(context, group, opacity)) {\n context.stroke();\n }\n }\n });\n}\nfunction pick(context, scene, x, y, gx, gy) {\n if (scene.bounds && !scene.bounds.contains(gx, gy) || !scene.items) {\n return null;\n }\n const cx = x * context.pixelRatio,\n cy = y * context.pixelRatio;\n return pickVisit(scene, group => {\n let hit, dx, dy;\n\n // first hit test bounding box\n const b = group.bounds;\n if (b && !b.contains(gx, gy)) return;\n\n // passed bounds check, test rectangular clip\n dx = group.x || 0;\n dy = group.y || 0;\n const dw = dx + (group.width || 0),\n dh = dy + (group.height || 0),\n c = group.clip;\n if (c && (gx < dx || gx > dw || gy < dy || gy > dh)) return;\n\n // adjust coordinate system\n context.save();\n context.translate(dx, dy);\n dx = gx - dx;\n dy = gy - dy;\n\n // test background for rounded corner clip\n if (c && hasCornerRadius(group) && !hitCorner(context, group, cx, cy)) {\n context.restore();\n return null;\n }\n const fore = group.strokeForeground,\n ix = scene.interactive !== false;\n\n // hit test against group foreground\n if (ix && fore && group.stroke && hitForeground(context, group, cx, cy)) {\n context.restore();\n return group;\n }\n\n // hit test against contained marks\n hit = pickVisit(group, mark => pickMark(mark, dx, dy) ? this.pick(mark, x, y, dx, dy) : null);\n\n // hit test against group background\n if (!hit && ix && (group.fill || !fore && group.stroke) && hitBackground(context, group, cx, cy)) {\n hit = group;\n }\n\n // restore state and return\n context.restore();\n return hit || null;\n });\n}\nfunction pickMark(mark, x, y) {\n return (mark.interactive !== false || mark.marktype === 'group') && mark.bounds && mark.bounds.contains(x, y);\n}\nvar group = {\n type: 'group',\n tag: 'g',\n nested: false,\n attr: attr$5,\n bound: bound$5,\n draw: draw$4,\n pick: pick,\n isect: intersectRect,\n content: content,\n background: background,\n foreground: foreground\n};\n\nvar metadata = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'version': '1.1'\n};\n\nfunction getImage(item, renderer) {\n var image = item.image;\n if (!image || item.url && item.url !== image.url) {\n image = {\n complete: false,\n width: 0,\n height: 0\n };\n renderer.loadImage(item.url).then(image => {\n item.image = image;\n item.image.url = item.url;\n });\n }\n return image;\n}\nfunction imageWidth(item, image) {\n return item.width != null ? item.width : !image || !image.width ? 0 : item.aspect !== false && item.height ? item.height * image.width / image.height : image.width;\n}\nfunction imageHeight(item, image) {\n return item.height != null ? item.height : !image || !image.height ? 0 : item.aspect !== false && item.width ? item.width * image.height / image.width : image.height;\n}\nfunction imageXOffset(align, w) {\n return align === 'center' ? w / 2 : align === 'right' ? w : 0;\n}\nfunction imageYOffset(baseline, h) {\n return baseline === 'middle' ? h / 2 : baseline === 'bottom' ? h : 0;\n}\nfunction attr$4(emit, item, renderer) {\n const img = getImage(item, renderer),\n w = imageWidth(item, img),\n h = imageHeight(item, img),\n x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h),\n i = !img.src && img.toDataURL ? img.toDataURL() : img.src || '';\n emit('href', i, metadata['xmlns:xlink'], 'xlink:href');\n emit('transform', translate(x, y));\n emit('width', w);\n emit('height', h);\n emit('preserveAspectRatio', item.aspect === false ? 'none' : 'xMidYMid');\n}\nfunction bound$4(bounds, item) {\n const img = item.image,\n w = imageWidth(item, img),\n h = imageHeight(item, img),\n x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h);\n return bounds.set(x, y, x + w, y + h);\n}\nfunction draw$3(context, scene, bounds) {\n visit(scene, item => {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n const img = getImage(item, this);\n let w = imageWidth(item, img);\n let h = imageHeight(item, img);\n if (w === 0 || h === 0) return; // early exit\n\n let x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h),\n opacity,\n ar0,\n ar1,\n t;\n if (item.aspect !== false) {\n ar0 = img.width / img.height;\n ar1 = item.width / item.height;\n if (ar0 === ar0 && ar1 === ar1 && ar0 !== ar1) {\n if (ar1 < ar0) {\n t = w / ar0;\n y += (h - t) / 2;\n h = t;\n } else {\n t = h * ar0;\n x += (w - t) / 2;\n w = t;\n }\n }\n }\n if (img.complete || img.toDataURL) {\n blend(context, item);\n context.globalAlpha = (opacity = item.opacity) != null ? opacity : 1;\n context.imageSmoothingEnabled = item.smooth !== false;\n context.drawImage(img, x, y, w, h);\n }\n });\n}\nvar image = {\n type: 'image',\n tag: 'image',\n nested: false,\n attr: attr$4,\n bound: bound$4,\n draw: draw$3,\n pick: pick$1(),\n isect: truthy,\n // bounds check is sufficient\n get: getImage,\n xOffset: imageXOffset,\n yOffset: imageYOffset\n};\n\nvar line = markMultiItemPath('line', line$1, pickLine);\n\nfunction attr$3(emit, item) {\n var sx = item.scaleX || 1,\n sy = item.scaleY || 1;\n if (sx !== 1 || sy !== 1) {\n emit('vector-effect', 'non-scaling-stroke');\n }\n emit('transform', transformItem(item));\n emit('d', item.path);\n}\nfunction path$1(context, item) {\n var path = item.path;\n if (path == null) return true;\n var x = item.x || 0,\n y = item.y || 0,\n sx = item.scaleX || 1,\n sy = item.scaleY || 1,\n a = (item.angle || 0) * DegToRad,\n cache = item.pathCache;\n if (!cache || cache.path !== path) {\n (item.pathCache = cache = parse(path)).path = path;\n }\n if (a && context.rotate && context.translate) {\n context.translate(x, y);\n context.rotate(a);\n pathRender(context, cache, 0, 0, sx, sy);\n context.rotate(-a);\n context.translate(-x, -y);\n } else {\n pathRender(context, cache, x, y, sx, sy);\n }\n}\nfunction bound$3(bounds, item) {\n return path$1(boundContext(bounds, item.angle), item) ? bounds.set(0, 0, 0, 0) : boundStroke(bounds, item, true);\n}\nvar path$2 = {\n type: 'path',\n tag: 'path',\n nested: false,\n attr: attr$3,\n bound: bound$3,\n draw: drawAll(path$1),\n pick: pickPath(path$1),\n isect: intersectPath(path$1)\n};\n\nfunction attr$2(emit, item) {\n emit('d', rectangle(null, item));\n}\nfunction bound$2(bounds, item) {\n var x, y;\n return boundStroke(bounds.set(x = item.x || 0, y = item.y || 0, x + item.width || 0, y + item.height || 0), item);\n}\nfunction draw$2(context, item) {\n context.beginPath();\n rectangle(context, item);\n}\nvar rect = {\n type: 'rect',\n tag: 'path',\n nested: false,\n attr: attr$2,\n bound: bound$2,\n draw: drawAll(draw$2),\n pick: pickPath(draw$2),\n isect: intersectRect\n};\n\nfunction attr$1(emit, item) {\n emit('transform', translateItem(item));\n emit('x2', item.x2 != null ? item.x2 - (item.x || 0) : 0);\n emit('y2', item.y2 != null ? item.y2 - (item.y || 0) : 0);\n}\nfunction bound$1(bounds, item) {\n var x1, y1;\n return boundStroke(bounds.set(x1 = item.x || 0, y1 = item.y || 0, item.x2 != null ? item.x2 : x1, item.y2 != null ? item.y2 : y1), item);\n}\nfunction path(context, item, opacity) {\n var x1, y1, x2, y2;\n if (item.stroke && stroke(context, item, opacity)) {\n x1 = item.x || 0;\n y1 = item.y || 0;\n x2 = item.x2 != null ? item.x2 : x1;\n y2 = item.y2 != null ? item.y2 : y1;\n context.beginPath();\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n return true;\n }\n return false;\n}\nfunction draw$1(context, scene, bounds) {\n visit(scene, item => {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity && path(context, item, opacity)) {\n blend(context, item);\n context.stroke();\n }\n });\n}\nfunction hit$1(context, item, x, y) {\n if (!context.isPointInStroke) return false;\n return path(context, item, 1) && context.isPointInStroke(x, y);\n}\nvar rule = {\n type: 'rule',\n tag: 'line',\n nested: false,\n attr: attr$1,\n bound: bound$1,\n draw: draw$1,\n pick: pick$1(hit$1),\n isect: intersectRule\n};\n\nvar shape = markItemPath('shape', shape$1);\n\nvar symbol = markItemPath('symbol', symbol$1, intersectPoint);\n\n// memoize text width measurement\nconst widthCache = lruCache();\nvar textMetrics = {\n height: fontSize,\n measureWidth: measureWidth,\n estimateWidth: estimateWidth,\n width: estimateWidth,\n canvas: useCanvas\n};\nuseCanvas(true);\nfunction useCanvas(use) {\n textMetrics.width = use && context ? measureWidth : estimateWidth;\n}\n\n// make simple estimate if no canvas is available\nfunction estimateWidth(item, text) {\n return _estimateWidth(textValue(item, text), fontSize(item));\n}\nfunction _estimateWidth(text, currentFontHeight) {\n return ~~(0.8 * text.length * currentFontHeight);\n}\n\n// measure text width if canvas is available\nfunction measureWidth(item, text) {\n return fontSize(item) <= 0 || !(text = textValue(item, text)) ? 0 : _measureWidth(text, font(item));\n}\nfunction _measureWidth(text, currentFont) {\n const key = `(${currentFont}) ${text}`;\n let width = widthCache.get(key);\n if (width === undefined) {\n context.font = currentFont;\n width = context.measureText(text).width;\n widthCache.set(key, width);\n }\n return width;\n}\nfunction fontSize(item) {\n return item.fontSize != null ? +item.fontSize || 0 : 11;\n}\nfunction lineHeight(item) {\n return item.lineHeight != null ? item.lineHeight : fontSize(item) + 2;\n}\nfunction lineArray(_) {\n return isArray(_) ? _.length > 1 ? _ : _[0] : _;\n}\nfunction textLines(item) {\n return lineArray(item.lineBreak && item.text && !isArray(item.text) ? item.text.split(item.lineBreak) : item.text);\n}\nfunction multiLineOffset(item) {\n const tl = textLines(item);\n return (isArray(tl) ? tl.length - 1 : 0) * lineHeight(item);\n}\nfunction textValue(item, line) {\n const text = line == null ? '' : (line + '').trim();\n return item.limit > 0 && text.length ? truncate(item, text) : text;\n}\nfunction widthGetter(item) {\n if (textMetrics.width === measureWidth) {\n // we are using canvas\n const currentFont = font(item);\n return text => _measureWidth(text, currentFont);\n } else {\n // we are relying on estimates\n const currentFontHeight = fontSize(item);\n return text => _estimateWidth(text, currentFontHeight);\n }\n}\nfunction truncate(item, text) {\n var limit = +item.limit,\n width = widthGetter(item);\n if (width(text) < limit) return text;\n var ellipsis = item.ellipsis || '\\u2026',\n rtl = item.dir === 'rtl',\n lo = 0,\n hi = text.length,\n mid;\n limit -= width(ellipsis);\n if (rtl) {\n while (lo < hi) {\n mid = lo + hi >>> 1;\n if (width(text.slice(mid)) > limit) lo = mid + 1;else hi = mid;\n }\n return ellipsis + text.slice(lo);\n } else {\n while (lo < hi) {\n mid = 1 + (lo + hi >>> 1);\n if (width(text.slice(0, mid)) < limit) lo = mid;else hi = mid - 1;\n }\n return text.slice(0, lo) + ellipsis;\n }\n}\nfunction fontFamily(item, quote) {\n var font = item.font;\n return (quote && font ? String(font).replace(/\"/g, '\\'') : font) || 'sans-serif';\n}\nfunction font(item, quote) {\n return '' + (item.fontStyle ? item.fontStyle + ' ' : '') + (item.fontVariant ? item.fontVariant + ' ' : '') + (item.fontWeight ? item.fontWeight + ' ' : '') + fontSize(item) + 'px ' + fontFamily(item, quote);\n}\nfunction offset(item) {\n // perform our own font baseline calculation\n // why? not all browsers support SVG 1.1 'alignment-baseline' :(\n // this also ensures consistent layout across renderers\n var baseline = item.baseline,\n h = fontSize(item);\n return Math.round(baseline === 'top' ? 0.79 * h : baseline === 'middle' ? 0.30 * h : baseline === 'bottom' ? -0.21 * h : baseline === 'line-top' ? 0.29 * h + 0.5 * lineHeight(item) : baseline === 'line-bottom' ? 0.29 * h - 0.5 * lineHeight(item) : 0);\n}\n\nconst textAlign = {\n 'left': 'start',\n 'center': 'middle',\n 'right': 'end'\n};\nconst tempBounds = new Bounds();\nfunction anchorPoint(item) {\n var x = item.x || 0,\n y = item.y || 0,\n r = item.radius || 0,\n t;\n if (r) {\n t = (item.theta || 0) - HalfPi;\n x += r * Math.cos(t);\n y += r * Math.sin(t);\n }\n tempBounds.x1 = x;\n tempBounds.y1 = y;\n return tempBounds;\n}\nfunction attr(emit, item) {\n var dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item),\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n a = item.angle || 0,\n t;\n emit('text-anchor', textAlign[item.align] || 'start');\n if (a) {\n t = translate(x, y) + ' ' + rotate(a);\n if (dx || dy) t += ' ' + translate(dx, dy);\n } else {\n t = translate(x + dx, y + dy);\n }\n emit('transform', t);\n}\nfunction bound(bounds, item, mode) {\n var h = textMetrics.height(item),\n a = item.align,\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item) - Math.round(0.8 * h),\n // use 4/5 offset\n tl = textLines(item),\n w;\n\n // get dimensions\n if (isArray(tl)) {\n // multi-line text\n h += lineHeight(item) * (tl.length - 1);\n w = tl.reduce((w, t) => Math.max(w, textMetrics.width(item, t)), 0);\n } else {\n // single-line text\n w = textMetrics.width(item, tl);\n }\n\n // horizontal alignment\n if (a === 'center') {\n dx -= w / 2;\n } else if (a === 'right') {\n dx -= w;\n } else ;\n bounds.set(dx += x, dy += y, dx + w, dy + h);\n if (item.angle && !mode) {\n bounds.rotate(item.angle * DegToRad, x, y);\n } else if (mode === 2) {\n return bounds.rotatedPoints(item.angle * DegToRad, x, y);\n }\n return bounds;\n}\nfunction draw(context, scene, bounds) {\n visit(scene, item => {\n var opacity = item.opacity == null ? 1 : item.opacity,\n p,\n x,\n y,\n i,\n lh,\n tl,\n str;\n if (bounds && !bounds.intersects(item.bounds) ||\n // bounds check\n opacity === 0 || item.fontSize <= 0 || item.text == null || item.text.length === 0) return;\n context.font = font(item);\n context.textAlign = item.align || 'left';\n p = anchorPoint(item);\n x = p.x1, y = p.y1;\n if (item.angle) {\n context.save();\n context.translate(x, y);\n context.rotate(item.angle * DegToRad);\n x = y = 0; // reset x, y\n }\n\n x += item.dx || 0;\n y += (item.dy || 0) + offset(item);\n tl = textLines(item);\n blend(context, item);\n if (isArray(tl)) {\n lh = lineHeight(item);\n for (i = 0; i < tl.length; ++i) {\n str = textValue(item, tl[i]);\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n y += lh;\n }\n } else {\n str = textValue(item, tl);\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n }\n if (item.angle) context.restore();\n });\n}\nfunction hit(context, item, x, y, gx, gy) {\n if (item.fontSize <= 0) return false;\n if (!item.angle) return true; // bounds sufficient if no rotation\n\n // project point into space of unrotated bounds\n var p = anchorPoint(item),\n ax = p.x1,\n ay = p.y1,\n b = bound(tempBounds, item, 1),\n a = -item.angle * DegToRad,\n cos = Math.cos(a),\n sin = Math.sin(a),\n px = cos * gx - sin * gy + (ax - cos * ax + sin * ay),\n py = sin * gx + cos * gy + (ay - sin * ax - cos * ay);\n return b.contains(px, py);\n}\nfunction intersectText(item, box) {\n const p = bound(tempBounds, item, 2);\n return intersectBoxLine(box, p[0], p[1], p[2], p[3]) || intersectBoxLine(box, p[0], p[1], p[4], p[5]) || intersectBoxLine(box, p[4], p[5], p[6], p[7]) || intersectBoxLine(box, p[2], p[3], p[6], p[7]);\n}\nvar text = {\n type: 'text',\n tag: 'text',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick$1(hit),\n isect: intersectText\n};\n\nvar trail = markMultiItemPath('trail', trail$1, pickTrail);\n\nvar Marks = {\n arc: arc,\n area: area,\n group: group,\n image: image,\n line: line,\n path: path$2,\n rect: rect,\n rule: rule,\n shape: shape,\n symbol: symbol,\n text: text,\n trail: trail\n};\n\nfunction boundItem (item, func, opt) {\n var type = Marks[item.mark.marktype],\n bound = func || type.bound;\n if (type.nested) item = item.mark;\n return bound(item.bounds || (item.bounds = new Bounds()), item, opt);\n}\n\nvar DUMMY = {\n mark: null\n};\nfunction boundMark (mark, bounds, opt) {\n var type = Marks[mark.marktype],\n bound = type.bound,\n items = mark.items,\n hasItems = items && items.length,\n i,\n n,\n item,\n b;\n if (type.nested) {\n if (hasItems) {\n item = items[0];\n } else {\n // no items, fake it\n DUMMY.mark = mark;\n item = DUMMY;\n }\n b = boundItem(item, bound, opt);\n bounds = bounds && bounds.union(b) || b;\n return bounds;\n }\n bounds = bounds || mark.bounds && mark.bounds.clear() || new Bounds();\n if (hasItems) {\n for (i = 0, n = items.length; i < n; ++i) {\n bounds.union(boundItem(items[i], bound, opt));\n }\n }\n return mark.bounds = bounds;\n}\n\nconst keys = ['marktype', 'name', 'role', 'interactive', 'clip', 'items', 'zindex', 'x', 'y', 'width', 'height', 'align', 'baseline',\n// layout\n'fill', 'fillOpacity', 'opacity', 'blend',\n// fill\n'stroke', 'strokeOpacity', 'strokeWidth', 'strokeCap',\n// stroke\n'strokeDash', 'strokeDashOffset',\n// stroke dash\n'strokeForeground', 'strokeOffset',\n// group\n'startAngle', 'endAngle', 'innerRadius', 'outerRadius',\n// arc\n'cornerRadius', 'padAngle',\n// arc, rect\n'cornerRadiusTopLeft', 'cornerRadiusTopRight',\n// rect, group\n'cornerRadiusBottomLeft', 'cornerRadiusBottomRight', 'interpolate', 'tension', 'orient', 'defined',\n// area, line\n'url', 'aspect', 'smooth',\n// image\n'path', 'scaleX', 'scaleY',\n// path\n'x2', 'y2',\n// rule\n'size', 'shape',\n// symbol\n'text', 'angle', 'theta', 'radius', 'dir', 'dx', 'dy',\n// text\n'ellipsis', 'limit', 'lineBreak', 'lineHeight', 'font', 'fontSize', 'fontWeight', 'fontStyle', 'fontVariant',\n// font\n'description', 'aria', 'ariaRole', 'ariaRoleDescription' // aria\n];\n\nfunction sceneToJSON(scene, indent) {\n return JSON.stringify(scene, keys, indent);\n}\nfunction sceneFromJSON(json) {\n const scene = typeof json === 'string' ? JSON.parse(json) : json;\n return initialize(scene);\n}\nfunction initialize(scene) {\n var type = scene.marktype,\n items = scene.items,\n parent,\n i,\n n;\n if (items) {\n for (i = 0, n = items.length; i < n; ++i) {\n parent = type ? 'mark' : 'group';\n items[i][parent] = scene;\n if (items[i].zindex) items[i][parent].zdirty = true;\n if ('group' === (type || parent)) initialize(items[i]);\n }\n }\n if (type) boundMark(scene);\n return scene;\n}\n\nfunction Scenegraph(scene) {\n if (arguments.length) {\n this.root = sceneFromJSON(scene);\n } else {\n this.root = createMark({\n marktype: 'group',\n name: 'root',\n role: 'frame'\n });\n this.root.items = [new GroupItem(this.root)];\n }\n}\nScenegraph.prototype = {\n toJSON(indent) {\n return sceneToJSON(this.root, indent || 0);\n },\n mark(markdef, group, index) {\n group = group || this.root.items[0];\n const mark = createMark(markdef, group);\n group.items[index] = mark;\n if (mark.zindex) mark.group.zdirty = true;\n return mark;\n }\n};\nfunction createMark(def, group) {\n const mark = {\n bounds: new Bounds(),\n clip: !!def.clip,\n group: group,\n interactive: def.interactive === false ? false : true,\n items: [],\n marktype: def.marktype,\n name: def.name || undefined,\n role: def.role || undefined,\n zindex: def.zindex || 0\n };\n\n // add accessibility properties if defined\n if (def.aria != null) {\n mark.aria = def.aria;\n }\n if (def.description) {\n mark.description = def.description;\n }\n return mark;\n}\n\n// create a new DOM element\nfunction domCreate(doc, tag, ns) {\n if (!doc && typeof document !== 'undefined' && document.createElement) {\n doc = document;\n }\n return doc ? ns ? doc.createElementNS(ns, tag) : doc.createElement(tag) : null;\n}\n\n// find first child element with matching tag\nfunction domFind(el, tag) {\n tag = tag.toLowerCase();\n var nodes = el.childNodes,\n i = 0,\n n = nodes.length;\n for (; i < n; ++i) if (nodes[i].tagName.toLowerCase() === tag) {\n return nodes[i];\n }\n}\n\n// retrieve child element at given index\n// create & insert if doesn't exist or if tags do not match\nfunction domChild(el, index, tag, ns) {\n var a = el.childNodes[index],\n b;\n if (!a || a.tagName.toLowerCase() !== tag.toLowerCase()) {\n b = a || null;\n a = domCreate(el.ownerDocument, tag, ns);\n el.insertBefore(a, b);\n }\n return a;\n}\n\n// remove all child elements at or above the given index\nfunction domClear(el, index) {\n var nodes = el.childNodes,\n curr = nodes.length;\n while (curr > index) el.removeChild(nodes[--curr]);\n return el;\n}\n\n// generate css class name for mark\nfunction cssClass(mark) {\n return 'mark-' + mark.marktype + (mark.role ? ' role-' + mark.role : '') + (mark.name ? ' ' + mark.name : '');\n}\n\nfunction point (event, el) {\n const rect = el.getBoundingClientRect();\n return [event.clientX - rect.left - (el.clientLeft || 0), event.clientY - rect.top - (el.clientTop || 0)];\n}\n\nfunction resolveItem (item, event, el, origin) {\n var mark = item && item.mark,\n mdef,\n p;\n if (mark && (mdef = Marks[mark.marktype]).tip) {\n p = point(event, el);\n p[0] -= origin[0];\n p[1] -= origin[1];\n while (item = item.mark.group) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n }\n item = mdef.tip(mark.items, p);\n }\n return item;\n}\n\n/**\n * Create a new Handler instance.\n * @param {object} [customLoader] - Optional loader instance for\n * href URL sanitization. If not specified, a standard loader\n * instance will be generated.\n * @param {function} [customTooltip] - Optional tooltip handler\n * function for custom tooltip display.\n * @constructor\n */\nfunction Handler(customLoader, customTooltip) {\n this._active = null;\n this._handlers = {};\n this._loader = customLoader || loader();\n this._tooltip = customTooltip || defaultTooltip;\n}\n\n// The default tooltip display handler.\n// Sets the HTML title attribute on the visualization container.\nfunction defaultTooltip(handler, event, item, value) {\n handler.element().setAttribute('title', value || '');\n}\nHandler.prototype = {\n /**\n * Initialize a new Handler instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {object} [obj] - Optional context object that should serve as\n * the \"this\" context for event callbacks.\n * @return {Handler} - This handler instance.\n */\n initialize(el, origin, obj) {\n this._el = el;\n this._obj = obj || null;\n return this.origin(origin);\n },\n /**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\n element() {\n return this._el;\n },\n /**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\n canvas() {\n return this._el && this._el.firstChild;\n },\n /**\n * Get / set the origin coordinates of the visualization.\n */\n origin(origin) {\n if (arguments.length) {\n this._origin = origin || [0, 0];\n return this;\n } else {\n return this._origin.slice();\n }\n },\n /**\n * Get / set the scenegraph root.\n */\n scene(scene) {\n if (!arguments.length) return this._scene;\n this._scene = scene;\n return this;\n },\n /**\n * Add an event handler. Subclasses should override this method.\n */\n on( /*type, handler*/) {},\n /**\n * Remove an event handler. Subclasses should override this method.\n */\n off( /*type, handler*/) {},\n /**\n * Utility method for finding the array index of an event handler.\n * @param {Array} h - An array of registered event handlers.\n * @param {string} type - The event type.\n * @param {function} handler - The event handler instance to find.\n * @return {number} - The handler's array index or -1 if not registered.\n */\n _handlerIndex(h, type, handler) {\n for (let i = h ? h.length : 0; --i >= 0;) {\n if (h[i].type === type && (!handler || h[i].handler === handler)) {\n return i;\n }\n }\n return -1;\n },\n /**\n * Returns an array with registered event handlers.\n * @param {string} [type] - The event type to query. Any annotations\n * are ignored; for example, for the argument \"click.foo\", \".foo\" will\n * be ignored and the method returns all \"click\" handlers. If type is\n * null or unspecified, this method returns handlers for all types.\n * @return {Array} - A new array containing all registered event handlers.\n */\n handlers(type) {\n const h = this._handlers,\n a = [];\n if (type) {\n a.push(...h[this.eventName(type)]);\n } else {\n for (const k in h) {\n a.push(...h[k]);\n }\n }\n return a;\n },\n /**\n * Parses an event name string to return the specific event type.\n * For example, given \"click.foo\" returns \"click\"\n * @param {string} name - The input event type string.\n * @return {string} - A string with the event type only.\n */\n eventName(name) {\n const i = name.indexOf('.');\n return i < 0 ? name : name.slice(0, i);\n },\n /**\n * Handle hyperlink navigation in response to an item.href value.\n * @param {Event} event - The event triggering hyperlink navigation.\n * @param {Item} item - The scenegraph item.\n * @param {string} href - The URL to navigate to.\n */\n handleHref(event, item, href) {\n this._loader.sanitize(href, {\n context: 'href'\n }).then(opt => {\n const e = new MouseEvent(event.type, event),\n a = domCreate(null, 'a');\n for (const name in opt) a.setAttribute(name, opt[name]);\n a.dispatchEvent(e);\n }).catch(() => {/* do nothing */});\n },\n /**\n * Handle tooltip display in response to an item.tooltip value.\n * @param {Event} event - The event triggering tooltip display.\n * @param {Item} item - The scenegraph item.\n * @param {boolean} show - A boolean flag indicating whether\n * to show or hide a tooltip for the given item.\n */\n handleTooltip(event, item, show) {\n if (item && item.tooltip != null) {\n item = resolveItem(item, event, this.canvas(), this._origin);\n const value = show && item && item.tooltip || null;\n this._tooltip.call(this._obj, this, event, item, value);\n }\n },\n /**\n * Returns the size of a scenegraph item and its position relative\n * to the viewport.\n * @param {Item} item - The scenegraph item.\n * @return {object} - A bounding box object (compatible with the\n * DOMRect type) consisting of x, y, width, heigh, top, left,\n * right, and bottom properties.\n */\n getItemBoundingClientRect(item) {\n const el = this.canvas();\n if (!el) return;\n const rect = el.getBoundingClientRect(),\n origin = this._origin,\n bounds = item.bounds,\n width = bounds.width(),\n height = bounds.height();\n let x = bounds.x1 + origin[0] + rect.left,\n y = bounds.y1 + origin[1] + rect.top;\n\n // translate coordinate for each parent group\n while (item.mark && (item = item.mark.group)) {\n x += item.x || 0;\n y += item.y || 0;\n }\n\n // return DOMRect-compatible bounding box\n return {\n x,\n y,\n width,\n height,\n left: x,\n top: y,\n right: x + width,\n bottom: y + height\n };\n }\n};\n\n/**\n * Create a new Renderer instance.\n * @param {object} [loader] - Optional loader instance for\n * image and href URL sanitization. If not specified, a\n * standard loader instance will be generated.\n * @constructor\n */\nfunction Renderer(loader) {\n this._el = null;\n this._bgcolor = null;\n this._loader = new ResourceLoader(loader);\n}\nRenderer.prototype = {\n /**\n * Initialize a new Renderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n this._el = el;\n return this.resize(width, height, origin, scaleFactor);\n },\n /**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\n element() {\n return this._el;\n },\n /**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\n canvas() {\n return this._el && this._el.firstChild;\n },\n /**\n * Get / set the background color.\n */\n background(bgcolor) {\n if (arguments.length === 0) return this._bgcolor;\n this._bgcolor = bgcolor;\n return this;\n },\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n this._width = width;\n this._height = height;\n this._origin = origin || [0, 0];\n this._scale = scaleFactor || 1;\n return this;\n },\n /**\n * Report a dirty item whose bounds should be redrawn.\n * This base class method does nothing. Subclasses that perform\n * incremental should implement this method.\n * @param {Item} item - The dirty item whose bounds should be redrawn.\n */\n dirty( /*item*/) {},\n /**\n * Render an input scenegraph, potentially with a set of dirty items.\n * This method will perform an immediate rendering with available resources.\n * The renderer may also need to perform image loading to perform a complete\n * render. This process can lead to asynchronous re-rendering of the scene\n * after this method returns. To receive notification when rendering is\n * complete, use the renderAsync method instead.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Renderer} - This renderer instance.\n */\n render(scene) {\n const r = this;\n\n // bind arguments into a render call, and cache it\n // this function may be subsequently called for async redraw\n r._call = function () {\n r._render(scene);\n };\n\n // invoke the renderer\n r._call();\n\n // clear the cached call for garbage collection\n // async redraws will stash their own copy\n r._call = null;\n return r;\n },\n /**\n * Internal rendering method. Renderer subclasses should override this\n * method to actually perform rendering.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\n _render( /*scene*/\n ) {\n // subclasses to override\n },\n /**\n * Asynchronous rendering method. Similar to render, but returns a Promise\n * that resolves when all rendering is completed. Sometimes a renderer must\n * perform image loading to get a complete rendering. The returned\n * Promise will not resolve until this process completes.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Promise} - A Promise that resolves when rendering is complete.\n */\n renderAsync(scene) {\n const r = this.render(scene);\n return this._ready ? this._ready.then(() => r) : Promise.resolve(r);\n },\n /**\n * Internal method for asynchronous resource loading.\n * Proxies method calls to the ImageLoader, and tracks loading\n * progress to invoke a re-render once complete.\n * @param {string} method - The method name to invoke on the ImageLoader.\n * @param {string} uri - The URI for the requested resource.\n * @return {Promise} - A Promise that resolves to the requested resource.\n */\n _load(method, uri) {\n var r = this,\n p = r._loader[method](uri);\n if (!r._ready) {\n // re-render the scene when loading completes\n const call = r._call;\n r._ready = r._loader.ready().then(redraw => {\n if (redraw) call();\n r._ready = null;\n });\n }\n return p;\n },\n /**\n * Sanitize a URL to include as a hyperlink in the rendered scene.\n * This method proxies a call to ImageLoader.sanitizeURL, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string to sanitize.\n * @return {Promise} - A Promise that resolves to the sanitized URL.\n */\n sanitizeURL(uri) {\n return this._load('sanitizeURL', uri);\n },\n /**\n * Requests an image to include in the rendered scene.\n * This method proxies a call to ImageLoader.loadImage, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string of the image.\n * @return {Promise} - A Promise that resolves to the loaded Image.\n */\n loadImage(uri) {\n return this._load('loadImage', uri);\n }\n};\n\nconst KeyDownEvent = 'keydown';\nconst KeyPressEvent = 'keypress';\nconst KeyUpEvent = 'keyup';\nconst DragEnterEvent = 'dragenter';\nconst DragLeaveEvent = 'dragleave';\nconst DragOverEvent = 'dragover';\nconst MouseDownEvent = 'mousedown';\nconst MouseUpEvent = 'mouseup';\nconst MouseMoveEvent = 'mousemove';\nconst MouseOutEvent = 'mouseout';\nconst MouseOverEvent = 'mouseover';\nconst ClickEvent = 'click';\nconst DoubleClickEvent = 'dblclick';\nconst WheelEvent = 'wheel';\nconst MouseWheelEvent = 'mousewheel';\nconst TouchStartEvent = 'touchstart';\nconst TouchMoveEvent = 'touchmove';\nconst TouchEndEvent = 'touchend';\nconst Events = [KeyDownEvent, KeyPressEvent, KeyUpEvent, DragEnterEvent, DragLeaveEvent, DragOverEvent, MouseDownEvent, MouseUpEvent, MouseMoveEvent, MouseOutEvent, MouseOverEvent, ClickEvent, DoubleClickEvent, WheelEvent, MouseWheelEvent, TouchStartEvent, TouchMoveEvent, TouchEndEvent];\nconst TooltipShowEvent = MouseMoveEvent;\nconst TooltipHideEvent = MouseOutEvent;\nconst HrefEvent = ClickEvent;\n\nfunction CanvasHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n this._down = null;\n this._touch = null;\n this._first = true;\n this._events = {};\n}\nconst eventBundle = type => type === TouchStartEvent || type === TouchMoveEvent || type === TouchEndEvent ? [TouchStartEvent, TouchMoveEvent, TouchEndEvent] : [type];\n\n// lazily add listeners to the canvas as needed\nfunction eventListenerCheck(handler, type) {\n eventBundle(type).forEach(_ => addEventListener(handler, _));\n}\nfunction addEventListener(handler, type) {\n const canvas = handler.canvas();\n if (canvas && !handler._events[type]) {\n handler._events[type] = 1;\n canvas.addEventListener(type, handler[type] ? evt => handler[type](evt) : evt => handler.fire(type, evt));\n }\n}\nfunction move(moveEvent, overEvent, outEvent) {\n return function (evt) {\n const a = this._active,\n p = this.pickEvent(evt);\n if (p === a) {\n // active item and picked item are the same\n this.fire(moveEvent, evt); // fire move\n } else {\n // active item and picked item are different\n if (!a || !a.exit) {\n // fire out for prior active item\n // suppress if active item was removed from scene\n this.fire(outEvent, evt);\n }\n this._active = p; // set new active item\n this.fire(overEvent, evt); // fire over for new active item\n this.fire(moveEvent, evt); // fire move for new active item\n }\n };\n}\n\nfunction inactive(type) {\n return function (evt) {\n this.fire(type, evt);\n this._active = null;\n };\n}\ninherits(CanvasHandler, Handler, {\n initialize(el, origin, obj) {\n this._canvas = el && domFind(el, 'canvas');\n\n // add minimal events required for proper state management\n [ClickEvent, MouseDownEvent, MouseMoveEvent, MouseOutEvent, DragLeaveEvent].forEach(type => eventListenerCheck(this, type));\n return Handler.prototype.initialize.call(this, el, origin, obj);\n },\n // return the backing canvas instance\n canvas() {\n return this._canvas;\n },\n // retrieve the current canvas context\n context() {\n return this._canvas.getContext('2d');\n },\n // supported events\n events: Events,\n // to keep old versions of firefox happy\n DOMMouseScroll(evt) {\n this.fire(MouseWheelEvent, evt);\n },\n mousemove: move(MouseMoveEvent, MouseOverEvent, MouseOutEvent),\n dragover: move(DragOverEvent, DragEnterEvent, DragLeaveEvent),\n mouseout: inactive(MouseOutEvent),\n dragleave: inactive(DragLeaveEvent),\n mousedown(evt) {\n this._down = this._active;\n this.fire(MouseDownEvent, evt);\n },\n click(evt) {\n if (this._down === this._active) {\n this.fire(ClickEvent, evt);\n this._down = null;\n }\n },\n touchstart(evt) {\n this._touch = this.pickEvent(evt.changedTouches[0]);\n if (this._first) {\n this._active = this._touch;\n this._first = false;\n }\n this.fire(TouchStartEvent, evt, true);\n },\n touchmove(evt) {\n this.fire(TouchMoveEvent, evt, true);\n },\n touchend(evt) {\n this.fire(TouchEndEvent, evt, true);\n this._touch = null;\n },\n // fire an event\n fire(type, evt, touch) {\n const a = touch ? this._touch : this._active,\n h = this._handlers[type];\n\n // set event type relative to scenegraph items\n evt.vegaType = type;\n\n // handle hyperlinks and tooltips first\n if (type === HrefEvent && a && a.href) {\n this.handleHref(evt, a, a.href);\n } else if (type === TooltipShowEvent || type === TooltipHideEvent) {\n this.handleTooltip(evt, a, type !== TooltipHideEvent);\n }\n\n // invoke all registered handlers\n if (h) {\n for (let i = 0, len = h.length; i < len; ++i) {\n h[i].handler.call(this._obj, evt, a);\n }\n }\n },\n // add an event handler\n on(type, handler) {\n const name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n if (i < 0) {\n eventListenerCheck(this, type);\n (h[name] || (h[name] = [])).push({\n type: type,\n handler: handler\n });\n }\n return this;\n },\n // remove an event handler\n off(type, handler) {\n const name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n if (i >= 0) {\n h.splice(i, 1);\n }\n return this;\n },\n pickEvent(evt) {\n const p = point(evt, this._canvas),\n o = this._origin;\n return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]);\n },\n // find the scenegraph item at the current mouse position\n // x, y -- the absolute x, y mouse coordinates on the canvas element\n // gx, gy -- the relative coordinates within the current group\n pick(scene, x, y, gx, gy) {\n const g = this.context(),\n mark = Marks[scene.marktype];\n return mark.pick.call(this, g, scene, x, y, gx, gy);\n }\n});\n\nfunction devicePixelRatio() {\n return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n}\nvar pixelRatio = devicePixelRatio();\nfunction resize (canvas, width, height, origin, scaleFactor, opt) {\n const inDOM = typeof HTMLElement !== 'undefined' && canvas instanceof HTMLElement && canvas.parentNode != null,\n context = canvas.getContext('2d'),\n ratio = inDOM ? pixelRatio : scaleFactor;\n canvas.width = width * ratio;\n canvas.height = height * ratio;\n for (const key in opt) {\n context[key] = opt[key];\n }\n if (inDOM && ratio !== 1) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n context.pixelRatio = ratio;\n context.setTransform(ratio, 0, 0, ratio, ratio * origin[0], ratio * origin[1]);\n return canvas;\n}\n\nfunction CanvasRenderer(loader) {\n Renderer.call(this, loader);\n this._options = {};\n this._redraw = false;\n this._dirty = new Bounds();\n this._tempb = new Bounds();\n}\nconst base$1 = Renderer.prototype;\nconst viewBounds = (origin, width, height) => new Bounds().set(0, 0, width, height).translate(-origin[0], -origin[1]);\nfunction clipToBounds(g, b, origin) {\n // expand bounds by 1 pixel, then round to pixel boundaries\n b.expand(1).round();\n\n // align to base pixel grid in case of non-integer scaling (#2425)\n if (g.pixelRatio % 1) {\n b.scale(g.pixelRatio).round().scale(1 / g.pixelRatio);\n }\n\n // to avoid artifacts translate if origin has fractional pixels\n b.translate(-(origin[0] % 1), -(origin[1] % 1));\n\n // set clip path\n g.beginPath();\n g.rect(b.x1, b.y1, b.width(), b.height());\n g.clip();\n return b;\n}\ninherits(CanvasRenderer, Renderer, {\n initialize(el, width, height, origin, scaleFactor, options) {\n this._options = options || {};\n this._canvas = this._options.externalContext ? null : canvas(1, 1, this._options.type); // instantiate a small canvas\n\n if (el && this._canvas) {\n domClear(el, 0).appendChild(this._canvas);\n this._canvas.setAttribute('class', 'marks');\n }\n\n // this method will invoke resize to size the canvas appropriately\n return base$1.initialize.call(this, el, width, height, origin, scaleFactor);\n },\n resize(width, height, origin, scaleFactor) {\n base$1.resize.call(this, width, height, origin, scaleFactor);\n if (this._canvas) {\n // configure canvas size and transform\n resize(this._canvas, this._width, this._height, this._origin, this._scale, this._options.context);\n } else {\n // external context needs to be scaled and positioned to origin\n const ctx = this._options.externalContext;\n if (!ctx) error('CanvasRenderer is missing a valid canvas or context');\n ctx.scale(this._scale, this._scale);\n ctx.translate(this._origin[0], this._origin[1]);\n }\n this._redraw = true;\n return this;\n },\n canvas() {\n return this._canvas;\n },\n context() {\n return this._options.externalContext || (this._canvas ? this._canvas.getContext('2d') : null);\n },\n dirty(item) {\n const b = this._tempb.clear().union(item.bounds);\n let g = item.mark.group;\n while (g) {\n b.translate(g.x || 0, g.y || 0);\n g = g.mark.group;\n }\n this._dirty.union(b);\n },\n _render(scene) {\n const g = this.context(),\n o = this._origin,\n w = this._width,\n h = this._height,\n db = this._dirty,\n vb = viewBounds(o, w, h);\n\n // setup\n g.save();\n const b = this._redraw || db.empty() ? (this._redraw = false, vb.expand(1)) : clipToBounds(g, vb.intersect(db), o);\n this.clear(-o[0], -o[1], w, h);\n\n // render\n this.draw(g, scene, b);\n\n // takedown\n g.restore();\n db.clear();\n return this;\n },\n draw(ctx, scene, bounds) {\n const mark = Marks[scene.marktype];\n if (scene.clip) clip(ctx, scene);\n mark.draw.call(this, ctx, scene, bounds);\n if (scene.clip) ctx.restore();\n },\n clear(x, y, w, h) {\n const opt = this._options,\n g = this.context();\n if (opt.type !== 'pdf' && !opt.externalContext) {\n // calling clear rect voids vector output in pdf mode\n // and could remove external context content (#2615)\n g.clearRect(x, y, w, h);\n }\n if (this._bgcolor != null) {\n g.fillStyle = this._bgcolor;\n g.fillRect(x, y, w, h);\n }\n }\n});\n\nfunction SVGHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n const h = this;\n h._hrefHandler = listener(h, (evt, item) => {\n if (item && item.href) h.handleHref(evt, item, item.href);\n });\n h._tooltipHandler = listener(h, (evt, item) => {\n h.handleTooltip(evt, item, evt.type !== TooltipHideEvent);\n });\n}\n\n// wrap an event listener for the SVG DOM\nconst listener = (context, handler) => evt => {\n let item = evt.target.__data__;\n item = Array.isArray(item) ? item[0] : item;\n evt.vegaType = evt.type;\n handler.call(context._obj, evt, item);\n};\ninherits(SVGHandler, Handler, {\n initialize(el, origin, obj) {\n let svg = this._svg;\n if (svg) {\n svg.removeEventListener(HrefEvent, this._hrefHandler);\n svg.removeEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.removeEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n this._svg = svg = el && domFind(el, 'svg');\n if (svg) {\n svg.addEventListener(HrefEvent, this._hrefHandler);\n svg.addEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.addEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n return Handler.prototype.initialize.call(this, el, origin, obj);\n },\n canvas() {\n return this._svg;\n },\n // add an event handler\n on(type, handler) {\n const name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n if (i < 0) {\n const x = {\n type,\n handler,\n listener: listener(this, handler)\n };\n (h[name] || (h[name] = [])).push(x);\n if (this._svg) {\n this._svg.addEventListener(name, x.listener);\n }\n }\n return this;\n },\n // remove an event handler\n off(type, handler) {\n const name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n if (i >= 0) {\n if (this._svg) {\n this._svg.removeEventListener(name, h[i].listener);\n }\n h.splice(i, 1);\n }\n return this;\n }\n});\n\nconst ARIA_HIDDEN = 'aria-hidden';\nconst ARIA_LABEL = 'aria-label';\nconst ARIA_ROLE = 'role';\nconst ARIA_ROLEDESCRIPTION = 'aria-roledescription';\nconst GRAPHICS_OBJECT = 'graphics-object';\nconst GRAPHICS_SYMBOL = 'graphics-symbol';\nconst bundle = (role, roledesc, label) => ({\n [ARIA_ROLE]: role,\n [ARIA_ROLEDESCRIPTION]: roledesc,\n [ARIA_LABEL]: label || undefined\n});\n\n// these roles are covered by related roles\n// we can ignore them, no need to generate attributes\nconst AriaIgnore = toSet(['axis-domain', 'axis-grid', 'axis-label', 'axis-tick', 'axis-title', 'legend-band', 'legend-entry', 'legend-gradient', 'legend-label', 'legend-title', 'legend-symbol', 'title']);\n\n// aria attribute generators for guide roles\nconst AriaGuides = {\n 'axis': {\n desc: 'axis',\n caption: axisCaption\n },\n 'legend': {\n desc: 'legend',\n caption: legendCaption\n },\n 'title-text': {\n desc: 'title',\n caption: item => `Title text '${titleCaption(item)}'`\n },\n 'title-subtitle': {\n desc: 'subtitle',\n caption: item => `Subtitle text '${titleCaption(item)}'`\n }\n};\n\n// aria properties generated for mark item encoding channels\nconst AriaEncode = {\n ariaRole: ARIA_ROLE,\n ariaRoleDescription: ARIA_ROLEDESCRIPTION,\n description: ARIA_LABEL\n};\nfunction ariaItemAttributes(emit, item) {\n const hide = item.aria === false;\n emit(ARIA_HIDDEN, hide || undefined);\n if (hide || item.description == null) {\n for (const prop in AriaEncode) {\n emit(AriaEncode[prop], undefined);\n }\n } else {\n const type = item.mark.marktype;\n emit(ARIA_LABEL, item.description);\n emit(ARIA_ROLE, item.ariaRole || (type === 'group' ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL));\n emit(ARIA_ROLEDESCRIPTION, item.ariaRoleDescription || `${type} mark`);\n }\n}\nfunction ariaMarkAttributes(mark) {\n return mark.aria === false ? {\n [ARIA_HIDDEN]: true\n } : AriaIgnore[mark.role] ? null : AriaGuides[mark.role] ? ariaGuide(mark, AriaGuides[mark.role]) : ariaMark(mark);\n}\nfunction ariaMark(mark) {\n const type = mark.marktype;\n const recurse = type === 'group' || type === 'text' || mark.items.some(_ => _.description != null && _.aria !== false);\n return bundle(recurse ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL, `${type} mark container`, mark.description);\n}\nfunction ariaGuide(mark, opt) {\n try {\n const item = mark.items[0],\n caption = opt.caption || (() => '');\n return bundle(opt.role || GRAPHICS_SYMBOL, opt.desc, item.description || caption(item));\n } catch (err) {\n return null;\n }\n}\nfunction titleCaption(item) {\n return array(item.text).join(' ');\n}\nfunction axisCaption(item) {\n const datum = item.datum,\n orient = item.orient,\n title = datum.title ? extractTitle(item) : null,\n ctx = item.context,\n scale = ctx.scales[datum.scale].value,\n locale = ctx.dataflow.locale(),\n type = scale.type,\n xy = orient === 'left' || orient === 'right' ? 'Y' : 'X';\n return `${xy}-axis` + (title ? ` titled '${title}'` : '') + ` for a ${isDiscrete(type) ? 'discrete' : type} scale` + ` with ${domainCaption(locale, scale, item)}`;\n}\nfunction legendCaption(item) {\n const datum = item.datum,\n title = datum.title ? extractTitle(item) : null,\n type = `${datum.type || ''} legend`.trim(),\n scales = datum.scales,\n props = Object.keys(scales),\n ctx = item.context,\n scale = ctx.scales[scales[props[0]]].value,\n locale = ctx.dataflow.locale();\n return capitalize(type) + (title ? ` titled '${title}'` : '') + ` for ${channelCaption(props)}` + ` with ${domainCaption(locale, scale, item)}`;\n}\nfunction extractTitle(item) {\n try {\n return array(peek(item.items).items[0].text).join(' ');\n } catch (err) {\n return null;\n }\n}\nfunction channelCaption(props) {\n props = props.map(p => p + (p === 'fill' || p === 'stroke' ? ' color' : ''));\n return props.length < 2 ? props[0] : props.slice(0, -1).join(', ') + ' and ' + peek(props);\n}\nfunction capitalize(s) {\n return s.length ? s[0].toUpperCase() + s.slice(1) : s;\n}\n\nconst innerText = val => (val + '').replace(/&/g, '&').replace(//g, '>');\nconst attrText = val => innerText(val).replace(/\"/g, '"').replace(/\\t/g, ' ').replace(/\\n/g, ' ').replace(/\\r/g, ' ');\nfunction markup() {\n let buf = '',\n outer = '',\n inner = '';\n const stack = [],\n clear = () => outer = inner = '',\n push = tag => {\n if (outer) {\n buf += `${outer}>${inner}`;\n clear();\n }\n stack.push(tag);\n },\n attr = (name, value) => {\n if (value != null) outer += ` ${name}=\"${attrText(value)}\"`;\n return m;\n },\n m = {\n open(tag) {\n push(tag);\n outer = '<' + tag;\n for (var _len = arguments.length, attrs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n attrs[_key - 1] = arguments[_key];\n }\n for (const set of attrs) {\n for (const key in set) attr(key, set[key]);\n }\n return m;\n },\n close() {\n const tag = stack.pop();\n if (outer) {\n buf += outer + (inner ? `>${inner}` : '/>');\n } else {\n buf += ``;\n }\n clear();\n return m;\n },\n attr,\n text: t => (inner += innerText(t), m),\n toString: () => buf\n };\n return m;\n}\nconst serializeXML = node => _serialize(markup(), node) + '';\nfunction _serialize(m, node) {\n m.open(node.tagName);\n if (node.hasAttributes()) {\n const attrs = node.attributes,\n n = attrs.length;\n for (let i = 0; i < n; ++i) {\n m.attr(attrs[i].name, attrs[i].value);\n }\n }\n if (node.hasChildNodes()) {\n const children = node.childNodes;\n for (const child of children) {\n child.nodeType === 3 // text node\n ? m.text(child.nodeValue) : _serialize(m, child);\n }\n }\n return m.close();\n}\n\nconst stylesAttr = {\n fill: 'fill',\n fillOpacity: 'fill-opacity',\n stroke: 'stroke',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n strokeCap: 'stroke-linecap',\n strokeJoin: 'stroke-linejoin',\n strokeDash: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeMiterLimit: 'stroke-miterlimit',\n opacity: 'opacity'\n};\nconst stylesCss = {\n blend: 'mix-blend-mode'\n};\n\n// ensure miter limit default is consistent with canvas (#2498)\nconst rootAttributes = {\n 'fill': 'none',\n 'stroke-miterlimit': 10\n};\n\nconst RootIndex = 0,\n xmlns = 'http://www.w3.org/2000/xmlns/',\n svgns = metadata.xmlns;\nfunction SVGRenderer(loader) {\n Renderer.call(this, loader);\n this._dirtyID = 0;\n this._dirty = [];\n this._svg = null;\n this._root = null;\n this._defs = null;\n}\nconst base = Renderer.prototype;\ninherits(SVGRenderer, Renderer, {\n /**\n * Initialize a new SVGRenderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n // create the svg definitions cache\n this._defs = {};\n this._clearDefs();\n if (el) {\n this._svg = domChild(el, 0, 'svg', svgns);\n this._svg.setAttributeNS(xmlns, 'xmlns', svgns);\n this._svg.setAttributeNS(xmlns, 'xmlns:xlink', metadata['xmlns:xlink']);\n this._svg.setAttribute('version', metadata['version']);\n this._svg.setAttribute('class', 'marks');\n domClear(el, 1);\n\n // set the svg root group\n this._root = domChild(this._svg, RootIndex, 'g', svgns);\n setAttributes(this._root, rootAttributes);\n\n // ensure no additional child elements\n domClear(this._svg, RootIndex + 1);\n }\n\n // set background color if defined\n this.background(this._bgcolor);\n return base.initialize.call(this, el, width, height, origin, scaleFactor);\n },\n /**\n * Get / set the background color.\n */\n background(bgcolor) {\n if (arguments.length && this._svg) {\n this._svg.style.setProperty('background-color', bgcolor);\n }\n return base.background.apply(this, arguments);\n },\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n base.resize.call(this, width, height, origin, scaleFactor);\n if (this._svg) {\n setAttributes(this._svg, {\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: `0 0 ${this._width} ${this._height}`\n });\n this._root.setAttribute('transform', `translate(${this._origin})`);\n }\n this._dirty = [];\n return this;\n },\n /**\n * Returns the SVG element of the visualization.\n * @return {DOMElement} - The SVG element.\n */\n canvas() {\n return this._svg;\n },\n /**\n * Returns an SVG text string for the rendered content,\n * or null if this renderer is currently headless.\n */\n svg() {\n const svg = this._svg,\n bg = this._bgcolor;\n if (!svg) return null;\n let node;\n if (bg) {\n svg.removeAttribute('style');\n node = domChild(svg, RootIndex, 'rect', svgns);\n setAttributes(node, {\n width: this._width,\n height: this._height,\n fill: bg\n });\n }\n const text = serializeXML(svg);\n if (bg) {\n svg.removeChild(node);\n this._svg.style.setProperty('background-color', bg);\n }\n return text;\n },\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\n _render(scene) {\n // perform spot updates and re-render markup\n if (this._dirtyCheck()) {\n if (this._dirtyAll) this._clearDefs();\n this.mark(this._root, scene);\n domClear(this._root, 1);\n }\n this.defs();\n this._dirty = [];\n ++this._dirtyID;\n return this;\n },\n // -- Manage rendering of items marked as dirty --\n\n /**\n * Flag a mark item as dirty.\n * @param {Item} item - The mark item.\n */\n dirty(item) {\n if (item.dirty !== this._dirtyID) {\n item.dirty = this._dirtyID;\n this._dirty.push(item);\n }\n },\n /**\n * Check if a mark item is considered dirty.\n * @param {Item} item - The mark item.\n */\n isDirty(item) {\n return this._dirtyAll || !item._svg || !item._svg.ownerSVGElement || item.dirty === this._dirtyID;\n },\n /**\n * Internal method to check dirty status and, if possible,\n * make targetted updates without a full rendering pass.\n */\n _dirtyCheck() {\n this._dirtyAll = true;\n const items = this._dirty;\n if (!items.length || !this._dirtyID) return true;\n const id = ++this._dirtyID;\n let item, mark, type, mdef, i, n, o;\n for (i = 0, n = items.length; i < n; ++i) {\n item = items[i];\n mark = item.mark;\n if (mark.marktype !== type) {\n // memoize mark instance lookup\n type = mark.marktype;\n mdef = Marks[type];\n }\n if (mark.zdirty && mark.dirty !== id) {\n this._dirtyAll = false;\n dirtyParents(item, id);\n mark.items.forEach(i => {\n i.dirty = id;\n });\n }\n if (mark.zdirty) continue; // handle in standard drawing pass\n\n if (item.exit) {\n // EXIT\n if (mdef.nested && mark.items.length) {\n // if nested mark with remaining points, update instead\n o = mark.items[0];\n if (o._svg) this._update(mdef, o._svg, o);\n } else if (item._svg) {\n // otherwise remove from DOM\n o = item._svg.parentNode;\n if (o) o.removeChild(item._svg);\n }\n item._svg = null;\n continue;\n }\n item = mdef.nested ? mark.items[0] : item;\n if (item._update === id) continue; // already visited\n\n if (!item._svg || !item._svg.ownerSVGElement) {\n // ENTER\n this._dirtyAll = false;\n dirtyParents(item, id);\n } else {\n // IN-PLACE UPDATE\n this._update(mdef, item._svg, item);\n }\n item._update = id;\n }\n return !this._dirtyAll;\n },\n // -- Construct & maintain scenegraph to SVG mapping ---\n\n /**\n * Render a set of mark items.\n * @param {SVGElement} el - The parent element in the SVG tree.\n * @param {object} scene - The mark parent to render.\n * @param {SVGElement} prev - The previous sibling in the SVG tree.\n */\n mark(el, scene, prev) {\n if (!this.isDirty(scene)) {\n return scene._svg;\n }\n const svg = this._svg,\n mdef = Marks[scene.marktype],\n events = scene.interactive === false ? 'none' : null,\n isGroup = mdef.tag === 'g';\n const parent = bind(scene, el, prev, 'g', svg);\n parent.setAttribute('class', cssClass(scene));\n\n // apply aria attributes to parent container element\n const aria = ariaMarkAttributes(scene);\n for (const key in aria) setAttribute(parent, key, aria[key]);\n if (!isGroup) {\n setAttribute(parent, 'pointer-events', events);\n }\n setAttribute(parent, 'clip-path', scene.clip ? clip$1(this, scene, scene.group) : null);\n let sibling = null,\n i = 0;\n const process = item => {\n const dirty = this.isDirty(item),\n node = bind(item, parent, sibling, mdef.tag, svg);\n if (dirty) {\n this._update(mdef, node, item);\n if (isGroup) recurse(this, node, item);\n }\n sibling = node;\n ++i;\n };\n if (mdef.nested) {\n if (scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n }\n domClear(parent, i);\n return parent;\n },\n /**\n * Update the attributes of an SVG element for a mark item.\n * @param {object} mdef - The mark definition object\n * @param {SVGElement} el - The SVG element.\n * @param {Item} item - The mark item.\n */\n _update(mdef, el, item) {\n // set dom element and values cache\n // provides access to emit method\n element = el;\n values = el.__values__;\n\n // apply aria-specific properties\n ariaItemAttributes(emit, item);\n\n // apply svg attributes\n mdef.attr(emit, item, this);\n\n // some marks need special treatment\n const extra = mark_extras[mdef.type];\n if (extra) extra.call(this, mdef, el, item);\n\n // apply svg style attributes\n // note: element state may have been modified by 'extra' method\n if (element) this.style(element, item);\n },\n /**\n * Update the presentation attributes of an SVG element for a mark item.\n * @param {SVGElement} el - The SVG element.\n * @param {Item} item - The mark item.\n */\n style(el, item) {\n if (item == null) return;\n for (const prop in stylesAttr) {\n let value = prop === 'font' ? fontFamily(item) : item[prop];\n if (value === values[prop]) continue;\n const name = stylesAttr[prop];\n if (value == null) {\n el.removeAttribute(name);\n } else {\n if (isGradient(value)) {\n value = gradientRef(value, this._defs.gradient, href());\n }\n el.setAttribute(name, value + '');\n }\n values[prop] = value;\n }\n for (const prop in stylesCss) {\n setStyle(el, stylesCss[prop], item[prop]);\n }\n },\n /**\n * Render SVG defs, as needed.\n * Must be called *after* marks have been processed to ensure the\n * collected state is current and accurate.\n */\n defs() {\n const svg = this._svg,\n defs = this._defs;\n let el = defs.el,\n index = 0;\n for (const id in defs.gradient) {\n if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', svgns);\n index = updateGradient(el, defs.gradient[id], index);\n }\n for (const id in defs.clipping) {\n if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', svgns);\n index = updateClipping(el, defs.clipping[id], index);\n }\n\n // clean-up\n if (el) {\n index === 0 ? (svg.removeChild(el), defs.el = null) : domClear(el, index);\n }\n },\n /**\n * Clear defs caches.\n */\n _clearDefs() {\n const def = this._defs;\n def.gradient = {};\n def.clipping = {};\n }\n});\n\n// mark ancestor chain with a dirty id\nfunction dirtyParents(item, id) {\n for (; item && item.dirty !== id; item = item.mark.group) {\n item.dirty = id;\n if (item.mark && item.mark.dirty !== id) {\n item.mark.dirty = id;\n } else return;\n }\n}\n\n// update gradient definitions\nfunction updateGradient(el, grad, index) {\n let i, n, stop;\n if (grad.gradient === 'radial') {\n // SVG radial gradients automatically transform to normalized bbox\n // coordinates, in a way that is cumbersome to replicate in canvas.\n // We wrap the radial gradient in a pattern element, allowing us to\n // maintain a circular gradient that matches what canvas provides.\n let pt = domChild(el, index++, 'pattern', svgns);\n setAttributes(pt, {\n id: patternPrefix + grad.id,\n viewBox: '0,0,1,1',\n width: '100%',\n height: '100%',\n preserveAspectRatio: 'xMidYMid slice'\n });\n pt = domChild(pt, 0, 'rect', svgns);\n setAttributes(pt, {\n width: 1,\n height: 1,\n fill: `url(${href()}#${grad.id})`\n });\n el = domChild(el, index++, 'radialGradient', svgns);\n setAttributes(el, {\n id: grad.id,\n fx: grad.x1,\n fy: grad.y1,\n fr: grad.r1,\n cx: grad.x2,\n cy: grad.y2,\n r: grad.r2\n });\n } else {\n el = domChild(el, index++, 'linearGradient', svgns);\n setAttributes(el, {\n id: grad.id,\n x1: grad.x1,\n x2: grad.x2,\n y1: grad.y1,\n y2: grad.y2\n });\n }\n for (i = 0, n = grad.stops.length; i < n; ++i) {\n stop = domChild(el, i, 'stop', svgns);\n stop.setAttribute('offset', grad.stops[i].offset);\n stop.setAttribute('stop-color', grad.stops[i].color);\n }\n domClear(el, i);\n return index;\n}\n\n// update clipping path definitions\nfunction updateClipping(el, clip, index) {\n let mask;\n el = domChild(el, index, 'clipPath', svgns);\n el.setAttribute('id', clip.id);\n if (clip.path) {\n mask = domChild(el, 0, 'path', svgns);\n mask.setAttribute('d', clip.path);\n } else {\n mask = domChild(el, 0, 'rect', svgns);\n setAttributes(mask, {\n x: 0,\n y: 0,\n width: clip.width,\n height: clip.height\n });\n }\n domClear(el, 1);\n return index + 1;\n}\n\n// Recursively process group contents.\nfunction recurse(renderer, el, group) {\n // child 'g' element is second to last among children (path, g, path)\n // other children here are foreground and background path elements\n el = el.lastChild.previousSibling;\n let prev,\n idx = 0;\n visit(group, item => {\n prev = renderer.mark(el, item, prev);\n ++idx;\n });\n\n // remove any extraneous DOM elements\n domClear(el, 1 + idx);\n}\n\n// Bind a scenegraph item to an SVG DOM element.\n// Create new SVG elements as needed.\nfunction bind(item, el, sibling, tag, svg) {\n let node = item._svg,\n doc;\n\n // create a new dom node if needed\n if (!node) {\n doc = el.ownerDocument;\n node = domCreate(doc, tag, svgns);\n item._svg = node;\n if (item.mark) {\n node.__data__ = item;\n node.__values__ = {\n fill: 'default'\n };\n\n // if group, create background, content, and foreground elements\n if (tag === 'g') {\n const bg = domCreate(doc, 'path', svgns);\n node.appendChild(bg);\n bg.__data__ = item;\n const cg = domCreate(doc, 'g', svgns);\n node.appendChild(cg);\n cg.__data__ = item;\n const fg = domCreate(doc, 'path', svgns);\n node.appendChild(fg);\n fg.__data__ = item;\n fg.__values__ = {\n fill: 'default'\n };\n }\n }\n }\n\n // (re-)insert if (a) not contained in SVG or (b) sibling order has changed\n if (node.ownerSVGElement !== svg || siblingCheck(node, sibling)) {\n el.insertBefore(node, sibling ? sibling.nextSibling : el.firstChild);\n }\n return node;\n}\n\n// check if two nodes are ordered siblings\nfunction siblingCheck(node, sibling) {\n return node.parentNode && node.parentNode.childNodes.length > 1 && node.previousSibling != sibling; // treat null/undefined the same\n}\n\n// -- Set attributes & styles on SVG elements ---\n\nlet element = null,\n // temp var for current SVG element\n values = null; // temp var for current values hash\n\n// Extra configuration for certain mark types\nconst mark_extras = {\n group(mdef, el, item) {\n const fg = element = el.childNodes[2];\n values = fg.__values__;\n mdef.foreground(emit, item, this);\n values = el.__values__; // use parent's values hash\n element = el.childNodes[1];\n mdef.content(emit, item, this);\n const bg = element = el.childNodes[0];\n mdef.background(emit, item, this);\n const value = item.mark.interactive === false ? 'none' : null;\n if (value !== values.events) {\n setAttribute(fg, 'pointer-events', value);\n setAttribute(bg, 'pointer-events', value);\n values.events = value;\n }\n if (item.strokeForeground && item.stroke) {\n const fill = item.fill;\n setAttribute(fg, 'display', null);\n\n // set style of background\n this.style(bg, item);\n setAttribute(bg, 'stroke', null);\n\n // set style of foreground\n if (fill) item.fill = null;\n values = fg.__values__;\n this.style(fg, item);\n if (fill) item.fill = fill;\n\n // leave element null to prevent downstream styling\n element = null;\n } else {\n // ensure foreground is ignored\n setAttribute(fg, 'display', 'none');\n }\n },\n image(mdef, el, item) {\n if (item.smooth === false) {\n setStyle(el, 'image-rendering', 'optimizeSpeed');\n setStyle(el, 'image-rendering', 'pixelated');\n } else {\n setStyle(el, 'image-rendering', null);\n }\n },\n text(mdef, el, item) {\n const tl = textLines(item);\n let key, value, doc, lh;\n if (isArray(tl)) {\n // multi-line text\n value = tl.map(_ => textValue(item, _));\n key = value.join('\\n'); // content cache key\n\n if (key !== values.text) {\n domClear(el, 0);\n doc = el.ownerDocument;\n lh = lineHeight(item);\n value.forEach((t, i) => {\n const ts = domCreate(doc, 'tspan', svgns);\n ts.__data__ = item; // data binding\n ts.textContent = t;\n if (i) {\n ts.setAttribute('x', 0);\n ts.setAttribute('dy', lh);\n }\n el.appendChild(ts);\n });\n values.text = key;\n }\n } else {\n // single-line text\n value = textValue(item, tl);\n if (value !== values.text) {\n el.textContent = value;\n values.text = value;\n }\n }\n setAttribute(el, 'font-family', fontFamily(item));\n setAttribute(el, 'font-size', fontSize(item) + 'px');\n setAttribute(el, 'font-style', item.fontStyle);\n setAttribute(el, 'font-variant', item.fontVariant);\n setAttribute(el, 'font-weight', item.fontWeight);\n }\n};\nfunction emit(name, value, ns) {\n // early exit if value is unchanged\n if (value === values[name]) return;\n\n // use appropriate method given namespace (ns)\n if (ns) {\n setAttributeNS(element, name, value, ns);\n } else {\n setAttribute(element, name, value);\n }\n\n // note current value for future comparison\n values[name] = value;\n}\nfunction setStyle(el, name, value) {\n if (value !== values[name]) {\n if (value == null) {\n el.style.removeProperty(name);\n } else {\n el.style.setProperty(name, value + '');\n }\n values[name] = value;\n }\n}\nfunction setAttributes(el, attrs) {\n for (const key in attrs) {\n setAttribute(el, key, attrs[key]);\n }\n}\nfunction setAttribute(el, name, value) {\n if (value != null) {\n // if value is provided, update DOM attribute\n el.setAttribute(name, value);\n } else {\n // else remove DOM attribute\n el.removeAttribute(name);\n }\n}\nfunction setAttributeNS(el, name, value, ns) {\n if (value != null) {\n // if value is provided, update DOM attribute\n el.setAttributeNS(ns, name, value);\n } else {\n // else remove DOM attribute\n el.removeAttributeNS(ns, name);\n }\n}\nfunction href() {\n let loc;\n return typeof window === 'undefined' ? '' : (loc = window.location).hash ? loc.href.slice(0, -loc.hash.length) : loc.href;\n}\n\nfunction SVGStringRenderer(loader) {\n Renderer.call(this, loader);\n this._text = null;\n this._defs = {\n gradient: {},\n clipping: {}\n };\n}\ninherits(SVGStringRenderer, Renderer, {\n /**\n * Returns the rendered SVG text string,\n * or null if rendering has not yet occurred.\n */\n svg() {\n return this._text;\n },\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\n _render(scene) {\n const m = markup();\n\n // svg tag\n m.open('svg', extend({}, metadata, {\n class: 'marks',\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: `0 0 ${this._width} ${this._height}`\n }));\n\n // background, if defined\n const bg = this._bgcolor;\n if (bg && bg !== 'transparent' && bg !== 'none') {\n m.open('rect', {\n width: this._width,\n height: this._height,\n fill: bg\n }).close();\n }\n\n // root content group\n m.open('g', rootAttributes, {\n transform: 'translate(' + this._origin + ')'\n });\n this.mark(m, scene);\n m.close(); // \n\n // defs\n this.defs(m);\n\n // get SVG text string\n this._text = m.close() + '';\n return this;\n },\n /**\n * Render a set of mark items.\n * @param {object} m - The markup context.\n * @param {object} scene - The mark parent to render.\n */\n mark(m, scene) {\n const mdef = Marks[scene.marktype],\n tag = mdef.tag,\n attrList = [ariaItemAttributes, mdef.attr];\n\n // render opening group tag\n m.open('g', {\n 'class': cssClass(scene),\n 'clip-path': scene.clip ? clip$1(this, scene, scene.group) : null\n }, ariaMarkAttributes(scene), {\n 'pointer-events': tag !== 'g' && scene.interactive === false ? 'none' : null\n });\n\n // render contained elements\n const process = item => {\n const href = this.href(item);\n if (href) m.open('a', href);\n m.open(tag, this.attr(scene, item, attrList, tag !== 'g' ? tag : null));\n if (tag === 'text') {\n const tl = textLines(item);\n if (isArray(tl)) {\n // multi-line text\n const attrs = {\n x: 0,\n dy: lineHeight(item)\n };\n for (let i = 0; i < tl.length; ++i) {\n m.open('tspan', i ? attrs : null).text(textValue(item, tl[i])).close();\n }\n } else {\n // single-line text\n m.text(textValue(item, tl));\n }\n } else if (tag === 'g') {\n const fore = item.strokeForeground,\n fill = item.fill,\n stroke = item.stroke;\n if (fore && stroke) {\n item.stroke = null;\n }\n m.open('path', this.attr(scene, item, mdef.background, 'bgrect')).close();\n\n // recurse for group content\n m.open('g', this.attr(scene, item, mdef.content));\n visit(item, scene => this.mark(m, scene));\n m.close();\n if (fore && stroke) {\n if (fill) item.fill = null;\n item.stroke = stroke;\n m.open('path', this.attr(scene, item, mdef.foreground, 'bgrect')).close();\n if (fill) item.fill = fill;\n } else {\n m.open('path', this.attr(scene, item, mdef.foreground, 'bgfore')).close();\n }\n }\n m.close(); // \n if (href) m.close(); // \n };\n\n if (mdef.nested) {\n if (scene.items && scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n }\n\n // render closing group tag\n return m.close(); // \n },\n\n /**\n * Get href attributes for a hyperlinked mark item.\n * @param {Item} item - The mark item.\n */\n href(item) {\n const href = item.href;\n let attr;\n if (href) {\n if (attr = this._hrefs && this._hrefs[href]) {\n return attr;\n } else {\n this.sanitizeURL(href).then(attr => {\n // rewrite to use xlink namespace\n attr['xlink:href'] = attr.href;\n attr.href = null;\n (this._hrefs || (this._hrefs = {}))[href] = attr;\n });\n }\n }\n return null;\n },\n /**\n * Get an object of SVG attributes for a mark item.\n * @param {object} scene - The mark parent.\n * @param {Item} item - The mark item.\n * @param {array|function} attrs - One or more attribute emitters.\n * @param {string} tag - The tag being rendered.\n */\n attr(scene, item, attrs, tag) {\n const object = {},\n emit = (name, value, ns, prefixed) => {\n object[prefixed || name] = value;\n };\n\n // apply mark specific attributes\n if (Array.isArray(attrs)) {\n attrs.forEach(fn => fn(emit, item, this));\n } else {\n attrs(emit, item, this);\n }\n\n // apply style attributes\n if (tag) {\n style(object, item, scene, tag, this._defs);\n }\n return object;\n },\n /**\n * Render SVG defs, as needed.\n * Must be called *after* marks have been processed to ensure the\n * collected state is current and accurate.\n * @param {object} m - The markup context.\n */\n defs(m) {\n const gradient = this._defs.gradient,\n clipping = this._defs.clipping,\n count = Object.keys(gradient).length + Object.keys(clipping).length;\n if (count === 0) return; // nothing to do\n\n m.open('defs');\n for (const id in gradient) {\n const def = gradient[id],\n stops = def.stops;\n if (def.gradient === 'radial') {\n // SVG radial gradients automatically transform to normalized bbox\n // coordinates, in a way that is cumbersome to replicate in canvas.\n // We wrap the radial gradient in a pattern element, allowing us to\n // maintain a circular gradient that matches what canvas provides.\n\n m.open('pattern', {\n id: patternPrefix + id,\n viewBox: '0,0,1,1',\n width: '100%',\n height: '100%',\n preserveAspectRatio: 'xMidYMid slice'\n });\n m.open('rect', {\n width: '1',\n height: '1',\n fill: 'url(#' + id + ')'\n }).close();\n m.close(); // \n\n m.open('radialGradient', {\n id: id,\n fx: def.x1,\n fy: def.y1,\n fr: def.r1,\n cx: def.x2,\n cy: def.y2,\n r: def.r2\n });\n } else {\n m.open('linearGradient', {\n id: id,\n x1: def.x1,\n x2: def.x2,\n y1: def.y1,\n y2: def.y2\n });\n }\n for (let i = 0; i < stops.length; ++i) {\n m.open('stop', {\n offset: stops[i].offset,\n 'stop-color': stops[i].color\n }).close();\n }\n m.close();\n }\n for (const id in clipping) {\n const def = clipping[id];\n m.open('clipPath', {\n id: id\n });\n if (def.path) {\n m.open('path', {\n d: def.path\n }).close();\n } else {\n m.open('rect', {\n x: 0,\n y: 0,\n width: def.width,\n height: def.height\n }).close();\n }\n m.close();\n }\n m.close();\n }\n});\n\n// Helper function for attr for style presentation attributes\nfunction style(s, item, scene, tag, defs) {\n let styleList;\n if (item == null) return s;\n if (tag === 'bgrect' && scene.interactive === false) {\n s['pointer-events'] = 'none';\n }\n if (tag === 'bgfore') {\n if (scene.interactive === false) {\n s['pointer-events'] = 'none';\n }\n s.display = 'none';\n if (item.fill !== null) return s;\n }\n if (tag === 'image' && item.smooth === false) {\n styleList = ['image-rendering: optimizeSpeed;', 'image-rendering: pixelated;'];\n }\n if (tag === 'text') {\n s['font-family'] = fontFamily(item);\n s['font-size'] = fontSize(item) + 'px';\n s['font-style'] = item.fontStyle;\n s['font-variant'] = item.fontVariant;\n s['font-weight'] = item.fontWeight;\n }\n for (const prop in stylesAttr) {\n let value = item[prop];\n const name = stylesAttr[prop];\n if (value === 'transparent' && (name === 'fill' || name === 'stroke')) ; else if (value != null) {\n if (isGradient(value)) {\n value = gradientRef(value, defs.gradient, '');\n }\n s[name] = value;\n }\n }\n for (const prop in stylesCss) {\n const value = item[prop];\n if (value != null) {\n styleList = styleList || [];\n styleList.push(`${stylesCss[prop]}: ${value};`);\n }\n }\n if (styleList) {\n s.style = styleList.join(' ');\n }\n return s;\n}\n\nconst Canvas = 'canvas';\nconst PNG = 'png';\nconst SVG = 'svg';\nconst None = 'none';\nconst RenderType = {\n Canvas: Canvas,\n PNG: PNG,\n SVG: SVG,\n None: None\n};\nconst modules = {};\nmodules[Canvas] = modules[PNG] = {\n renderer: CanvasRenderer,\n headless: CanvasRenderer,\n handler: CanvasHandler\n};\nmodules[SVG] = {\n renderer: SVGRenderer,\n headless: SVGStringRenderer,\n handler: SVGHandler\n};\nmodules[None] = {};\nfunction renderModule(name, _) {\n name = String(name || '').toLowerCase();\n if (arguments.length > 1) {\n modules[name] = _;\n return this;\n } else {\n return modules[name];\n }\n}\n\nfunction intersect(scene, bounds, filter) {\n const hits = [],\n // intersection results\n box = new Bounds().union(bounds),\n // defensive copy\n type = scene.marktype;\n return type ? intersectMark(scene, box, filter, hits) : type === 'group' ? intersectGroup(scene, box, filter, hits) : error('Intersect scene must be mark node or group item.');\n}\nfunction intersectMark(mark, box, filter, hits) {\n if (visitMark(mark, box, filter)) {\n const items = mark.items,\n type = mark.marktype,\n n = items.length;\n let i = 0;\n if (type === 'group') {\n for (; i < n; ++i) {\n intersectGroup(items[i], box, filter, hits);\n }\n } else {\n for (const test = Marks[type].isect; i < n; ++i) {\n const item = items[i];\n if (intersectItem(item, box, test)) hits.push(item);\n }\n }\n }\n return hits;\n}\nfunction visitMark(mark, box, filter) {\n // process if bounds intersect and if\n // (1) mark is a group mark (so we must recurse), or\n // (2) mark is interactive and passes filter\n return mark.bounds && box.intersects(mark.bounds) && (mark.marktype === 'group' || mark.interactive !== false && (!filter || filter(mark)));\n}\nfunction intersectGroup(group, box, filter, hits) {\n // test intersect against group\n // skip groups by default unless filter says otherwise\n if (filter && filter(group.mark) && intersectItem(group, box, Marks.group.isect)) {\n hits.push(group);\n }\n\n // recursively test children marks\n // translate box to group coordinate space\n const marks = group.items,\n n = marks && marks.length;\n if (n) {\n const x = group.x || 0,\n y = group.y || 0;\n box.translate(-x, -y);\n for (let i = 0; i < n; ++i) {\n intersectMark(marks[i], box, filter, hits);\n }\n box.translate(x, y);\n }\n return hits;\n}\nfunction intersectItem(item, box, test) {\n // test bounds enclosure, bounds intersection, then detailed test\n const bounds = item.bounds;\n return box.encloses(bounds) || box.intersects(bounds) && test(item, box);\n}\n\nconst clipBounds = new Bounds();\nfunction boundClip (mark) {\n const clip = mark.clip;\n if (isFunction(clip)) {\n clip(boundContext(clipBounds.clear()));\n } else if (clip) {\n clipBounds.set(0, 0, mark.group.width, mark.group.height);\n } else return;\n mark.bounds.intersect(clipBounds);\n}\n\nconst TOLERANCE = 1e-9;\nfunction sceneEqual(a, b, key) {\n return a === b ? true : key === 'path' ? pathEqual(a, b) : a instanceof Date && b instanceof Date ? +a === +b : isNumber(a) && isNumber(b) ? Math.abs(a - b) <= TOLERANCE : !a || !b || !isObject(a) && !isObject(b) ? a == b : objectEqual(a, b);\n}\nfunction pathEqual(a, b) {\n return sceneEqual(parse(a), parse(b));\n}\nfunction objectEqual(a, b) {\n var ka = Object.keys(a),\n kb = Object.keys(b),\n key,\n i;\n if (ka.length !== kb.length) return false;\n ka.sort();\n kb.sort();\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) return false;\n }\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!sceneEqual(a[key], b[key], key)) return false;\n }\n return typeof a === typeof b;\n}\n\nfunction resetSVGDefIds() {\n resetSVGClipId();\n resetSVGGradientId();\n}\n\nexport { Bounds, CanvasHandler, CanvasRenderer, Gradient, GroupItem, Handler, Item, Marks, RenderType, Renderer, ResourceLoader, SVGHandler, SVGRenderer, SVGStringRenderer, Scenegraph, boundClip, boundContext, boundItem, boundMark, boundStroke, domChild, domClear, domCreate, domFind, font, fontFamily, fontSize, intersect, intersectBoxLine, intersectPath, intersectPoint, intersectRule, lineHeight, markup, multiLineOffset, curves as pathCurves, pathEqual, parse as pathParse, vg_rect as pathRectangle, pathRender, symbols as pathSymbols, vg_trail as pathTrail, point, renderModule, resetSVGClipId, resetSVGDefIds, sceneEqual, sceneFromJSON, pickVisit as scenePickVisit, sceneToJSON, visit as sceneVisit, zorder as sceneZOrder, serializeXML, textMetrics };\n","import { Transform } from 'vega-dataflow';\nimport { Marks, boundClip, GroupItem, Item, Bounds, multiLineOffset, boundStroke } from 'vega-scenegraph';\nimport { inherits, peek, isObject } from 'vega-util';\n\nconst Top = 'top';\nconst Left = 'left';\nconst Right = 'right';\nconst Bottom = 'bottom';\nconst TopLeft = 'top-left';\nconst TopRight = 'top-right';\nconst BottomLeft = 'bottom-left';\nconst BottomRight = 'bottom-right';\nconst Start = 'start';\nconst Middle = 'middle';\nconst End = 'end';\nconst X = 'x';\nconst Y = 'y';\nconst Group = 'group';\nconst AxisRole = 'axis';\nconst TitleRole = 'title';\nconst FrameRole = 'frame';\nconst ScopeRole = 'scope';\nconst LegendRole = 'legend';\nconst RowHeader = 'row-header';\nconst RowFooter = 'row-footer';\nconst RowTitle = 'row-title';\nconst ColHeader = 'column-header';\nconst ColFooter = 'column-footer';\nconst ColTitle = 'column-title';\nconst Padding = 'padding';\nconst Symbols = 'symbol';\nconst Fit = 'fit';\nconst FitX = 'fit-x';\nconst FitY = 'fit-y';\nconst Pad = 'pad';\nconst None = 'none';\nconst All = 'all';\nconst Each = 'each';\nconst Flush = 'flush';\nconst Column = 'column';\nconst Row = 'row';\n\n/**\n * Calculate bounding boxes for scenegraph items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - The scenegraph mark instance to bound.\n */\nfunction Bound(params) {\n Transform.call(this, null, params);\n}\ninherits(Bound, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow,\n mark = _.mark,\n type = mark.marktype,\n entry = Marks[type],\n bound = entry.bound;\n let markBounds = mark.bounds,\n rebound;\n if (entry.nested) {\n // multi-item marks have a single bounds instance\n if (mark.items.length) view.dirty(mark.items[0]);\n markBounds = boundItem(mark, bound);\n mark.items.forEach(item => {\n item.bounds.clear().union(markBounds);\n });\n } else if (type === Group || _.modified()) {\n // operator parameters modified -> re-bound all items\n // updates group bounds in response to modified group content\n pulse.visit(pulse.MOD, item => view.dirty(item));\n markBounds.clear();\n mark.items.forEach(item => markBounds.union(boundItem(item, bound)));\n\n // force reflow for axes/legends/titles to propagate any layout changes\n switch (mark.role) {\n case AxisRole:\n case LegendRole:\n case TitleRole:\n pulse.reflow();\n }\n } else {\n // incrementally update bounds, re-bound mark as needed\n rebound = pulse.changed(pulse.REM);\n pulse.visit(pulse.ADD, item => {\n markBounds.union(boundItem(item, bound));\n });\n pulse.visit(pulse.MOD, item => {\n rebound = rebound || markBounds.alignsWith(item.bounds);\n view.dirty(item);\n markBounds.union(boundItem(item, bound));\n });\n if (rebound) {\n markBounds.clear();\n mark.items.forEach(item => markBounds.union(item.bounds));\n }\n }\n\n // ensure mark bounds do not exceed any clipping region\n boundClip(mark);\n return pulse.modifies('bounds');\n }\n});\nfunction boundItem(item, bound, opt) {\n return bound(item.bounds.clear(), item, opt);\n}\n\nconst COUNTER_NAME = ':vega_identifier:';\n\n/**\n * Adds a unique identifier to all added tuples.\n * This transform creates a new signal that serves as an id counter.\n * As a result, the id counter is shared across all instances of this\n * transform, generating unique ids across multiple data streams. In\n * addition, this signal value can be included in a snapshot of the\n * dataflow state, enabling correct resumption of id allocation.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.as - The field name for the generated identifier.\n */\nfunction Identifier(params) {\n Transform.call(this, 0, params);\n}\nIdentifier.Definition = {\n 'type': 'Identifier',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'as',\n 'type': 'string',\n 'required': true\n }]\n};\ninherits(Identifier, Transform, {\n transform(_, pulse) {\n const counter = getCounter(pulse.dataflow),\n as = _.as;\n let id = counter.value;\n pulse.visit(pulse.ADD, t => t[as] = t[as] || ++id);\n counter.set(this.value = id);\n return pulse;\n }\n});\nfunction getCounter(view) {\n return view._signals[COUNTER_NAME] || (view._signals[COUNTER_NAME] = view.add(0));\n}\n\n/**\n * Bind scenegraph items to a scenegraph mark instance.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.markdef - The mark definition for creating the mark.\n * This is an object of legal scenegraph mark properties which *must* include\n * the 'marktype' property.\n */\nfunction Mark(params) {\n Transform.call(this, null, params);\n}\ninherits(Mark, Transform, {\n transform(_, pulse) {\n let mark = this.value;\n\n // acquire mark on first invocation, bind context and group\n if (!mark) {\n mark = pulse.dataflow.scenegraph().mark(_.markdef, lookup$1(_), _.index);\n mark.group.context = _.context;\n if (!_.context.group) _.context.group = mark.group;\n mark.source = this.source; // point to upstream collector\n mark.clip = _.clip;\n mark.interactive = _.interactive;\n this.value = mark;\n }\n\n // initialize entering items\n const Init = mark.marktype === Group ? GroupItem : Item;\n pulse.visit(pulse.ADD, item => Init.call(item, mark));\n\n // update clipping and/or interactive status\n if (_.modified('clip') || _.modified('interactive')) {\n mark.clip = _.clip;\n mark.interactive = !!_.interactive;\n mark.zdirty = true; // force scenegraph re-eval\n pulse.reflow();\n }\n\n // bind items array to scenegraph mark\n mark.items = pulse.source;\n return pulse;\n }\n});\nfunction lookup$1(_) {\n const g = _.groups,\n p = _.parent;\n return g && g.size === 1 ? g.get(Object.keys(g.object)[0]) : g && p ? g.lookup(p) : null;\n}\n\n/**\n * Analyze items for overlap, changing opacity to hide items with\n * overlapping bounding boxes. This transform will preserve at least\n * two items (e.g., first and last) even if overlap persists.\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting items.\n * @param {object} [params.method] - The overlap removal method to apply.\n * One of 'parity' (default, hide every other item until there is no\n * more overlap) or 'greedy' (sequentially scan and hide and items that\n * overlap with the last visible item).\n * @param {object} [params.boundScale] - A scale whose range should be used\n * to bound the items. Items exceeding the bounds of the scale range\n * will be treated as overlapping. If null or undefined, no bounds check\n * will be applied.\n * @param {object} [params.boundOrient] - The orientation of the scale\n * (top, bottom, left, or right) used to bound items. This parameter is\n * ignored if boundScale is null or undefined.\n * @param {object} [params.boundTolerance] - The tolerance in pixels for\n * bound inclusion testing (default 1). This specifies by how many pixels\n * an item's bounds may exceed the scale range bounds and not be culled.\n * @constructor\n */\nfunction Overlap(params) {\n Transform.call(this, null, params);\n}\nconst methods = {\n parity: items => items.filter((item, i) => i % 2 ? item.opacity = 0 : 1),\n greedy: (items, sep) => {\n let a;\n return items.filter((b, i) => !i || !intersect(a.bounds, b.bounds, sep) ? (a = b, 1) : b.opacity = 0);\n }\n};\n\n// compute bounding box intersection\n// including padding pixels of separation\nconst intersect = (a, b, sep) => sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\nconst hasOverlap = (items, pad) => {\n for (var i = 1, n = items.length, a = items[0].bounds, b; i < n; a = b, ++i) {\n if (intersect(a, b = items[i].bounds, pad)) return true;\n }\n};\nconst hasBounds = item => {\n const b = item.bounds;\n return b.width() > 1 && b.height() > 1;\n};\nconst boundTest = (scale, orient, tolerance) => {\n var range = scale.range(),\n b = new Bounds();\n if (orient === Top || orient === Bottom) {\n b.set(range[0], -Infinity, range[1], +Infinity);\n } else {\n b.set(-Infinity, range[0], +Infinity, range[1]);\n }\n b.expand(tolerance || 1);\n return item => b.encloses(item.bounds);\n};\n\n// reset all items to be fully opaque\nconst reset = source => {\n source.forEach(item => item.opacity = 1);\n return source;\n};\n\n// add all tuples to mod, fork pulse if parameters were modified\n// fork prevents cross-stream tuple pollution (e.g., pulse from scale)\nconst reflow = (pulse, _) => pulse.reflow(_.modified()).modifies('opacity');\ninherits(Overlap, Transform, {\n transform(_, pulse) {\n const reduce = methods[_.method] || methods.parity,\n sep = _.separation || 0;\n let source = pulse.materialize(pulse.SOURCE).source,\n items,\n test;\n if (!source || !source.length) return;\n if (!_.method) {\n // early exit if method is falsy\n if (_.modified('method')) {\n reset(source);\n pulse = reflow(pulse, _);\n }\n return pulse;\n }\n\n // skip labels with no content\n source = source.filter(hasBounds);\n\n // early exit, nothing to do\n if (!source.length) return;\n if (_.sort) {\n source = source.slice().sort(_.sort);\n }\n items = reset(source);\n pulse = reflow(pulse, _);\n if (items.length >= 3 && hasOverlap(items, sep)) {\n do {\n items = reduce(items, sep);\n } while (items.length >= 3 && hasOverlap(items, sep));\n if (items.length < 3 && !peek(source).opacity) {\n if (items.length > 1) peek(items).opacity = 0;\n peek(source).opacity = 1;\n }\n }\n if (_.boundScale && _.boundTolerance >= 0) {\n test = boundTest(_.boundScale, _.boundOrient, +_.boundTolerance);\n source.forEach(item => {\n if (!test(item)) item.opacity = 0;\n });\n }\n\n // re-calculate mark bounds\n const bounds = items[0].mark.bounds.clear();\n source.forEach(item => {\n if (item.opacity) bounds.union(item.bounds);\n });\n return pulse;\n }\n});\n\n/**\n * Queue modified scenegraph items for rendering.\n * @constructor\n */\nfunction Render(params) {\n Transform.call(this, null, params);\n}\ninherits(Render, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow;\n pulse.visit(pulse.ALL, item => view.dirty(item));\n\n // set z-index dirty flag as needed\n if (pulse.fields && pulse.fields['zindex']) {\n const item = pulse.source && pulse.source[0];\n if (item) item.mark.zdirty = true;\n }\n }\n});\n\nconst tempBounds = new Bounds();\nfunction set(item, property, value) {\n return item[property] === value ? 0 : (item[property] = value, 1);\n}\n\nfunction isYAxis(mark) {\n var orient = mark.items[0].orient;\n return orient === Left || orient === Right;\n}\nfunction axisIndices(datum) {\n let index = +datum.grid;\n return [datum.ticks ? index++ : -1,\n // ticks index\n datum.labels ? index++ : -1,\n // labels index\n index + +datum.domain // title index\n ];\n}\n\nfunction axisLayout(view, axis, width, height) {\n var item = axis.items[0],\n datum = item.datum,\n delta = item.translate != null ? item.translate : 0.5,\n orient = item.orient,\n indices = axisIndices(datum),\n range = item.range,\n offset = item.offset,\n position = item.position,\n minExtent = item.minExtent,\n maxExtent = item.maxExtent,\n title = datum.title && item.items[indices[2]].items[0],\n titlePadding = item.titlePadding,\n bounds = item.bounds,\n dl = title && multiLineOffset(title),\n x = 0,\n y = 0,\n i,\n s;\n tempBounds.clear().union(bounds);\n bounds.clear();\n if ((i = indices[0]) > -1) bounds.union(item.items[i].bounds);\n if ((i = indices[1]) > -1) bounds.union(item.items[i].bounds);\n\n // position axis group and title\n switch (orient) {\n case Top:\n x = position || 0;\n y = -offset;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.y1));\n bounds.add(0, -s).add(range, 0);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 0, -1, bounds);\n break;\n case Left:\n x = -offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.x1));\n bounds.add(-s, 0).add(0, range);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 1, -1, bounds);\n break;\n case Right:\n x = width + offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.x2));\n bounds.add(0, 0).add(s, range);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 1, 1, bounds);\n break;\n case Bottom:\n x = position || 0;\n y = height + offset;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.y2));\n bounds.add(0, 0).add(range, s);\n if (title) axisTitleLayout(view, title, s, titlePadding, 0, 0, 1, bounds);\n break;\n default:\n x = item.x;\n y = item.y;\n }\n\n // update bounds\n boundStroke(bounds.translate(x, y), item);\n if (set(item, 'x', x + delta) | set(item, 'y', y + delta)) {\n item.bounds = tempBounds;\n view.dirty(item);\n item.bounds = bounds;\n view.dirty(item);\n }\n return item.mark.bounds.clear().union(bounds);\n}\nfunction axisTitleLayout(view, title, offset, pad, dl, isYAxis, sign, bounds) {\n const b = title.bounds;\n if (title.auto) {\n const v = sign * (offset + dl + pad);\n let dx = 0,\n dy = 0;\n view.dirty(title);\n isYAxis ? dx = (title.x || 0) - (title.x = v) : dy = (title.y || 0) - (title.y = v);\n title.mark.bounds.clear().union(b.translate(-dx, -dy));\n view.dirty(title);\n }\n bounds.union(b);\n}\n\n// aggregation functions for grid margin determination\nconst min = (a, b) => Math.floor(Math.min(a, b));\nconst max = (a, b) => Math.ceil(Math.max(a, b));\nfunction gridLayoutGroups(group) {\n var groups = group.items,\n n = groups.length,\n i = 0,\n mark,\n items;\n const views = {\n marks: [],\n rowheaders: [],\n rowfooters: [],\n colheaders: [],\n colfooters: [],\n rowtitle: null,\n coltitle: null\n };\n\n // layout axes, gather legends, collect bounds\n for (; i < n; ++i) {\n mark = groups[i];\n items = mark.items;\n if (mark.marktype === Group) {\n switch (mark.role) {\n case AxisRole:\n case LegendRole:\n case TitleRole:\n break;\n case RowHeader:\n views.rowheaders.push(...items);\n break;\n case RowFooter:\n views.rowfooters.push(...items);\n break;\n case ColHeader:\n views.colheaders.push(...items);\n break;\n case ColFooter:\n views.colfooters.push(...items);\n break;\n case RowTitle:\n views.rowtitle = items[0];\n break;\n case ColTitle:\n views.coltitle = items[0];\n break;\n default:\n views.marks.push(...items);\n }\n }\n }\n return views;\n}\nfunction bboxFlush(item) {\n return new Bounds().set(0, 0, item.width || 0, item.height || 0);\n}\nfunction bboxFull(item) {\n const b = item.bounds.clone();\n return b.empty() ? b.set(0, 0, 0, 0) : b.translate(-(item.x || 0), -(item.y || 0));\n}\nfunction get(opt, key, d) {\n const v = isObject(opt) ? opt[key] : opt;\n return v != null ? v : d !== undefined ? d : 0;\n}\nfunction offsetValue(v) {\n return v < 0 ? Math.ceil(-v) : 0;\n}\nfunction gridLayout(view, groups, opt) {\n var dirty = !opt.nodirty,\n bbox = opt.bounds === Flush ? bboxFlush : bboxFull,\n bounds = tempBounds.set(0, 0, 0, 0),\n alignCol = get(opt.align, Column),\n alignRow = get(opt.align, Row),\n padCol = get(opt.padding, Column),\n padRow = get(opt.padding, Row),\n ncols = opt.columns || groups.length,\n nrows = ncols <= 0 ? 1 : Math.ceil(groups.length / ncols),\n n = groups.length,\n xOffset = Array(n),\n xExtent = Array(ncols),\n xMax = 0,\n yOffset = Array(n),\n yExtent = Array(nrows),\n yMax = 0,\n dx = Array(n),\n dy = Array(n),\n boxes = Array(n),\n m,\n i,\n c,\n r,\n b,\n g,\n px,\n py,\n x,\n y,\n offset;\n for (i = 0; i < ncols; ++i) xExtent[i] = 0;\n for (i = 0; i < nrows; ++i) yExtent[i] = 0;\n\n // determine offsets for each group\n for (i = 0; i < n; ++i) {\n g = groups[i];\n b = boxes[i] = bbox(g);\n g.x = g.x || 0;\n dx[i] = 0;\n g.y = g.y || 0;\n dy[i] = 0;\n c = i % ncols;\n r = ~~(i / ncols);\n xMax = Math.max(xMax, px = Math.ceil(b.x2));\n yMax = Math.max(yMax, py = Math.ceil(b.y2));\n xExtent[c] = Math.max(xExtent[c], px);\n yExtent[r] = Math.max(yExtent[r], py);\n xOffset[i] = padCol + offsetValue(b.x1);\n yOffset[i] = padRow + offsetValue(b.y1);\n if (dirty) view.dirty(groups[i]);\n }\n\n // set initial alignment offsets\n for (i = 0; i < n; ++i) {\n if (i % ncols === 0) xOffset[i] = 0;\n if (i < ncols) yOffset[i] = 0;\n }\n\n // enforce column alignment constraints\n if (alignCol === Each) {\n for (c = 1; c < ncols; ++c) {\n for (offset = 0, i = c; i < n; i += ncols) {\n if (offset < xOffset[i]) offset = xOffset[i];\n }\n for (i = c; i < n; i += ncols) {\n xOffset[i] = offset + xExtent[c - 1];\n }\n }\n } else if (alignCol === All) {\n for (offset = 0, i = 0; i < n; ++i) {\n if (i % ncols && offset < xOffset[i]) offset = xOffset[i];\n }\n for (i = 0; i < n; ++i) {\n if (i % ncols) xOffset[i] = offset + xMax;\n }\n } else {\n for (alignCol = false, c = 1; c < ncols; ++c) {\n for (i = c; i < n; i += ncols) {\n xOffset[i] += xExtent[c - 1];\n }\n }\n }\n\n // enforce row alignment constraints\n if (alignRow === Each) {\n for (r = 1; r < nrows; ++r) {\n for (offset = 0, i = r * ncols, m = i + ncols; i < m; ++i) {\n if (offset < yOffset[i]) offset = yOffset[i];\n }\n for (i = r * ncols; i < m; ++i) {\n yOffset[i] = offset + yExtent[r - 1];\n }\n }\n } else if (alignRow === All) {\n for (offset = 0, i = ncols; i < n; ++i) {\n if (offset < yOffset[i]) offset = yOffset[i];\n }\n for (i = ncols; i < n; ++i) {\n yOffset[i] = offset + yMax;\n }\n } else {\n for (alignRow = false, r = 1; r < nrows; ++r) {\n for (i = r * ncols, m = i + ncols; i < m; ++i) {\n yOffset[i] += yExtent[r - 1];\n }\n }\n }\n\n // perform horizontal grid layout\n for (x = 0, i = 0; i < n; ++i) {\n x = xOffset[i] + (i % ncols ? x : 0);\n dx[i] += x - groups[i].x;\n }\n\n // perform vertical grid layout\n for (c = 0; c < ncols; ++c) {\n for (y = 0, i = c; i < n; i += ncols) {\n y += yOffset[i];\n dy[i] += y - groups[i].y;\n }\n }\n\n // perform horizontal centering\n if (alignCol && get(opt.center, Column) && nrows > 1) {\n for (i = 0; i < n; ++i) {\n b = alignCol === All ? xMax : xExtent[i % ncols];\n x = b - boxes[i].x2 - groups[i].x - dx[i];\n if (x > 0) dx[i] += x / 2;\n }\n }\n\n // perform vertical centering\n if (alignRow && get(opt.center, Row) && ncols !== 1) {\n for (i = 0; i < n; ++i) {\n b = alignRow === All ? yMax : yExtent[~~(i / ncols)];\n y = b - boxes[i].y2 - groups[i].y - dy[i];\n if (y > 0) dy[i] += y / 2;\n }\n }\n\n // position grid relative to anchor\n for (i = 0; i < n; ++i) {\n bounds.union(boxes[i].translate(dx[i], dy[i]));\n }\n x = get(opt.anchor, X);\n y = get(opt.anchor, Y);\n switch (get(opt.anchor, Column)) {\n case End:\n x -= bounds.width();\n break;\n case Middle:\n x -= bounds.width() / 2;\n }\n switch (get(opt.anchor, Row)) {\n case End:\n y -= bounds.height();\n break;\n case Middle:\n y -= bounds.height() / 2;\n }\n x = Math.round(x);\n y = Math.round(y);\n\n // update mark positions, bounds, dirty\n bounds.clear();\n for (i = 0; i < n; ++i) {\n groups[i].mark.bounds.clear();\n }\n for (i = 0; i < n; ++i) {\n g = groups[i];\n g.x += dx[i] += x;\n g.y += dy[i] += y;\n bounds.union(g.mark.bounds.union(g.bounds.translate(dx[i], dy[i])));\n if (dirty) view.dirty(g);\n }\n return bounds;\n}\nfunction trellisLayout(view, group, opt) {\n var views = gridLayoutGroups(group),\n groups = views.marks,\n bbox = opt.bounds === Flush ? boundFlush : boundFull,\n off = opt.offset,\n ncols = opt.columns || groups.length,\n nrows = ncols <= 0 ? 1 : Math.ceil(groups.length / ncols),\n cells = nrows * ncols,\n x,\n y,\n x2,\n y2,\n anchor,\n band,\n offset;\n\n // -- initial grid layout\n const bounds = gridLayout(view, groups, opt);\n if (bounds.empty()) bounds.set(0, 0, 0, 0); // empty grid\n\n // -- layout grid headers and footers --\n\n // perform row header layout\n if (views.rowheaders) {\n band = get(opt.headerBand, Row, null);\n x = layoutHeaders(view, views.rowheaders, groups, ncols, nrows, -get(off, 'rowHeader'), min, 0, bbox, 'x1', 0, ncols, 1, band);\n }\n\n // perform column header layout\n if (views.colheaders) {\n band = get(opt.headerBand, Column, null);\n y = layoutHeaders(view, views.colheaders, groups, ncols, ncols, -get(off, 'columnHeader'), min, 1, bbox, 'y1', 0, 1, ncols, band);\n }\n\n // perform row footer layout\n if (views.rowfooters) {\n band = get(opt.footerBand, Row, null);\n x2 = layoutHeaders(view, views.rowfooters, groups, ncols, nrows, get(off, 'rowFooter'), max, 0, bbox, 'x2', ncols - 1, ncols, 1, band);\n }\n\n // perform column footer layout\n if (views.colfooters) {\n band = get(opt.footerBand, Column, null);\n y2 = layoutHeaders(view, views.colfooters, groups, ncols, ncols, get(off, 'columnFooter'), max, 1, bbox, 'y2', cells - ncols, 1, ncols, band);\n }\n\n // perform row title layout\n if (views.rowtitle) {\n anchor = get(opt.titleAnchor, Row);\n offset = get(off, 'rowTitle');\n offset = anchor === End ? x2 + offset : x - offset;\n band = get(opt.titleBand, Row, 0.5);\n layoutTitle(view, views.rowtitle, offset, 0, bounds, band);\n }\n\n // perform column title layout\n if (views.coltitle) {\n anchor = get(opt.titleAnchor, Column);\n offset = get(off, 'columnTitle');\n offset = anchor === End ? y2 + offset : y - offset;\n band = get(opt.titleBand, Column, 0.5);\n layoutTitle(view, views.coltitle, offset, 1, bounds, band);\n }\n}\nfunction boundFlush(item, field) {\n return field === 'x1' ? item.x || 0 : field === 'y1' ? item.y || 0 : field === 'x2' ? (item.x || 0) + (item.width || 0) : field === 'y2' ? (item.y || 0) + (item.height || 0) : undefined;\n}\nfunction boundFull(item, field) {\n return item.bounds[field];\n}\nfunction layoutHeaders(view, headers, groups, ncols, limit, offset, agg, isX, bound, bf, start, stride, back, band) {\n var n = groups.length,\n init = 0,\n edge = 0,\n i,\n j,\n k,\n m,\n b,\n h,\n g,\n x,\n y;\n\n // if no groups, early exit and return 0\n if (!n) return init;\n\n // compute margin\n for (i = start; i < n; i += stride) {\n if (groups[i]) init = agg(init, bound(groups[i], bf));\n }\n\n // if no headers, return margin calculation\n if (!headers.length) return init;\n\n // check if number of headers exceeds number of rows or columns\n if (headers.length > limit) {\n view.warn('Grid headers exceed limit: ' + limit);\n headers = headers.slice(0, limit);\n }\n\n // apply offset\n init += offset;\n\n // clear mark bounds for all headers\n for (j = 0, m = headers.length; j < m; ++j) {\n view.dirty(headers[j]);\n headers[j].mark.bounds.clear();\n }\n\n // layout each header\n for (i = start, j = 0, m = headers.length; j < m; ++j, i += stride) {\n h = headers[j];\n b = h.mark.bounds;\n\n // search for nearest group to align to\n // necessary if table has empty cells\n for (k = i; k >= 0 && (g = groups[k]) == null; k -= back);\n\n // assign coordinates and update bounds\n if (isX) {\n x = band == null ? g.x : Math.round(g.bounds.x1 + band * g.bounds.width());\n y = init;\n } else {\n x = init;\n y = band == null ? g.y : Math.round(g.bounds.y1 + band * g.bounds.height());\n }\n b.union(h.bounds.translate(x - (h.x || 0), y - (h.y || 0)));\n h.x = x;\n h.y = y;\n view.dirty(h);\n\n // update current edge of layout bounds\n edge = agg(edge, b[bf]);\n }\n return edge;\n}\nfunction layoutTitle(view, g, offset, isX, bounds, band) {\n if (!g) return;\n view.dirty(g);\n\n // compute title coordinates\n var x = offset,\n y = offset;\n isX ? x = Math.round(bounds.x1 + band * bounds.width()) : y = Math.round(bounds.y1 + band * bounds.height());\n\n // assign coordinates and update bounds\n g.bounds.translate(x - (g.x || 0), y - (g.y || 0));\n g.mark.bounds.clear().union(g.bounds);\n g.x = x;\n g.y = y;\n\n // queue title for redraw\n view.dirty(g);\n}\n\n// utility for looking up legend layout configuration\nfunction lookup(config, orient) {\n const opt = config[orient] || {};\n return (key, d) => opt[key] != null ? opt[key] : config[key] != null ? config[key] : d;\n}\n\n// if legends specify offset directly, use the maximum specified value\nfunction offsets(legends, value) {\n let max = -Infinity;\n legends.forEach(item => {\n if (item.offset != null) max = Math.max(max, item.offset);\n });\n return max > -Infinity ? max : value;\n}\nfunction legendParams(g, orient, config, xb, yb, w, h) {\n const _ = lookup(config, orient),\n offset = offsets(g, _('offset', 0)),\n anchor = _('anchor', Start),\n mult = anchor === End ? 1 : anchor === Middle ? 0.5 : 0;\n const p = {\n align: Each,\n bounds: _('bounds', Flush),\n columns: _('direction') === 'vertical' ? 1 : g.length,\n padding: _('margin', 8),\n center: _('center'),\n nodirty: true\n };\n switch (orient) {\n case Left:\n p.anchor = {\n x: Math.floor(xb.x1) - offset,\n column: End,\n y: mult * (h || xb.height() + 2 * xb.y1),\n row: anchor\n };\n break;\n case Right:\n p.anchor = {\n x: Math.ceil(xb.x2) + offset,\n y: mult * (h || xb.height() + 2 * xb.y1),\n row: anchor\n };\n break;\n case Top:\n p.anchor = {\n y: Math.floor(yb.y1) - offset,\n row: End,\n x: mult * (w || yb.width() + 2 * yb.x1),\n column: anchor\n };\n break;\n case Bottom:\n p.anchor = {\n y: Math.ceil(yb.y2) + offset,\n x: mult * (w || yb.width() + 2 * yb.x1),\n column: anchor\n };\n break;\n case TopLeft:\n p.anchor = {\n x: offset,\n y: offset\n };\n break;\n case TopRight:\n p.anchor = {\n x: w - offset,\n y: offset,\n column: End\n };\n break;\n case BottomLeft:\n p.anchor = {\n x: offset,\n y: h - offset,\n row: End\n };\n break;\n case BottomRight:\n p.anchor = {\n x: w - offset,\n y: h - offset,\n column: End,\n row: End\n };\n break;\n }\n return p;\n}\nfunction legendLayout(view, legend) {\n var item = legend.items[0],\n datum = item.datum,\n orient = item.orient,\n bounds = item.bounds,\n x = item.x,\n y = item.y,\n w,\n h;\n\n // cache current bounds for later comparison\n item._bounds ? item._bounds.clear().union(bounds) : item._bounds = bounds.clone();\n bounds.clear();\n\n // adjust legend to accommodate padding and title\n legendGroupLayout(view, item, item.items[0].items[0]);\n\n // aggregate bounds to determine size, and include origin\n bounds = legendBounds(item, bounds);\n w = 2 * item.padding;\n h = 2 * item.padding;\n if (!bounds.empty()) {\n w = Math.ceil(bounds.width() + w);\n h = Math.ceil(bounds.height() + h);\n }\n if (datum.type === Symbols) {\n legendEntryLayout(item.items[0].items[0].items[0].items);\n }\n if (orient !== None) {\n item.x = x = 0;\n item.y = y = 0;\n }\n item.width = w;\n item.height = h;\n boundStroke(bounds.set(x, y, x + w, y + h), item);\n item.mark.bounds.clear().union(bounds);\n return item;\n}\nfunction legendBounds(item, b) {\n // aggregate item bounds\n item.items.forEach(_ => b.union(_.bounds));\n\n // anchor to legend origin\n b.x1 = item.padding;\n b.y1 = item.padding;\n return b;\n}\nfunction legendGroupLayout(view, item, entry) {\n var pad = item.padding,\n ex = pad - entry.x,\n ey = pad - entry.y;\n if (!item.datum.title) {\n if (ex || ey) translate(view, entry, ex, ey);\n } else {\n var title = item.items[1].items[0],\n anchor = title.anchor,\n tpad = item.titlePadding || 0,\n tx = pad - title.x,\n ty = pad - title.y;\n switch (title.orient) {\n case Left:\n ex += Math.ceil(title.bounds.width()) + tpad;\n break;\n case Right:\n case Bottom:\n break;\n default:\n ey += title.bounds.height() + tpad;\n }\n if (ex || ey) translate(view, entry, ex, ey);\n switch (title.orient) {\n case Left:\n ty += legendTitleOffset(item, entry, title, anchor, 1, 1);\n break;\n case Right:\n tx += legendTitleOffset(item, entry, title, End, 0, 0) + tpad;\n ty += legendTitleOffset(item, entry, title, anchor, 1, 1);\n break;\n case Bottom:\n tx += legendTitleOffset(item, entry, title, anchor, 0, 0);\n ty += legendTitleOffset(item, entry, title, End, -1, 0, 1) + tpad;\n break;\n default:\n tx += legendTitleOffset(item, entry, title, anchor, 0, 0);\n }\n if (tx || ty) translate(view, title, tx, ty);\n\n // translate legend if title pushes into negative coordinates\n if ((tx = Math.round(title.bounds.x1 - pad)) < 0) {\n translate(view, entry, -tx, 0);\n translate(view, title, -tx, 0);\n }\n }\n}\nfunction legendTitleOffset(item, entry, title, anchor, y, lr, noBar) {\n const grad = item.datum.type !== 'symbol',\n vgrad = title.datum.vgrad,\n e = grad && (lr || !vgrad) && !noBar ? entry.items[0] : entry,\n s = e.bounds[y ? 'y2' : 'x2'] - item.padding,\n u = vgrad && lr ? s : 0,\n v = vgrad && lr ? 0 : s,\n o = y <= 0 ? 0 : multiLineOffset(title);\n return Math.round(anchor === Start ? u : anchor === End ? v - o : 0.5 * (s - o));\n}\nfunction translate(view, item, dx, dy) {\n item.x += dx;\n item.y += dy;\n item.bounds.translate(dx, dy);\n item.mark.bounds.translate(dx, dy);\n view.dirty(item);\n}\nfunction legendEntryLayout(entries) {\n // get max widths for each column\n const widths = entries.reduce((w, g) => {\n w[g.column] = Math.max(g.bounds.x2 - g.x, w[g.column] || 0);\n return w;\n }, {});\n\n // set dimensions of legend entry groups\n entries.forEach(g => {\n g.width = widths[g.column];\n g.height = g.bounds.y2 - g.y;\n });\n}\n\nfunction titleLayout(view, mark, width, height, viewBounds) {\n var group = mark.items[0],\n frame = group.frame,\n orient = group.orient,\n anchor = group.anchor,\n offset = group.offset,\n padding = group.padding,\n title = group.items[0].items[0],\n subtitle = group.items[1] && group.items[1].items[0],\n end = orient === Left || orient === Right ? height : width,\n start = 0,\n x = 0,\n y = 0,\n sx = 0,\n sy = 0,\n pos;\n if (frame !== Group) {\n orient === Left ? (start = viewBounds.y2, end = viewBounds.y1) : orient === Right ? (start = viewBounds.y1, end = viewBounds.y2) : (start = viewBounds.x1, end = viewBounds.x2);\n } else if (orient === Left) {\n start = height, end = 0;\n }\n pos = anchor === Start ? start : anchor === End ? end : (start + end) / 2;\n if (subtitle && subtitle.text) {\n // position subtitle\n switch (orient) {\n case Top:\n case Bottom:\n sy = title.bounds.height() + padding;\n break;\n case Left:\n sx = title.bounds.width() + padding;\n break;\n case Right:\n sx = -title.bounds.width() - padding;\n break;\n }\n tempBounds.clear().union(subtitle.bounds);\n tempBounds.translate(sx - (subtitle.x || 0), sy - (subtitle.y || 0));\n if (set(subtitle, 'x', sx) | set(subtitle, 'y', sy)) {\n view.dirty(subtitle);\n subtitle.bounds.clear().union(tempBounds);\n subtitle.mark.bounds.clear().union(tempBounds);\n view.dirty(subtitle);\n }\n tempBounds.clear().union(subtitle.bounds);\n } else {\n tempBounds.clear();\n }\n tempBounds.union(title.bounds);\n\n // position title group\n switch (orient) {\n case Top:\n x = pos;\n y = viewBounds.y1 - tempBounds.height() - offset;\n break;\n case Left:\n x = viewBounds.x1 - tempBounds.width() - offset;\n y = pos;\n break;\n case Right:\n x = viewBounds.x2 + tempBounds.width() + offset;\n y = pos;\n break;\n case Bottom:\n x = pos;\n y = viewBounds.y2 + offset;\n break;\n default:\n x = group.x;\n y = group.y;\n }\n if (set(group, 'x', x) | set(group, 'y', y)) {\n tempBounds.translate(x, y);\n view.dirty(group);\n group.bounds.clear().union(tempBounds);\n mark.bounds.clear().union(tempBounds);\n view.dirty(group);\n }\n return group.bounds;\n}\n\n/**\n * Layout view elements such as axes and legends.\n * Also performs size adjustments.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - Scenegraph mark of groups to layout.\n */\nfunction ViewLayout(params) {\n Transform.call(this, null, params);\n}\ninherits(ViewLayout, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow;\n _.mark.items.forEach(group => {\n if (_.layout) trellisLayout(view, group, _.layout);\n layoutGroup(view, group, _);\n });\n return shouldReflow(_.mark.group) ? pulse.reflow() : pulse;\n }\n});\nfunction shouldReflow(group) {\n // We typically should reflow if layout is invoked (#2568), as child items\n // may have resized and reflow ensures group bounds are re-calculated.\n // However, legend entries have a special exception to avoid instability.\n // For example, if a selected legend symbol gains a stroke on hover,\n // we don't want to re-position subsequent elements in the legend.\n return group && group.mark.role !== 'legend-entry';\n}\nfunction layoutGroup(view, group, _) {\n var items = group.items,\n width = Math.max(0, group.width || 0),\n height = Math.max(0, group.height || 0),\n viewBounds = new Bounds().set(0, 0, width, height),\n xBounds = viewBounds.clone(),\n yBounds = viewBounds.clone(),\n legends = [],\n title,\n mark,\n orient,\n b,\n i,\n n;\n\n // layout axes, gather legends, collect bounds\n for (i = 0, n = items.length; i < n; ++i) {\n mark = items[i];\n switch (mark.role) {\n case AxisRole:\n b = isYAxis(mark) ? xBounds : yBounds;\n b.union(axisLayout(view, mark, width, height));\n break;\n case TitleRole:\n title = mark;\n break;\n case LegendRole:\n legends.push(legendLayout(view, mark));\n break;\n case FrameRole:\n case ScopeRole:\n case RowHeader:\n case RowFooter:\n case RowTitle:\n case ColHeader:\n case ColFooter:\n case ColTitle:\n xBounds.union(mark.bounds);\n yBounds.union(mark.bounds);\n break;\n default:\n viewBounds.union(mark.bounds);\n }\n }\n\n // layout legends, adjust viewBounds\n if (legends.length) {\n // group legends by orient\n const l = {};\n legends.forEach(item => {\n orient = item.orient || Right;\n if (orient !== None) (l[orient] || (l[orient] = [])).push(item);\n });\n\n // perform grid layout for each orient group\n for (const orient in l) {\n const g = l[orient];\n gridLayout(view, g, legendParams(g, orient, _.legends, xBounds, yBounds, width, height));\n }\n\n // update view bounds\n legends.forEach(item => {\n const b = item.bounds;\n if (!b.equals(item._bounds)) {\n item.bounds = item._bounds;\n view.dirty(item); // dirty previous location\n item.bounds = b;\n view.dirty(item);\n }\n if (_.autosize && (_.autosize.type === Fit || _.autosize.type === FitX || _.autosize.type === FitY)) {\n // For autosize fit, incorporate the orthogonal dimension only.\n // Legends that overrun the chart area will then be clipped;\n // otherwise the chart area gets reduced to nothing!\n switch (item.orient) {\n case Left:\n case Right:\n viewBounds.add(b.x1, 0).add(b.x2, 0);\n break;\n case Top:\n case Bottom:\n viewBounds.add(0, b.y1).add(0, b.y2);\n }\n } else {\n viewBounds.union(b);\n }\n });\n }\n\n // combine bounding boxes\n viewBounds.union(xBounds).union(yBounds);\n\n // layout title, adjust bounds\n if (title) {\n viewBounds.union(titleLayout(view, title, width, height, viewBounds));\n }\n\n // override aggregated view bounds if content is clipped\n if (group.clip) {\n viewBounds.set(0, 0, group.width || 0, group.height || 0);\n }\n\n // perform size adjustment\n viewSizeLayout(view, group, viewBounds, _);\n}\nfunction viewSizeLayout(view, group, viewBounds, _) {\n const auto = _.autosize || {},\n type = auto.type;\n if (view._autosize < 1 || !type) return;\n let viewWidth = view._width,\n viewHeight = view._height,\n width = Math.max(0, group.width || 0),\n left = Math.max(0, Math.ceil(-viewBounds.x1)),\n height = Math.max(0, group.height || 0),\n top = Math.max(0, Math.ceil(-viewBounds.y1));\n const right = Math.max(0, Math.ceil(viewBounds.x2 - width)),\n bottom = Math.max(0, Math.ceil(viewBounds.y2 - height));\n if (auto.contains === Padding) {\n const padding = view.padding();\n viewWidth -= padding.left + padding.right;\n viewHeight -= padding.top + padding.bottom;\n }\n if (type === None) {\n left = 0;\n top = 0;\n width = viewWidth;\n height = viewHeight;\n } else if (type === Fit) {\n width = Math.max(0, viewWidth - left - right);\n height = Math.max(0, viewHeight - top - bottom);\n } else if (type === FitX) {\n width = Math.max(0, viewWidth - left - right);\n viewHeight = height + top + bottom;\n } else if (type === FitY) {\n viewWidth = width + left + right;\n height = Math.max(0, viewHeight - top - bottom);\n } else if (type === Pad) {\n viewWidth = width + left + right;\n viewHeight = height + top + bottom;\n }\n view._resizeView(viewWidth, viewHeight, width, height, [left, top], auto.resize);\n}\n\nexport { Bound as bound, Identifier as identifier, Mark as mark, Overlap as overlap, Render as render, ViewLayout as viewlayout };\n","import { Transform, ingest, tupleid, stableCompare } from 'vega-dataflow';\nimport { tickCount, tickFormat, validTicks, tickValues, SymbolLegend, labelFormat, labelValues, GradientLegend, scaleFraction, labelFraction, scale, Sequential, Linear, isContinuous, Time, UTC, Ordinal, scaleImplicit, Log, Sqrt, Pow, Symlog, isLogarithmic, BinOrdinal, isInterpolating, interpolateColors, interpolate, Band, Point, bandSpace, scheme, Threshold, Quantile, Quantize, quantizeInterpolator, interpolateRange, Diverging } from 'vega-scale';\nimport { inherits, isArray, error, fastmap, falsy, isFunction, constant, peek, one, toSet, isString, zoomLog, zoomPow, zoomSymlog, zoomLinear, stringValue } from 'vega-util';\nimport { sum, range } from 'd3-array';\nimport { interpolateRound, interpolate as interpolate$1 } from 'd3-interpolate';\n\n/**\n * Generates axis ticks for visualizing a spatial scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate ticks for.\n * @param {*} [params.count=10] - The approximate number of ticks, or\n * desired tick interval, to use.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {function(*):string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid d3 4.0 format specifier.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\nfunction AxisTicks(params) {\n Transform.call(this, null, params);\n}\ninherits(AxisTicks, Transform, {\n transform(_, pulse) {\n if (this.value && !_.modified()) {\n return pulse.StopPropagation;\n }\n var locale = pulse.dataflow.locale(),\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n ticks = this.value,\n scale = _.scale,\n tally = _.count == null ? _.values ? _.values.length : 10 : _.count,\n count = tickCount(scale, tally, _.minstep),\n format = _.format || tickFormat(locale, scale, count, _.formatSpecifier, _.formatType, !!_.values),\n values = _.values ? validTicks(scale, _.values, count) : tickValues(scale, count);\n if (ticks) out.rem = ticks;\n ticks = values.map((value, i) => ingest({\n index: i / (values.length - 1 || 1),\n value: value,\n label: format(value)\n }));\n if (_.extra && ticks.length) {\n // add an extra tick pegged to the initial domain value\n // this is used to generate axes with 'binned' domains\n ticks.push(ingest({\n index: -1,\n extra: {\n value: ticks[0].value\n },\n label: ''\n }));\n }\n out.source = ticks;\n out.add = ticks;\n this.value = ticks;\n return out;\n }\n});\n\n/**\n * Joins a set of data elements against a set of visual items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): object} [params.item] - An item generator function.\n * @param {function(object): *} [params.key] - The key field associating data and visual items.\n */\nfunction DataJoin(params) {\n Transform.call(this, null, params);\n}\nfunction defaultItemCreate() {\n return ingest({});\n}\nfunction newMap(key) {\n const map = fastmap().test(t => t.exit);\n map.lookup = t => map.get(key(t));\n return map;\n}\ninherits(DataJoin, Transform, {\n transform(_, pulse) {\n var df = pulse.dataflow,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n item = _.item || defaultItemCreate,\n key = _.key || tupleid,\n map = this.value;\n\n // prevent transient (e.g., hover) requests from\n // cascading across marks derived from marks\n if (isArray(out.encode)) {\n out.encode = null;\n }\n if (map && (_.modified('key') || pulse.modified(key))) {\n error('DataJoin does not support modified key function or fields.');\n }\n if (!map) {\n pulse = pulse.addAll();\n this.value = map = newMap(key);\n }\n pulse.visit(pulse.ADD, t => {\n const k = key(t);\n let x = map.get(k);\n if (x) {\n if (x.exit) {\n map.empty--;\n out.add.push(x);\n } else {\n out.mod.push(x);\n }\n } else {\n x = item(t);\n map.set(k, x);\n out.add.push(x);\n }\n x.datum = t;\n x.exit = false;\n });\n pulse.visit(pulse.MOD, t => {\n const k = key(t),\n x = map.get(k);\n if (x) {\n x.datum = t;\n out.mod.push(x);\n }\n });\n pulse.visit(pulse.REM, t => {\n const k = key(t),\n x = map.get(k);\n if (t === x.datum && !x.exit) {\n out.rem.push(x);\n x.exit = true;\n ++map.empty;\n }\n });\n if (pulse.changed(pulse.ADD_MOD)) out.modifies('datum');\n if (pulse.clean() || _.clean && map.empty > df.cleanThreshold) {\n df.runAfter(map.clean);\n }\n return out;\n }\n});\n\n/**\n * Invokes encoding functions for visual items.\n * @constructor\n * @param {object} params - The parameters to the encoding functions. This\n * parameter object will be passed through to all invoked encoding functions.\n * @param {object} [params.mod=false] - Flag indicating if tuples in the input\n * mod set that are unmodified by encoders should be included in the output.\n * @param {object} param.encoders - The encoding functions\n * @param {function(object, object): boolean} [param.encoders.update] - Update encoding set\n * @param {function(object, object): boolean} [param.encoders.enter] - Enter encoding set\n * @param {function(object, object): boolean} [param.encoders.exit] - Exit encoding set\n */\nfunction Encode(params) {\n Transform.call(this, null, params);\n}\ninherits(Encode, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ADD_REM),\n fmod = _.mod || false,\n encoders = _.encoders,\n encode = pulse.encode;\n\n // if an array, the encode directive includes additional sets\n // that must be defined in order for the primary set to be invoked\n // e.g., only run the update set if the hover set is defined\n if (isArray(encode)) {\n if (out.changed() || encode.every(e => encoders[e])) {\n encode = encode[0];\n out.encode = null; // consume targeted encode directive\n } else {\n return pulse.StopPropagation;\n }\n }\n\n // marshall encoder functions\n var reenter = encode === 'enter',\n update = encoders.update || falsy,\n enter = encoders.enter || falsy,\n exit = encoders.exit || falsy,\n set = (encode && !reenter ? encoders[encode] : update) || falsy;\n if (pulse.changed(pulse.ADD)) {\n pulse.visit(pulse.ADD, t => {\n enter(t, _);\n update(t, _);\n });\n out.modifies(enter.output);\n out.modifies(update.output);\n if (set !== falsy && set !== update) {\n pulse.visit(pulse.ADD, t => {\n set(t, _);\n });\n out.modifies(set.output);\n }\n }\n if (pulse.changed(pulse.REM) && exit !== falsy) {\n pulse.visit(pulse.REM, t => {\n exit(t, _);\n });\n out.modifies(exit.output);\n }\n if (reenter || set !== falsy) {\n const flag = pulse.MOD | (_.modified() ? pulse.REFLOW : 0);\n if (reenter) {\n pulse.visit(flag, t => {\n const mod = enter(t, _) || fmod;\n if (set(t, _) || mod) out.mod.push(t);\n });\n if (out.mod.length) out.modifies(enter.output);\n } else {\n pulse.visit(flag, t => {\n if (set(t, _) || fmod) out.mod.push(t);\n });\n }\n if (out.mod.length) out.modifies(set.output);\n }\n return out.changed() ? out : pulse.StopPropagation;\n }\n});\n\n/**\n * Generates legend entries for visualizing a scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate items for.\n * @param {*} [params.count=5] - The approximate number of items, or\n * desired tick interval, to use.\n * @param {*} [params.limit] - The maximum number of entries to\n * include in a symbol legend.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid D3 format specifier string.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\nfunction LegendEntries(params) {\n Transform.call(this, [], params);\n}\ninherits(LegendEntries, Transform, {\n transform(_, pulse) {\n if (this.value != null && !_.modified()) {\n return pulse.StopPropagation;\n }\n var locale = pulse.dataflow.locale(),\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n items = this.value,\n type = _.type || SymbolLegend,\n scale = _.scale,\n limit = +_.limit,\n count = tickCount(scale, _.count == null ? 5 : _.count, _.minstep),\n lskip = !!_.values || type === SymbolLegend,\n format = _.format || labelFormat(locale, scale, count, type, _.formatSpecifier, _.formatType, lskip),\n values = _.values || labelValues(scale, count),\n domain,\n fraction,\n size,\n offset,\n ellipsis;\n if (items) out.rem = items;\n if (type === SymbolLegend) {\n if (limit && values.length > limit) {\n pulse.dataflow.warn('Symbol legend count exceeds limit, filtering items.');\n items = values.slice(0, limit - 1);\n ellipsis = true;\n } else {\n items = values;\n }\n if (isFunction(size = _.size)) {\n // if first value maps to size zero, remove from list (vega#717)\n if (!_.values && scale(items[0]) === 0) {\n items = items.slice(1);\n }\n // compute size offset for legend entries\n offset = items.reduce((max, value) => Math.max(max, size(value, _)), 0);\n } else {\n size = constant(offset = size || 8);\n }\n items = items.map((value, index) => ingest({\n index: index,\n label: format(value, index, items),\n value: value,\n offset: offset,\n size: size(value, _)\n }));\n if (ellipsis) {\n ellipsis = values[items.length];\n items.push(ingest({\n index: items.length,\n label: `\\u2026${values.length - items.length} entries`,\n value: ellipsis,\n offset: offset,\n size: size(ellipsis, _)\n }));\n }\n } else if (type === GradientLegend) {\n domain = scale.domain(), fraction = scaleFraction(scale, domain[0], peek(domain));\n\n // if automatic label generation produces 2 or fewer values,\n // use the domain end points instead (fixes vega/vega#1364)\n if (values.length < 3 && !_.values && domain[0] !== peek(domain)) {\n values = [domain[0], peek(domain)];\n }\n items = values.map((value, index) => ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: fraction(value)\n }));\n } else {\n size = values.length - 1;\n fraction = labelFraction(scale);\n items = values.map((value, index) => ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: index ? fraction(value) : 0,\n perc2: index === size ? 1 : fraction(values[index + 1])\n }));\n }\n out.source = items;\n out.add = items;\n this.value = items;\n return out;\n }\n});\n\nconst sourceX = t => t.source.x;\nconst sourceY = t => t.source.y;\nconst targetX = t => t.target.x;\nconst targetY = t => t.target.y;\n\n/**\n * Layout paths linking source and target elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction LinkPath(params) {\n Transform.call(this, {}, params);\n}\nLinkPath.Definition = {\n 'type': 'LinkPath',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'sourceX',\n 'type': 'field',\n 'default': 'source.x'\n }, {\n 'name': 'sourceY',\n 'type': 'field',\n 'default': 'source.y'\n }, {\n 'name': 'targetX',\n 'type': 'field',\n 'default': 'target.x'\n }, {\n 'name': 'targetY',\n 'type': 'field',\n 'default': 'target.y'\n }, {\n 'name': 'orient',\n 'type': 'enum',\n 'default': 'vertical',\n 'values': ['horizontal', 'vertical', 'radial']\n }, {\n 'name': 'shape',\n 'type': 'enum',\n 'default': 'line',\n 'values': ['line', 'arc', 'curve', 'diagonal', 'orthogonal']\n }, {\n 'name': 'require',\n 'type': 'signal'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\ninherits(LinkPath, Transform, {\n transform(_, pulse) {\n var sx = _.sourceX || sourceX,\n sy = _.sourceY || sourceY,\n tx = _.targetX || targetX,\n ty = _.targetY || targetY,\n as = _.as || 'path',\n orient = _.orient || 'vertical',\n shape = _.shape || 'line',\n path = Paths.get(shape + '-' + orient) || Paths.get(shape);\n if (!path) {\n error('LinkPath unsupported type: ' + _.shape + (_.orient ? '-' + _.orient : ''));\n }\n pulse.visit(pulse.SOURCE, t => {\n t[as] = path(sx(t), sy(t), tx(t), ty(t));\n });\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\nconst line = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'L' + tx + ',' + ty;\nconst lineR = (sa, sr, ta, tr) => line(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\nconst arc = (sx, sy, tx, ty) => {\n var dx = tx - sx,\n dy = ty - sy,\n rr = Math.hypot(dx, dy) / 2,\n ra = 180 * Math.atan2(dy, dx) / Math.PI;\n return 'M' + sx + ',' + sy + 'A' + rr + ',' + rr + ' ' + ra + ' 0 1' + ' ' + tx + ',' + ty;\n};\nconst arcR = (sa, sr, ta, tr) => arc(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\nconst curve = (sx, sy, tx, ty) => {\n const dx = tx - sx,\n dy = ty - sy,\n ix = 0.2 * (dx + dy),\n iy = 0.2 * (dy - dx);\n return 'M' + sx + ',' + sy + 'C' + (sx + ix) + ',' + (sy + iy) + ' ' + (tx + iy) + ',' + (ty - ix) + ' ' + tx + ',' + ty;\n};\nconst curveR = (sa, sr, ta, tr) => curve(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\nconst orthoX = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'V' + ty + 'H' + tx;\nconst orthoY = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'H' + tx + 'V' + ty;\nconst orthoR = (sa, sr, ta, tr) => {\n const sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n sf = Math.abs(ta - sa) > Math.PI ? ta <= sa : ta > sa;\n return 'M' + sr * sc + ',' + sr * ss + 'A' + sr + ',' + sr + ' 0 0,' + (sf ? 1 : 0) + ' ' + sr * tc + ',' + sr * ts + 'L' + tr * tc + ',' + tr * ts;\n};\nconst diagonalX = (sx, sy, tx, ty) => {\n const m = (sx + tx) / 2;\n return 'M' + sx + ',' + sy + 'C' + m + ',' + sy + ' ' + m + ',' + ty + ' ' + tx + ',' + ty;\n};\nconst diagonalY = (sx, sy, tx, ty) => {\n const m = (sy + ty) / 2;\n return 'M' + sx + ',' + sy + 'C' + sx + ',' + m + ' ' + tx + ',' + m + ' ' + tx + ',' + ty;\n};\nconst diagonalR = (sa, sr, ta, tr) => {\n const sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n mr = (sr + tr) / 2;\n return 'M' + sr * sc + ',' + sr * ss + 'C' + mr * sc + ',' + mr * ss + ' ' + mr * tc + ',' + mr * ts + ' ' + tr * tc + ',' + tr * ts;\n};\nconst Paths = fastmap({\n 'line': line,\n 'line-radial': lineR,\n 'arc': arc,\n 'arc-radial': arcR,\n 'curve': curve,\n 'curve-radial': curveR,\n 'orthogonal-horizontal': orthoX,\n 'orthogonal-vertical': orthoY,\n 'orthogonal-radial': orthoR,\n 'diagonal-horizontal': diagonalX,\n 'diagonal-vertical': diagonalY,\n 'diagonal-radial': diagonalR\n});\n\n/**\n * Pie and donut chart layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size pie segments.\n * @param {number} [params.startAngle=0] - The start angle (in radians) of the layout.\n * @param {number} [params.endAngle=2π] - The end angle (in radians) of the layout.\n * @param {boolean} [params.sort] - Boolean flag for sorting sectors by value.\n */\nfunction Pie(params) {\n Transform.call(this, null, params);\n}\nPie.Definition = {\n 'type': 'Pie',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'startAngle',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'endAngle',\n 'type': 'number',\n 'default': 6.283185307179586\n }, {\n 'name': 'sort',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['startAngle', 'endAngle']\n }]\n};\ninherits(Pie, Transform, {\n transform(_, pulse) {\n var as = _.as || ['startAngle', 'endAngle'],\n startAngle = as[0],\n endAngle = as[1],\n field = _.field || one,\n start = _.startAngle || 0,\n stop = _.endAngle != null ? _.endAngle : 2 * Math.PI,\n data = pulse.source,\n values = data.map(field),\n n = values.length,\n a = start,\n k = (stop - start) / sum(values),\n index = range(n),\n i,\n t,\n v;\n if (_.sort) {\n index.sort((a, b) => values[a] - values[b]);\n }\n for (i = 0; i < n; ++i) {\n v = values[index[i]];\n t = data[index[i]];\n t[startAngle] = a;\n t[endAngle] = a += v * k;\n }\n this.value = values;\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\n\nconst DEFAULT_COUNT = 5;\nfunction includeZero(scale) {\n const type = scale.type;\n return !scale.bins && (type === Linear || type === Pow || type === Sqrt);\n}\nfunction includePad(type) {\n return isContinuous(type) && type !== Sequential;\n}\nconst SKIP = toSet(['set', 'modified', 'clear', 'type', 'scheme', 'schemeExtent', 'schemeCount', 'domain', 'domainMin', 'domainMid', 'domainMax', 'domainRaw', 'domainImplicit', 'nice', 'zero', 'bins', 'range', 'rangeStep', 'round', 'reverse', 'interpolate', 'interpolateGamma']);\n\n/**\n * Maintains a scale function mapping data values to visual channels.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Scale(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\n\ninherits(Scale, Transform, {\n transform(_, pulse) {\n var df = pulse.dataflow,\n scale$1 = this.value,\n key = scaleKey(_);\n if (!scale$1 || key !== scale$1.type) {\n this.value = scale$1 = scale(key)();\n }\n for (key in _) if (!SKIP[key]) {\n // padding is a scale property for band/point but not others\n if (key === 'padding' && includePad(scale$1.type)) continue;\n // invoke scale property setter, raise warning if not found\n isFunction(scale$1[key]) ? scale$1[key](_[key]) : df.warn('Unsupported scale property: ' + key);\n }\n configureRange(scale$1, _, configureBins(scale$1, _, configureDomain(scale$1, _, df)));\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n }\n});\nfunction scaleKey(_) {\n var t = _.type,\n d = '',\n n;\n\n // backwards compatibility pre Vega 5.\n if (t === Sequential) return Sequential + '-' + Linear;\n if (isContinuousColor(_)) {\n n = _.rawDomain ? _.rawDomain.length : _.domain ? _.domain.length + +(_.domainMid != null) : 0;\n d = n === 2 ? Sequential + '-' : n === 3 ? Diverging + '-' : '';\n }\n return (d + t || Linear).toLowerCase();\n}\nfunction isContinuousColor(_) {\n const t = _.type;\n return isContinuous(t) && t !== Time && t !== UTC && (_.scheme || _.range && _.range.length && _.range.every(isString));\n}\nfunction configureDomain(scale, _, df) {\n // check raw domain, if provided use that and exit early\n const raw = rawDomain(scale, _.domainRaw, df);\n if (raw > -1) return raw;\n var domain = _.domain,\n type = scale.type,\n zero = _.zero || _.zero === undefined && includeZero(scale),\n n,\n mid;\n if (!domain) return 0;\n\n // adjust continuous domain for minimum pixel padding\n if (includePad(type) && _.padding && domain[0] !== peek(domain)) {\n domain = padDomain(type, domain, _.range, _.padding, _.exponent, _.constant);\n }\n\n // adjust domain based on zero, min, max settings\n if (zero || _.domainMin != null || _.domainMax != null || _.domainMid != null) {\n n = (domain = domain.slice()).length - 1 || 1;\n if (zero) {\n if (domain[0] > 0) domain[0] = 0;\n if (domain[n] < 0) domain[n] = 0;\n }\n if (_.domainMin != null) domain[0] = _.domainMin;\n if (_.domainMax != null) domain[n] = _.domainMax;\n if (_.domainMid != null) {\n mid = _.domainMid;\n const i = mid > domain[n] ? n + 1 : mid < domain[0] ? 0 : n;\n if (i !== n) df.warn('Scale domainMid exceeds domain min or max.', mid);\n domain.splice(i, 0, mid);\n }\n }\n\n // set the scale domain\n scale.domain(domainCheck(type, domain, df));\n\n // if ordinal scale domain is defined, prevent implicit\n // domain construction as side-effect of scale lookup\n if (type === Ordinal) {\n scale.unknown(_.domainImplicit ? scaleImplicit : undefined);\n }\n\n // perform 'nice' adjustment as requested\n if (_.nice && scale.nice) {\n scale.nice(_.nice !== true && tickCount(scale, _.nice) || null);\n }\n\n // return the cardinality of the domain\n return domain.length;\n}\nfunction rawDomain(scale, raw, df) {\n if (raw) {\n scale.domain(domainCheck(scale.type, raw, df));\n return raw.length;\n } else {\n return -1;\n }\n}\nfunction padDomain(type, domain, range, pad, exponent, constant) {\n var span = Math.abs(peek(range) - range[0]),\n frac = span / (span - 2 * pad),\n d = type === Log ? zoomLog(domain, null, frac) : type === Sqrt ? zoomPow(domain, null, frac, 0.5) : type === Pow ? zoomPow(domain, null, frac, exponent || 1) : type === Symlog ? zoomSymlog(domain, null, frac, constant || 1) : zoomLinear(domain, null, frac);\n domain = domain.slice();\n domain[0] = d[0];\n domain[domain.length - 1] = d[1];\n return domain;\n}\nfunction domainCheck(type, domain, df) {\n if (isLogarithmic(type)) {\n // sum signs of domain values\n // if all pos or all neg, abs(sum) === domain.length\n var s = Math.abs(domain.reduce((s, v) => s + (v < 0 ? -1 : v > 0 ? 1 : 0), 0));\n if (s !== domain.length) {\n df.warn('Log scale domain includes zero: ' + stringValue(domain));\n }\n }\n return domain;\n}\nfunction configureBins(scale, _, count) {\n let bins = _.bins;\n if (bins && !isArray(bins)) {\n // generate bin boundary array\n const domain = scale.domain(),\n lo = domain[0],\n hi = peek(domain),\n step = bins.step;\n let start = bins.start == null ? lo : bins.start,\n stop = bins.stop == null ? hi : bins.stop;\n if (!step) error('Scale bins parameter missing step property.');\n if (start < lo) start = step * Math.ceil(lo / step);\n if (stop > hi) stop = step * Math.floor(hi / step);\n bins = range(start, stop + step / 2, step);\n }\n if (bins) {\n // assign bin boundaries to scale instance\n scale.bins = bins;\n } else if (scale.bins) {\n // no current bins, remove bins if previously set\n delete scale.bins;\n }\n\n // special handling for bin-ordinal scales\n if (scale.type === BinOrdinal) {\n if (!bins) {\n // the domain specifies the bins\n scale.bins = scale.domain();\n } else if (!_.domain && !_.domainRaw) {\n // the bins specify the domain\n scale.domain(bins);\n count = bins.length;\n }\n }\n\n // return domain cardinality\n return count;\n}\nfunction configureRange(scale, _, count) {\n var type = scale.type,\n round = _.round || false,\n range = _.range;\n\n // if range step specified, calculate full range extent\n if (_.rangeStep != null) {\n range = configureRangeStep(type, _, count);\n }\n\n // else if a range scheme is defined, use that\n else if (_.scheme) {\n range = configureScheme(type, _, count);\n if (isFunction(range)) {\n if (scale.interpolator) {\n return scale.interpolator(range);\n } else {\n error(`Scale type ${type} does not support interpolating color schemes.`);\n }\n }\n }\n\n // given a range array for an interpolating scale, convert to interpolator\n if (range && isInterpolating(type)) {\n return scale.interpolator(interpolateColors(flip(range, _.reverse), _.interpolate, _.interpolateGamma));\n }\n\n // configure rounding / interpolation\n if (range && _.interpolate && scale.interpolate) {\n scale.interpolate(interpolate(_.interpolate, _.interpolateGamma));\n } else if (isFunction(scale.round)) {\n scale.round(round);\n } else if (isFunction(scale.rangeRound)) {\n scale.interpolate(round ? interpolateRound : interpolate$1);\n }\n if (range) scale.range(flip(range, _.reverse));\n}\nfunction configureRangeStep(type, _, count) {\n if (type !== Band && type !== Point) {\n error('Only band and point scales support rangeStep.');\n }\n\n // calculate full range based on requested step size and padding\n var outer = (_.paddingOuter != null ? _.paddingOuter : _.padding) || 0,\n inner = type === Point ? 1 : (_.paddingInner != null ? _.paddingInner : _.padding) || 0;\n return [0, _.rangeStep * bandSpace(count, inner, outer)];\n}\nfunction configureScheme(type, _, count) {\n var extent = _.schemeExtent,\n name,\n scheme$1;\n if (isArray(_.scheme)) {\n scheme$1 = interpolateColors(_.scheme, _.interpolate, _.interpolateGamma);\n } else {\n name = _.scheme.toLowerCase();\n scheme$1 = scheme(name);\n if (!scheme$1) error(`Unrecognized scheme name: ${_.scheme}`);\n }\n\n // determine size for potential discrete range\n count = type === Threshold ? count + 1 : type === BinOrdinal ? count - 1 : type === Quantile || type === Quantize ? +_.schemeCount || DEFAULT_COUNT : count;\n\n // adjust and/or quantize scheme as appropriate\n return isInterpolating(type) ? adjustScheme(scheme$1, extent, _.reverse) : isFunction(scheme$1) ? quantizeInterpolator(adjustScheme(scheme$1, extent), count) : type === Ordinal ? scheme$1 : scheme$1.slice(0, count);\n}\nfunction adjustScheme(scheme, extent, reverse) {\n return isFunction(scheme) && (extent || reverse) ? interpolateRange(scheme, flip(extent || [0, 1], reverse)) : scheme;\n}\nfunction flip(array, reverse) {\n return reverse ? array.slice().reverse() : array;\n}\n\n/**\n * Sorts scenegraph items in the pulse source array.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting tuples.\n */\nfunction SortItems(params) {\n Transform.call(this, null, params);\n}\ninherits(SortItems, Transform, {\n transform(_, pulse) {\n const mod = _.modified('sort') || pulse.changed(pulse.ADD) || pulse.modified(_.sort.fields) || pulse.modified('datum');\n if (mod) pulse.source.sort(stableCompare(_.sort));\n this.modified(mod);\n return pulse;\n }\n});\n\nconst Zero = 'zero',\n Center = 'center',\n Normalize = 'normalize',\n DefOutput = ['y0', 'y1'];\n\n/**\n * Stack layout for visualization elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to stack.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {function(object,object): number} [params.sort] - A comparator for stack sorting.\n * @param {string} [offset='zero'] - Stack baseline offset. One of 'zero', 'center', 'normalize'.\n */\nfunction Stack(params) {\n Transform.call(this, null, params);\n}\nStack.Definition = {\n 'type': 'Stack',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'offset',\n 'type': 'enum',\n 'default': Zero,\n 'values': [Zero, Center, Normalize]\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': DefOutput\n }]\n};\ninherits(Stack, Transform, {\n transform(_, pulse) {\n var as = _.as || DefOutput,\n y0 = as[0],\n y1 = as[1],\n sort = stableCompare(_.sort),\n field = _.field || one,\n stack = _.offset === Center ? stackCenter : _.offset === Normalize ? stackNormalize : stackZero,\n groups,\n i,\n n,\n max;\n\n // partition, sum, and sort the stack groups\n groups = partition(pulse.source, _.groupby, sort, field);\n\n // compute stack layouts per group\n for (i = 0, n = groups.length, max = groups.max; i < n; ++i) {\n stack(groups[i], max, field, y0, y1);\n }\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\nfunction stackCenter(group, max, field, y0, y1) {\n var last = (max - group.sum) / 2,\n m = group.length,\n j = 0,\n t;\n for (; j < m; ++j) {\n t = group[j];\n t[y0] = last;\n t[y1] = last += Math.abs(field(t));\n }\n}\nfunction stackNormalize(group, max, field, y0, y1) {\n var scale = 1 / group.sum,\n last = 0,\n m = group.length,\n j = 0,\n v = 0,\n t;\n for (; j < m; ++j) {\n t = group[j];\n t[y0] = last;\n t[y1] = last = scale * (v += Math.abs(field(t)));\n }\n}\nfunction stackZero(group, max, field, y0, y1) {\n var lastPos = 0,\n lastNeg = 0,\n m = group.length,\n j = 0,\n v,\n t;\n for (; j < m; ++j) {\n t = group[j];\n v = +field(t);\n if (v < 0) {\n t[y0] = lastNeg;\n t[y1] = lastNeg += v;\n } else {\n t[y0] = lastPos;\n t[y1] = lastPos += v;\n }\n }\n}\nfunction partition(data, groupby, sort, field) {\n var groups = [],\n get = f => f(t),\n map,\n i,\n n,\n m,\n t,\n k,\n g,\n s,\n max;\n\n // partition data points into stack groups\n if (groupby == null) {\n groups.push(data.slice());\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n groups.push(g);\n }\n g.push(t);\n }\n }\n\n // compute sums of groups, sort groups as needed\n for (k = 0, max = 0, m = groups.length; k < m; ++k) {\n g = groups[k];\n for (i = 0, s = 0, n = g.length; i < n; ++i) {\n s += Math.abs(field(g[i]));\n }\n g.sum = s;\n if (s > max) max = s;\n if (sort) g.sort(sort);\n }\n groups.max = max;\n return groups;\n}\n\nexport { AxisTicks as axisticks, DataJoin as datajoin, Encode as encode, LegendEntries as legendentries, LinkPath as linkpath, Pie as pie, Scale as scale, SortItems as sortitems, Stack as stack };\n","export var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var ceil = Math.ceil;\nexport var cos = Math.cos;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var pow = Math.pow;\nexport var round = Math.round;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sin = Math.sin;\nexport var tan = Math.tan;\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var sqrt1_2 = Math.SQRT1_2;\nexport var sqrt2 = sqrt(2);\nexport var sqrtPi = sqrt(pi);\nexport var tau = pi * 2;\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport function sinci(x) {\n return x ? x / Math.sin(x) : 1;\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function sqrt(x) {\n return x > 0 ? Math.sqrt(x) : 0;\n}\n\nexport function tanh(x) {\n x = exp(2 * x);\n return (x - 1) / (x + 1);\n}\n\nexport function sinh(x) {\n return (exp(x) - exp(-x)) / 2;\n}\n\nexport function cosh(x) {\n return (exp(x) + exp(-x)) / 2;\n}\n\nexport function arsinh(x) {\n return log(x + sqrt(x * x + 1));\n}\n\nexport function arcosh(x) {\n return log(x + sqrt(x * x - 1));\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, cos, epsilon, halfPi, pi, sin, sqrt2} from \"./math.js\";\n\nexport function mollweideBromleyTheta(cp, phi) {\n var cpsinPhi = cp * sin(phi), i = 30, delta;\n do phi -= delta = (phi + sin(phi) - cpsinPhi) / (1 + cos(phi));\n while (abs(delta) > epsilon && --i > 0);\n return phi / 2;\n}\n\nexport function mollweideBromleyRaw(cx, cy, cp) {\n\n function forward(lambda, phi) {\n return [cx * lambda * cos(phi = mollweideBromleyTheta(cp, phi)), cy * sin(phi)];\n }\n\n forward.invert = function(x, y) {\n return y = asin(y / cy), [x / (cx * cos(y)), asin((2 * y + sin(2 * y)) / cp)];\n };\n\n return forward;\n}\n\nexport var mollweideRaw = mollweideBromleyRaw(sqrt2 / halfPi, sqrt2, pi);\n\nexport default function() {\n return projection(mollweideRaw)\n .scale(169.529);\n}\n","import { geoPath, geoAlbers, geoAlbersUsa, geoAzimuthalEqualArea, geoAzimuthalEquidistant, geoConicConformal, geoConicEqualArea, geoConicEquidistant, geoEqualEarth, geoEquirectangular, geoGnomonic, geoIdentity, geoMercator, geoNaturalEarth1, geoOrthographic, geoStereographic, geoTransverseMercator } from 'd3-geo';\nimport { geoMollweide } from 'd3-geo-projection';\nimport { registerScale } from 'vega-scale';\n\nconst defaultPath = geoPath();\nconst projectionProperties = [\n// standard properties in d3-geo\n'clipAngle', 'clipExtent', 'scale', 'translate', 'center', 'rotate', 'parallels', 'precision', 'reflectX', 'reflectY',\n// extended properties in d3-geo-projections\n'coefficient', 'distance', 'fraction', 'lobes', 'parallel', 'radius', 'ratio', 'spacing', 'tilt'];\n\n/**\n * Augment projections with their type and a copy method.\n */\nfunction create(type, constructor) {\n return function projection() {\n const p = constructor();\n p.type = type;\n p.path = geoPath().projection(p);\n p.copy = p.copy || function () {\n const c = projection();\n projectionProperties.forEach(prop => {\n if (p[prop]) c[prop](p[prop]());\n });\n c.path.pointRadius(p.path.pointRadius());\n return c;\n };\n return registerScale(p);\n };\n}\nfunction projection(type, proj) {\n if (!type || typeof type !== 'string') {\n throw new Error('Projection type must be a name string.');\n }\n type = type.toLowerCase();\n if (arguments.length > 1) {\n projections[type] = create(type, proj);\n return this;\n } else {\n return projections[type] || null;\n }\n}\nfunction getProjectionPath(proj) {\n return proj && proj.path || defaultPath;\n}\nconst projections = {\n // base d3-geo projection types\n albers: geoAlbers,\n albersusa: geoAlbersUsa,\n azimuthalequalarea: geoAzimuthalEqualArea,\n azimuthalequidistant: geoAzimuthalEquidistant,\n conicconformal: geoConicConformal,\n conicequalarea: geoConicEqualArea,\n conicequidistant: geoConicEquidistant,\n equalEarth: geoEqualEarth,\n equirectangular: geoEquirectangular,\n gnomonic: geoGnomonic,\n identity: geoIdentity,\n mercator: geoMercator,\n mollweide: geoMollweide,\n naturalEarth1: geoNaturalEarth1,\n orthographic: geoOrthographic,\n stereographic: geoStereographic,\n transversemercator: geoTransverseMercator\n};\nfor (const key in projections) {\n projection(key, projections[key]);\n}\n\nexport { getProjectionPath, projection, projectionProperties };\n","import { Transform, rederive, ingest, replace } from 'vega-dataflow';\nimport { error, extent, inherits, identity, isArray, isFunction, isNumber, array, constant, one, accessorName, accessorFields, field, extend, toSet, zero } from 'vega-util';\nimport { tickStep, range, max, sum } from 'd3-array';\nimport { bandwidthNRD } from 'vega-statistics';\nimport { getProjectionPath, projectionProperties, projection } from 'vega-projection';\nimport { geoGraticule } from 'd3-geo';\nimport { rgb } from 'd3-color';\nimport { canvas } from 'vega-canvas';\n\nfunction noop() {}\nconst cases = [[], [[[1.0, 1.5], [0.5, 1.0]]], [[[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [0.5, 1.0]]], [[[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 0.5], [1.0, 1.5]]], [[[1.0, 0.5], [0.5, 1.0]]], [[[0.5, 1.0], [1.0, 0.5]]], [[[1.0, 1.5], [1.0, 0.5]]], [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [1.0, 0.5]]], [[[0.5, 1.0], [1.5, 1.0]]], [[[1.0, 1.5], [1.5, 1.0]]], [[[0.5, 1.0], [1.0, 1.5]]], []];\n\n// Implementation adapted from d3/d3-contour. Thanks!\nfunction contours () {\n var dx = 1,\n dy = 1,\n smooth = smoothLinear;\n function contours(values, tz) {\n return tz.map(value => contour(values, value));\n }\n\n // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n function contour(values, value) {\n var polygons = [],\n holes = [];\n isorings(values, value, ring => {\n smooth(ring, values, value);\n if (area(ring) > 0) polygons.push([ring]);else holes.push(ring);\n });\n holes.forEach(hole => {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n return {\n type: 'MultiPolygon',\n value: value,\n coordinates: polygons\n };\n }\n\n // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n function isorings(values, value, callback) {\n var fragmentByStart = new Array(),\n fragmentByEnd = new Array(),\n x,\n y,\n t0,\n t1,\n t2,\n t3;\n\n // Special case for the first row (y = -1, t2 = t3 = 0).\n x = y = -1;\n t1 = values[0] >= value;\n cases[t1 << 1].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[x + 1] >= value;\n cases[t0 | t1 << 1].forEach(stitch);\n }\n cases[t1 << 0].forEach(stitch);\n\n // General case for the intermediate rows.\n while (++y < dy - 1) {\n x = -1;\n t1 = values[y * dx + dx] >= value;\n t2 = values[y * dx] >= value;\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t1 | t2 << 3].forEach(stitch);\n }\n\n // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t2 << 3].forEach(stitch);\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f,\n g;\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {\n start: f.start,\n end: g.end,\n ring: f.ring.concat(g.ring)\n };\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {\n start: g.start,\n end: f.end,\n ring: g.ring.concat(f.ring)\n };\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {\n start: startIndex,\n end: endIndex,\n ring: [start, end]\n };\n }\n }\n }\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n function smoothLinear(ring, values, value) {\n ring.forEach(point => {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v0,\n v1 = values[yt * dx + xt];\n if (x > 0 && x < dx && xt === x) {\n v0 = values[yt * dx + xt - 1];\n point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n }\n if (y > 0 && y < dy && yt === y) {\n v0 = values[(yt - 1) * dx + xt];\n point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n }\n });\n }\n contours.contour = contour;\n contours.size = function (_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.floor(_[0]),\n _1 = Math.floor(_[1]);\n if (!(_0 >= 0 && _1 >= 0)) error('invalid size');\n return dx = _0, dy = _1, contours;\n };\n contours.smooth = function (_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n };\n return contours;\n}\nfunction area(ring) {\n var i = 0,\n n = ring.length,\n area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n return area;\n}\nfunction contains(ring, hole) {\n var i = -1,\n n = hole.length,\n c;\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n return 0;\n}\nfunction ringContains(ring, point) {\n var x = point[0],\n y = point[1],\n contains = -1;\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i],\n xi = pi[0],\n yi = pi[1],\n pj = ring[j],\n xj = pj[0],\n yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi) contains = -contains;\n }\n return contains;\n}\nfunction segmentContains(a, b, c) {\n var i;\n return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n\nfunction quantize (k, nice, zero) {\n return function (values) {\n var ex = extent(values),\n start = zero ? Math.min(ex[0], 0) : ex[0],\n stop = ex[1],\n span = stop - start,\n step = nice ? tickStep(start, stop, k) : span / (k + 1);\n return range(start + step, stop, step);\n };\n}\n\n/**\n * Generate isocontours (level sets) based on input raster grid data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} [params.field] - The field with raster grid\n * data. If unspecified, the tuple itself is interpreted as a raster grid.\n * @param {Array} [params.thresholds] - Contour threshold array. If\n * specified, the levels, nice, resolve, and zero parameters are ignored.\n * @param {number} [params.levels] - The desired number of contour levels.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified levels.\n * @param {string} [params.resolve] - The method for resolving thresholds\n * across multiple input grids. If 'independent' (the default), threshold\n * calculation will be performed separately for each grid. If 'shared', a\n * single set of threshold values will be used for all input grids.\n * @param {boolean} [params.zero] - Boolean flag indicating if the contour\n * threshold values should include zero.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n * @param {boolean} [params.scale] - Optional numerical value by which to\n * scale the output isocontour coordinates. This parameter can be useful\n * to scale the contours to match a desired output resolution.\n * @param {string} [params.as='contour'] - The output field in which to store\n * the generated isocontour data (default 'contour').\n */\nfunction Isocontour(params) {\n Transform.call(this, null, params);\n}\nIsocontour.Definition = {\n 'type': 'Isocontour',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'thresholds',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'levels',\n 'type': 'number'\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'zero',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'scale',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'translate',\n 'type': 'number',\n 'array': true,\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'default': 'contour'\n }]\n};\ninherits(Isocontour, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n source = pulse.materialize(pulse.SOURCE).source,\n field = _.field || identity,\n contour = contours().smooth(_.smooth !== false),\n tz = _.thresholds || levels(source, field, _),\n as = _.as === null ? null : _.as || 'contour',\n values = [];\n source.forEach(t => {\n const grid = field(t);\n\n // generate contour paths in GeoJSON format\n const paths = contour.size([grid.width, grid.height])(grid.values, isArray(tz) ? tz : tz(grid.values));\n\n // adjust contour path coordinates as needed\n transformPaths(paths, grid, t, _);\n\n // ingest; copy source data properties to output\n paths.forEach(p => {\n values.push(rederive(t, ingest(as != null ? {\n [as]: p\n } : p)));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = values;\n return out;\n }\n});\nfunction levels(values, f, _) {\n const q = quantize(_.levels || 10, _.nice, _.zero !== false);\n return _.resolve !== 'shared' ? q : q(values.map(t => max(f(t).values)));\n}\nfunction transformPaths(paths, grid, datum, _) {\n let s = _.scale || grid.scale,\n t = _.translate || grid.translate;\n if (isFunction(s)) s = s(datum, _);\n if (isFunction(t)) t = t(datum, _);\n if ((s === 1 || s == null) && !t) return;\n const sx = (isNumber(s) ? s : s[0]) || 1,\n sy = (isNumber(s) ? s : s[1]) || 1,\n tx = t && t[0] || 0,\n ty = t && t[1] || 0;\n paths.forEach(transform(grid, sx, sy, tx, ty));\n}\nfunction transform(grid, sx, sy, tx, ty) {\n const x1 = grid.x1 || 0,\n y1 = grid.y1 || 0,\n flip = sx * sy < 0;\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n function transformRing(coordinates) {\n if (flip) coordinates.reverse(); // maintain winding order\n coordinates.forEach(transformPoint);\n }\n function transformPoint(coordinates) {\n coordinates[0] = (coordinates[0] - x1) * sx + tx;\n coordinates[1] = (coordinates[1] - y1) * sy + ty;\n }\n return function (geometry) {\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n };\n}\n\nfunction radius(bw, data, f) {\n const v = bw >= 0 ? bw : bandwidthNRD(data, f);\n return Math.round((Math.sqrt(4 * v * v + 1) - 1) / 2);\n}\nfunction number(_) {\n return isFunction(_) ? _ : constant(+_);\n}\n\n// Implementation adapted from d3/d3-contour. Thanks!\nfunction density2D () {\n var x = d => d[0],\n y = d => d[1],\n weight = one,\n bandwidth = [-1, -1],\n dx = 960,\n dy = 500,\n k = 2; // log2(cellSize)\n\n function density(data, counts) {\n const rx = radius(bandwidth[0], data, x) >> k,\n // blur x-radius\n ry = radius(bandwidth[1], data, y) >> k,\n // blur y-radius\n ox = rx ? rx + 2 : 0,\n // x-offset padding for blur\n oy = ry ? ry + 2 : 0,\n // y-offset padding for blur\n n = 2 * ox + (dx >> k),\n // grid width\n m = 2 * oy + (dy >> k),\n // grid height\n values0 = new Float32Array(n * m),\n values1 = new Float32Array(n * m);\n let values = values0;\n data.forEach(d => {\n const xi = ox + (+x(d) >> k),\n yi = oy + (+y(d) >> k);\n if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n values0[xi + yi * n] += +weight(d);\n }\n });\n if (rx > 0 && ry > 0) {\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n } else if (rx > 0) {\n blurX(n, m, values0, values1, rx);\n blurX(n, m, values1, values0, rx);\n blurX(n, m, values0, values1, rx);\n values = values1;\n } else if (ry > 0) {\n blurY(n, m, values0, values1, ry);\n blurY(n, m, values1, values0, ry);\n blurY(n, m, values0, values1, ry);\n values = values1;\n }\n\n // scale density estimates\n // density in points per square pixel or probability density\n const s = counts ? Math.pow(2, -2 * k) : 1 / sum(values);\n for (let i = 0, sz = n * m; i < sz; ++i) values[i] *= s;\n return {\n values: values,\n scale: 1 << k,\n width: n,\n height: m,\n x1: ox,\n y1: oy,\n x2: ox + (dx >> k),\n y2: oy + (dy >> k)\n };\n }\n density.x = function (_) {\n return arguments.length ? (x = number(_), density) : x;\n };\n density.y = function (_) {\n return arguments.length ? (y = number(_), density) : y;\n };\n density.weight = function (_) {\n return arguments.length ? (weight = number(_), density) : weight;\n };\n density.size = function (_) {\n if (!arguments.length) return [dx, dy];\n var _0 = +_[0],\n _1 = +_[1];\n if (!(_0 >= 0 && _1 >= 0)) error('invalid size');\n return dx = _0, dy = _1, density;\n };\n density.cellSize = function (_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) error('invalid cell size');\n k = Math.floor(Math.log(_) / Math.LN2);\n return density;\n };\n density.bandwidth = function (_) {\n if (!arguments.length) return bandwidth;\n _ = array(_);\n if (_.length === 1) _ = [+_[0], +_[0]];\n if (_.length !== 2) error('invalid bandwidth');\n return bandwidth = _, density;\n };\n return density;\n}\nfunction blurX(n, m, source, target, r) {\n const w = (r << 1) + 1;\n for (let j = 0; j < m; ++j) {\n for (let i = 0, sr = 0; i < n + r; ++i) {\n if (i < n) {\n sr += source[i + j * n];\n }\n if (i >= r) {\n if (i >= w) {\n sr -= source[i - w + j * n];\n }\n target[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n }\n }\n }\n}\nfunction blurY(n, m, source, target, r) {\n const w = (r << 1) + 1;\n for (let i = 0; i < n; ++i) {\n for (let j = 0, sr = 0; j < m + r; ++j) {\n if (j < m) {\n sr += source[i + j * n];\n }\n if (j >= r) {\n if (j >= w) {\n sr -= source[i + (j - w) * n];\n }\n target[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n }\n }\n }\n}\n\n/**\n * Perform 2D kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The [width, height] extent (in\n * units of input pixels) over which to perform density estimation.\n * @param {function(object): number} params.x - The x-coordinate accessor.\n * @param {function(object): number} params.y - The y-coordinate accessor.\n * @param {function(object): number} [params.weight] - The weight accessor.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * This parameter determines the level of spatial approximation. For example,\n * the default value of 4 maps to 2x reductions in both x- and y- dimensions.\n * A value of 1 will result in an output raster grid whose dimensions exactly\n * matches the size parameter.\n * @param {Array} [params.bandwidth] - The KDE kernel bandwidths,\n * in pixels. The input can be a two-element array specifying separate\n * x and y bandwidths, or a single-element array specifying both. If the\n * bandwidth is unspecified or less than zero, the bandwidth will be\n * automatically determined.\n * @param {boolean} [params.counts=false] - A boolean flag indicating if the\n * output values should be probability estimates (false, default) or\n * smoothed counts (true).\n * @param {string} [params.as='grid'] - The output field in which to store\n * the generated raster grid (default 'grid').\n */\nfunction KDE2D(params) {\n Transform.call(this, null, params);\n}\nKDE2D.Definition = {\n 'type': 'KDE2D',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'weight',\n 'type': 'field'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'cellSize',\n 'type': 'number'\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'counts',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'grid'\n }]\n};\nconst PARAMS = ['x', 'y', 'weight', 'size', 'cellSize', 'bandwidth'];\nfunction params(obj, _) {\n PARAMS.forEach(param => _[param] != null ? obj[param](_[param]) : 0);\n return obj;\n}\ninherits(KDE2D, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) return pulse.StopPropagation;\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n kde = params(density2D(), _),\n as = _.as || 'grid',\n values = [];\n function set(t, vals) {\n for (let i = 0; i < names.length; ++i) t[names[i]] = vals[i];\n return t;\n }\n\n // generate density raster grids\n values = groups.map(g => ingest(set({\n [as]: kde(g, _.counts)\n }, g.dims)));\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = values;\n return out;\n }\n});\nfunction partition(data, groupby) {\n var groups = [],\n get = f => f(t),\n map,\n i,\n n,\n t,\n k,\n g;\n\n // partition data points into groups\n if (groupby == null) {\n groups.push(data);\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n g.push(t);\n }\n }\n return groups;\n}\n\n/**\n * Generate contours based on kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The dimensions [width, height] over which to compute contours.\n * If the values parameter is provided, this must be the dimensions of the input data.\n * If density estimation is performed, this is the output view dimensions in pixels.\n * @param {Array} [params.values] - An array of numeric values representing an\n * width x height grid of values over which to compute contours. If unspecified, this\n * transform will instead attempt to compute contours for the kernel density estimate\n * using values drawn from data tuples in the input pulse.\n * @param {function(object): number} [params.x] - The pixel x-coordinate accessor for density estimation.\n * @param {function(object): number} [params.y] - The pixel y-coordinate accessor for density estimation.\n * @param {function(object): number} [params.weight] - The data point weight accessor for density estimation.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * @param {number} [params.bandwidth] - Kernel density estimation bandwidth.\n * @param {Array} [params.thresholds] - Contour threshold array. If\n * this parameter is set, the count and nice parameters will be ignored.\n * @param {number} [params.count] - The desired number of contours.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified count.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n */\nfunction Contour(params) {\n Transform.call(this, null, params);\n}\nContour.Definition = {\n 'type': 'Contour',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'values',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'x',\n 'type': 'field'\n }, {\n 'name': 'y',\n 'type': 'field'\n }, {\n 'name': 'weight',\n 'type': 'field'\n }, {\n 'name': 'cellSize',\n 'type': 'number'\n }, {\n 'name': 'bandwidth',\n 'type': 'number'\n }, {\n 'name': 'count',\n 'type': 'number'\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'thresholds',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': true\n }]\n};\ninherits(Contour, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n contour = contours().smooth(_.smooth !== false),\n values = _.values,\n thresh = _.thresholds || quantize(_.count || 10, _.nice, !!values),\n size = _.size,\n grid,\n post;\n if (!values) {\n values = pulse.materialize(pulse.SOURCE).source;\n grid = params(density2D(), _)(values, true);\n post = transform(grid, grid.scale || 1, grid.scale || 1, 0, 0);\n size = [grid.width, grid.height];\n values = grid.values;\n }\n thresh = isArray(thresh) ? thresh : thresh(values);\n values = contour.size(size)(values, thresh);\n if (post) values.forEach(post);\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = (values || []).map(ingest);\n return out;\n }\n});\n\nconst Feature = 'Feature';\nconst FeatureCollection = 'FeatureCollection';\nconst MultiPoint = 'MultiPoint';\n\n/**\n * Consolidate an array of [longitude, latitude] points or GeoJSON features\n * into a combined GeoJSON object. This transform is particularly useful for\n * combining geo data for a Projection's fit argument. The resulting GeoJSON\n * data is available as this transform's value. Input pulses are unchanged.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.fields] - A two-element array\n * of field accessors for the longitude and latitude values.\n * @param {function(object): *} params.geojson - A field accessor for\n * retrieving GeoJSON feature data.\n */\nfunction GeoJSON(params) {\n Transform.call(this, null, params);\n}\nGeoJSON.Definition = {\n 'type': 'GeoJSON',\n 'metadata': {},\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'geojson',\n 'type': 'field'\n }]\n};\ninherits(GeoJSON, Transform, {\n transform(_, pulse) {\n var features = this._features,\n points = this._points,\n fields = _.fields,\n lon = fields && fields[0],\n lat = fields && fields[1],\n geojson = _.geojson || !fields && identity,\n flag = pulse.ADD,\n mod;\n mod = _.modified() || pulse.changed(pulse.REM) || pulse.modified(accessorFields(geojson)) || lon && pulse.modified(accessorFields(lon)) || lat && pulse.modified(accessorFields(lat));\n if (!this.value || mod) {\n flag = pulse.SOURCE;\n this._features = features = [];\n this._points = points = [];\n }\n if (geojson) {\n pulse.visit(flag, t => features.push(geojson(t)));\n }\n if (lon && lat) {\n pulse.visit(flag, t => {\n var x = lon(t),\n y = lat(t);\n if (x != null && y != null && (x = +x) === x && (y = +y) === y) {\n points.push([x, y]);\n }\n });\n features = features.concat({\n type: Feature,\n geometry: {\n type: MultiPoint,\n coordinates: points\n }\n });\n }\n this.value = {\n type: FeatureCollection,\n features: features\n };\n }\n});\n\n/**\n * Map GeoJSON data to an SVG path string.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='path'] - The output field in which to store\n * the generated path data (default 'path').\n */\nfunction GeoPath(params) {\n Transform.call(this, null, params);\n}\nGeoPath.Definition = {\n 'type': 'GeoPath',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection'\n }, {\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'pointRadius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\ninherits(GeoPath, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n path = this.value,\n field = _.field || identity,\n as = _.as || 'path',\n flag = out.SOURCE;\n if (!path || _.modified()) {\n // parameters updated, reset and reflow\n this.value = path = getProjectionPath(_.projection);\n out.materialize().reflow();\n } else {\n flag = field === identity || pulse.modified(field.fields) ? out.ADD_MOD : out.ADD;\n }\n const prev = initPath(path, _.pointRadius);\n out.visit(flag, t => t[as] = path(field(t)));\n path.pointRadius(prev);\n return out.modifies(as);\n }\n});\nfunction initPath(path, pointRadius) {\n const prev = path.pointRadius();\n path.context(null);\n if (pointRadius != null) {\n path.pointRadius(pointRadius);\n }\n return prev;\n}\n\n/**\n * Geo-code a longitude/latitude point to an x/y coordinate.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {Array} params.fields - A two-element array of\n * field accessors for the longitude and latitude values.\n * @param {Array} [params.as] - A two-element array of field names\n * under which to store the result. Defaults to ['x','y'].\n */\nfunction GeoPoint(params) {\n Transform.call(this, null, params);\n}\nGeoPoint.Definition = {\n 'type': 'GeoPoint',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection',\n 'required': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['x', 'y']\n }]\n};\ninherits(GeoPoint, Transform, {\n transform(_, pulse) {\n var proj = _.projection,\n lon = _.fields[0],\n lat = _.fields[1],\n as = _.as || ['x', 'y'],\n x = as[0],\n y = as[1],\n mod;\n function set(t) {\n const xy = proj([lon(t), lat(t)]);\n if (xy) {\n t[x] = xy[0];\n t[y] = xy[1];\n } else {\n t[x] = undefined;\n t[y] = undefined;\n }\n }\n if (_.modified()) {\n // parameters updated, reflow\n pulse = pulse.materialize().reflow(true).visit(pulse.SOURCE, set);\n } else {\n mod = pulse.modified(lon.fields) || pulse.modified(lat.fields);\n pulse.visit(mod ? pulse.ADD_MOD : pulse.ADD, set);\n }\n return pulse.modifies(as);\n }\n});\n\n/**\n * Annotate items with a geopath shape generator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='shape'] - The output field in which to store\n * the generated path data (default 'shape').\n */\nfunction GeoShape(params) {\n Transform.call(this, null, params);\n}\nGeoShape.Definition = {\n 'type': 'GeoShape',\n 'metadata': {\n 'modifies': true,\n 'nomod': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection'\n }, {\n 'name': 'field',\n 'type': 'field',\n 'default': 'datum'\n }, {\n 'name': 'pointRadius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'shape'\n }]\n};\ninherits(GeoShape, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n shape = this.value,\n as = _.as || 'shape',\n flag = out.ADD;\n if (!shape || _.modified()) {\n // parameters updated, reset and reflow\n this.value = shape = shapeGenerator(getProjectionPath(_.projection), _.field || field('datum'), _.pointRadius);\n out.materialize().reflow();\n flag = out.SOURCE;\n }\n out.visit(flag, t => t[as] = shape);\n return out.modifies(as);\n }\n});\nfunction shapeGenerator(path, field, pointRadius) {\n const shape = pointRadius == null ? _ => path(field(_)) : _ => {\n var prev = path.pointRadius(),\n value = path.pointRadius(pointRadius)(field(_));\n path.pointRadius(prev);\n return value;\n };\n shape.context = _ => {\n path.context(_);\n return shape;\n };\n return shape;\n}\n\n/**\n * GeoJSON feature generator for creating graticules.\n * @constructor\n */\nfunction Graticule(params) {\n Transform.call(this, [], params);\n this.generator = geoGraticule();\n}\nGraticule.Definition = {\n 'type': 'Graticule',\n 'metadata': {\n 'changes': true,\n 'generates': true\n },\n 'params': [{\n 'name': 'extent',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'extentMajor',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'extentMinor',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'step',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'stepMajor',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'default': [90, 360]\n }, {\n 'name': 'stepMinor',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'default': [10, 10]\n }, {\n 'name': 'precision',\n 'type': 'number',\n 'default': 2.5\n }]\n};\ninherits(Graticule, Transform, {\n transform(_, pulse) {\n var src = this.value,\n gen = this.generator,\n t;\n if (!src.length || _.modified()) {\n for (const prop in _) {\n if (isFunction(gen[prop])) {\n gen[prop](_[prop]);\n }\n }\n }\n t = gen();\n if (src.length) {\n pulse.mod.push(replace(src[0], t));\n } else {\n pulse.add.push(ingest(t));\n }\n src[0] = t;\n return pulse;\n }\n});\n\n/**\n * Render a heatmap image for input raster grid data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} [params.field] - The field with raster grid\n * data. If unspecified, the tuple itself is interpreted as a raster grid.\n * @param {string} [params.color] - A constant color value or function for\n * individual pixel color. If a function, it will be invoked with an input\n * object that includes $x, $y, $value, and $max fields for the grid.\n * @param {number} [params.opacity] - A constant opacity value or function for\n * individual pixel opacity. If a function, it will be invoked with an input\n * object that includes $x, $y, $value, and $max fields for the grid.\n * @param {string} [params.resolve] - The method for resolving maximum values\n * across multiple input grids. If 'independent' (the default), maximum\n * calculation will be performed separately for each grid. If 'shared',\n * a single global maximum will be used for all input grids.\n * @param {string} [params.as='image'] - The output field in which to store\n * the generated bitmap canvas images (default 'image').\n */\nfunction Heatmap(params) {\n Transform.call(this, null, params);\n}\nHeatmap.Definition = {\n 'type': 'heatmap',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'color',\n 'type': 'string',\n 'expr': true\n }, {\n 'name': 'opacity',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'image'\n }]\n};\ninherits(Heatmap, Transform, {\n transform(_, pulse) {\n if (!pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n var source = pulse.materialize(pulse.SOURCE).source,\n shared = _.resolve === 'shared',\n field = _.field || identity,\n opacity = opacity_(_.opacity, _),\n color = color_(_.color, _),\n as = _.as || 'image',\n obj = {\n $x: 0,\n $y: 0,\n $value: 0,\n $max: shared ? max(source.map(t => max(field(t).values))) : 0\n };\n source.forEach(t => {\n const v = field(t);\n\n // build proxy data object\n const o = extend({}, t, obj);\n // set maximum value if not globally shared\n if (!shared) o.$max = max(v.values || []);\n\n // generate canvas image\n // optimize color/opacity if not pixel-dependent\n t[as] = toCanvas(v, o, color.dep ? color : constant(color(o)), opacity.dep ? opacity : constant(opacity(o)));\n });\n return pulse.reflow(true).modifies(as);\n }\n});\n\n// get image color function\nfunction color_(color, _) {\n let f;\n if (isFunction(color)) {\n f = obj => rgb(color(obj, _));\n f.dep = dependency(color);\n } else {\n // default to mid-grey\n f = constant(rgb(color || '#888'));\n }\n return f;\n}\n\n// get image opacity function\nfunction opacity_(opacity, _) {\n let f;\n if (isFunction(opacity)) {\n f = obj => opacity(obj, _);\n f.dep = dependency(opacity);\n } else if (opacity) {\n f = constant(opacity);\n } else {\n // default to [0, max] opacity gradient\n f = obj => obj.$value / obj.$max || 0;\n f.dep = true;\n }\n return f;\n}\n\n// check if function depends on individual pixel data\nfunction dependency(f) {\n if (!isFunction(f)) return false;\n const set = toSet(accessorFields(f));\n return set.$x || set.$y || set.$value || set.$max;\n}\n\n// render raster grid to canvas\nfunction toCanvas(grid, obj, color, opacity) {\n const n = grid.width,\n m = grid.height,\n x1 = grid.x1 || 0,\n y1 = grid.y1 || 0,\n x2 = grid.x2 || n,\n y2 = grid.y2 || m,\n val = grid.values,\n value = val ? i => val[i] : zero,\n can = canvas(x2 - x1, y2 - y1),\n ctx = can.getContext('2d'),\n img = ctx.getImageData(0, 0, x2 - x1, y2 - y1),\n pix = img.data;\n for (let j = y1, k = 0; j < y2; ++j) {\n obj.$y = j - y1;\n for (let i = x1, r = j * n; i < x2; ++i, k += 4) {\n obj.$x = i - x1;\n obj.$value = value(i + r);\n const v = color(obj);\n pix[k + 0] = v.r;\n pix[k + 1] = v.g;\n pix[k + 2] = v.b;\n pix[k + 3] = ~~(255 * opacity(obj));\n }\n }\n ctx.putImageData(img, 0, 0);\n return can;\n}\n\n/**\n * Maintains a cartographic projection.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Projection(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\n\ninherits(Projection, Transform, {\n transform(_, pulse) {\n let proj = this.value;\n if (!proj || _.modified('type')) {\n this.value = proj = create(_.type);\n projectionProperties.forEach(prop => {\n if (_[prop] != null) set(proj, prop, _[prop]);\n });\n } else {\n projectionProperties.forEach(prop => {\n if (_.modified(prop)) set(proj, prop, _[prop]);\n });\n }\n if (_.pointRadius != null) proj.path.pointRadius(_.pointRadius);\n if (_.fit) fit(proj, _);\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n }\n});\nfunction fit(proj, _) {\n const data = collectGeoJSON(_.fit);\n _.extent ? proj.fitExtent(_.extent, data) : _.size ? proj.fitSize(_.size, data) : 0;\n}\nfunction create(type) {\n const constructor = projection((type || 'mercator').toLowerCase());\n if (!constructor) error('Unrecognized projection type: ' + type);\n return constructor();\n}\nfunction set(proj, key, value) {\n if (isFunction(proj[key])) proj[key](value);\n}\nfunction collectGeoJSON(data) {\n data = array(data);\n return data.length === 1 ? data[0] : {\n type: FeatureCollection,\n features: data.reduce((a, f) => a.concat(featurize(f)), [])\n };\n}\nfunction featurize(f) {\n return f.type === FeatureCollection ? f.features : array(f).filter(d => d != null).map(d => d.type === Feature ? d : {\n type: Feature,\n geometry: d\n });\n}\n\nexport { Contour as contour, GeoJSON as geojson, GeoPath as geopath, GeoPoint as geopoint, GeoShape as geoshape, Graticule as graticule, Heatmap as heatmap, Isocontour as isocontour, KDE2D as kde2d, Projection as projection };\n","import { Transform } from 'vega-dataflow';\nimport { inherits, array, isFunction, accessorFields, hasOwnProperty, error } from 'vega-util';\nimport { forceSimulation, forceCenter, forceCollide, forceManyBody, forceLink, forceX, forceY } from 'd3-force';\n\nconst ForceMap = {\n center: forceCenter,\n collide: forceCollide,\n nbody: forceManyBody,\n link: forceLink,\n x: forceX,\n y: forceY\n};\nconst Forces = 'forces',\n ForceParams = ['alpha', 'alphaMin', 'alphaTarget', 'velocityDecay', 'forces'],\n ForceConfig = ['static', 'iterations'],\n ForceOutput = ['x', 'y', 'vx', 'vy'];\n\n/**\n * Force simulation layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.forces - The forces to apply.\n */\nfunction Force(params) {\n Transform.call(this, null, params);\n}\nForce.Definition = {\n 'type': 'Force',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'static',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'restart',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 300\n }, {\n 'name': 'alpha',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'alphaMin',\n 'type': 'number',\n 'default': 0.001\n }, {\n 'name': 'alphaTarget',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'velocityDecay',\n 'type': 'number',\n 'default': 0.4\n }, {\n 'name': 'forces',\n 'type': 'param',\n 'array': true,\n 'params': [{\n 'key': {\n 'force': 'center'\n },\n 'params': [{\n 'name': 'x',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'y',\n 'type': 'number',\n 'default': 0\n }]\n }, {\n 'key': {\n 'force': 'collide'\n },\n 'params': [{\n 'name': 'radius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.7\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 1\n }]\n }, {\n 'key': {\n 'force': 'nbody'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': -30,\n 'expr': true\n }, {\n 'name': 'theta',\n 'type': 'number',\n 'default': 0.9\n }, {\n 'name': 'distanceMin',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'distanceMax',\n 'type': 'number'\n }]\n }, {\n 'key': {\n 'force': 'link'\n },\n 'params': [{\n 'name': 'links',\n 'type': 'data'\n }, {\n 'name': 'id',\n 'type': 'field'\n }, {\n 'name': 'distance',\n 'type': 'number',\n 'default': 30,\n 'expr': true\n }, {\n 'name': 'strength',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 1\n }]\n }, {\n 'key': {\n 'force': 'x'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.1\n }, {\n 'name': 'x',\n 'type': 'field'\n }]\n }, {\n 'key': {\n 'force': 'y'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.1\n }, {\n 'name': 'y',\n 'type': 'field'\n }]\n }]\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'modify': false,\n 'default': ForceOutput\n }]\n};\ninherits(Force, Transform, {\n transform(_, pulse) {\n var sim = this.value,\n change = pulse.changed(pulse.ADD_REM),\n params = _.modified(ForceParams),\n iters = _.iterations || 300;\n\n // configure simulation\n if (!sim) {\n this.value = sim = simulation(pulse.source, _);\n sim.on('tick', rerun(pulse.dataflow, this));\n if (!_.static) {\n change = true;\n sim.tick(); // ensure we run on init\n }\n\n pulse.modifies('index');\n } else {\n if (change) {\n pulse.modifies('index');\n sim.nodes(pulse.source);\n }\n if (params || pulse.changed(pulse.MOD)) {\n setup(sim, _, 0, pulse);\n }\n }\n\n // run simulation\n if (params || change || _.modified(ForceConfig) || pulse.changed() && _.restart) {\n sim.alpha(Math.max(sim.alpha(), _.alpha || 1)).alphaDecay(1 - Math.pow(sim.alphaMin(), 1 / iters));\n if (_.static) {\n for (sim.stop(); --iters >= 0;) sim.tick();\n } else {\n if (sim.stopped()) sim.restart();\n if (!change) return pulse.StopPropagation; // defer to sim ticks\n }\n }\n\n return this.finish(_, pulse);\n },\n finish(_, pulse) {\n const dataflow = pulse.dataflow;\n\n // inspect dependencies, touch link source data\n for (let args = this._argops, j = 0, m = args.length, arg; j < m; ++j) {\n arg = args[j];\n if (arg.name !== Forces || arg.op._argval.force !== 'link') {\n continue;\n }\n for (var ops = arg.op._argops, i = 0, n = ops.length, op; i < n; ++i) {\n if (ops[i].name === 'links' && (op = ops[i].op.source)) {\n dataflow.pulse(op, dataflow.changeset().reflow());\n break;\n }\n }\n }\n\n // reflow all nodes\n return pulse.reflow(_.modified()).modifies(ForceOutput);\n }\n});\nfunction rerun(df, op) {\n return () => df.touch(op).run();\n}\nfunction simulation(nodes, _) {\n const sim = forceSimulation(nodes),\n stop = sim.stop,\n restart = sim.restart;\n let stopped = false;\n sim.stopped = () => stopped;\n sim.restart = () => (stopped = false, restart());\n sim.stop = () => (stopped = true, stop());\n return setup(sim, _, true).on('end', () => stopped = true);\n}\nfunction setup(sim, _, init, pulse) {\n var f = array(_.forces),\n i,\n n,\n p,\n name;\n for (i = 0, n = ForceParams.length; i < n; ++i) {\n p = ForceParams[i];\n if (p !== Forces && _.modified(p)) sim[p](_[p]);\n }\n for (i = 0, n = f.length; i < n; ++i) {\n name = Forces + i;\n p = init || _.modified(Forces, i) ? getForce(f[i]) : pulse && modified(f[i], pulse) ? sim.force(name) : null;\n if (p) sim.force(name, p);\n }\n for (n = sim.numForces || 0; i < n; ++i) {\n sim.force(Forces + i, null); // remove\n }\n\n sim.numForces = f.length;\n return sim;\n}\nfunction modified(f, pulse) {\n var k, v;\n for (k in f) {\n if (isFunction(v = f[k]) && pulse.modified(accessorFields(v))) return 1;\n }\n return 0;\n}\nfunction getForce(_) {\n var f, p;\n if (!hasOwnProperty(ForceMap, _.force)) {\n error('Unrecognized force: ' + _.force);\n }\n f = ForceMap[_.force]();\n for (p in _) {\n if (isFunction(f[p])) setForceParam(f[p], _[p], _);\n }\n return f;\n}\nfunction setForceParam(f, v, _) {\n f(isFunction(v) ? d => v(d, _) : v);\n}\n\nexport { Force as force };\n","import { Transform, isTuple, ingest, tupleid, stableCompare } from 'vega-dataflow';\nimport { inherits, error, array, one, truthy, hasOwnProperty } from 'vega-util';\nimport { hierarchy, pack, partition, stratify, tree, cluster, treemap, treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, treemapResquarify } from 'd3-hierarchy';\n\n// Build lookup table mapping tuple keys to tree node instances\nfunction lookup (tree, key, filter) {\n const map = {};\n tree.each(node => {\n const t = node.data;\n if (filter(t)) map[key(t)] = node;\n });\n tree.lookup = map;\n return tree;\n}\n\n/**\n * Nest tuples into a tree structure, grouped by key values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.keys - The key fields to nest by, in order.\n * @param {boolean} [params.generate=false] - A boolean flag indicating if\n * non-leaf nodes generated by this transform should be included in the\n * output. The default (false) includes only the input data (leaf nodes)\n * in the data stream.\n */\nfunction Nest(params) {\n Transform.call(this, null, params);\n}\nNest.Definition = {\n 'type': 'Nest',\n 'metadata': {\n 'treesource': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'keys',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'generate',\n 'type': 'boolean'\n }]\n};\nconst children = n => n.values;\ninherits(Nest, Transform, {\n transform(_, pulse) {\n if (!pulse.source) {\n error('Nest transform requires an upstream data source.');\n }\n var gen = _.generate,\n mod = _.modified(),\n out = pulse.clone(),\n tree = this.value;\n if (!tree || mod || pulse.changed()) {\n // collect nodes to remove\n if (tree) {\n tree.each(node => {\n if (node.children && isTuple(node.data)) {\n out.rem.push(node.data);\n }\n });\n }\n\n // generate new tree structure\n this.value = tree = hierarchy({\n values: array(_.keys).reduce((n, k) => {\n n.key(k);\n return n;\n }, nest()).entries(out.source)\n }, children);\n\n // collect nodes to add\n if (gen) {\n tree.each(node => {\n if (node.children) {\n node = ingest(node.data);\n out.add.push(node);\n out.source.push(node);\n }\n });\n }\n\n // build lookup table\n lookup(tree, tupleid, tupleid);\n }\n out.source.root = tree;\n return out;\n }\n});\nfunction nest() {\n const keys = [],\n nest = {\n entries: array => entries(apply(array, 0), 0),\n key: d => (keys.push(d), nest)\n };\n function apply(array, depth) {\n if (depth >= keys.length) {\n return array;\n }\n const n = array.length,\n key = keys[depth++],\n valuesByKey = {},\n result = {};\n let i = -1,\n keyValue,\n value,\n values;\n while (++i < n) {\n keyValue = key(value = array[i]) + '';\n if (values = valuesByKey[keyValue]) {\n values.push(value);\n } else {\n valuesByKey[keyValue] = [value];\n }\n }\n for (keyValue in valuesByKey) {\n result[keyValue] = apply(valuesByKey[keyValue], depth);\n }\n return result;\n }\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n const array = [];\n for (const key in map) {\n array.push({\n key,\n values: entries(map[key], depth)\n });\n }\n return array;\n }\n return nest;\n}\n\n/**\n * Abstract class for tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction HierarchyLayout(params) {\n Transform.call(this, null, params);\n}\nconst defaultSeparation = (a, b) => a.parent === b.parent ? 1 : 2;\ninherits(HierarchyLayout, Transform, {\n transform(_, pulse) {\n if (!pulse.source || !pulse.source.root) {\n error(this.constructor.name + ' transform requires a backing tree data source.');\n }\n const layout = this.layout(_.method),\n fields = this.fields,\n root = pulse.source.root,\n as = _.as || fields;\n if (_.field) root.sum(_.field);else root.count();\n if (_.sort) root.sort(stableCompare(_.sort, d => d.data));\n setParams(layout, this.params, _);\n if (layout.separation) {\n layout.separation(_.separation !== false ? defaultSeparation : one);\n }\n try {\n this.value = layout(root);\n } catch (err) {\n error(err);\n }\n root.each(node => setFields(node, fields, as));\n return pulse.reflow(_.modified()).modifies(as).modifies('leaf');\n }\n});\nfunction setParams(layout, params, _) {\n for (let p, i = 0, n = params.length; i < n; ++i) {\n p = params[i];\n if (p in _) layout[p](_[p]);\n }\n}\nfunction setFields(node, fields, as) {\n const t = node.data,\n n = fields.length - 1;\n for (let i = 0; i < n; ++i) {\n t[as[i]] = node[fields[i]];\n }\n t[as[n]] = node.children ? node.children.length : 0;\n}\n\nconst Output$3 = ['x', 'y', 'r', 'depth', 'children'];\n\n/**\n * Packed circle tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\nfunction Pack(params) {\n HierarchyLayout.call(this, params);\n}\nPack.Definition = {\n 'type': 'Pack',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'radius',\n 'type': 'field',\n 'default': null\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$3.length,\n 'default': Output$3\n }]\n};\ninherits(Pack, HierarchyLayout, {\n layout: pack,\n params: ['radius', 'size', 'padding'],\n fields: Output$3\n});\n\nconst Output$2 = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n\n/**\n * Partition tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\nfunction Partition(params) {\n HierarchyLayout.call(this, params);\n}\nPartition.Definition = {\n 'type': 'Partition',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'round',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$2.length,\n 'default': Output$2\n }]\n};\ninherits(Partition, HierarchyLayout, {\n layout: partition,\n params: ['size', 'round', 'padding'],\n fields: Output$2\n});\n\n/**\n * Stratify a collection of tuples into a tree structure based on\n * id and parent id fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.key - Unique key field for each tuple.\n * @param {function(object): *} params.parentKey - Field with key for parent tuple.\n */\nfunction Stratify(params) {\n Transform.call(this, null, params);\n}\nStratify.Definition = {\n 'type': 'Stratify',\n 'metadata': {\n 'treesource': true\n },\n 'params': [{\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'parentKey',\n 'type': 'field',\n 'required': true\n }]\n};\ninherits(Stratify, Transform, {\n transform(_, pulse) {\n if (!pulse.source) {\n error('Stratify transform requires an upstream data source.');\n }\n let tree = this.value;\n const mod = _.modified(),\n out = pulse.fork(pulse.ALL).materialize(pulse.SOURCE),\n run = !tree || mod || pulse.changed(pulse.ADD_REM) || pulse.modified(_.key.fields) || pulse.modified(_.parentKey.fields);\n\n // prevent upstream source pollution\n out.source = out.source.slice();\n if (run) {\n tree = out.source.length ? lookup(stratify().id(_.key).parentId(_.parentKey)(out.source), _.key, truthy) : lookup(stratify()([{}]), _.key, _.key);\n }\n out.source.root = this.value = tree;\n return out;\n }\n});\n\nconst Layouts = {\n tidy: tree,\n cluster: cluster\n};\nconst Output$1 = ['x', 'y', 'depth', 'children'];\n\n/**\n * Tree layout. Depending on the method parameter, performs either\n * Reingold-Tilford 'tidy' layout or dendrogram 'cluster' layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Tree(params) {\n HierarchyLayout.call(this, params);\n}\nTree.Definition = {\n 'type': 'Tree',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'tidy',\n 'values': ['tidy', 'cluster']\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'nodeSize',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'separation',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$1.length,\n 'default': Output$1\n }]\n};\ninherits(Tree, HierarchyLayout, {\n /**\n * Tree layout generator. Supports both 'tidy' and 'cluster' layouts.\n */\n layout(method) {\n const m = method || 'tidy';\n if (hasOwnProperty(Layouts, m)) return Layouts[m]();else error('Unrecognized Tree layout method: ' + m);\n },\n params: ['size', 'nodeSize'],\n fields: Output$1\n});\n\n/**\n * Generate tuples representing links between tree nodes.\n * The resulting tuples will contain 'source' and 'target' fields,\n * which point to parent and child node tuples, respectively.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction TreeLinks(params) {\n Transform.call(this, [], params);\n}\nTreeLinks.Definition = {\n 'type': 'TreeLinks',\n 'metadata': {\n 'tree': true,\n 'generates': true,\n 'changes': true\n },\n 'params': []\n};\ninherits(TreeLinks, Transform, {\n transform(_, pulse) {\n const links = this.value,\n tree = pulse.source && pulse.source.root,\n out = pulse.fork(pulse.NO_SOURCE),\n lut = {};\n if (!tree) error('TreeLinks transform requires a tree data source.');\n if (pulse.changed(pulse.ADD_REM)) {\n // remove previous links\n out.rem = links;\n\n // build lookup table of valid tuples\n pulse.visit(pulse.SOURCE, t => lut[tupleid(t)] = 1);\n\n // generate links for all edges incident on valid tuples\n tree.each(node => {\n const t = node.data,\n p = node.parent && node.parent.data;\n if (p && lut[tupleid(t)] && lut[tupleid(p)]) {\n out.add.push(ingest({\n source: p,\n target: t\n }));\n }\n });\n this.value = out.add;\n } else if (pulse.changed(pulse.MOD)) {\n // build lookup table of modified tuples\n pulse.visit(pulse.MOD, t => lut[tupleid(t)] = 1);\n\n // gather links incident on modified tuples\n links.forEach(link => {\n if (lut[tupleid(link.source)] || lut[tupleid(link.target)]) {\n out.mod.push(link);\n }\n });\n }\n return out;\n }\n});\n\nconst Tiles = {\n binary: treemapBinary,\n dice: treemapDice,\n slice: treemapSlice,\n slicedice: treemapSliceDice,\n squarify: treemapSquarify,\n resquarify: treemapResquarify\n};\nconst Output = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n\n/**\n * Treemap layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\nfunction Treemap(params) {\n HierarchyLayout.call(this, params);\n}\nTreemap.Definition = {\n 'type': 'Treemap',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'squarify',\n 'values': ['squarify', 'resquarify', 'binary', 'dice', 'slice', 'slicedice']\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingInner',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingOuter',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingTop',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingRight',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingBottom',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingLeft',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'ratio',\n 'type': 'number',\n 'default': 1.618033988749895\n }, {\n 'name': 'round',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output.length,\n 'default': Output\n }]\n};\ninherits(Treemap, HierarchyLayout, {\n /**\n * Treemap layout generator. Adds 'method' and 'ratio' parameters\n * to configure the underlying tile method.\n */\n layout() {\n const x = treemap();\n x.ratio = _ => {\n const t = x.tile();\n if (t.ratio) x.tile(t.ratio(_));\n };\n x.method = _ => {\n if (hasOwnProperty(Tiles, _)) x.tile(Tiles[_]);else error('Unrecognized Treemap layout method: ' + _);\n };\n return x;\n },\n params: ['method', 'ratio', 'size', 'round', 'padding', 'paddingInner', 'paddingOuter', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'],\n fields: Output\n});\n\nexport { Nest as nest, Pack as pack, Partition as partition, Stratify as stratify, Tree as tree, TreeLinks as treelinks, Treemap as treemap };\n","import { Marks, textMetrics } from 'vega-scenegraph';\nimport { canvas } from 'vega-canvas';\nimport { rederive, Transform } from 'vega-dataflow';\nimport { inherits, error, array, isFunction } from 'vega-util';\n\n// bit mask for getting first 2 bytes of alpha value\nconst ALPHA_MASK = 0xff000000;\nfunction baseBitmaps($, data) {\n const bitmap = $.bitmap();\n // when there is no base mark but data points are to be avoided\n (data || []).forEach(d => bitmap.set($(d.boundary[0]), $(d.boundary[3])));\n return [bitmap, undefined];\n}\nfunction markBitmaps($, baseMark, avoidMarks, labelInside, isGroupArea) {\n // create canvas\n const width = $.width,\n height = $.height,\n border = labelInside || isGroupArea,\n context = canvas(width, height).getContext('2d'),\n baseMarkContext = canvas(width, height).getContext('2d'),\n strokeContext = border && canvas(width, height).getContext('2d');\n\n // render all marks to be avoided into canvas\n avoidMarks.forEach(items => draw(context, items, false));\n draw(baseMarkContext, baseMark, false);\n if (border) {\n draw(strokeContext, baseMark, true);\n }\n\n // get canvas buffer, create bitmaps\n const buffer = getBuffer(context, width, height),\n baseMarkBuffer = getBuffer(baseMarkContext, width, height),\n strokeBuffer = border && getBuffer(strokeContext, width, height),\n layer1 = $.bitmap(),\n layer2 = border && $.bitmap();\n\n // populate bitmap layers\n let x, y, u, v, index, alpha, strokeAlpha, baseMarkAlpha;\n for (y = 0; y < height; ++y) {\n for (x = 0; x < width; ++x) {\n index = y * width + x;\n alpha = buffer[index] & ALPHA_MASK;\n baseMarkAlpha = baseMarkBuffer[index] & ALPHA_MASK;\n strokeAlpha = border && strokeBuffer[index] & ALPHA_MASK;\n if (alpha || strokeAlpha || baseMarkAlpha) {\n u = $(x);\n v = $(y);\n if (!isGroupArea && (alpha || baseMarkAlpha)) layer1.set(u, v); // update interior bitmap\n if (border && (alpha || strokeAlpha)) layer2.set(u, v); // update border bitmap\n }\n }\n }\n\n return [layer1, layer2];\n}\nfunction getBuffer(context, width, height) {\n return new Uint32Array(context.getImageData(0, 0, width, height).data.buffer);\n}\nfunction draw(context, items, interior) {\n if (!items.length) return;\n const type = items[0].mark.marktype;\n if (type === 'group') {\n items.forEach(group => {\n group.items.forEach(mark => draw(context, mark.items, interior));\n });\n } else {\n Marks[type].draw(context, {\n items: interior ? items.map(prepare) : items\n });\n }\n}\n\n/**\n * Prepare item before drawing into canvas (setting stroke and opacity)\n * @param {object} source item to be prepared\n * @returns prepared item\n */\nfunction prepare(source) {\n const item = rederive(source, {});\n if (item.stroke && item.strokeOpacity !== 0 || item.fill && item.fillOpacity !== 0) {\n return {\n ...item,\n strokeOpacity: 1,\n stroke: '#000',\n fillOpacity: 0\n };\n }\n return item;\n}\n\nconst DIV = 5,\n // bit shift from x, y index to bit vector array index\n MOD = 31,\n // bit mask for index lookup within a bit vector\n SIZE = 32,\n // individual bit vector size\n RIGHT0 = new Uint32Array(SIZE + 1),\n // left-anchored bit vectors, full -> 0\n RIGHT1 = new Uint32Array(SIZE + 1); // right-anchored bit vectors, 0 -> full\n\nRIGHT1[0] = 0;\nRIGHT0[0] = ~RIGHT1[0];\nfor (let i = 1; i <= SIZE; ++i) {\n RIGHT1[i] = RIGHT1[i - 1] << 1 | 1;\n RIGHT0[i] = ~RIGHT1[i];\n}\nfunction Bitmap (w, h) {\n const array = new Uint32Array(~~((w * h + SIZE) / SIZE));\n function _set(index, mask) {\n array[index] |= mask;\n }\n function _clear(index, mask) {\n array[index] &= mask;\n }\n return {\n array: array,\n get: (x, y) => {\n const index = y * w + x;\n return array[index >>> DIV] & 1 << (index & MOD);\n },\n set: (x, y) => {\n const index = y * w + x;\n _set(index >>> DIV, 1 << (index & MOD));\n },\n clear: (x, y) => {\n const index = y * w + x;\n _clear(index >>> DIV, ~(1 << (index & MOD)));\n },\n getRange: (x, y, x2, y2) => {\n let r = y2,\n start,\n end,\n indexStart,\n indexEnd;\n for (; r >= y; --r) {\n start = r * w + x;\n end = r * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n if (array[indexStart] & RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]) {\n return true;\n }\n } else {\n if (array[indexStart] & RIGHT0[start & MOD]) return true;\n if (array[indexEnd] & RIGHT1[(end & MOD) + 1]) return true;\n for (let i = indexStart + 1; i < indexEnd; ++i) {\n if (array[i]) return true;\n }\n }\n }\n return false;\n },\n setRange: (x, y, x2, y2) => {\n let start, end, indexStart, indexEnd, i;\n for (; y <= y2; ++y) {\n start = y * w + x;\n end = y * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n _set(indexStart, RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]);\n } else {\n _set(indexStart, RIGHT0[start & MOD]);\n _set(indexEnd, RIGHT1[(end & MOD) + 1]);\n for (i = indexStart + 1; i < indexEnd; ++i) _set(i, 0xffffffff);\n }\n }\n },\n clearRange: (x, y, x2, y2) => {\n let start, end, indexStart, indexEnd, i;\n for (; y <= y2; ++y) {\n start = y * w + x;\n end = y * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n _clear(indexStart, RIGHT1[start & MOD] | RIGHT0[(end & MOD) + 1]);\n } else {\n _clear(indexStart, RIGHT1[start & MOD]);\n _clear(indexEnd, RIGHT0[(end & MOD) + 1]);\n for (i = indexStart + 1; i < indexEnd; ++i) _clear(i, 0);\n }\n }\n },\n outOfBounds: (x, y, x2, y2) => x < 0 || y < 0 || y2 >= h || x2 >= w\n };\n}\n\nfunction scaler (width, height, padding) {\n const ratio = Math.max(1, Math.sqrt(width * height / 1e6)),\n w = ~~((width + 2 * padding + ratio) / ratio),\n h = ~~((height + 2 * padding + ratio) / ratio),\n scale = _ => ~~((_ + padding) / ratio);\n scale.invert = _ => _ * ratio - padding;\n scale.bitmap = () => Bitmap(w, h);\n scale.ratio = ratio;\n scale.padding = padding;\n scale.width = width;\n scale.height = height;\n return scale;\n}\n\nfunction placeAreaLabelNaive ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height;\n\n // try to place a label within an input area mark\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text); // label height\n\n let maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n areaWidth;\n\n // for each area sample point\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2;\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n if (areaWidth >= maxAreaWidth) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n }\n }\n x = textWidth / 2;\n y = textHeight / 2;\n x1 = d.x - x;\n x2 = d.x + x;\n y1 = d.y - y;\n y2 = d.y + y;\n d.align = 'center';\n if (x1 < 0 && x2 <= width) {\n d.align = 'left';\n } else if (0 <= x1 && width < x2) {\n d.align = 'right';\n }\n d.baseline = 'middle';\n if (y1 < 0 && y2 <= height) {\n d.baseline = 'top';\n } else if (0 <= y1 && height < y2) {\n d.baseline = 'bottom';\n }\n return true;\n };\n}\n\nfunction outOfBounds(x, y, textWidth, textHeight, width, height) {\n let r = textWidth / 2;\n return x - r < 0 || x + r > width || y - (r = textHeight / 2) < 0 || y + r > height;\n}\nfunction collision($, x, y, textHeight, textWidth, h, bm0, bm1) {\n const w = textWidth * h / (textHeight * 2),\n x1 = $(x - w),\n x2 = $(x + w),\n y1 = $(y - (h = h / 2)),\n y2 = $(y + h);\n return bm0.outOfBounds(x1, y1, x2, y2) || bm0.getRange(x1, y1, x2, y2) || bm1 && bm1.getRange(x1, y1, x2, y2);\n}\n\nfunction placeAreaLabelReducedSearch ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n // where labels have been placed\n bm1 = bitmaps[1]; // area outlines\n\n function tryLabel(_x, _y, maxSize, textWidth, textHeight) {\n const x = $.invert(_x),\n y = $.invert(_y);\n let lo = maxSize,\n hi = height,\n mid;\n if (!outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, lo, bm0, bm1) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n // if the label fits at the current sample point,\n // perform binary search to find the largest font size that fits\n while (hi - lo >= 1) {\n mid = (lo + hi) / 2;\n if (collision($, x, y, textHeight, textWidth, mid, bm0, bm1)) {\n hi = mid;\n } else {\n lo = mid;\n }\n }\n // place label if current lower bound exceeds prior max font size\n if (lo > maxSize) {\n return [x, y, lo, true];\n }\n }\n }\n\n // try to place a label within an input area mark\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text); // label height\n\n let maxSize = avoidBaseMark ? textHeight : 0,\n labelPlaced = false,\n labelPlaced2 = false,\n maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n _x,\n _y,\n _x1,\n _xMid,\n _x2,\n _y1,\n _yMid,\n _y2,\n areaWidth,\n result,\n swapTmp;\n\n // for each area sample point\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n if (x1 > x2) {\n swapTmp = x1;\n x1 = x2;\n x2 = swapTmp;\n }\n if (y1 > y2) {\n swapTmp = y1;\n y1 = y2;\n y2 = swapTmp;\n }\n _x1 = $(x1);\n _x2 = $(x2);\n _xMid = ~~((_x1 + _x2) / 2);\n _y1 = $(y1);\n _y2 = $(y2);\n _yMid = ~~((_y1 + _y2) / 2);\n\n // search along the line from mid point between the 2 border to lower border\n for (_x = _xMid; _x >= _x1; --_x) {\n for (_y = _yMid; _y >= _y1; --_y) {\n result = tryLabel(_x, _y, maxSize, textWidth, textHeight);\n if (result) {\n [d.x, d.y, maxSize, labelPlaced] = result;\n }\n }\n }\n\n // search along the line from mid point between the 2 border to upper border\n for (_x = _xMid; _x <= _x2; ++_x) {\n for (_y = _yMid; _y <= _y2; ++_y) {\n result = tryLabel(_x, _y, maxSize, textWidth, textHeight);\n if (result) {\n [d.x, d.y, maxSize, labelPlaced] = result;\n }\n }\n }\n\n // place label at slice center if not placed through other means\n // and if we're not avoiding overlap with other areas\n if (!labelPlaced && !avoidBaseMark) {\n // one span is zero, hence we can add\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2;\n\n // place label if it fits and improves the max area width\n if (areaWidth >= maxAreaWidth && !outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n labelPlaced2 = true;\n }\n }\n }\n\n // record current label placement information, update label bitmap\n if (labelPlaced || labelPlaced2) {\n x = textWidth / 2;\n y = textHeight / 2;\n bm0.setRange($(d.x - x), $(d.y - y), $(d.x + x), $(d.y + y));\n d.align = 'center';\n d.baseline = 'middle';\n return true;\n } else {\n return false;\n }\n };\n}\n\n// pixel direction offsets for flood fill search\nconst X_DIR = [-1, -1, 1, 1];\nconst Y_DIR = [-1, 1, -1, 1];\nfunction placeAreaLabelFloodFill ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n // where labels have been placed\n bm1 = bitmaps[1],\n // area outlines\n bm2 = $.bitmap(); // flood-fill visitations\n\n // try to place a label within an input area mark\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text),\n // label height\n stack = []; // flood fill stack\n\n let maxSize = avoidBaseMark ? textHeight : 0,\n labelPlaced = false,\n labelPlaced2 = false,\n maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n _x,\n _y,\n lo,\n hi,\n mid,\n areaWidth;\n\n // for each area sample point\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n\n // add scaled center point to stack\n stack.push([$((x1 + x2) / 2), $((y1 + y2) / 2)]);\n\n // perform flood fill, visit points\n while (stack.length) {\n [_x, _y] = stack.pop();\n\n // exit if point already marked\n if (bm0.get(_x, _y) || bm1.get(_x, _y) || bm2.get(_x, _y)) continue;\n\n // mark point in flood fill bitmap\n // add search points for all (in bound) directions\n bm2.set(_x, _y);\n for (let j = 0; j < 4; ++j) {\n x = _x + X_DIR[j];\n y = _y + Y_DIR[j];\n if (!bm2.outOfBounds(x, y, x, y)) stack.push([x, y]);\n }\n\n // unscale point back to x, y space\n x = $.invert(_x);\n y = $.invert(_y);\n lo = maxSize;\n hi = height; // TODO: make this bound smaller\n\n if (!outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, lo, bm0, bm1) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n // if the label fits at the current sample point,\n // perform binary search to find the largest font size that fits\n while (hi - lo >= 1) {\n mid = (lo + hi) / 2;\n if (collision($, x, y, textHeight, textWidth, mid, bm0, bm1)) {\n hi = mid;\n } else {\n lo = mid;\n }\n }\n // place label if current lower bound exceeds prior max font size\n if (lo > maxSize) {\n d.x = x;\n d.y = y;\n maxSize = lo;\n labelPlaced = true;\n }\n }\n }\n\n // place label at slice center if not placed through other means\n // and if we're not avoiding overlap with other areas\n if (!labelPlaced && !avoidBaseMark) {\n // one span is zero, hence we can add\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2;\n\n // place label if it fits and improves the max area width\n if (areaWidth >= maxAreaWidth && !outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n labelPlaced2 = true;\n }\n }\n }\n\n // record current label placement information, update label bitmap\n if (labelPlaced || labelPlaced2) {\n x = textWidth / 2;\n y = textHeight / 2;\n bm0.setRange($(d.x - x), $(d.y - y), $(d.x + x), $(d.y + y));\n d.align = 'center';\n d.baseline = 'middle';\n return true;\n } else {\n return false;\n }\n };\n}\n\nconst Aligns = ['right', 'center', 'left'],\n Baselines = ['bottom', 'middle', 'top'];\nfunction placeMarkLabel ($, bitmaps, anchors, offsets) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n bm1 = bitmaps[1],\n n = offsets.length;\n return function (d) {\n const boundary = d.boundary,\n textHeight = d.datum.fontSize;\n\n // can not be placed if the mark is not visible in the graph bound\n if (boundary[2] < 0 || boundary[5] < 0 || boundary[0] > width || boundary[3] > height) {\n return false;\n }\n let textWidth = d.textWidth ?? 0,\n dx,\n dy,\n isInside,\n sizeFactor,\n insideFactor,\n x1,\n x2,\n y1,\n y2,\n xc,\n yc,\n _x1,\n _x2,\n _y1,\n _y2;\n\n // for each anchor and offset\n for (let i = 0; i < n; ++i) {\n dx = (anchors[i] & 0x3) - 1;\n dy = (anchors[i] >>> 0x2 & 0x3) - 1;\n isInside = dx === 0 && dy === 0 || offsets[i] < 0;\n sizeFactor = dx && dy ? Math.SQRT1_2 : 1;\n insideFactor = offsets[i] < 0 ? -1 : 1;\n x1 = boundary[1 + dx] + offsets[i] * dx * sizeFactor;\n yc = boundary[4 + dy] + insideFactor * textHeight * dy / 2 + offsets[i] * dy * sizeFactor;\n y1 = yc - textHeight / 2;\n y2 = yc + textHeight / 2;\n _x1 = $(x1);\n _y1 = $(y1);\n _y2 = $(y2);\n if (!textWidth) {\n // to avoid finding width of text label,\n if (!test(_x1, _x1, _y1, _y2, bm0, bm1, x1, x1, y1, y2, boundary, isInside)) {\n // skip this anchor/offset option if we fail to place a label with 1px width\n continue;\n } else {\n // Otherwise, find the label width\n textWidth = textMetrics.width(d.datum, d.datum.text);\n }\n }\n xc = x1 + insideFactor * textWidth * dx / 2;\n x1 = xc - textWidth / 2;\n x2 = xc + textWidth / 2;\n _x1 = $(x1);\n _x2 = $(x2);\n if (test(_x1, _x2, _y1, _y2, bm0, bm1, x1, x2, y1, y2, boundary, isInside)) {\n // place label if the position is placeable\n d.x = !dx ? xc : dx * insideFactor < 0 ? x2 : x1;\n d.y = !dy ? yc : dy * insideFactor < 0 ? y2 : y1;\n d.align = Aligns[dx * insideFactor + 1];\n d.baseline = Baselines[dy * insideFactor + 1];\n bm0.setRange(_x1, _y1, _x2, _y2);\n return true;\n }\n }\n return false;\n };\n}\n\n// Test if a label with the given dimensions can be added without overlap\nfunction test(_x1, _x2, _y1, _y2, bm0, bm1, x1, x2, y1, y2, boundary, isInside) {\n return !(bm0.outOfBounds(_x1, _y1, _x2, _y2) || (isInside && bm1 || bm0).getRange(_x1, _y1, _x2, _y2));\n}\n\n// 8-bit representation of anchors\nconst TOP = 0x0,\n MIDDLE = 0x4,\n BOTTOM = 0x8,\n LEFT = 0x0,\n CENTER = 0x1,\n RIGHT = 0x2;\n\n// Mapping from text anchor to number representation\nconst anchorCode = {\n 'top-left': TOP + LEFT,\n 'top': TOP + CENTER,\n 'top-right': TOP + RIGHT,\n 'left': MIDDLE + LEFT,\n 'middle': MIDDLE + CENTER,\n 'right': MIDDLE + RIGHT,\n 'bottom-left': BOTTOM + LEFT,\n 'bottom': BOTTOM + CENTER,\n 'bottom-right': BOTTOM + RIGHT\n};\nconst placeAreaLabel = {\n 'naive': placeAreaLabelNaive,\n 'reduced-search': placeAreaLabelReducedSearch,\n 'floodfill': placeAreaLabelFloodFill\n};\nfunction labelLayout (texts, size, compare, offset, anchor, avoidMarks, avoidBaseMark, lineAnchor, markIndex, padding, method) {\n // early exit for empty data\n if (!texts.length) return texts;\n const positions = Math.max(offset.length, anchor.length),\n offsets = getOffsets(offset, positions),\n anchors = getAnchors(anchor, positions),\n marktype = markType(texts[0].datum),\n grouptype = marktype === 'group' && texts[0].datum.items[markIndex].marktype,\n isGroupArea = grouptype === 'area',\n boundary = markBoundary(marktype, grouptype, lineAnchor, markIndex),\n infPadding = padding === null || padding === Infinity,\n isNaiveGroupArea = isGroupArea && method === 'naive';\n let maxTextWidth = -1,\n maxTextHeight = -1;\n\n // prepare text mark data for placing\n const data = texts.map(d => {\n const textWidth = infPadding ? textMetrics.width(d, d.text) : undefined;\n maxTextWidth = Math.max(maxTextWidth, textWidth);\n maxTextHeight = Math.max(maxTextHeight, d.fontSize);\n return {\n datum: d,\n opacity: 0,\n x: undefined,\n y: undefined,\n align: undefined,\n baseline: undefined,\n boundary: boundary(d),\n textWidth\n };\n });\n padding = padding === null || padding === Infinity ? Math.max(maxTextWidth, maxTextHeight) + Math.max(...offset) : padding;\n const $ = scaler(size[0], size[1], padding);\n let bitmaps;\n if (!isNaiveGroupArea) {\n // sort labels in priority order, if comparator is provided\n if (compare) {\n data.sort((a, b) => compare(a.datum, b.datum));\n }\n\n // flag indicating if label can be placed inside its base mark\n let labelInside = false;\n for (let i = 0; i < anchors.length && !labelInside; ++i) {\n // label inside if anchor is at center\n // label inside if offset to be inside the mark bound\n labelInside = anchors[i] === 0x5 || offsets[i] < 0;\n }\n\n // extract data information from base mark when base mark is to be avoided\n // base mark is implicitly avoided if it is a group area\n const baseMark = (marktype && avoidBaseMark || isGroupArea) && texts.map(d => d.datum);\n\n // generate bitmaps for layout calculation\n bitmaps = avoidMarks.length || baseMark ? markBitmaps($, baseMark || [], avoidMarks, labelInside, isGroupArea) : baseBitmaps($, avoidBaseMark && data);\n }\n\n // generate label placement function\n const place = isGroupArea ? placeAreaLabel[method]($, bitmaps, avoidBaseMark, markIndex) : placeMarkLabel($, bitmaps, anchors, offsets);\n\n // place all labels\n data.forEach(d => d.opacity = +place(d));\n return data;\n}\nfunction getOffsets(_, count) {\n const offsets = new Float64Array(count),\n n = _.length;\n for (let i = 0; i < n; ++i) offsets[i] = _[i] || 0;\n for (let i = n; i < count; ++i) offsets[i] = offsets[n - 1];\n return offsets;\n}\nfunction getAnchors(_, count) {\n const anchors = new Int8Array(count),\n n = _.length;\n for (let i = 0; i < n; ++i) anchors[i] |= anchorCode[_[i]];\n for (let i = n; i < count; ++i) anchors[i] = anchors[n - 1];\n return anchors;\n}\nfunction markType(item) {\n return item && item.mark && item.mark.marktype;\n}\n\n/**\n * Factory function for function for getting base mark boundary, depending\n * on mark and group type. When mark type is undefined, line or area: boundary\n * is the coordinate of each data point. When base mark is grouped line,\n * boundary is either at the start or end of the line depending on the\n * value of lineAnchor. Otherwise, use bounds of base mark.\n */\nfunction markBoundary(marktype, grouptype, lineAnchor, markIndex) {\n const xy = d => [d.x, d.x, d.x, d.y, d.y, d.y];\n if (!marktype) {\n return xy; // no reactive geometry\n } else if (marktype === 'line' || marktype === 'area') {\n return d => xy(d.datum);\n } else if (grouptype === 'line') {\n return d => {\n const items = d.datum.items[markIndex].items;\n return xy(items.length ? items[lineAnchor === 'start' ? 0 : items.length - 1] : {\n x: NaN,\n y: NaN\n });\n };\n } else {\n return d => {\n const b = d.datum.bounds;\n return [b.x1, (b.x1 + b.x2) / 2, b.x2, b.y1, (b.y1 + b.y2) / 2, b.y2];\n };\n }\n}\n\nconst Output = ['x', 'y', 'opacity', 'align', 'baseline'];\nconst Anchors = ['top-left', 'left', 'bottom-left', 'top', 'bottom', 'top-right', 'right', 'bottom-right'];\n\n/**\n * Compute text label layout to annotate marks.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The size of the layout, provided as a [width, height] array.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting label data in priority order.\n * @param {Array} [params.anchor] - Label anchor points relative to the base mark bounding box.\n * The available options are 'top-left', 'left', 'bottom-left', 'top',\n * 'bottom', 'top-right', 'right', 'bottom-right', 'middle'.\n * @param {Array} [params.offset] - Label offsets (in pixels) from the base mark bounding box.\n * This parameter is parallel to the list of anchor points.\n * @param {number | null} [params.padding=0] - The amount (in pixels) that a label may exceed the layout size.\n * If this parameter is null, a label may exceed the layout size without any boundary.\n * @param {string} [params.lineAnchor='end'] - For group line mark labels only, indicates the anchor\n * position for labels. One of 'start' or 'end'.\n * @param {string} [params.markIndex=0] - For group mark labels only, an index indicating\n * which mark within the group should be labeled.\n * @param {Array} [params.avoidMarks] - A list of additional mark names for which the label\n * layout should avoid overlap.\n * @param {boolean} [params.avoidBaseMark=true] - Boolean flag indicating if labels should avoid\n * overlap with the underlying base mark being labeled.\n * @param {string} [params.method='naive'] - For area make labels only, a method for\n * place labels. One of 'naive', 'reduced-search', or 'floodfill'.\n * @param {Array} [params.as] - The output fields written by the transform.\n * The default is ['x', 'y', 'opacity', 'align', 'baseline'].\n */\nfunction Label(params) {\n Transform.call(this, null, params);\n}\nLabel.Definition = {\n type: 'Label',\n metadata: {\n modifies: true\n },\n params: [{\n name: 'size',\n type: 'number',\n array: true,\n length: 2,\n required: true\n }, {\n name: 'sort',\n type: 'compare'\n }, {\n name: 'anchor',\n type: 'string',\n array: true,\n default: Anchors\n }, {\n name: 'offset',\n type: 'number',\n array: true,\n default: [1]\n }, {\n name: 'padding',\n type: 'number',\n default: 0,\n null: true\n }, {\n name: 'lineAnchor',\n type: 'string',\n values: ['start', 'end'],\n default: 'end'\n }, {\n name: 'markIndex',\n type: 'number',\n default: 0\n }, {\n name: 'avoidBaseMark',\n type: 'boolean',\n default: true\n }, {\n name: 'avoidMarks',\n type: 'data',\n array: true\n }, {\n name: 'method',\n type: 'string',\n default: 'naive'\n }, {\n name: 'as',\n type: 'string',\n array: true,\n length: Output.length,\n default: Output\n }]\n};\ninherits(Label, Transform, {\n transform(_, pulse) {\n function modp(param) {\n const p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n const mod = _.modified();\n if (!(mod || pulse.changed(pulse.ADD_REM) || modp('sort'))) return;\n if (!_.size || _.size.length !== 2) {\n error('Size parameter should be specified as a [width, height] array.');\n }\n const as = _.as || Output;\n\n // run label layout\n labelLayout(pulse.materialize(pulse.SOURCE).source || [], _.size, _.sort, array(_.offset == null ? 1 : _.offset), array(_.anchor || Anchors), _.avoidMarks || [], _.avoidBaseMark !== false, _.lineAnchor || 'end', _.markIndex || 0, _.padding === undefined ? 0 : _.padding, _.method || 'naive').forEach(l => {\n // write layout results to data stream\n const t = l.datum;\n t[as[0]] = l.x;\n t[as[1]] = l.y;\n t[as[2]] = l.opacity;\n t[as[3]] = l.align;\n t[as[4]] = l.baseline;\n });\n return pulse.reflow(mod).modifies(as);\n }\n});\n\nexport { Label as label };\n","import { regressionLoess, sampleCurve, regressionConstant, regressionLinear, regressionLog, regressionExp, regressionPow, regressionQuad, regressionPoly } from 'vega-statistics';\nimport { Transform, ingest } from 'vega-dataflow';\nimport { inherits, accessorName, hasOwnProperty, error, extent } from 'vega-util';\n\nfunction partition (data, groupby) {\n var groups = [],\n get = function (f) {\n return f(t);\n },\n map,\n i,\n n,\n t,\n k,\n g;\n\n // partition data points into stack groups\n if (groupby == null) {\n groups.push(data);\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n g.push(t);\n }\n }\n return groups;\n}\n\n/**\n * Compute locally-weighted regression fits for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.x - An accessor for the predictor data field.\n * @param {function(object): *} params.y - An accessor for the predicted data field.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {number} [params.bandwidth=0.3] - The loess bandwidth.\n */\nfunction Loess(params) {\n Transform.call(this, null, params);\n}\nLoess.Definition = {\n 'type': 'Loess',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0.3\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Loess, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n m = names.length,\n as = _.as || [accessorName(_.x), accessorName(_.y)],\n values = [];\n groups.forEach(g => {\n regressionLoess(g, _.x, _.y, _.bandwidth || 0.3).forEach(p => {\n const t = {};\n for (let i = 0; i < m; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = p[0];\n t[as[1]] = p[1];\n values.push(ingest(t));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\n\nconst Methods = {\n constant: regressionConstant,\n linear: regressionLinear,\n log: regressionLog,\n exp: regressionExp,\n pow: regressionPow,\n quad: regressionQuad,\n poly: regressionPoly\n};\nconst degreesOfFreedom = (method, order) => method === 'poly' ? order : method === 'quad' ? 2 : 1;\n\n/**\n * Compute regression fits for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.x - An accessor for the predictor data field.\n * @param {function(object): *} params.y - An accessor for the predicted data field.\n * @param {string} [params.method='linear'] - The regression method to apply.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {Array} [params.extent] - The domain extent over which to plot the regression line.\n * @param {number} [params.order=3] - The polynomial order. Only applies to the 'poly' method.\n */\nfunction Regression(params) {\n Transform.call(this, null, params);\n}\nRegression.Definition = {\n 'type': 'Regression',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'method',\n 'type': 'string',\n 'default': 'linear',\n 'values': Object.keys(Methods)\n }, {\n 'name': 'order',\n 'type': 'number',\n 'default': 3\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'params',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Regression, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n method = _.method || 'linear',\n order = _.order == null ? 3 : _.order,\n dof = degreesOfFreedom(method, order),\n as = _.as || [accessorName(_.x), accessorName(_.y)],\n fit = Methods[method],\n values = [];\n let domain = _.extent;\n if (!hasOwnProperty(Methods, method)) {\n error('Invalid regression method: ' + method);\n }\n if (domain != null) {\n if (method === 'log' && domain[0] <= 0) {\n pulse.dataflow.warn('Ignoring extent with values <= 0 for log regression.');\n domain = null;\n }\n }\n groups.forEach(g => {\n const n = g.length;\n if (n <= dof) {\n pulse.dataflow.warn('Skipping regression with more parameters than data points.');\n return;\n }\n const model = fit(g, _.x, _.y, order);\n if (_.params) {\n // if parameter vectors requested return those\n values.push(ingest({\n keys: g.dims,\n coef: model.coef,\n rSquared: model.rSquared\n }));\n return;\n }\n const dom = domain || extent(g, _.x),\n add = p => {\n const t = {};\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = p[0];\n t[as[1]] = p[1];\n values.push(ingest(t));\n };\n if (method === 'linear' || method === 'constant') {\n // for linear or constant regression we only need the end points\n dom.forEach(x => add([x, model.predict(x)]));\n } else {\n // otherwise return trend line sample points\n sampleCurve(model.predict, dom, 25, 200).forEach(add);\n }\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\n\nexport { Loess as loess, Regression as regression };\n","import { Transform } from 'vega-dataflow';\nimport { inherits } from 'vega-util';\nimport { Delaunay } from 'd3-delaunay';\n\nfunction Voronoi(params) {\n Transform.call(this, null, params);\n}\nVoronoi.Definition = {\n 'type': 'Voronoi',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'extent',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'default': [[-1e5, -1e5], [1e5, 1e5]],\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\nconst defaultExtent = [-1e5, -1e5, 1e5, 1e5];\ninherits(Voronoi, Transform, {\n transform(_, pulse) {\n const as = _.as || 'path',\n data = pulse.source;\n\n // nothing to do if no data\n if (!data || !data.length) return pulse;\n\n // configure and construct voronoi diagram\n let s = _.size;\n s = s ? [0, 0, s[0], s[1]] : (s = _.extent) ? [s[0][0], s[0][1], s[1][0], s[1][1]] : defaultExtent;\n const voronoi = this.value = Delaunay.from(data, _.x, _.y).voronoi(s);\n\n // map polygons to paths\n for (let i = 0, n = data.length; i < n; ++i) {\n const polygon = voronoi.cellPolygon(i);\n data[i][as] = polygon ? toPathString(polygon) : null;\n }\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\n\n// suppress duplicated end point vertices\nfunction toPathString(p) {\n const x = p[0][0],\n y = p[0][1];\n let n = p.length - 1;\n for (; p[n][0] === x && p[n][1] === y; --n);\n return 'M' + p.slice(0, n + 1).join('L') + 'Z';\n}\n\nexport { Voronoi as voronoi };\n","import { canvas } from 'vega-canvas';\nimport { Transform } from 'vega-dataflow';\nimport { inherits, error, isFunction, constant, extent } from 'vega-util';\nimport { scale } from 'vega-scale';\nimport { random } from 'vega-statistics';\n\n/*\nCopyright (c) 2013, Jason Davies.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * The name Jason Davies may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\nOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\nADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/\n// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf\n\nvar cloudRadians = Math.PI / 180,\n cw = 1 << 11 >> 5,\n ch = 1 << 11;\nfunction cloud () {\n var size = [256, 256],\n text,\n font,\n fontSize,\n fontStyle,\n fontWeight,\n rotate,\n padding,\n spiral = archimedeanSpiral,\n words = [],\n random = Math.random,\n cloud = {};\n cloud.layout = function () {\n var contextAndRatio = getContext(canvas()),\n board = zeroArray((size[0] >> 5) * size[1]),\n bounds = null,\n n = words.length,\n i = -1,\n tags = [],\n data = words.map(d => ({\n text: text(d),\n font: font(d),\n style: fontStyle(d),\n weight: fontWeight(d),\n rotate: rotate(d),\n size: ~~(fontSize(d) + 1e-14),\n padding: padding(d),\n xoff: 0,\n yoff: 0,\n x1: 0,\n y1: 0,\n x0: 0,\n y0: 0,\n hasText: false,\n sprite: null,\n datum: d\n })).sort((a, b) => b.size - a.size);\n while (++i < n) {\n var d = data[i];\n d.x = size[0] * (random() + .5) >> 1;\n d.y = size[1] * (random() + .5) >> 1;\n cloudSprite(contextAndRatio, d, data, i);\n if (d.hasText && place(board, d, bounds)) {\n tags.push(d);\n if (bounds) cloudBounds(bounds, d);else bounds = [{\n x: d.x + d.x0,\n y: d.y + d.y0\n }, {\n x: d.x + d.x1,\n y: d.y + d.y1\n }];\n // Temporary hack\n d.x -= size[0] >> 1;\n d.y -= size[1] >> 1;\n }\n }\n return tags;\n };\n function getContext(canvas) {\n canvas.width = canvas.height = 1;\n var ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);\n canvas.width = (cw << 5) / ratio;\n canvas.height = ch / ratio;\n var context = canvas.getContext('2d');\n context.fillStyle = context.strokeStyle = 'red';\n context.textAlign = 'center';\n return {\n context: context,\n ratio: ratio\n };\n }\n function place(board, tag, bounds) {\n var startX = tag.x,\n startY = tag.y,\n maxDelta = Math.hypot(size[0], size[1]),\n s = spiral(size),\n dt = random() < .5 ? 1 : -1,\n t = -dt,\n dxdy,\n dx,\n dy;\n while (dxdy = s(t += dt)) {\n dx = ~~dxdy[0];\n dy = ~~dxdy[1];\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;\n tag.x = startX + dx;\n tag.y = startY + dy;\n if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue;\n // TODO only check for collisions within current bounds.\n if (!bounds || !cloudCollide(tag, board, size[0])) {\n if (!bounds || collideRects(tag, bounds)) {\n var sprite = tag.sprite,\n w = tag.width >> 5,\n sw = size[0] >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n board[x + i] |= last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n x += sw;\n }\n tag.sprite = null;\n return true;\n }\n }\n }\n return false;\n }\n cloud.words = function (_) {\n if (arguments.length) {\n words = _;\n return cloud;\n } else {\n return words;\n }\n };\n cloud.size = function (_) {\n if (arguments.length) {\n size = [+_[0], +_[1]];\n return cloud;\n } else {\n return size;\n }\n };\n cloud.font = function (_) {\n if (arguments.length) {\n font = functor(_);\n return cloud;\n } else {\n return font;\n }\n };\n cloud.fontStyle = function (_) {\n if (arguments.length) {\n fontStyle = functor(_);\n return cloud;\n } else {\n return fontStyle;\n }\n };\n cloud.fontWeight = function (_) {\n if (arguments.length) {\n fontWeight = functor(_);\n return cloud;\n } else {\n return fontWeight;\n }\n };\n cloud.rotate = function (_) {\n if (arguments.length) {\n rotate = functor(_);\n return cloud;\n } else {\n return rotate;\n }\n };\n cloud.text = function (_) {\n if (arguments.length) {\n text = functor(_);\n return cloud;\n } else {\n return text;\n }\n };\n cloud.spiral = function (_) {\n if (arguments.length) {\n spiral = spirals[_] || _;\n return cloud;\n } else {\n return spiral;\n }\n };\n cloud.fontSize = function (_) {\n if (arguments.length) {\n fontSize = functor(_);\n return cloud;\n } else {\n return fontSize;\n }\n };\n cloud.padding = function (_) {\n if (arguments.length) {\n padding = functor(_);\n return cloud;\n } else {\n return padding;\n }\n };\n cloud.random = function (_) {\n if (arguments.length) {\n random = _;\n return cloud;\n } else {\n return random;\n }\n };\n return cloud;\n}\n\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\nfunction cloudSprite(contextAndRatio, d, data, di) {\n if (d.sprite) return;\n var c = contextAndRatio.context,\n ratio = contextAndRatio.ratio;\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n var x = 0,\n y = 0,\n maxh = 0,\n n = data.length,\n w,\n w32,\n h,\n i,\n j;\n --di;\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.style + ' ' + d.weight + ' ' + ~~((d.size + 1) / ratio) + 'px ' + d.font;\n w = c.measureText(d.text + 'm').width * ratio;\n h = d.size << 1;\n if (d.rotate) {\n var sr = Math.sin(d.rotate * cloudRadians),\n cr = Math.cos(d.rotate * cloudRadians),\n wcr = w * cr,\n wsr = w * sr,\n hcr = h * cr,\n hsr = h * sr;\n w = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f >> 5 << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n } else {\n w = w + 0x1f >> 5 << 5;\n }\n if (h > maxh) maxh = h;\n if (x + w >= cw << 5) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n if (y + h >= ch) break;\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.rotate) c.rotate(d.rotate * cloudRadians);\n c.fillText(d.text, 0, 0);\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,\n sprite = [];\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) continue;\n w = d.width;\n w32 = w >> 5;\n h = d.y1 - d.y0;\n // Zero the buffer\n for (i = 0; i < h * w32; i++) sprite[i] = 0;\n x = d.xoff;\n if (x == null) return;\n y = d.yoff;\n var seen = 0,\n seenRow = -1;\n for (j = 0; j < h; j++) {\n for (i = 0; i < w; i++) {\n var k = w32 * j + (i >> 5),\n m = pixels[(y + j) * (cw << 5) + (x + i) << 2] ? 1 << 31 - i % 32 : 0;\n sprite[k] |= m;\n seen |= m;\n }\n if (seen) seenRow = j;else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n}\n\n// Use mask-based collision detection.\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n var sprite = tag.sprite,\n w = tag.width >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n if ((last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i]) return true;\n }\n x += sw;\n }\n return false;\n}\nfunction cloudBounds(bounds, d) {\n var b0 = bounds[0],\n b1 = bounds[1];\n if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\nfunction collideRects(a, b) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\nfunction archimedeanSpiral(size) {\n var e = size[0] / size[1];\n return function (t) {\n return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\n };\n}\nfunction rectangularSpiral(size) {\n var dy = 4,\n dx = dy * size[0] / size[1],\n x = 0,\n y = 0;\n return function (t) {\n var sign = t < 0 ? -1 : 1;\n // See triangular numbers: T_n = n * (n + 1) / 2.\n switch (Math.sqrt(1 + 4 * sign * t) - sign & 3) {\n case 0:\n x += dx;\n break;\n case 1:\n y += dy;\n break;\n case 2:\n x -= dx;\n break;\n default:\n y -= dy;\n break;\n }\n return [x, y];\n };\n}\n\n// TODO reuse arrays?\nfunction zeroArray(n) {\n var a = [],\n i = -1;\n while (++i < n) a[i] = 0;\n return a;\n}\nfunction functor(d) {\n return typeof d === 'function' ? d : function () {\n return d;\n };\n}\nvar spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n\nconst Output = ['x', 'y', 'font', 'fontSize', 'fontStyle', 'fontWeight', 'angle'];\nconst Params = ['text', 'font', 'rotate', 'fontSize', 'fontStyle', 'fontWeight'];\nfunction Wordcloud(params) {\n Transform.call(this, cloud(), params);\n}\nWordcloud.Definition = {\n 'type': 'Wordcloud',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'font',\n 'type': 'string',\n 'expr': true,\n 'default': 'sans-serif'\n }, {\n 'name': 'fontStyle',\n 'type': 'string',\n 'expr': true,\n 'default': 'normal'\n }, {\n 'name': 'fontWeight',\n 'type': 'string',\n 'expr': true,\n 'default': 'normal'\n }, {\n 'name': 'fontSize',\n 'type': 'number',\n 'expr': true,\n 'default': 14\n }, {\n 'name': 'fontSizeRange',\n 'type': 'number',\n 'array': 'nullable',\n 'default': [10, 50]\n }, {\n 'name': 'rotate',\n 'type': 'number',\n 'expr': true,\n 'default': 0\n }, {\n 'name': 'text',\n 'type': 'field'\n }, {\n 'name': 'spiral',\n 'type': 'string',\n 'values': ['archimedean', 'rectangular']\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 7,\n 'default': Output\n }]\n};\ninherits(Wordcloud, Transform, {\n transform(_, pulse) {\n if (_.size && !(_.size[0] && _.size[1])) {\n error('Wordcloud size dimensions must be non-zero.');\n }\n function modp(param) {\n const p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n const mod = _.modified();\n if (!(mod || pulse.changed(pulse.ADD_REM) || Params.some(modp))) return;\n const data = pulse.materialize(pulse.SOURCE).source,\n layout = this.value,\n as = _.as || Output;\n let fontSize = _.fontSize || 14,\n range;\n isFunction(fontSize) ? range = _.fontSizeRange : fontSize = constant(fontSize);\n\n // create font size scaling function as needed\n if (range) {\n const fsize = fontSize,\n sizeScale = scale('sqrt')().domain(extent(data, fsize)).range(range);\n fontSize = x => sizeScale(fsize(x));\n }\n data.forEach(t => {\n t[as[0]] = NaN;\n t[as[1]] = NaN;\n t[as[3]] = 0;\n });\n\n // configure layout\n const words = layout.words(data).text(_.text).size(_.size || [500, 500]).padding(_.padding || 1).spiral(_.spiral || 'archimedean').rotate(_.rotate || 0).font(_.font || 'sans-serif').fontStyle(_.fontStyle || 'normal').fontWeight(_.fontWeight || 'normal').fontSize(fontSize).random(random).layout();\n const size = layout.size(),\n dx = size[0] >> 1,\n dy = size[1] >> 1,\n n = words.length;\n for (let i = 0, w, t; i < n; ++i) {\n w = words[i];\n t = w.datum;\n t[as[0]] = w.x + dx;\n t[as[1]] = w.y + dy;\n t[as[2]] = w.font;\n t[as[3]] = w.size;\n t[as[4]] = w.style;\n t[as[5]] = w.weight;\n t[as[6]] = w.rotate;\n }\n return pulse.reflow(mod).modifies(as);\n }\n});\n\nexport { Wordcloud as wordcloud };\n","import { bisectLeft, bisectRight, permute } from 'd3-array';\nimport { Transform } from 'vega-dataflow';\nimport { inherits } from 'vega-util';\n\nconst array8 = n => new Uint8Array(n);\nconst array16 = n => new Uint16Array(n);\nconst array32 = n => new Uint32Array(n);\n\n/**\n * Maintains CrossFilter state.\n */\nfunction Bitmaps() {\n let width = 8,\n data = [],\n seen = array32(0),\n curr = array(0, width),\n prev = array(0, width);\n return {\n data: () => data,\n seen: () => seen = lengthen(seen, data.length),\n add(array) {\n for (let i = 0, j = data.length, n = array.length, t; i < n; ++i) {\n t = array[i];\n t._index = j++;\n data.push(t);\n }\n },\n remove(num, map) {\n // map: index -> boolean (true => remove)\n const n = data.length,\n copy = Array(n - num),\n reindex = data; // reuse old data array for index map\n let t, i, j;\n\n // seek forward to first removal\n for (i = 0; !map[i] && i < n; ++i) {\n copy[i] = data[i];\n reindex[i] = i;\n }\n\n // condense arrays\n for (j = i; i < n; ++i) {\n t = data[i];\n if (!map[i]) {\n reindex[i] = j;\n curr[j] = curr[i];\n prev[j] = prev[i];\n copy[j] = t;\n t._index = j++;\n } else {\n reindex[i] = -1;\n }\n curr[i] = 0; // clear unused bits\n }\n\n data = copy;\n return reindex;\n },\n size: () => data.length,\n curr: () => curr,\n prev: () => prev,\n reset: k => prev[k] = curr[k],\n all: () => width < 0x101 ? 0xff : width < 0x10001 ? 0xffff : 0xffffffff,\n set(k, one) {\n curr[k] |= one;\n },\n clear(k, one) {\n curr[k] &= ~one;\n },\n resize(n, m) {\n const k = curr.length;\n if (n > k || m > width) {\n width = Math.max(m, width);\n curr = array(n, width, curr);\n prev = array(n, width);\n }\n }\n };\n}\nfunction lengthen(array, length, copy) {\n if (array.length >= length) return array;\n copy = copy || new array.constructor(length);\n copy.set(array);\n return copy;\n}\nfunction array(n, m, array) {\n const copy = (m < 0x101 ? array8 : m < 0x10001 ? array16 : array32)(n);\n if (array) copy.set(array);\n return copy;\n}\n\nfunction Dimension (index, i, query) {\n const bit = 1 << i;\n return {\n one: bit,\n zero: ~bit,\n range: query.slice(),\n bisect: index.bisect,\n index: index.index,\n size: index.size,\n onAdd(added, curr) {\n const dim = this,\n range = dim.bisect(dim.range, added.value),\n idx = added.index,\n lo = range[0],\n hi = range[1],\n n1 = idx.length;\n let i;\n for (i = 0; i < lo; ++i) curr[idx[i]] |= bit;\n for (i = hi; i < n1; ++i) curr[idx[i]] |= bit;\n return dim;\n }\n };\n}\n\n/**\n * Maintains a list of values, sorted by key.\n */\nfunction SortedIndex() {\n let index = array32(0),\n value = [],\n size = 0;\n function insert(key, data, base) {\n if (!data.length) return [];\n const n0 = size,\n n1 = data.length,\n addi = array32(n1);\n let addv = Array(n1),\n oldv,\n oldi,\n i;\n for (i = 0; i < n1; ++i) {\n addv[i] = key(data[i]);\n addi[i] = i;\n }\n addv = sort(addv, addi);\n if (n0) {\n oldv = value;\n oldi = index;\n value = Array(n0 + n1);\n index = array32(n0 + n1);\n merge(base, oldv, oldi, n0, addv, addi, n1, value, index);\n } else {\n if (base > 0) for (i = 0; i < n1; ++i) {\n addi[i] += base;\n }\n value = addv;\n index = addi;\n }\n size = n0 + n1;\n return {\n index: addi,\n value: addv\n };\n }\n function remove(num, map) {\n // map: index -> remove\n const n = size;\n let idx, i, j;\n\n // seek forward to first removal\n for (i = 0; !map[index[i]] && i < n; ++i);\n\n // condense index and value arrays\n for (j = i; i < n; ++i) {\n if (!map[idx = index[i]]) {\n index[j] = idx;\n value[j] = value[i];\n ++j;\n }\n }\n size = n - num;\n }\n function reindex(map) {\n for (let i = 0, n = size; i < n; ++i) {\n index[i] = map[index[i]];\n }\n }\n function bisect(range, array) {\n let n;\n if (array) {\n n = array.length;\n } else {\n array = value;\n n = size;\n }\n return [bisectLeft(array, range[0], 0, n), bisectRight(array, range[1], 0, n)];\n }\n return {\n insert: insert,\n remove: remove,\n bisect: bisect,\n reindex: reindex,\n index: () => index,\n size: () => size\n };\n}\nfunction sort(values, index) {\n values.sort.call(index, (a, b) => {\n const x = values[a],\n y = values[b];\n return x < y ? -1 : x > y ? 1 : 0;\n });\n return permute(values, index);\n}\nfunction merge(base, value0, index0, n0, value1, index1, n1, value, index) {\n let i0 = 0,\n i1 = 0,\n i;\n for (i = 0; i0 < n0 && i1 < n1; ++i) {\n if (value0[i0] < value1[i1]) {\n value[i] = value0[i0];\n index[i] = index0[i0++];\n } else {\n value[i] = value1[i1];\n index[i] = index1[i1++] + base;\n }\n }\n for (; i0 < n0; ++i0, ++i) {\n value[i] = value0[i0];\n index[i] = index0[i0];\n }\n for (; i1 < n1; ++i1, ++i) {\n value[i] = value1[i1];\n index[i] = index1[i1] + base;\n }\n}\n\n/**\n * An indexed multi-dimensional filter.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of dimension accessors to filter.\n * @param {Array} params.query - An array of per-dimension range queries.\n */\nfunction CrossFilter(params) {\n Transform.call(this, Bitmaps(), params);\n this._indices = null;\n this._dims = null;\n}\nCrossFilter.Definition = {\n 'type': 'CrossFilter',\n 'metadata': {},\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'query',\n 'type': 'array',\n 'array': true,\n 'required': true,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }]\n};\ninherits(CrossFilter, Transform, {\n transform(_, pulse) {\n if (!this._dims) {\n return this.init(_, pulse);\n } else {\n var init = _.modified('fields') || _.fields.some(f => pulse.modified(f.fields));\n return init ? this.reinit(_, pulse) : this.eval(_, pulse);\n }\n },\n init(_, pulse) {\n const fields = _.fields,\n query = _.query,\n indices = this._indices = {},\n dims = this._dims = [],\n m = query.length;\n let i = 0,\n key,\n index;\n\n // instantiate indices and dimensions\n for (; i < m; ++i) {\n key = fields[i].fname;\n index = indices[key] || (indices[key] = SortedIndex());\n dims.push(Dimension(index, i, query[i]));\n }\n return this.eval(_, pulse);\n },\n reinit(_, pulse) {\n const output = pulse.materialize().fork(),\n fields = _.fields,\n query = _.query,\n indices = this._indices,\n dims = this._dims,\n bits = this.value,\n curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(),\n out = output.rem = output.add,\n mod = output.mod,\n m = query.length,\n adds = {};\n let add, index, key, mods, remMap, modMap, i, n, f;\n\n // set prev to current state\n prev.set(curr);\n\n // if pulse has remove tuples, process them first\n if (pulse.rem.length) {\n remMap = this.remove(_, pulse, output);\n }\n\n // if pulse has added tuples, add them to state\n if (pulse.add.length) {\n bits.add(pulse.add);\n }\n\n // if pulse has modified tuples, create an index map\n if (pulse.mod.length) {\n modMap = {};\n for (mods = pulse.mod, i = 0, n = mods.length; i < n; ++i) {\n modMap[mods[i]._index] = 1;\n }\n }\n\n // re-initialize indices as needed, update curr bitmap\n for (i = 0; i < m; ++i) {\n f = fields[i];\n if (!dims[i] || _.modified('fields', i) || pulse.modified(f.fields)) {\n key = f.fname;\n if (!(add = adds[key])) {\n indices[key] = index = SortedIndex();\n adds[key] = add = index.insert(f, pulse.source, 0);\n }\n dims[i] = Dimension(index, i, query[i]).onAdd(add, curr);\n }\n }\n\n // visit each tuple\n // if filter state changed, push index to add/rem\n // else if in mod and passes a filter, push index to mod\n for (i = 0, n = bits.data().length; i < n; ++i) {\n if (remMap[i]) {\n // skip if removed tuple\n continue;\n } else if (prev[i] !== curr[i]) {\n // add if state changed\n out.push(i);\n } else if (modMap[i] && curr[i] !== all) {\n // otherwise, pass mods through\n mod.push(i);\n }\n }\n bits.mask = (1 << m) - 1;\n return output;\n },\n eval(_, pulse) {\n const output = pulse.materialize().fork(),\n m = this._dims.length;\n let mask = 0;\n if (pulse.rem.length) {\n this.remove(_, pulse, output);\n mask |= (1 << m) - 1;\n }\n if (_.modified('query') && !_.modified('fields')) {\n mask |= this.update(_, pulse, output);\n }\n if (pulse.add.length) {\n this.insert(_, pulse, output);\n mask |= (1 << m) - 1;\n }\n if (pulse.mod.length) {\n this.modify(pulse, output);\n mask |= (1 << m) - 1;\n }\n this.value.mask = mask;\n return output;\n },\n insert(_, pulse, output) {\n const tuples = pulse.add,\n bits = this.value,\n dims = this._dims,\n indices = this._indices,\n fields = _.fields,\n adds = {},\n out = output.add,\n n = bits.size() + tuples.length,\n m = dims.length;\n let k = bits.size(),\n j,\n key,\n add;\n\n // resize bitmaps and add tuples as needed\n bits.resize(n, m);\n bits.add(tuples);\n const curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all();\n\n // add to dimensional indices\n for (j = 0; j < m; ++j) {\n key = fields[j].fname;\n add = adds[key] || (adds[key] = indices[key].insert(fields[j], tuples, k));\n dims[j].onAdd(add, curr);\n }\n\n // set previous filters, output if passes at least one filter\n for (; k < n; ++k) {\n prev[k] = all;\n if (curr[k] !== all) out.push(k);\n }\n },\n modify(pulse, output) {\n const out = output.mod,\n bits = this.value,\n curr = bits.curr(),\n all = bits.all(),\n tuples = pulse.mod;\n let i, n, k;\n for (i = 0, n = tuples.length; i < n; ++i) {\n k = tuples[i]._index;\n if (curr[k] !== all) out.push(k);\n }\n },\n remove(_, pulse, output) {\n const indices = this._indices,\n bits = this.value,\n curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(),\n map = {},\n out = output.rem,\n tuples = pulse.rem;\n let i, n, k, f;\n\n // process tuples, output if passes at least one filter\n for (i = 0, n = tuples.length; i < n; ++i) {\n k = tuples[i]._index;\n map[k] = 1; // build index map\n prev[k] = f = curr[k];\n curr[k] = all;\n if (f !== all) out.push(k);\n }\n\n // remove from dimensional indices\n for (k in indices) {\n indices[k].remove(n, map);\n }\n this.reindex(pulse, n, map);\n return map;\n },\n // reindex filters and indices after propagation completes\n reindex(pulse, num, map) {\n const indices = this._indices,\n bits = this.value;\n pulse.runAfter(() => {\n const indexMap = bits.remove(num, map);\n for (const key in indices) indices[key].reindex(indexMap);\n });\n },\n update(_, pulse, output) {\n const dims = this._dims,\n query = _.query,\n stamp = pulse.stamp,\n m = dims.length;\n let mask = 0,\n i,\n q;\n\n // survey how many queries have changed\n output.filters = 0;\n for (q = 0; q < m; ++q) {\n if (_.modified('query', q)) {\n i = q;\n ++mask;\n }\n }\n if (mask === 1) {\n // only one query changed, use more efficient update\n mask = dims[i].one;\n this.incrementOne(dims[i], query[i], output.add, output.rem);\n } else {\n // multiple queries changed, perform full record keeping\n for (q = 0, mask = 0; q < m; ++q) {\n if (!_.modified('query', q)) continue;\n mask |= dims[q].one;\n this.incrementAll(dims[q], query[q], stamp, output.add);\n output.rem = output.add; // duplicate add/rem for downstream resolve\n }\n }\n\n return mask;\n },\n incrementAll(dim, query, stamp, out) {\n const bits = this.value,\n seen = bits.seen(),\n curr = bits.curr(),\n prev = bits.prev(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one;\n let i, j, k;\n\n // Fast incremental update based on previous lo index.\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n }\n\n // Fast incremental update based on previous hi index.\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n }\n dim.range = query.slice();\n },\n incrementOne(dim, query, add, rem) {\n const bits = this.value,\n curr = bits.curr(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one;\n let i, j, k;\n\n // Fast incremental update based on previous lo index.\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n\n // Fast incremental update based on previous hi index.\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n dim.range = query.slice();\n }\n});\n\n/**\n * Selectively filters tuples by resolving against a filter bitmap.\n * Useful for processing the output of a cross-filter transform.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.ignore - A bit mask indicating which filters to ignore.\n * @param {object} params.filter - The per-tuple filter bitmaps. Typically this\n * parameter value is a reference to a {@link CrossFilter} transform.\n */\nfunction ResolveFilter(params) {\n Transform.call(this, null, params);\n}\nResolveFilter.Definition = {\n 'type': 'ResolveFilter',\n 'metadata': {},\n 'params': [{\n 'name': 'ignore',\n 'type': 'number',\n 'required': true,\n 'description': 'A bit mask indicating which filters to ignore.'\n }, {\n 'name': 'filter',\n 'type': 'object',\n 'required': true,\n 'description': 'Per-tuple filter bitmaps from a CrossFilter transform.'\n }]\n};\ninherits(ResolveFilter, Transform, {\n transform(_, pulse) {\n const ignore = ~(_.ignore || 0),\n // bit mask where zeros -> dims to ignore\n bitmap = _.filter,\n mask = bitmap.mask;\n\n // exit early if no relevant filter changes\n if ((mask & ignore) === 0) return pulse.StopPropagation;\n const output = pulse.fork(pulse.ALL),\n data = bitmap.data(),\n curr = bitmap.curr(),\n prev = bitmap.prev(),\n pass = k => !(curr[k] & ignore) ? data[k] : null;\n\n // propagate all mod tuples that pass the filter\n output.filter(output.MOD, pass);\n\n // determine add & rem tuples via filter functions\n // for efficiency, we do *not* populate new arrays,\n // instead we add filter functions applied downstream\n\n if (!(mask & mask - 1)) {\n // only one filter changed\n output.filter(output.ADD, pass);\n output.filter(output.REM, k => (curr[k] & ignore) === mask ? data[k] : null);\n } else {\n // multiple filters changed\n output.filter(output.ADD, k => {\n const c = curr[k] & ignore,\n f = !c && c ^ prev[k] & ignore;\n return f ? data[k] : null;\n });\n output.filter(output.REM, k => {\n const c = curr[k] & ignore,\n f = c && !(c ^ (c ^ prev[k] & ignore));\n return f ? data[k] : null;\n });\n }\n\n // add filter to source data in case of reflow...\n return output.filter(output.SOURCE, t => pass(t._index));\n }\n});\n\nexport { CrossFilter as crossfilter, ResolveFilter as resolvefilter };\n","import { error, toSet, isFunction, isString, hasOwnProperty } from 'vega-util';\n\nconst RawCode = 'RawCode';\nconst Literal = 'Literal';\nconst Property = 'Property';\nconst Identifier = 'Identifier';\nconst ArrayExpression = 'ArrayExpression';\nconst BinaryExpression = 'BinaryExpression';\nconst CallExpression = 'CallExpression';\nconst ConditionalExpression = 'ConditionalExpression';\nconst LogicalExpression = 'LogicalExpression';\nconst MemberExpression = 'MemberExpression';\nconst ObjectExpression = 'ObjectExpression';\nconst UnaryExpression = 'UnaryExpression';\nfunction ASTNode(type) {\n this.type = type;\n}\nASTNode.prototype.visit = function (visitor) {\n let c, i, n;\n if (visitor(this)) return 1;\n for (c = children(this), i = 0, n = c.length; i < n; ++i) {\n if (c[i].visit(visitor)) return 1;\n }\n};\nfunction children(node) {\n switch (node.type) {\n case ArrayExpression:\n return node.elements;\n case BinaryExpression:\n case LogicalExpression:\n return [node.left, node.right];\n case CallExpression:\n return [node.callee].concat(node.arguments);\n case ConditionalExpression:\n return [node.test, node.consequent, node.alternate];\n case MemberExpression:\n return [node.object, node.property];\n case ObjectExpression:\n return node.properties;\n case Property:\n return [node.key, node.value];\n case UnaryExpression:\n return [node.argument];\n case Identifier:\n case Literal:\n case RawCode:\n default:\n return [];\n }\n}\n\n/*\n The following expression parser is based on Esprima (http://esprima.org/).\n Original header comment and license for Esprima is included here:\n\n Copyright (C) 2013 Ariya Hidayat \n Copyright (C) 2013 Thaddee Tyl \n Copyright (C) 2013 Mathias Bynens \n Copyright (C) 2012 Ariya Hidayat \n Copyright (C) 2012 Mathias Bynens \n Copyright (C) 2012 Joost-Wim Boekesteijn \n Copyright (C) 2012 Kris Kowal \n Copyright (C) 2012 Yusuke Suzuki \n Copyright (C) 2012 Arpad Borsos \n Copyright (C) 2011 Ariya Hidayat \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nvar TokenName, source, index, length, lookahead;\nvar TokenBooleanLiteral = 1,\n TokenEOF = 2,\n TokenIdentifier = 3,\n TokenKeyword = 4,\n TokenNullLiteral = 5,\n TokenNumericLiteral = 6,\n TokenPunctuator = 7,\n TokenStringLiteral = 8,\n TokenRegularExpression = 9;\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\nvar SyntaxArrayExpression = 'ArrayExpression',\n SyntaxBinaryExpression = 'BinaryExpression',\n SyntaxCallExpression = 'CallExpression',\n SyntaxConditionalExpression = 'ConditionalExpression',\n SyntaxIdentifier = 'Identifier',\n SyntaxLiteral = 'Literal',\n SyntaxLogicalExpression = 'LogicalExpression',\n SyntaxMemberExpression = 'MemberExpression',\n SyntaxObjectExpression = 'ObjectExpression',\n SyntaxProperty = 'Property',\n SyntaxUnaryExpression = 'UnaryExpression';\n\n// Error messages should be identical to V8.\nvar MessageUnexpectedToken = 'Unexpected token %0',\n MessageUnexpectedNumber = 'Unexpected number',\n MessageUnexpectedString = 'Unexpected string',\n MessageUnexpectedIdentifier = 'Unexpected identifier',\n MessageUnexpectedReserved = 'Unexpected reserved word',\n MessageUnexpectedEOS = 'Unexpected end of input',\n MessageInvalidRegExp = 'Invalid regular expression',\n MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\nvar ILLEGAL = 'ILLEGAL',\n DISABLED = 'Disabled.';\n\n// See also tools/generate-unicode-regex.py.\nvar RegexNonAsciiIdentifierStart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'),\n // eslint-disable-next-line no-misleading-character-class\n RegexNonAsciiIdentifierPart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]');\n\n// Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n /* istanbul ignore next */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n}\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 && ch <= 0x39; // 0..9\n}\n\nfunction isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\nfunction isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n}\n\n// 7.2 White Space\n\nfunction isWhiteSpace(ch) {\n return ch === 0x20 || ch === 0x09 || ch === 0x0B || ch === 0x0C || ch === 0xA0 || ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0;\n}\n\n// 7.3 Line Terminators\n\nfunction isLineTerminator(ch) {\n return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029;\n}\n\n// 7.6 Identifier Names and Identifiers\n\nfunction isIdentifierStart(ch) {\n return ch === 0x24 || ch === 0x5F ||\n // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A ||\n // A..Z\n ch >= 0x61 && ch <= 0x7A ||\n // a..z\n ch === 0x5C ||\n // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch));\n}\nfunction isIdentifierPart(ch) {\n return ch === 0x24 || ch === 0x5F ||\n // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A ||\n // A..Z\n ch >= 0x61 && ch <= 0x7A ||\n // a..z\n ch >= 0x30 && ch <= 0x39 ||\n // 0..9\n ch === 0x5C ||\n // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch));\n}\n\n// 7.6.1.1 Keywords\n\nconst keywords = {\n 'if': 1,\n 'in': 1,\n 'do': 1,\n 'var': 1,\n 'for': 1,\n 'new': 1,\n 'try': 1,\n 'let': 1,\n 'this': 1,\n 'else': 1,\n 'case': 1,\n 'void': 1,\n 'with': 1,\n 'enum': 1,\n 'while': 1,\n 'break': 1,\n 'catch': 1,\n 'throw': 1,\n 'const': 1,\n 'yield': 1,\n 'class': 1,\n 'super': 1,\n 'return': 1,\n 'typeof': 1,\n 'delete': 1,\n 'switch': 1,\n 'export': 1,\n 'import': 1,\n 'public': 1,\n 'static': 1,\n 'default': 1,\n 'finally': 1,\n 'extends': 1,\n 'package': 1,\n 'private': 1,\n 'function': 1,\n 'continue': 1,\n 'debugger': 1,\n 'interface': 1,\n 'protected': 1,\n 'instanceof': 1,\n 'implements': 1\n};\nfunction skipComment() {\n while (index < length) {\n const ch = source.charCodeAt(index);\n if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n ++index;\n } else {\n break;\n }\n }\n}\nfunction scanHexEscape(prefix) {\n var i,\n len,\n ch,\n code = 0;\n len = prefix === 'u' ? 4 : 2;\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n return String.fromCharCode(code);\n}\nfunction scanUnicodeCodePointEscape() {\n var ch, code, cu1, cu2;\n ch = source[index];\n code = 0;\n\n // At least, one hex digit is required.\n if (ch === '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n while (index < length) {\n ch = source[index++];\n if (!isHexDigit(ch)) {\n break;\n }\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n if (code > 0x10FFFF || ch !== '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n // UTF-16 Encoding\n if (code <= 0xFFFF) {\n return String.fromCharCode(code);\n }\n cu1 = (code - 0x10000 >> 10) + 0xD800;\n cu2 = (code - 0x10000 & 1023) + 0xDC00;\n return String.fromCharCode(cu1, cu2);\n}\nfunction getEscapedIdentifier() {\n var ch, id;\n ch = source.charCodeAt(index++);\n id = String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id = ch;\n }\n while (index < length) {\n ch = source.charCodeAt(index);\n if (!isIdentifierPart(ch)) {\n break;\n }\n ++index;\n id += String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n id = id.substr(0, id.length - 1);\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id += ch;\n }\n }\n return id;\n}\nfunction getIdentifier() {\n var start, ch;\n start = index++;\n while (index < length) {\n ch = source.charCodeAt(index);\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getEscapedIdentifier();\n }\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n return source.slice(start, index);\n}\nfunction scanIdentifier() {\n var start, id, type;\n start = index;\n\n // Backslash (U+005C) starts an escaped character.\n id = source.charCodeAt(index) === 0x5C ? getEscapedIdentifier() : getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n if (id.length === 1) {\n type = TokenIdentifier;\n } else if (keywords.hasOwnProperty(id)) {\n // eslint-disable-line no-prototype-builtins\n type = TokenKeyword;\n } else if (id === 'null') {\n type = TokenNullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = TokenBooleanLiteral;\n } else {\n type = TokenIdentifier;\n }\n return {\n type: type,\n value: id,\n start: start,\n end: index\n };\n}\n\n// 7.7 Punctuators\n\nfunction scanPunctuator() {\n var start = index,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2,\n ch3,\n ch4;\n switch (code) {\n // Check for most common single-character punctuators.\n case 0x2E: // . dot\n case 0x28: // ( open bracket\n case 0x29: // ) close bracket\n case 0x3B: // ; semicolon\n case 0x2C: // , comma\n case 0x7B: // { open curly brace\n case 0x7D: // } close curly brace\n case 0x5B: // [\n case 0x5D: // ]\n case 0x3A: // :\n case 0x3F: // ?\n case 0x7E:\n // ~\n ++index;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code),\n start: start,\n end: index\n };\n default:\n code2 = source.charCodeAt(index + 1);\n\n // '=' (U+003D) marks an assignment or comparison operator.\n if (code2 === 0x3D) {\n switch (code) {\n case 0x2B: // +\n case 0x2D: // -\n case 0x2F: // /\n case 0x3C: // <\n case 0x3E: // >\n case 0x5E: // ^\n case 0x7C: // |\n case 0x25: // %\n case 0x26: // &\n case 0x2A:\n // *\n index += 2;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n start: start,\n end: index\n };\n case 0x21: // !\n case 0x3D:\n // =\n index += 2;\n\n // !== and ===\n if (source.charCodeAt(index) === 0x3D) {\n ++index;\n }\n return {\n type: TokenPunctuator,\n value: source.slice(start, index),\n start: start,\n end: index\n };\n }\n }\n }\n\n // 4-character punctuator: >>>=\n\n ch4 = source.substr(index, 4);\n if (ch4 === '>>>=') {\n index += 4;\n return {\n type: TokenPunctuator,\n value: ch4,\n start: start,\n end: index\n };\n }\n\n // 3-character punctuators: === !== >>> <<= >>=\n\n ch3 = ch4.substr(0, 3);\n if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n index += 3;\n return {\n type: TokenPunctuator,\n value: ch3,\n start: start,\n end: index\n };\n }\n\n // Other 2-character punctuators: ++ -- << >> && ||\n ch2 = ch3.substr(0, 2);\n if (ch1 === ch2[1] && '+-<>&|'.indexOf(ch1) >= 0 || ch2 === '=>') {\n index += 2;\n return {\n type: TokenPunctuator,\n value: ch2,\n start: start,\n end: index\n };\n }\n if (ch2 === '//') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n // 1-character punctuators: < > = ! + - * % & | ^ /\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;\n return {\n type: TokenPunctuator,\n value: ch1,\n start: start,\n end: index\n };\n }\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n}\n\n// 7.8.3 Numeric Literals\n\nfunction scanHexLiteral(start) {\n let number = '';\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n if (number.length === 0) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenNumericLiteral,\n value: parseInt('0x' + number, 16),\n start: start,\n end: index\n };\n}\nfunction scanOctalLiteral(start) {\n let number = '0' + source[index++];\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenNumericLiteral,\n value: parseInt(number, 8),\n octal: true,\n start: start,\n end: index\n };\n}\nfunction scanNumericLiteral() {\n var number, start, ch;\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || ch === '.', 'Numeric literal must start with a decimal digit or a decimal point');\n start = index;\n number = '';\n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex number starts with '0x'.\n // Octal number starts with '0'.\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n if (isOctalDigit(ch)) {\n return scanOctalLiteral(start);\n }\n\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenNumericLiteral,\n value: parseFloat(number),\n start: start,\n end: index\n };\n}\n\n// 7.8.4 String Literals\n\nfunction scanStringLiteral() {\n var str = '',\n quote,\n start,\n ch,\n code,\n octal = false;\n quote = source[index];\n assert(quote === '\\'' || quote === '\"', 'String literal must starts with a quote');\n start = index;\n ++index;\n while (index < length) {\n ch = source[index++];\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n str += scanHexEscape(ch);\n }\n break;\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n default:\n if (isOctalDigit(ch)) {\n code = '01234567'.indexOf(ch);\n\n // \\0 is not octal escape sequence\n if (code !== 0) {\n octal = true;\n }\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]);\n\n // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n if ('0123'.indexOf(ch) >= 0 && index < length && isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n str += String.fromCharCode(code);\n } else {\n str += ch;\n }\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n if (quote !== '') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenStringLiteral,\n value: str,\n octal: octal,\n start: start,\n end: index\n };\n}\nfunction testRegExp(pattern, flags) {\n let tmp = pattern;\n if (flags.indexOf('u') >= 0) {\n // Replace each astral symbol and every Unicode code point\n // escape sequence with a single ASCII symbol to avoid throwing on\n // regular expressions that are only valid in combination with the\n // `/u` flag.\n // Note: replacing with the ASCII symbol `x` might cause false\n // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n // perfectly valid pattern that is equivalent to `[a-b]`, but it\n // would be replaced by `[x-b]` which throws an error.\n tmp = tmp.replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, ($0, $1) => {\n if (parseInt($1, 16) <= 0x10FFFF) {\n return 'x';\n }\n throwError({}, MessageInvalidRegExp);\n }).replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n }\n\n // First, detect invalid regular expressions.\n try {\n new RegExp(tmp);\n } catch (e) {\n throwError({}, MessageInvalidRegExp);\n }\n\n // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n}\nfunction scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n classMarker = false;\n terminated = false;\n while (index < length) {\n ch = source[index++];\n str += ch;\n if (ch === '\\\\') {\n ch = source[index++];\n // ECMA-262 7.8.5\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n }\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n if (!terminated) {\n throwError({}, MessageUnterminatedRegExp);\n }\n\n // Exclude leading and trailing slash.\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n}\nfunction scanRegExpFlags() {\n var ch, str, flags;\n str = '';\n flags = '';\n while (index < length) {\n ch = source[index];\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n ++index;\n if (ch === '\\\\' && index < length) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } else {\n flags += ch;\n str += ch;\n }\n }\n if (flags.search(/[^gimuy]/g) >= 0) {\n throwError({}, MessageInvalidRegExp, flags);\n }\n return {\n value: flags,\n literal: str\n };\n}\nfunction scanRegExp() {\n var start, body, flags, value;\n lookahead = null;\n skipComment();\n start = index;\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n}\nfunction isIdentifierName(token) {\n return token.type === TokenIdentifier || token.type === TokenKeyword || token.type === TokenBooleanLiteral || token.type === TokenNullLiteral;\n}\nfunction advance() {\n skipComment();\n if (index >= length) {\n return {\n type: TokenEOF,\n start: index,\n end: index\n };\n }\n const ch = source.charCodeAt(index);\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n }\n\n // Very common: ( and ) and ;\n if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (U+0027) or double quote (U+0022).\n if (ch === 0x27 || ch === 0x22) {\n return scanStringLiteral();\n }\n\n // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n if (ch === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n}\nfunction lex() {\n const token = lookahead;\n index = token.end;\n lookahead = advance();\n index = token.end;\n return token;\n}\nfunction peek() {\n const pos = index;\n lookahead = advance();\n index = pos;\n}\nfunction finishArrayExpression(elements) {\n const node = new ASTNode(SyntaxArrayExpression);\n node.elements = elements;\n return node;\n}\nfunction finishBinaryExpression(operator, left, right) {\n const node = new ASTNode(operator === '||' || operator === '&&' ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n node.operator = operator;\n node.left = left;\n node.right = right;\n return node;\n}\nfunction finishCallExpression(callee, args) {\n const node = new ASTNode(SyntaxCallExpression);\n node.callee = callee;\n node.arguments = args;\n return node;\n}\nfunction finishConditionalExpression(test, consequent, alternate) {\n const node = new ASTNode(SyntaxConditionalExpression);\n node.test = test;\n node.consequent = consequent;\n node.alternate = alternate;\n return node;\n}\nfunction finishIdentifier(name) {\n const node = new ASTNode(SyntaxIdentifier);\n node.name = name;\n return node;\n}\nfunction finishLiteral(token) {\n const node = new ASTNode(SyntaxLiteral);\n node.value = token.value;\n node.raw = source.slice(token.start, token.end);\n if (token.regex) {\n if (node.raw === '//') {\n node.raw = '/(?:)/';\n }\n node.regex = token.regex;\n }\n return node;\n}\nfunction finishMemberExpression(accessor, object, property) {\n const node = new ASTNode(SyntaxMemberExpression);\n node.computed = accessor === '[';\n node.object = object;\n node.property = property;\n if (!node.computed) property.member = true;\n return node;\n}\nfunction finishObjectExpression(properties) {\n const node = new ASTNode(SyntaxObjectExpression);\n node.properties = properties;\n return node;\n}\nfunction finishProperty(kind, key, value) {\n const node = new ASTNode(SyntaxProperty);\n node.key = key;\n node.value = value;\n node.kind = kind;\n return node;\n}\nfunction finishUnaryExpression(operator, argument) {\n const node = new ASTNode(SyntaxUnaryExpression);\n node.operator = operator;\n node.argument = argument;\n node.prefix = true;\n return node;\n}\n\n// Throw an exception\n\nfunction throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(/%(\\d)/g, (whole, index) => {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n });\n error = new Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n}\n\n// Throw an exception because of the token.\n\nfunction throwUnexpected(token) {\n if (token.type === TokenEOF) {\n throwError(token, MessageUnexpectedEOS);\n }\n if (token.type === TokenNumericLiteral) {\n throwError(token, MessageUnexpectedNumber);\n }\n if (token.type === TokenStringLiteral) {\n throwError(token, MessageUnexpectedString);\n }\n if (token.type === TokenIdentifier) {\n throwError(token, MessageUnexpectedIdentifier);\n }\n if (token.type === TokenKeyword) {\n throwError(token, MessageUnexpectedReserved);\n }\n\n // BooleanLiteral, NullLiteral, or Punctuator.\n throwError(token, MessageUnexpectedToken, token.value);\n}\n\n// Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\nfunction expect(value) {\n const token = lex();\n if (token.type !== TokenPunctuator || token.value !== value) {\n throwUnexpected(token);\n }\n}\n\n// Return true if the next token matches the specified punctuator.\n\nfunction match(value) {\n return lookahead.type === TokenPunctuator && lookahead.value === value;\n}\n\n// Return true if the next token matches the specified keyword\n\nfunction matchKeyword(keyword) {\n return lookahead.type === TokenKeyword && lookahead.value === keyword;\n}\n\n// 11.1.4 Array Initialiser\n\nfunction parseArrayInitialiser() {\n const elements = [];\n index = lookahead.start;\n expect('[');\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseConditionalExpression());\n if (!match(']')) {\n expect(',');\n }\n }\n }\n lex();\n return finishArrayExpression(elements);\n}\n\n// 11.1.5 Object Initialiser\n\nfunction parseObjectPropertyKey() {\n index = lookahead.start;\n const token = lex();\n\n // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n if (token.octal) {\n throwError(token, MessageStrictOctalLiteral);\n }\n return finishLiteral(token);\n }\n return finishIdentifier(token.value);\n}\nfunction parseObjectProperty() {\n var token, key, id, value;\n index = lookahead.start;\n token = lookahead;\n if (token.type === TokenIdentifier) {\n id = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', id, value);\n }\n if (token.type === TokenEOF || token.type === TokenPunctuator) {\n throwUnexpected(token);\n } else {\n key = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', key, value);\n }\n}\nfunction parseObjectInitialiser() {\n var properties = [],\n property,\n name,\n key,\n map = {},\n toString = String;\n index = lookahead.start;\n expect('{');\n while (!match('}')) {\n property = parseObjectProperty();\n if (property.key.type === SyntaxIdentifier) {\n name = property.key.name;\n } else {\n name = toString(property.key.value);\n }\n key = '$' + name;\n if (Object.prototype.hasOwnProperty.call(map, key)) {\n throwError({}, MessageStrictDuplicateProperty);\n } else {\n map[key] = true;\n }\n properties.push(property);\n if (!match('}')) {\n expect(',');\n }\n }\n expect('}');\n return finishObjectExpression(properties);\n}\n\n// 11.1.6 The Grouping Operator\n\nfunction parseGroupExpression() {\n expect('(');\n const expr = parseExpression();\n expect(')');\n return expr;\n}\n\n// 11.1 Primary Expressions\n\nconst legalKeywords = {\n 'if': 1\n};\nfunction parsePrimaryExpression() {\n var type, token, expr;\n if (match('(')) {\n return parseGroupExpression();\n }\n if (match('[')) {\n return parseArrayInitialiser();\n }\n if (match('{')) {\n return parseObjectInitialiser();\n }\n type = lookahead.type;\n index = lookahead.start;\n if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n expr = finishIdentifier(lex().value);\n } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n if (lookahead.octal) {\n throwError(lookahead, MessageStrictOctalLiteral);\n }\n expr = finishLiteral(lex());\n } else if (type === TokenKeyword) {\n throw new Error(DISABLED);\n } else if (type === TokenBooleanLiteral) {\n token = lex();\n token.value = token.value === 'true';\n expr = finishLiteral(token);\n } else if (type === TokenNullLiteral) {\n token = lex();\n token.value = null;\n expr = finishLiteral(token);\n } else if (match('/') || match('/=')) {\n expr = finishLiteral(scanRegExp());\n peek();\n } else {\n throwUnexpected(lex());\n }\n return expr;\n}\n\n// 11.2 Left-Hand-Side Expressions\n\nfunction parseArguments() {\n const args = [];\n expect('(');\n if (!match(')')) {\n while (index < length) {\n args.push(parseConditionalExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n expect(')');\n return args;\n}\nfunction parseNonComputedProperty() {\n index = lookahead.start;\n const token = lex();\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n return finishIdentifier(token.value);\n}\nfunction parseNonComputedMember() {\n expect('.');\n return parseNonComputedProperty();\n}\nfunction parseComputedMember() {\n expect('[');\n const expr = parseExpression();\n expect(']');\n return expr;\n}\nfunction parseLeftHandSideExpressionAllowCall() {\n var expr, args, property;\n expr = parsePrimaryExpression();\n for (;;) {\n if (match('.')) {\n property = parseNonComputedMember();\n expr = finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = finishCallExpression(expr, args);\n } else if (match('[')) {\n property = parseComputedMember();\n expr = finishMemberExpression('[', expr, property);\n } else {\n break;\n }\n }\n return expr;\n}\n\n// 11.3 Postfix Expressions\n\nfunction parsePostfixExpression() {\n const expr = parseLeftHandSideExpressionAllowCall();\n if (lookahead.type === TokenPunctuator) {\n if (match('++') || match('--')) {\n throw new Error(DISABLED);\n }\n }\n return expr;\n}\n\n// 11.4 Unary Operators\n\nfunction parseUnaryExpression() {\n var token, expr;\n if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n throw new Error(DISABLED);\n } else if (match('+') || match('-') || match('~') || match('!')) {\n token = lex();\n expr = parseUnaryExpression();\n expr = finishUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw new Error(DISABLED);\n } else {\n expr = parsePostfixExpression();\n }\n return expr;\n}\nfunction binaryPrecedence(token) {\n let prec = 0;\n if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n return 0;\n }\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n case '&&':\n prec = 2;\n break;\n case '|':\n prec = 3;\n break;\n case '^':\n prec = 4;\n break;\n case '&':\n prec = 5;\n break;\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n case 'in':\n prec = 7;\n break;\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n case '+':\n case '-':\n prec = 9;\n break;\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n }\n return prec;\n}\n\n// 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\nfunction parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n marker = lookahead;\n left = parseUnaryExpression();\n token = lookahead;\n prec = binaryPrecedence(token);\n if (prec === 0) {\n return left;\n }\n token.prec = prec;\n lex();\n markers = [marker, lookahead];\n right = parseUnaryExpression();\n stack = [left, token, right];\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n // Reduce: make a binary expression from the three topmost entries.\n while (stack.length > 2 && prec <= stack[stack.length - 2].prec) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = finishBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = parseUnaryExpression();\n stack.push(expr);\n }\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n while (i > 1) {\n markers.pop();\n expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n return expr;\n}\n\n// 11.12 Conditional Operator\n\nfunction parseConditionalExpression() {\n var expr, consequent, alternate;\n expr = parseBinaryExpression();\n if (match('?')) {\n lex();\n consequent = parseConditionalExpression();\n expect(':');\n alternate = parseConditionalExpression();\n expr = finishConditionalExpression(expr, consequent, alternate);\n }\n return expr;\n}\n\n// 11.14 Comma Operator\n\nfunction parseExpression() {\n const expr = parseConditionalExpression();\n if (match(',')) {\n throw new Error(DISABLED); // no sequence expressions\n }\n\n return expr;\n}\nfunction parser (code) {\n source = code;\n index = 0;\n length = source.length;\n lookahead = null;\n peek();\n const expr = parseExpression();\n if (lookahead.type !== TokenEOF) {\n throw new Error('Unexpect token after expression.');\n }\n return expr;\n}\n\nvar Constants = {\n NaN: 'NaN',\n E: 'Math.E',\n LN2: 'Math.LN2',\n LN10: 'Math.LN10',\n LOG2E: 'Math.LOG2E',\n LOG10E: 'Math.LOG10E',\n PI: 'Math.PI',\n SQRT1_2: 'Math.SQRT1_2',\n SQRT2: 'Math.SQRT2',\n MIN_VALUE: 'Number.MIN_VALUE',\n MAX_VALUE: 'Number.MAX_VALUE'\n};\n\nfunction Functions (codegen) {\n function fncall(name, args, cast, type) {\n let obj = codegen(args[0]);\n if (cast) {\n obj = cast + '(' + obj + ')';\n if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n }\n return obj + '.' + name + (type < 0 ? '' : type === 0 ? '()' : '(' + args.slice(1).map(codegen).join(',') + ')');\n }\n function fn(name, cast, type) {\n return args => fncall(name, args, cast, type);\n }\n const DATE = 'new Date',\n STRING = 'String',\n REGEXP = 'RegExp';\n return {\n // MATH functions\n isNaN: 'Number.isNaN',\n isFinite: 'Number.isFinite',\n abs: 'Math.abs',\n acos: 'Math.acos',\n asin: 'Math.asin',\n atan: 'Math.atan',\n atan2: 'Math.atan2',\n ceil: 'Math.ceil',\n cos: 'Math.cos',\n exp: 'Math.exp',\n floor: 'Math.floor',\n hypot: 'Math.hypot',\n log: 'Math.log',\n max: 'Math.max',\n min: 'Math.min',\n pow: 'Math.pow',\n random: 'Math.random',\n round: 'Math.round',\n sin: 'Math.sin',\n sqrt: 'Math.sqrt',\n tan: 'Math.tan',\n clamp: function (args) {\n if (args.length < 3) error('Missing arguments to clamp function.');\n if (args.length > 3) error('Too many arguments to clamp function.');\n const a = args.map(codegen);\n return 'Math.max(' + a[1] + ', Math.min(' + a[2] + ',' + a[0] + '))';\n },\n // DATE functions\n now: 'Date.now',\n utc: 'Date.UTC',\n datetime: DATE,\n date: fn('getDate', DATE, 0),\n day: fn('getDay', DATE, 0),\n year: fn('getFullYear', DATE, 0),\n month: fn('getMonth', DATE, 0),\n hours: fn('getHours', DATE, 0),\n minutes: fn('getMinutes', DATE, 0),\n seconds: fn('getSeconds', DATE, 0),\n milliseconds: fn('getMilliseconds', DATE, 0),\n time: fn('getTime', DATE, 0),\n timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n utcdate: fn('getUTCDate', DATE, 0),\n utcday: fn('getUTCDay', DATE, 0),\n utcyear: fn('getUTCFullYear', DATE, 0),\n utcmonth: fn('getUTCMonth', DATE, 0),\n utchours: fn('getUTCHours', DATE, 0),\n utcminutes: fn('getUTCMinutes', DATE, 0),\n utcseconds: fn('getUTCSeconds', DATE, 0),\n utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n // sequence functions\n length: fn('length', null, -1),\n // STRING functions\n parseFloat: 'parseFloat',\n parseInt: 'parseInt',\n upper: fn('toUpperCase', STRING, 0),\n lower: fn('toLowerCase', STRING, 0),\n substring: fn('substring', STRING),\n split: fn('split', STRING),\n trim: fn('trim', STRING, 0),\n // REGEXP functions\n regexp: REGEXP,\n test: fn('test', REGEXP),\n // Control Flow functions\n if: function (args) {\n if (args.length < 3) error('Missing arguments to if function.');\n if (args.length > 3) error('Too many arguments to if function.');\n const a = args.map(codegen);\n return '(' + a[0] + '?' + a[1] + ':' + a[2] + ')';\n }\n };\n}\n\nfunction stripQuotes(s) {\n const n = s && s.length - 1;\n return n && (s[0] === '\"' && s[n] === '\"' || s[0] === '\\'' && s[n] === '\\'') ? s.slice(1, -1) : s;\n}\nfunction codegen (opt) {\n opt = opt || {};\n const allowed = opt.allowed ? toSet(opt.allowed) : {},\n forbidden = opt.forbidden ? toSet(opt.forbidden) : {},\n constants = opt.constants || Constants,\n functions = (opt.functions || Functions)(visit),\n globalvar = opt.globalvar,\n fieldvar = opt.fieldvar,\n outputGlobal = isFunction(globalvar) ? globalvar : id => `${globalvar}[\"${id}\"]`;\n let globals = {},\n fields = {},\n memberDepth = 0;\n function visit(ast) {\n if (isString(ast)) return ast;\n const generator = Generators[ast.type];\n if (generator == null) error('Unsupported type: ' + ast.type);\n return generator(ast);\n }\n const Generators = {\n Literal: n => n.raw,\n Identifier: n => {\n const id = n.name;\n if (memberDepth > 0) {\n return id;\n } else if (hasOwnProperty(forbidden, id)) {\n return error('Illegal identifier: ' + id);\n } else if (hasOwnProperty(constants, id)) {\n return constants[id];\n } else if (hasOwnProperty(allowed, id)) {\n return id;\n } else {\n globals[id] = 1;\n return outputGlobal(id);\n }\n },\n MemberExpression: n => {\n const d = !n.computed,\n o = visit(n.object);\n if (d) memberDepth += 1;\n const p = visit(n.property);\n if (o === fieldvar) {\n // strip quotes to sanitize field name (#1653)\n fields[stripQuotes(p)] = 1;\n }\n if (d) memberDepth -= 1;\n return o + (d ? '.' + p : '[' + p + ']');\n },\n CallExpression: n => {\n if (n.callee.type !== 'Identifier') {\n error('Illegal callee type: ' + n.callee.type);\n }\n const callee = n.callee.name,\n args = n.arguments,\n fn = hasOwnProperty(functions, callee) && functions[callee];\n if (!fn) error('Unrecognized function: ' + callee);\n return isFunction(fn) ? fn(args) : fn + '(' + args.map(visit).join(',') + ')';\n },\n ArrayExpression: n => '[' + n.elements.map(visit).join(',') + ']',\n BinaryExpression: n => '(' + visit(n.left) + ' ' + n.operator + ' ' + visit(n.right) + ')',\n UnaryExpression: n => '(' + n.operator + visit(n.argument) + ')',\n ConditionalExpression: n => '(' + visit(n.test) + '?' + visit(n.consequent) + ':' + visit(n.alternate) + ')',\n LogicalExpression: n => '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n ObjectExpression: n => '{' + n.properties.map(visit).join(',') + '}',\n Property: n => {\n memberDepth += 1;\n const k = visit(n.key);\n memberDepth -= 1;\n return k + ':' + visit(n.value);\n }\n };\n function codegen(ast) {\n const result = {\n code: visit(ast),\n globals: Object.keys(globals),\n fields: Object.keys(fields)\n };\n globals = {};\n fields = {};\n return result;\n }\n codegen.functions = functions;\n codegen.constants = constants;\n return codegen;\n}\n\nexport { ASTNode, ArrayExpression, BinaryExpression, CallExpression, ConditionalExpression, Identifier, Literal, LogicalExpression, MemberExpression, ObjectExpression, Property, RawCode, UnaryExpression, codegen as codegenExpression, Constants as constants, Functions as functions, parser as parseExpression };\n","import { bisector, union, intersection } from 'd3-array';\nimport { field, isDate, toNumber, isArray, inrange, extend, array, error, peek, hasOwnProperty } from 'vega-util';\nimport { Literal } from 'vega-expression';\n\nconst Intersect = 'intersect';\nconst Union = 'union';\nconst VlMulti = 'vlMulti';\nconst VlPoint = 'vlPoint';\nconst Or = 'or';\nconst And = 'and';\nconst SelectionId = '_vgsid_';\nconst $selectionId = field(SelectionId);\n\nconst TYPE_ENUM = 'E',\n TYPE_RANGE_INC = 'R',\n TYPE_RANGE_EXC = 'R-E',\n TYPE_RANGE_LE = 'R-LE',\n TYPE_RANGE_RE = 'R-RE',\n UNIT_INDEX = 'index:unit';\n\n// TODO: revisit date coercion?\nfunction testPoint(datum, entry) {\n var fields = entry.fields,\n values = entry.values,\n n = fields.length,\n i = 0,\n dval,\n f;\n for (; i < n; ++i) {\n f = fields[i];\n f.getter = field.getter || field(f.field);\n dval = f.getter(datum);\n if (isDate(dval)) dval = toNumber(dval);\n if (isDate(values[i])) values[i] = toNumber(values[i]);\n if (isDate(values[i][0])) values[i] = values[i].map(toNumber);\n if (f.type === TYPE_ENUM) {\n // Enumerated fields can either specify individual values (single/multi selections)\n // or an array of values (interval selections).\n if (isArray(values[i]) ? values[i].indexOf(dval) < 0 : dval !== values[i]) {\n return false;\n }\n } else {\n if (f.type === TYPE_RANGE_INC) {\n if (!inrange(dval, values[i])) return false;\n } else if (f.type === TYPE_RANGE_RE) {\n // Discrete selection of bins test within the range [bin_start, bin_end).\n if (!inrange(dval, values[i], true, false)) return false;\n } else if (f.type === TYPE_RANGE_EXC) {\n // 'R-E'/'R-LE' included for completeness.\n if (!inrange(dval, values[i], false, false)) return false;\n } else if (f.type === TYPE_RANGE_LE) {\n if (!inrange(dval, values[i], false, true)) return false;\n }\n }\n }\n return true;\n}\n\n/**\n * Tests if a tuple is contained within an interactive selection.\n * @param {string} name - The name of the data set representing the selection.\n * Tuples in the dataset are of the form\n * {unit: string, fields: array, values: array<*>}.\n * Fielddef is of the form\n * {field: string, channel: string, type: 'E' | 'R'} where\n * 'type' identifies whether tuples in the dataset enumerate\n * values for the field, or specify a continuous range.\n * @param {object} datum - The tuple to test for inclusion.\n * @param {string} op - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @return {boolean} - True if the datum is in the selection, false otherwise.\n */\nfunction selectionTest(name, datum, op) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === Intersect,\n n = entries.length,\n i = 0,\n entry,\n miss,\n count,\n unit,\n b;\n for (; i < n; ++i) {\n entry = entries[i];\n if (unitIdx && intersect) {\n // multi selections union within the same unit and intersect across units.\n miss = miss || {};\n count = miss[unit = entry.unit] || 0;\n\n // if we've already matched this unit, skip.\n if (count === -1) continue;\n b = testPoint(datum, entry);\n miss[unit] = b ? -1 : ++count;\n\n // if we match and there are no other units return true\n // if we've missed against all tuples in this unit return false\n if (b && unitIdx.size === 1) return true;\n if (!b && count === unitIdx.get(unit).count) return false;\n } else {\n b = testPoint(datum, entry);\n\n // if we find a miss and we do require intersection return false\n // if we find a match and we don't require intersection return true\n if (intersect ^ b) return b;\n }\n }\n\n // if intersecting and we made it here, then we saw no misses\n // if not intersecting, then we saw no matches\n // if no active selections, return false\n return n && intersect;\n}\nconst bisect = bisector($selectionId),\n bisectLeft = bisect.left,\n bisectRight = bisect.right;\nfunction selectionIdTest(name, datum, op) {\n const data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === Intersect,\n value = $selectionId(datum),\n index = bisectLeft(entries, value);\n if (index === entries.length) return false;\n if ($selectionId(entries[index]) !== value) return false;\n if (unitIdx && intersect) {\n if (unitIdx.size === 1) return true;\n if (bisectRight(entries, value) - index < unitIdx.size) return false;\n }\n return true;\n}\n\n/**\n * Maps an array of scene graph items to an array of selection tuples.\n * @param {string} name - The name of the dataset representing the selection.\n * @param {string} base - The base object that generated tuples extend.\n *\n * @returns {array} An array of selection entries for the given unit.\n */\nfunction selectionTuples(array, base) {\n return array.map(x => extend(base.fields ? {\n values: base.fields.map(f => (f.getter || (f.getter = field(f.field)))(x.datum))\n } : {\n [SelectionId]: $selectionId(x.datum)\n }, base));\n}\n\n/**\n * Resolves selection for use as a scale domain or reads via the API.\n * @param {string} name - The name of the dataset representing the selection\n * @param {string} [op='union'] - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @param {boolean} isMulti - Identifies a \"multi\" selection to perform more\n * expensive resolution computation.\n * @param {boolean} vl5 - With Vega-Lite v5, \"multi\" selections are now called \"point\"\n * selections, and thus the resolved tuple should reflect this name.\n * This parameter allows us to reflect this change without triggering\n * a major version bump for Vega.\n * @returns {object} An object of selected fields and values.\n */\nfunction selectionResolve(name, op, isMulti, vl5) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n resolved = {},\n multiRes = {},\n types = {},\n entry,\n fields,\n values,\n unit,\n field,\n value,\n res,\n resUnit,\n type,\n union,\n n = entries.length,\n i = 0,\n j,\n m;\n\n // First union all entries within the same unit.\n for (; i < n; ++i) {\n entry = entries[i];\n unit = entry.unit;\n fields = entry.fields;\n values = entry.values;\n if (fields && values) {\n // Intentional selection stores\n for (j = 0, m = fields.length; j < m; ++j) {\n field = fields[j];\n res = resolved[field.field] || (resolved[field.field] = {});\n resUnit = res[unit] || (res[unit] = []);\n types[field.field] = type = field.type.charAt(0);\n union = ops[`${type}_union`];\n res[unit] = union(resUnit, array(values[j]));\n }\n\n // If the same multi-selection is repeated over views and projected over\n // an encoding, it may operate over different fields making it especially\n // tricky to reliably resolve it. At best, we can de-dupe identical entries\n // but doing so may be more computationally expensive than it is worth.\n // Instead, for now, we simply transform our store representation into\n // a more human-friendly one.\n if (isMulti) {\n resUnit = multiRes[unit] || (multiRes[unit] = []);\n resUnit.push(array(values).reduce((obj, curr, j) => (obj[fields[j].field] = curr, obj), {}));\n }\n } else {\n // Short circuit extensional selectionId stores which hold sorted IDs unique to each unit.\n field = SelectionId;\n value = $selectionId(entry);\n res = resolved[field] || (resolved[field] = {});\n resUnit = res[unit] || (res[unit] = []);\n resUnit.push(value);\n if (isMulti) {\n resUnit = multiRes[unit] || (multiRes[unit] = []);\n resUnit.push({\n [SelectionId]: value\n });\n }\n }\n }\n\n // Then resolve fields across units as per the op.\n op = op || Union;\n if (resolved[SelectionId]) {\n resolved[SelectionId] = ops[`${SelectionId}_${op}`](...Object.values(resolved[SelectionId]));\n } else {\n Object.keys(resolved).forEach(field => {\n resolved[field] = Object.keys(resolved[field]).map(unit => resolved[field][unit]).reduce((acc, curr) => acc === undefined ? curr : ops[`${types[field]}_${op}`](acc, curr));\n });\n }\n entries = Object.keys(multiRes);\n if (isMulti && entries.length) {\n const key = vl5 ? VlPoint : VlMulti;\n resolved[key] = op === Union ? {\n [Or]: entries.reduce((acc, k) => (acc.push(...multiRes[k]), acc), [])\n } : {\n [And]: entries.map(k => ({\n [Or]: multiRes[k]\n }))\n };\n }\n return resolved;\n}\nvar ops = {\n [`${SelectionId}_union`]: union,\n [`${SelectionId}_intersect`]: intersection,\n E_union: function (base, value) {\n if (!base.length) return value;\n var i = 0,\n n = value.length;\n for (; i < n; ++i) if (base.indexOf(value[i]) < 0) base.push(value[i]);\n return base;\n },\n E_intersect: function (base, value) {\n return !base.length ? value : base.filter(v => value.indexOf(v) >= 0);\n },\n R_union: function (base, value) {\n var lo = toNumber(value[0]),\n hi = toNumber(value[1]);\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n if (!base.length) return [lo, hi];\n if (base[0] > lo) base[0] = lo;\n if (base[1] < hi) base[1] = hi;\n return base;\n },\n R_intersect: function (base, value) {\n var lo = toNumber(value[0]),\n hi = toNumber(value[1]);\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n if (!base.length) return [lo, hi];\n if (hi < base[0] || base[1] < lo) {\n return [];\n } else {\n if (base[0] < lo) base[0] = lo;\n if (base[1] > hi) base[1] = hi;\n }\n return base;\n }\n};\n\nconst DataPrefix = ':',\n IndexPrefix = '@';\nfunction selectionVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to selection functions must be a string literal.');\n const data = args[0].value,\n op = args.length >= 2 && peek(args).value,\n field = 'unit',\n indexName = IndexPrefix + field,\n dataName = DataPrefix + data;\n\n // eslint-disable-next-line no-prototype-builtins\n if (op === Intersect && !hasOwnProperty(params, indexName)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n\n // eslint-disable-next-line no-prototype-builtins\n if (!hasOwnProperty(params, dataName)) {\n params[dataName] = scope.getData(data).tuplesRef();\n }\n}\n\nexport { selectionIdTest, selectionResolve, selectionTest, selectionTuples, selectionVisitor };\n","import { truthy, error, hasOwnProperty, isFunction, isString, stringValue, extend, isArray, isObject, field, peek, identity, array as array$1, isBoolean, isDate, isNumber, isRegExp, toBoolean, toDate, toNumber, toString, flush, lerp, pad, span, inrange, truncate, quarter, utcquarter, extent, clampRange, panLinear, panLog, panPow, panSymlog, zoomLinear, zoomLog, zoomPow, zoomSymlog } from 'vega-util';\nimport { Literal, codegenExpression, constants, functions, parseExpression, CallExpression } from 'vega-expression';\nimport { isRegisteredScale, bandSpace, scale as scale$1, scaleFraction } from 'vega-scale';\nimport { geoArea as geoArea$1, geoBounds as geoBounds$1, geoCentroid as geoCentroid$1 } from 'd3-geo';\nimport { rgb, lab, hcl, hsl } from 'd3-color';\nimport { isTuple } from 'vega-dataflow';\nimport { Gradient, pathRender, pathParse, Bounds, intersect as intersect$1 } from 'vega-scenegraph';\nimport { selectionVisitor, selectionTest, selectionIdTest, selectionResolve, selectionTuples } from 'vega-selections';\nimport { random, cumulativeNormal, cumulativeLogNormal, cumulativeUniform, densityNormal, densityLogNormal, densityUniform, quantileNormal, quantileLogNormal, quantileUniform, sampleNormal, sampleLogNormal, sampleUniform } from 'vega-statistics';\nimport { utcOffset, utcSequence, timeOffset, timeSequence, timeUnitSpecifier, week, utcweek, dayofyear, utcdayofyear } from 'vega-time';\nimport { range as range$1 } from 'd3-array';\n\nfunction data(name) {\n const data = this.context.data[name];\n return data ? data.values.value : [];\n}\nfunction indata(name, field, value) {\n const index = this.context.data[name]['index:' + field],\n entry = index ? index.value.get(value) : undefined;\n return entry ? entry.count : entry;\n}\nfunction setdata(name, tuples) {\n const df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input;\n df.pulse(input, df.changeset().remove(truthy).insert(tuples));\n return 1;\n}\n\nfunction encode (item, name, retval) {\n if (item) {\n const df = this.context.dataflow,\n target = item.mark.source;\n df.pulse(target, df.changeset().encode(item, name));\n }\n return retval !== undefined ? retval : item;\n}\n\nconst wrap = method => function (value, spec) {\n const locale = this.context.dataflow.locale();\n return locale[method](spec)(value);\n};\nconst format = wrap('format');\nconst timeFormat = wrap('timeFormat');\nconst utcFormat = wrap('utcFormat');\nconst timeParse = wrap('timeParse');\nconst utcParse = wrap('utcParse');\nconst dateObj = new Date(2000, 0, 1);\nfunction time(month, day, specifier) {\n if (!Number.isInteger(month) || !Number.isInteger(day)) return '';\n dateObj.setYear(2000);\n dateObj.setMonth(month);\n dateObj.setDate(day);\n return timeFormat.call(this, dateObj, specifier);\n}\nfunction monthFormat(month) {\n return time.call(this, month, 1, '%B');\n}\nfunction monthAbbrevFormat(month) {\n return time.call(this, month, 1, '%b');\n}\nfunction dayFormat(day) {\n return time.call(this, 0, 2 + day, '%A');\n}\nfunction dayAbbrevFormat(day) {\n return time.call(this, 0, 2 + day, '%a');\n}\n\nconst DataPrefix = ':';\nconst IndexPrefix = '@';\nconst ScalePrefix = '%';\nconst SignalPrefix = '$';\n\nfunction dataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) {\n error('First argument to data functions must be a string literal.');\n }\n const data = args[0].value,\n dataName = DataPrefix + data;\n if (!hasOwnProperty(dataName, params)) {\n try {\n params[dataName] = scope.getData(data).tuplesRef();\n } catch (err) {\n // if data set does not exist, there's nothing to track\n }\n }\n}\nfunction indataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to indata must be a string literal.');\n if (args[1].type !== Literal) error('Second argument to indata must be a string literal.');\n const data = args[0].value,\n field = args[1].value,\n indexName = IndexPrefix + field;\n if (!hasOwnProperty(indexName, params)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n}\nfunction scaleVisitor(name, args, scope, params) {\n if (args[0].type === Literal) {\n // add scale dependency\n addScaleDependency(scope, params, args[0].value);\n } else {\n // indirect scale lookup; add all scales as parameters\n for (name in scope.scales) {\n addScaleDependency(scope, params, name);\n }\n }\n}\nfunction addScaleDependency(scope, params, name) {\n const scaleName = ScalePrefix + name;\n if (!hasOwnProperty(params, scaleName)) {\n try {\n params[scaleName] = scope.scaleRef(name);\n } catch (err) {\n // TODO: error handling? warning?\n }\n }\n}\n\nfunction getScale(nameOrFunction, ctx) {\n if (isFunction(nameOrFunction)) {\n return nameOrFunction;\n }\n if (isString(nameOrFunction)) {\n const maybeScale = ctx.scales[nameOrFunction];\n return maybeScale && isRegisteredScale(maybeScale.value) ? maybeScale.value : undefined;\n }\n return undefined;\n}\nfunction internalScaleFunctions(codegen, fnctx, visitors) {\n // add helper method to the 'this' expression function context\n fnctx.__bandwidth = s => s && s.bandwidth ? s.bandwidth() : 0;\n\n // register AST visitors for internal scale functions\n visitors._bandwidth = scaleVisitor;\n visitors._range = scaleVisitor;\n visitors._scale = scaleVisitor;\n\n // resolve scale reference directly to the signal hash argument\n const ref = arg => '_[' + (arg.type === Literal ? stringValue(ScalePrefix + arg.value) : stringValue(ScalePrefix) + '+' + codegen(arg)) + ']';\n\n // define and return internal scale function code generators\n // these internal functions are called by mark encoders\n return {\n _bandwidth: args => `this.__bandwidth(${ref(args[0])})`,\n _range: args => `${ref(args[0])}.range()`,\n _scale: args => `${ref(args[0])}(${codegen(args[1])})`\n };\n}\n\nfunction geoMethod(methodName, globalMethod) {\n return function (projection, geojson, group) {\n if (projection) {\n // projection defined, use it\n const p = getScale(projection, (group || this).context);\n return p && p.path[methodName](geojson);\n } else {\n // projection undefined, use global method\n return globalMethod(geojson);\n }\n };\n}\nconst geoArea = geoMethod('area', geoArea$1);\nconst geoBounds = geoMethod('bounds', geoBounds$1);\nconst geoCentroid = geoMethod('centroid', geoCentroid$1);\n\nfunction inScope (item) {\n const group = this.context.group;\n let value = false;\n if (group) while (item) {\n if (item === group) {\n value = true;\n break;\n }\n item = item.mark.group;\n }\n return value;\n}\n\nfunction log(df, method, args) {\n try {\n df[method].apply(df, ['EXPRESSION'].concat([].slice.call(args)));\n } catch (err) {\n df.warn(err);\n }\n return args[args.length - 1];\n}\nfunction warn() {\n return log(this.context.dataflow, 'warn', arguments);\n}\nfunction info() {\n return log(this.context.dataflow, 'info', arguments);\n}\nfunction debug() {\n return log(this.context.dataflow, 'debug', arguments);\n}\n\n// https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\nfunction channel_luminance_value(channelValue) {\n const val = channelValue / 255;\n if (val <= 0.03928) {\n return val / 12.92;\n }\n return Math.pow((val + 0.055) / 1.055, 2.4);\n}\nfunction luminance(color) {\n const c = rgb(color),\n r = channel_luminance_value(c.r),\n g = channel_luminance_value(c.g),\n b = channel_luminance_value(c.b);\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n\n// https://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\nfunction contrast(color1, color2) {\n const lum1 = luminance(color1),\n lum2 = luminance(color2),\n lumL = Math.max(lum1, lum2),\n lumD = Math.min(lum1, lum2);\n return (lumL + 0.05) / (lumD + 0.05);\n}\n\nfunction merge () {\n const args = [].slice.call(arguments);\n args.unshift({});\n return extend(...args);\n}\n\nfunction equal(a, b) {\n return a === b || a !== a && b !== b ? true : isArray(a) ? isArray(b) && a.length === b.length ? equalArray(a, b) : false : isObject(a) && isObject(b) ? equalObject(a, b) : false;\n}\nfunction equalArray(a, b) {\n for (let i = 0, n = a.length; i < n; ++i) {\n if (!equal(a[i], b[i])) return false;\n }\n return true;\n}\nfunction equalObject(a, b) {\n for (const key in a) {\n if (!equal(a[key], b[key])) return false;\n }\n return true;\n}\nfunction removePredicate(props) {\n return _ => equalObject(props, _);\n}\nfunction modify (name, insert, remove, toggle, modify, values) {\n const df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input,\n stamp = df.stamp();\n let changes = data.changes,\n predicate,\n key;\n if (df._trigger === false || !(input.value.length || insert || toggle)) {\n // nothing to do!\n return 0;\n }\n if (!changes || changes.stamp < stamp) {\n data.changes = changes = df.changeset();\n changes.stamp = stamp;\n df.runAfter(() => {\n data.modified = true;\n df.pulse(input, changes).run();\n }, true, 1);\n }\n if (remove) {\n predicate = remove === true ? truthy : isArray(remove) || isTuple(remove) ? remove : removePredicate(remove);\n changes.remove(predicate);\n }\n if (insert) {\n changes.insert(insert);\n }\n if (toggle) {\n predicate = removePredicate(toggle);\n if (input.value.some(predicate)) {\n changes.remove(predicate);\n } else {\n changes.insert(toggle);\n }\n }\n if (modify) {\n for (key in values) {\n changes.modify(modify, key, values[key]);\n }\n }\n return 1;\n}\n\nfunction pinchDistance(event) {\n const t = event.touches,\n dx = t[0].clientX - t[1].clientX,\n dy = t[0].clientY - t[1].clientY;\n return Math.hypot(dx, dy);\n}\nfunction pinchAngle(event) {\n const t = event.touches;\n return Math.atan2(t[0].clientY - t[1].clientY, t[0].clientX - t[1].clientX);\n}\n\n// memoize accessor functions\nconst accessors = {};\nfunction pluck (data, name) {\n const accessor = accessors[name] || (accessors[name] = field(name));\n return isArray(data) ? data.map(accessor) : accessor(data);\n}\n\nfunction array(seq) {\n return isArray(seq) || ArrayBuffer.isView(seq) ? seq : null;\n}\nfunction sequence(seq) {\n return array(seq) || (isString(seq) ? seq : null);\n}\nfunction join(seq) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return array(seq).join(...args);\n}\nfunction indexof(seq) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n return sequence(seq).indexOf(...args);\n}\nfunction lastindexof(seq) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return sequence(seq).lastIndexOf(...args);\n}\nfunction slice(seq) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n return sequence(seq).slice(...args);\n}\nfunction replace(str, pattern, repl) {\n if (isFunction(repl)) error('Function argument passed to replace.');\n return String(str).replace(pattern, repl);\n}\nfunction reverse(seq) {\n return array(seq).slice().reverse();\n}\n\nfunction bandspace(count, paddingInner, paddingOuter) {\n return bandSpace(count || 0, paddingInner || 0, paddingOuter || 0);\n}\nfunction bandwidth(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.bandwidth ? s.bandwidth() : 0;\n}\nfunction copy(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.copy() : undefined;\n}\nfunction domain(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.domain() : [];\n}\nfunction invert(name, range, group) {\n const s = getScale(name, (group || this).context);\n return !s ? undefined : isArray(range) ? (s.invertRange || s.invert)(range) : (s.invert || s.invertExtent)(range);\n}\nfunction range(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.range ? s.range() : [];\n}\nfunction scale(name, value, group) {\n const s = getScale(name, (group || this).context);\n return s ? s(value) : undefined;\n}\n\nfunction scaleGradient (scale, p0, p1, count, group) {\n scale = getScale(scale, (group || this).context);\n const gradient = Gradient(p0, p1);\n let stops = scale.domain(),\n min = stops[0],\n max = peek(stops),\n fraction = identity;\n if (!(max - min)) {\n // expand scale if domain has zero span, fix #1479\n scale = (scale.interpolator ? scale$1('sequential')().interpolator(scale.interpolator()) : scale$1('linear')().interpolate(scale.interpolate()).range(scale.range())).domain([min = 0, max = 1]);\n } else {\n fraction = scaleFraction(scale, min, max);\n }\n if (scale.ticks) {\n stops = scale.ticks(+count || 15);\n if (min !== stops[0]) stops.unshift(min);\n if (max !== peek(stops)) stops.push(max);\n }\n stops.forEach(_ => gradient.stop(fraction(_), scale(_)));\n return gradient;\n}\n\nfunction geoShape(projection, geojson, group) {\n const p = getScale(projection, (group || this).context);\n return function (context) {\n return p ? p.path.context(context)(geojson) : '';\n };\n}\nfunction pathShape(path) {\n let p = null;\n return function (context) {\n return context ? pathRender(context, p = p || pathParse(path)) : path;\n };\n}\n\nconst datum = d => d.data;\nfunction treeNodes(name, context) {\n const tree = data.call(context, name);\n return tree.root && tree.root.lookup || {};\n}\nfunction treePath(name, source, target) {\n const nodes = treeNodes(name, this),\n s = nodes[source],\n t = nodes[target];\n return s && t ? s.path(t).map(datum) : undefined;\n}\nfunction treeAncestors(name, node) {\n const n = treeNodes(name, this)[node];\n return n ? n.ancestors().map(datum) : undefined;\n}\n\nconst _window = () => typeof window !== 'undefined' && window || null;\nfunction screen() {\n const w = _window();\n return w ? w.screen : {};\n}\nfunction windowSize() {\n const w = _window();\n return w ? [w.innerWidth, w.innerHeight] : [undefined, undefined];\n}\nfunction containerSize() {\n const view = this.context.dataflow,\n el = view.container && view.container();\n return el ? [el.clientWidth, el.clientHeight] : [undefined, undefined];\n}\n\nfunction intersect (b, opt, group) {\n if (!b) return [];\n const [u, v] = b,\n box = new Bounds().set(u[0], u[1], v[0], v[1]),\n scene = group || this.context.dataflow.scenegraph().root;\n return intersect$1(scene, box, filter(opt));\n}\nfunction filter(opt) {\n let p = null;\n if (opt) {\n const types = array$1(opt.marktype),\n names = array$1(opt.markname);\n p = _ => (!types.length || types.some(t => _.marktype === t)) && (!names.length || names.some(s => _.name === s));\n }\n return p;\n}\n\n/**\n * Appends a new point to the lasso\n *\n * @param {*} lasso the lasso in pixel space\n * @param {*} x the x coordinate in pixel space\n * @param {*} y the y coordinate in pixel space\n * @param {*} minDist the minimum distance, in pixels, that thenew point needs to be apart from the last point\n * @returns a new array containing the lasso with the new point\n */\nfunction lassoAppend(lasso, x, y) {\n let minDist = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 5;\n lasso = array$1(lasso);\n const last = lasso[lasso.length - 1];\n\n // Add point to lasso if its the first point or distance to last point exceed minDist\n return last === undefined || Math.hypot(last[0] - x, last[1] - y) > minDist ? [...lasso, [x, y]] : lasso;\n}\n\n/**\n * Generates a svg path command which draws a lasso\n *\n * @param {*} lasso the lasso in pixel space in the form [[x,y], [x,y], ...]\n * @returns the svg path command that draws the lasso\n */\nfunction lassoPath(lasso) {\n return array$1(lasso).reduce((svg, _ref, i) => {\n let [x, y] = _ref;\n return svg += i == 0 ? `M ${x},${y} ` : i === lasso.length - 1 ? ' Z' : `L ${x},${y} `;\n }, '');\n}\n\n/**\n * Inverts the lasso from pixel space to an array of vega scenegraph tuples\n *\n * @param {*} data the dataset\n * @param {*} pixelLasso the lasso in pixel space, [[x,y], [x,y], ...]\n * @param {*} unit the unit where the lasso is defined\n *\n * @returns an array of vega scenegraph tuples\n */\nfunction intersectLasso(markname, pixelLasso, unit) {\n const {\n x,\n y,\n mark\n } = unit;\n const bb = new Bounds().set(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER, Number.MIN_SAFE_INTEGER);\n\n // Get bounding box around lasso\n for (const [px, py] of pixelLasso) {\n if (px < bb.x1) bb.x1 = px;\n if (px > bb.x2) bb.x2 = px;\n if (py < bb.y1) bb.y1 = py;\n if (py > bb.y2) bb.y2 = py;\n }\n\n // Translate bb against unit coordinates\n bb.translate(x, y);\n const intersection = intersect([[bb.x1, bb.y1], [bb.x2, bb.y2]], markname, mark);\n\n // Check every point against the lasso\n return intersection.filter(tuple => pointInPolygon(tuple.x, tuple.y, pixelLasso));\n}\n\n/**\n * Performs a test if a point is inside a polygon based on the idea from\n * https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html\n *\n * This method will not need the same start/end point since it wraps around the edges of the array\n *\n * @param {*} test a point to test against\n * @param {*} polygon a polygon in the form [[x,y], [x,y], ...]\n * @returns true if the point lies inside the polygon, false otherwise\n */\nfunction pointInPolygon(testx, testy, polygon) {\n let intersections = 0;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const [prevX, prevY] = polygon[j];\n const [x, y] = polygon[i];\n\n // count intersections\n if (y > testy != prevY > testy && testx < (prevX - x) * (testy - y) / (prevY - y) + x) {\n intersections++;\n }\n }\n\n // point is in polygon if intersection count is odd\n return intersections & 1;\n}\n\n// Expression function context object\nconst functionContext = {\n random() {\n return random();\n },\n // override default\n cumulativeNormal,\n cumulativeLogNormal,\n cumulativeUniform,\n densityNormal,\n densityLogNormal,\n densityUniform,\n quantileNormal,\n quantileLogNormal,\n quantileUniform,\n sampleNormal,\n sampleLogNormal,\n sampleUniform,\n isArray,\n isBoolean,\n isDate,\n isDefined(_) {\n return _ !== undefined;\n },\n isNumber,\n isObject,\n isRegExp,\n isString,\n isTuple,\n isValid(_) {\n return _ != null && _ === _;\n },\n toBoolean,\n toDate(_) {\n return toDate(_);\n },\n // suppress extra arguments\n toNumber,\n toString,\n indexof,\n join,\n lastindexof,\n replace,\n reverse,\n slice,\n flush,\n lerp,\n merge,\n pad,\n peek,\n pluck,\n span,\n inrange,\n truncate,\n rgb,\n lab,\n hcl,\n hsl,\n luminance,\n contrast,\n sequence: range$1,\n format,\n utcFormat,\n utcParse,\n utcOffset,\n utcSequence,\n timeFormat,\n timeParse,\n timeOffset,\n timeSequence,\n timeUnitSpecifier,\n monthFormat,\n monthAbbrevFormat,\n dayFormat,\n dayAbbrevFormat,\n quarter,\n utcquarter,\n week,\n utcweek,\n dayofyear,\n utcdayofyear,\n warn,\n info,\n debug,\n extent(_) {\n return extent(_);\n },\n // suppress extra arguments\n inScope,\n intersect,\n clampRange,\n pinchDistance,\n pinchAngle,\n screen,\n containerSize,\n windowSize,\n bandspace,\n setdata,\n pathShape,\n panLinear,\n panLog,\n panPow,\n panSymlog,\n zoomLinear,\n zoomLog,\n zoomPow,\n zoomSymlog,\n encode,\n modify,\n lassoAppend,\n lassoPath,\n intersectLasso\n};\nconst eventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'],\n // event functions\n eventPrefix = 'event.vega.',\n // event function prefix\n thisPrefix = 'this.',\n // function context prefix\n astVisitors = {}; // AST visitors for dependency analysis\n\n// export code generator parameters\nconst codegenParams = {\n forbidden: ['_'],\n allowed: ['datum', 'event', 'item'],\n fieldvar: 'datum',\n globalvar: id => `_[${stringValue(SignalPrefix + id)}]`,\n functions: buildFunctions,\n constants: constants,\n visitors: astVisitors\n};\n\n// export code generator\nconst codeGenerator = codegenExpression(codegenParams);\n\n// Build expression function registry\nfunction buildFunctions(codegen) {\n const fn = functions(codegen);\n eventFunctions.forEach(name => fn[name] = eventPrefix + name);\n for (const name in functionContext) {\n fn[name] = thisPrefix + name;\n }\n extend(fn, internalScaleFunctions(codegen, functionContext, astVisitors));\n return fn;\n}\n\n// Register an expression function\nfunction expressionFunction(name, fn, visitor) {\n if (arguments.length === 1) {\n return functionContext[name];\n }\n\n // register with the functionContext\n functionContext[name] = fn;\n\n // if there is an astVisitor register that, too\n if (visitor) astVisitors[name] = visitor;\n\n // if the code generator has already been initialized,\n // we need to also register the function with it\n if (codeGenerator) codeGenerator.functions[name] = thisPrefix + name;\n return this;\n}\n\n// register expression functions with ast visitors\nexpressionFunction('bandwidth', bandwidth, scaleVisitor);\nexpressionFunction('copy', copy, scaleVisitor);\nexpressionFunction('domain', domain, scaleVisitor);\nexpressionFunction('range', range, scaleVisitor);\nexpressionFunction('invert', invert, scaleVisitor);\nexpressionFunction('scale', scale, scaleVisitor);\nexpressionFunction('gradient', scaleGradient, scaleVisitor);\nexpressionFunction('geoArea', geoArea, scaleVisitor);\nexpressionFunction('geoBounds', geoBounds, scaleVisitor);\nexpressionFunction('geoCentroid', geoCentroid, scaleVisitor);\nexpressionFunction('geoShape', geoShape, scaleVisitor);\nexpressionFunction('indata', indata, indataVisitor);\nexpressionFunction('data', data, dataVisitor);\nexpressionFunction('treePath', treePath, dataVisitor);\nexpressionFunction('treeAncestors', treeAncestors, dataVisitor);\n\n// register Vega-Lite selection functions\nexpressionFunction('vlSelectionTest', selectionTest, selectionVisitor);\nexpressionFunction('vlSelectionIdTest', selectionIdTest, selectionVisitor);\nexpressionFunction('vlSelectionResolve', selectionResolve, selectionVisitor);\nexpressionFunction('vlSelectionTuples', selectionTuples);\n\nfunction parser (expr, scope) {\n const params = {};\n\n // parse the expression to an abstract syntax tree (ast)\n let ast;\n try {\n expr = isString(expr) ? expr : stringValue(expr) + '';\n ast = parseExpression(expr);\n } catch (err) {\n error('Expression parse error: ' + expr);\n }\n\n // analyze ast function calls for dependencies\n ast.visit(node => {\n if (node.type !== CallExpression) return;\n const name = node.callee.name,\n visit = codegenParams.visitors[name];\n if (visit) visit(name, node.arguments, scope, params);\n });\n\n // perform code generation\n const gen = codeGenerator(ast);\n\n // collect signal dependencies\n gen.globals.forEach(name => {\n const signalName = SignalPrefix + name;\n if (!hasOwnProperty(params, signalName) && scope.getSignal(name)) {\n params[signalName] = scope.signalRef(name);\n }\n });\n\n // return generated expression code and dependencies\n return {\n $expr: extend({\n code: gen.code\n }, scope.options.ast ? {\n ast\n } : null),\n $fields: gen.fields,\n $params: params\n };\n}\n\nexport { DataPrefix, IndexPrefix, ScalePrefix, SignalPrefix, bandspace, bandwidth, codeGenerator, codegenParams, containerSize, contrast, copy, data, dataVisitor, dayAbbrevFormat, dayFormat, debug, domain, encode, expressionFunction, format, functionContext, geoArea, geoBounds, geoCentroid, geoShape, inScope, indata, indataVisitor, indexof, info, invert, join, lastindexof, luminance, merge, modify, monthAbbrevFormat, monthFormat, parser as parseExpression, pathShape, pinchAngle, pinchDistance, pluck, range, replace, reverse, scale, scaleGradient, scaleVisitor, screen, setdata, slice, timeFormat, timeParse, treeAncestors, treePath, utcFormat, utcParse, warn, windowSize };\n","import { toSet, stringValue, error, isArray, isObject, hasOwnProperty, accessor, key, field, array, compare, truthy } from 'vega-util';\nimport { tupleid } from 'vega-dataflow';\n\n/**\n * Parse a serialized dataflow specification.\n */\nfunction parse (spec) {\n const ctx = this,\n operators = spec.operators || [];\n\n // parse background\n if (spec.background) {\n ctx.background = spec.background;\n }\n\n // parse event configuration\n if (spec.eventConfig) {\n ctx.eventConfig = spec.eventConfig;\n }\n\n // parse locale configuration\n if (spec.locale) {\n ctx.locale = spec.locale;\n }\n\n // parse operators\n operators.forEach(entry => ctx.parseOperator(entry));\n\n // parse operator parameters\n operators.forEach(entry => ctx.parseOperatorParameters(entry));\n\n // parse streams\n (spec.streams || []).forEach(entry => ctx.parseStream(entry));\n\n // parse updates\n (spec.updates || []).forEach(entry => ctx.parseUpdate(entry));\n return ctx.resolve();\n}\n\nconst Skip = toSet(['rule']),\n Swap = toSet(['group', 'image', 'rect']);\nfunction adjustSpatial(encode, marktype) {\n let code = '';\n if (Skip[marktype]) return code;\n if (encode.x2) {\n if (encode.x) {\n if (Swap[marktype]) {\n code += 'if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;';\n }\n code += 'o.width=o.x2-o.x;';\n } else {\n code += 'o.x=o.x2-(o.width||0);';\n }\n }\n if (encode.xc) {\n code += 'o.x=o.xc-(o.width||0)/2;';\n }\n if (encode.y2) {\n if (encode.y) {\n if (Swap[marktype]) {\n code += 'if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;';\n }\n code += 'o.height=o.y2-o.y;';\n } else {\n code += 'o.y=o.y2-(o.height||0);';\n }\n }\n if (encode.yc) {\n code += 'o.y=o.yc-(o.height||0)/2;';\n }\n return code;\n}\nfunction canonicalType(type) {\n return (type + '').toLowerCase();\n}\nfunction isOperator(type) {\n return canonicalType(type) === 'operator';\n}\nfunction isCollect(type) {\n return canonicalType(type) === 'collect';\n}\n\nfunction expression(ctx, args, code) {\n // wrap code in return statement if expression does not terminate\n if (!code.endsWith(';')) {\n code = 'return(' + code + ');';\n }\n const fn = Function(...args.concat(code));\n return ctx && ctx.functions ? fn.bind(ctx.functions) : fn;\n}\n\n// generate code for comparing a single field\nfunction _compare(u, v, lt, gt) {\n return `((u = ${u}) < (v = ${v}) || u == null) && v != null ? ${lt}\n : (u > v || v == null) && u != null ? ${gt}\n : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? ${lt}\n : v !== v && u === u ? ${gt} : `;\n}\nvar expressionCodegen = {\n /**\n * Parse an expression used to update an operator value.\n */\n operator: (ctx, expr) => expression(ctx, ['_'], expr.code),\n /**\n * Parse an expression provided as an operator parameter value.\n */\n parameter: (ctx, expr) => expression(ctx, ['datum', '_'], expr.code),\n /**\n * Parse an expression applied to an event stream.\n */\n event: (ctx, expr) => expression(ctx, ['event'], expr.code),\n /**\n * Parse an expression used to handle an event-driven operator update.\n */\n handler: (ctx, expr) => {\n const code = `var datum=event.item&&event.item.datum;return ${expr.code};`;\n return expression(ctx, ['_', 'event'], code);\n },\n /**\n * Parse an expression that performs visual encoding.\n */\n encode: (ctx, encode) => {\n const {\n marktype,\n channels\n } = encode;\n let code = 'var o=item,datum=o.datum,m=0,$;';\n for (const name in channels) {\n const o = 'o[' + stringValue(name) + ']';\n code += `$=${channels[name].code};if(${o}!==$)${o}=$,m=1;`;\n }\n code += adjustSpatial(channels, marktype);\n code += 'return m;';\n return expression(ctx, ['item', '_'], code);\n },\n /**\n * Optimized code generators for access and comparison.\n */\n codegen: {\n get(path) {\n const ref = `[${path.map(stringValue).join('][')}]`;\n const get = Function('_', `return _${ref};`);\n get.path = ref;\n return get;\n },\n comparator(fields, orders) {\n let t;\n const map = (f, i) => {\n const o = orders[i];\n let u, v;\n if (f.path) {\n u = `a${f.path}`;\n v = `b${f.path}`;\n } else {\n (t = t || {})['f' + i] = f;\n u = `this.f${i}(a)`;\n v = `this.f${i}(b)`;\n }\n return _compare(u, v, -o, o);\n };\n const fn = Function('a', 'b', 'var u, v; return ' + fields.map(map).join('') + '0;');\n return t ? fn.bind(t) : fn;\n }\n }\n};\n\n/**\n * Parse a dataflow operator.\n */\nfunction parseOperator(spec) {\n const ctx = this;\n if (isOperator(spec.type) || !spec.type) {\n ctx.operator(spec, spec.update ? ctx.operatorExpression(spec.update) : null);\n } else {\n ctx.transform(spec, spec.type);\n }\n}\n\n/**\n * Parse and assign operator parameters.\n */\nfunction parseOperatorParameters(spec) {\n const ctx = this;\n if (spec.params) {\n const op = ctx.get(spec.id);\n if (!op) error('Invalid operator id: ' + spec.id);\n ctx.dataflow.connect(op, op.parameters(ctx.parseParameters(spec.params), spec.react, spec.initonly));\n }\n}\n\n/**\n * Parse a set of operator parameters.\n */\nfunction parseParameters(spec, params) {\n params = params || {};\n const ctx = this;\n for (const key in spec) {\n const value = spec[key];\n params[key] = isArray(value) ? value.map(v => parseParameter(v, ctx, params)) : parseParameter(value, ctx, params);\n }\n return params;\n}\n\n/**\n * Parse a single parameter.\n */\nfunction parseParameter(spec, ctx, params) {\n if (!spec || !isObject(spec)) return spec;\n for (let i = 0, n = PARSERS.length, p; i < n; ++i) {\n p = PARSERS[i];\n if (hasOwnProperty(spec, p.key)) {\n return p.parse(spec, ctx, params);\n }\n }\n return spec;\n}\n\n/** Reference parsers. */\nvar PARSERS = [{\n key: '$ref',\n parse: getOperator\n}, {\n key: '$key',\n parse: getKey\n}, {\n key: '$expr',\n parse: getExpression\n}, {\n key: '$field',\n parse: getField\n}, {\n key: '$encode',\n parse: getEncode\n}, {\n key: '$compare',\n parse: getCompare\n}, {\n key: '$context',\n parse: getContext\n}, {\n key: '$subflow',\n parse: getSubflow\n}, {\n key: '$tupleid',\n parse: getTupleId\n}];\n\n/**\n * Resolve an operator reference.\n */\nfunction getOperator(_, ctx) {\n return ctx.get(_.$ref) || error('Operator not defined: ' + _.$ref);\n}\n\n/**\n * Resolve an expression reference.\n */\nfunction getExpression(_, ctx, params) {\n if (_.$params) {\n // parse expression parameters\n ctx.parseParameters(_.$params, params);\n }\n const k = 'e:' + _.$expr.code;\n return ctx.fn[k] || (ctx.fn[k] = accessor(ctx.parameterExpression(_.$expr), _.$fields));\n}\n\n/**\n * Resolve a key accessor reference.\n */\nfunction getKey(_, ctx) {\n const k = 'k:' + _.$key + '_' + !!_.$flat;\n return ctx.fn[k] || (ctx.fn[k] = key(_.$key, _.$flat, ctx.expr.codegen));\n}\n\n/**\n * Resolve a field accessor reference.\n */\nfunction getField(_, ctx) {\n if (!_.$field) return null;\n const k = 'f:' + _.$field + '_' + _.$name;\n return ctx.fn[k] || (ctx.fn[k] = field(_.$field, _.$name, ctx.expr.codegen));\n}\n\n/**\n * Resolve a comparator function reference.\n */\nfunction getCompare(_, ctx) {\n // As of Vega 5.5.3, $tupleid sort is no longer used.\n // Keep here for now for backwards compatibility.\n const k = 'c:' + _.$compare + '_' + _.$order,\n c = array(_.$compare).map(_ => _ && _.$tupleid ? tupleid : _);\n return ctx.fn[k] || (ctx.fn[k] = compare(c, _.$order, ctx.expr.codegen));\n}\n\n/**\n * Resolve an encode operator reference.\n */\nfunction getEncode(_, ctx) {\n const spec = _.$encode,\n encode = {};\n for (const name in spec) {\n const enc = spec[name];\n encode[name] = accessor(ctx.encodeExpression(enc.$expr), enc.$fields);\n encode[name].output = enc.$output;\n }\n return encode;\n}\n\n/**\n * Resolve a context reference.\n */\nfunction getContext(_, ctx) {\n return ctx;\n}\n\n/**\n * Resolve a recursive subflow specification.\n */\nfunction getSubflow(_, ctx) {\n const spec = _.$subflow;\n return function (dataflow, key, parent) {\n const subctx = ctx.fork().parse(spec),\n op = subctx.get(spec.operators[0].id),\n p = subctx.signals.parent;\n if (p) p.set(parent);\n op.detachSubflow = () => ctx.detach(subctx);\n return op;\n };\n}\n\n/**\n * Resolve a tuple id reference.\n */\nfunction getTupleId() {\n return tupleid;\n}\n\n/**\n * Parse an event stream specification.\n */\nfunction parseStream (spec) {\n var ctx = this,\n filter = spec.filter != null ? ctx.eventExpression(spec.filter) : undefined,\n stream = spec.stream != null ? ctx.get(spec.stream) : undefined,\n args;\n if (spec.source) {\n stream = ctx.events(spec.source, spec.type, filter);\n } else if (spec.merge) {\n args = spec.merge.map(_ => ctx.get(_));\n stream = args[0].merge.apply(args[0], args.slice(1));\n }\n if (spec.between) {\n args = spec.between.map(_ => ctx.get(_));\n stream = stream.between(args[0], args[1]);\n }\n if (spec.filter) {\n stream = stream.filter(filter);\n }\n if (spec.throttle != null) {\n stream = stream.throttle(+spec.throttle);\n }\n if (spec.debounce != null) {\n stream = stream.debounce(+spec.debounce);\n }\n if (stream == null) {\n error('Invalid stream definition: ' + JSON.stringify(spec));\n }\n if (spec.consume) stream.consume(true);\n ctx.stream(spec, stream);\n}\n\n/**\n * Parse an event-driven operator update.\n */\nfunction parseUpdate (spec) {\n var ctx = this,\n srcid = isObject(srcid = spec.source) ? srcid.$ref : srcid,\n source = ctx.get(srcid),\n target = null,\n update = spec.update,\n params = undefined;\n if (!source) error('Source not defined: ' + spec.source);\n target = spec.target && spec.target.$expr ? ctx.eventExpression(spec.target.$expr) : ctx.get(spec.target);\n if (update && update.$expr) {\n if (update.$params) {\n params = ctx.parseParameters(update.$params);\n }\n update = ctx.handlerExpression(update.$expr);\n }\n ctx.update(spec, source, target, update, params);\n}\n\nconst SKIP = {\n skip: true\n};\nfunction getState(options) {\n var ctx = this,\n state = {};\n if (options.signals) {\n var signals = state.signals = {};\n Object.keys(ctx.signals).forEach(key => {\n const op = ctx.signals[key];\n if (options.signals(key, op)) {\n signals[key] = op.value;\n }\n });\n }\n if (options.data) {\n var data = state.data = {};\n Object.keys(ctx.data).forEach(key => {\n const dataset = ctx.data[key];\n if (options.data(key, dataset)) {\n data[key] = dataset.input.value;\n }\n });\n }\n if (ctx.subcontext && options.recurse !== false) {\n state.subcontext = ctx.subcontext.map(ctx => ctx.getState(options));\n }\n return state;\n}\nfunction setState(state) {\n var ctx = this,\n df = ctx.dataflow,\n data = state.data,\n signals = state.signals;\n Object.keys(signals || {}).forEach(key => {\n df.update(ctx.signals[key], signals[key], SKIP);\n });\n Object.keys(data || {}).forEach(key => {\n df.pulse(ctx.data[key].input, df.changeset().remove(truthy).insert(data[key]));\n });\n (state.subcontext || []).forEach((substate, i) => {\n const subctx = ctx.subcontext[i];\n if (subctx) subctx.setState(substate);\n });\n}\n\n/**\n * Context objects store the current parse state.\n * Enables lookup of parsed operators, event streams, accessors, etc.\n * Provides a 'fork' method for creating child contexts for subflows.\n */\nfunction context (df, transforms, functions, expr) {\n return new Context(df, transforms, functions, expr);\n}\nfunction Context(df, transforms, functions, expr) {\n this.dataflow = df;\n this.transforms = transforms;\n this.events = df.events.bind(df);\n this.expr = expr || expressionCodegen, this.signals = {};\n this.scales = {};\n this.nodes = {};\n this.data = {};\n this.fn = {};\n if (functions) {\n this.functions = Object.create(functions);\n this.functions.context = this;\n }\n}\nfunction Subcontext(ctx) {\n this.dataflow = ctx.dataflow;\n this.transforms = ctx.transforms;\n this.events = ctx.events;\n this.expr = ctx.expr;\n this.signals = Object.create(ctx.signals);\n this.scales = Object.create(ctx.scales);\n this.nodes = Object.create(ctx.nodes);\n this.data = Object.create(ctx.data);\n this.fn = Object.create(ctx.fn);\n if (ctx.functions) {\n this.functions = Object.create(ctx.functions);\n this.functions.context = this;\n }\n}\nContext.prototype = Subcontext.prototype = {\n fork() {\n const ctx = new Subcontext(this);\n (this.subcontext || (this.subcontext = [])).push(ctx);\n return ctx;\n },\n detach(ctx) {\n this.subcontext = this.subcontext.filter(c => c !== ctx);\n\n // disconnect all nodes in the subcontext\n // wipe out targets first for better efficiency\n const keys = Object.keys(ctx.nodes);\n for (const key of keys) ctx.nodes[key]._targets = null;\n for (const key of keys) ctx.nodes[key].detach();\n ctx.nodes = null;\n },\n get(id) {\n return this.nodes[id];\n },\n set(id, node) {\n return this.nodes[id] = node;\n },\n add(spec, op) {\n const ctx = this,\n df = ctx.dataflow,\n data = spec.value;\n ctx.set(spec.id, op);\n if (isCollect(spec.type) && data) {\n if (data.$ingest) {\n df.ingest(op, data.$ingest, data.$format);\n } else if (data.$request) {\n df.preload(op, data.$request, data.$format);\n } else {\n df.pulse(op, df.changeset().insert(data));\n }\n }\n if (spec.root) {\n ctx.root = op;\n }\n if (spec.parent) {\n let p = ctx.get(spec.parent.$ref);\n if (p) {\n df.connect(p, [op]);\n op.targets().add(p);\n } else {\n (ctx.unresolved = ctx.unresolved || []).push(() => {\n p = ctx.get(spec.parent.$ref);\n df.connect(p, [op]);\n op.targets().add(p);\n });\n }\n }\n if (spec.signal) {\n ctx.signals[spec.signal] = op;\n }\n if (spec.scale) {\n ctx.scales[spec.scale] = op;\n }\n if (spec.data) {\n for (const name in spec.data) {\n const data = ctx.data[name] || (ctx.data[name] = {});\n spec.data[name].forEach(role => data[role] = op);\n }\n }\n },\n resolve() {\n (this.unresolved || []).forEach(fn => fn());\n delete this.unresolved;\n return this;\n },\n operator(spec, update) {\n this.add(spec, this.dataflow.add(spec.value, update));\n },\n transform(spec, type) {\n this.add(spec, this.dataflow.add(this.transforms[canonicalType(type)]));\n },\n stream(spec, stream) {\n this.set(spec.id, stream);\n },\n update(spec, stream, target, update, params) {\n this.dataflow.on(stream, target, update, params, spec.options);\n },\n // expression parsing\n operatorExpression(expr) {\n return this.expr.operator(this, expr);\n },\n parameterExpression(expr) {\n return this.expr.parameter(this, expr);\n },\n eventExpression(expr) {\n return this.expr.event(this, expr);\n },\n handlerExpression(expr) {\n return this.expr.handler(this, expr);\n },\n encodeExpression(encode) {\n return this.expr.encode(this, encode);\n },\n // parse methods\n parse,\n parseOperator,\n parseOperatorParameters,\n parseParameters,\n parseStream,\n parseUpdate,\n // state methods\n getState,\n setState\n};\n\nexport { context };\n","import { isString, hasOwnProperty, error, truthy, constant, extend, array, isObject, isArray, toSet, debounce, isDate, inherits, stringValue } from 'vega-util';\nimport { changeset, isChangeSet, EventStream, transforms, Dataflow, asyncCallback } from 'vega-dataflow';\nimport { point, renderModule, CanvasHandler, RenderType, Scenegraph } from 'vega-scenegraph';\nimport { tickStep } from 'd3-array';\nimport { functionContext } from 'vega-functions';\nimport { context } from 'vega-runtime';\nimport { interval } from 'd3-timer';\nimport { locale } from 'vega-format';\n\n// initialize aria role and label attributes\nfunction initializeAria(view) {\n const el = view.container();\n if (el) {\n el.setAttribute('role', 'graphics-document');\n el.setAttribute('aria-roleDescription', 'visualization');\n ariaLabel(el, view.description());\n }\n}\n\n// update aria-label if we have a DOM container element\nfunction ariaLabel(el, desc) {\n if (el) desc == null ? el.removeAttribute('aria-label') : el.setAttribute('aria-label', desc);\n}\n\nfunction background (view) {\n // respond to background signal\n view.add(null, _ => {\n view._background = _.bg;\n view._resize = 1;\n return _.bg;\n }, {\n bg: view._signals.background\n });\n}\n\nconst Default = 'default';\nfunction cursor (view) {\n // get cursor signal, add to dataflow if needed\n const cursor = view._signals.cursor || (view._signals.cursor = view.add({\n user: Default,\n item: null\n }));\n\n // evaluate cursor on each mousemove event\n view.on(view.events('view', 'mousemove'), cursor, (_, event) => {\n const value = cursor.value,\n user = value ? isString(value) ? value : value.user : Default,\n item = event.item && event.item.cursor || null;\n return value && user === value.user && item == value.item ? value : {\n user: user,\n item: item\n };\n });\n\n // when cursor signal updates, set visible cursor\n view.add(null, function (_) {\n let user = _.cursor,\n item = this.value;\n if (!isString(user)) {\n item = user.item;\n user = user.user;\n }\n setCursor(view, user && user !== Default ? user : item || user);\n return item;\n }, {\n cursor: cursor\n });\n}\nfunction setCursor(view, cursor) {\n const el = view.globalCursor() ? typeof document !== 'undefined' && document.body : view.container();\n if (el) {\n return cursor == null ? el.style.removeProperty('cursor') : el.style.cursor = cursor;\n }\n}\n\nfunction dataref(view, name) {\n var data = view._runtime.data;\n if (!hasOwnProperty(data, name)) {\n error('Unrecognized data set: ' + name);\n }\n return data[name];\n}\nfunction data(name, values) {\n return arguments.length < 2 ? dataref(this, name).values.value : change.call(this, name, changeset().remove(truthy).insert(values));\n}\nfunction change(name, changes) {\n if (!isChangeSet(changes)) {\n error('Second argument to changes must be a changeset.');\n }\n const dataset = dataref(this, name);\n dataset.modified = true;\n return this.pulse(dataset.input, changes);\n}\nfunction insert(name, _) {\n return change.call(this, name, changeset().insert(_));\n}\nfunction remove(name, _) {\n return change.call(this, name, changeset().remove(_));\n}\n\nfunction width(view) {\n var padding = view.padding();\n return Math.max(0, view._viewWidth + padding.left + padding.right);\n}\nfunction height(view) {\n var padding = view.padding();\n return Math.max(0, view._viewHeight + padding.top + padding.bottom);\n}\nfunction offset(view) {\n var padding = view.padding(),\n origin = view._origin;\n return [padding.left + origin[0], padding.top + origin[1]];\n}\nfunction resizeRenderer(view) {\n var origin = offset(view),\n w = width(view),\n h = height(view);\n view._renderer.background(view.background());\n view._renderer.resize(w, h, origin);\n view._handler.origin(origin);\n view._resizeListeners.forEach(handler => {\n try {\n handler(w, h);\n } catch (error) {\n view.error(error);\n }\n });\n}\n\n/**\n * Extend an event with additional view-specific methods.\n * Adds a new property ('vega') to an event that provides a number\n * of methods for querying information about the current interaction.\n * The vega object provides the following methods:\n * view - Returns the backing View instance.\n * item - Returns the currently active scenegraph item (if any).\n * group - Returns the currently active scenegraph group (if any).\n * This method accepts a single string-typed argument indicating the name\n * of the desired parent group. The scenegraph will be traversed from\n * the item up towards the root to search for a matching group. If no\n * argument is provided the enclosing group for the active item is\n * returned, unless the item it itself a group, in which case it is\n * returned directly.\n * xy - Returns a two-element array containing the x and y coordinates for\n * mouse or touch events. For touch events, this is based on the first\n * elements in the changedTouches array. This method accepts a single\n * argument: either an item instance or mark name that should serve as\n * the reference coordinate system. If no argument is provided the\n * top-level view coordinate system is assumed.\n * x - Returns the current x-coordinate, accepts the same arguments as xy.\n * y - Returns the current y-coordinate, accepts the same arguments as xy.\n * @param {Event} event - The input event to extend.\n * @param {Item} item - The currently active scenegraph item (if any).\n * @return {Event} - The extended input event.\n */\nfunction eventExtend (view, event, item) {\n var r = view._renderer,\n el = r && r.canvas(),\n p,\n e,\n translate;\n if (el) {\n translate = offset(view);\n e = event.changedTouches ? event.changedTouches[0] : event;\n p = point(e, el);\n p[0] -= translate[0];\n p[1] -= translate[1];\n }\n event.dataflow = view;\n event.item = item;\n event.vega = extension(view, item, p);\n return event;\n}\nfunction extension(view, item, point) {\n const itemGroup = item ? item.mark.marktype === 'group' ? item : item.mark.group : null;\n function group(name) {\n var g = itemGroup,\n i;\n if (name) for (i = item; i; i = i.mark.group) {\n if (i.mark.name === name) {\n g = i;\n break;\n }\n }\n return g && g.mark && g.mark.interactive ? g : {};\n }\n function xy(item) {\n if (!item) return point;\n if (isString(item)) item = group(item);\n const p = point.slice();\n while (item) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n item = item.mark && item.mark.group;\n }\n return p;\n }\n return {\n view: constant(view),\n item: constant(item || {}),\n group: group,\n xy: xy,\n x: item => xy(item)[0],\n y: item => xy(item)[1]\n };\n}\n\nconst VIEW = 'view',\n TIMER = 'timer',\n WINDOW = 'window',\n NO_TRAP = {\n trap: false\n };\n\n/**\n * Initialize event handling configuration.\n * @param {object} config - The configuration settings.\n * @return {object}\n */\nfunction initializeEventConfig(config) {\n const events = extend({\n defaults: {}\n }, config);\n const unpack = (obj, keys) => {\n keys.forEach(k => {\n if (isArray(obj[k])) obj[k] = toSet(obj[k]);\n });\n };\n unpack(events.defaults, ['prevent', 'allow']);\n unpack(events, ['view', 'window', 'selector']);\n return events;\n}\nfunction trackEventListener(view, sources, type, handler) {\n view._eventListeners.push({\n type: type,\n sources: array(sources),\n handler: handler\n });\n}\nfunction prevent(view, type) {\n var def = view._eventConfig.defaults,\n prevent = def.prevent,\n allow = def.allow;\n return prevent === false || allow === true ? false : prevent === true || allow === false ? true : prevent ? prevent[type] : allow ? !allow[type] : view.preventDefault();\n}\nfunction permit(view, key, type) {\n const rule = view._eventConfig && view._eventConfig[key];\n if (rule === false || isObject(rule) && !rule[type]) {\n view.warn(`Blocked ${key} ${type} event listener.`);\n return false;\n }\n return true;\n}\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @return {EventStream}\n */\nfunction events(source, type, filter) {\n var view = this,\n s = new EventStream(filter),\n send = function (e, item) {\n view.runAsync(null, () => {\n if (source === VIEW && prevent(view, type)) {\n e.preventDefault();\n }\n s.receive(eventExtend(view, e, item));\n });\n },\n sources;\n if (source === TIMER) {\n if (permit(view, 'timer', type)) {\n view.timer(send, type);\n }\n } else if (source === VIEW) {\n if (permit(view, 'view', type)) {\n // send traps errors, so use {trap: false} option\n view.addEventListener(type, send, NO_TRAP);\n }\n } else {\n if (source === WINDOW) {\n if (permit(view, 'window', type) && typeof window !== 'undefined') {\n sources = [window];\n }\n } else if (typeof document !== 'undefined') {\n if (permit(view, 'selector', type)) {\n sources = Array.from(document.querySelectorAll(source));\n }\n }\n if (!sources) {\n view.warn('Can not resolve event source: ' + source);\n } else {\n for (var i = 0, n = sources.length; i < n; ++i) {\n sources[i].addEventListener(type, send);\n }\n trackEventListener(view, sources, type, send);\n }\n }\n return s;\n}\n\nfunction itemFilter(event) {\n return event.item;\n}\nfunction markTarget(event) {\n // grab upstream collector feeding the mark operator\n return event.item.mark.source;\n}\nfunction invoke(name) {\n return function (_, event) {\n return event.vega.view().changeset().encode(event.item, name);\n };\n}\nfunction hover (hoverSet, leaveSet) {\n hoverSet = [hoverSet || 'hover'];\n leaveSet = [leaveSet || 'update', hoverSet[0]];\n\n // invoke hover set upon mouseover\n this.on(this.events('view', 'mouseover', itemFilter), markTarget, invoke(hoverSet));\n\n // invoke leave set upon mouseout\n this.on(this.events('view', 'mouseout', itemFilter), markTarget, invoke(leaveSet));\n return this;\n}\n\n/**\n * Finalize a View instance that is being removed.\n * Cancel any running timers.\n * Remove all external event listeners.\n * Remove any currently displayed tooltip.\n */\nfunction finalize () {\n var tooltip = this._tooltip,\n timers = this._timers,\n listeners = this._eventListeners,\n n,\n m,\n e;\n n = timers.length;\n while (--n >= 0) {\n timers[n].stop();\n }\n n = listeners.length;\n while (--n >= 0) {\n e = listeners[n];\n m = e.sources.length;\n while (--m >= 0) {\n e.sources[m].removeEventListener(e.type, e.handler);\n }\n }\n if (tooltip) {\n tooltip.call(this, this._handler, null, null, null);\n }\n return this;\n}\n\nfunction element (tag, attr, text) {\n const el = document.createElement(tag);\n for (const key in attr) el.setAttribute(key, attr[key]);\n if (text != null) el.textContent = text;\n return el;\n}\n\nconst BindClass = 'vega-bind',\n NameClass = 'vega-bind-name',\n RadioClass = 'vega-bind-radio';\n\n/**\n * Bind a signal to an external HTML input element. The resulting two-way\n * binding will propagate input changes to signals, and propagate signal\n * changes to the input element state. If this view instance has no parent\n * element, we assume the view is headless and no bindings are created.\n * @param {Element|string} el - The parent DOM element to which the input\n * element should be appended as a child. If string-valued, this argument\n * will be treated as a CSS selector. If null or undefined, the parent\n * element of this view will be used as the element.\n * @param {object} param - The binding parameters which specify the signal\n * to bind to, the input element type, and type-specific configuration.\n * @return {View} - This view instance.\n */\nfunction bind (view, el, binding) {\n if (!el) return;\n const param = binding.param;\n let bind = binding.state;\n if (!bind) {\n bind = binding.state = {\n elements: null,\n active: false,\n set: null,\n update: value => {\n if (value != view.signal(param.signal)) {\n view.runAsync(null, () => {\n bind.source = true;\n view.signal(param.signal, value);\n });\n }\n }\n };\n if (param.debounce) {\n bind.update = debounce(param.debounce, bind.update);\n }\n }\n const create = param.input == null && param.element ? target : generate;\n create(bind, el, param, view);\n if (!bind.active) {\n view.on(view._signals[param.signal], null, () => {\n bind.source ? bind.source = false : bind.set(view.signal(param.signal));\n });\n bind.active = true;\n }\n return bind;\n}\n\n/**\n * Bind the signal to an external EventTarget.\n */\nfunction target(bind, node, param, view) {\n const type = param.event || 'input';\n const handler = () => bind.update(node.value);\n\n // initialize signal value to external input value\n view.signal(param.signal, node.value);\n\n // listen for changes on the element\n node.addEventListener(type, handler);\n\n // register with view, so we can remove it upon finalization\n trackEventListener(view, node, type, handler);\n\n // propagate change to element\n bind.set = value => {\n node.value = value;\n node.dispatchEvent(event(type));\n };\n}\nfunction event(type) {\n return typeof Event !== 'undefined' ? new Event(type) : {\n type\n };\n}\n\n/**\n * Generate an HTML input form element and bind it to a signal.\n */\nfunction generate(bind, el, param, view) {\n const value = view.signal(param.signal);\n const div = element('div', {\n 'class': BindClass\n });\n const wrapper = param.input === 'radio' ? div : div.appendChild(element('label'));\n wrapper.appendChild(element('span', {\n 'class': NameClass\n }, param.name || param.signal));\n el.appendChild(div);\n let input = form;\n switch (param.input) {\n case 'checkbox':\n input = checkbox;\n break;\n case 'select':\n input = select;\n break;\n case 'radio':\n input = radio;\n break;\n case 'range':\n input = range;\n break;\n }\n input(bind, wrapper, param, value);\n}\n\n/**\n * Generates an arbitrary input form element.\n * The input type is controlled via user-provided parameters.\n */\nfunction form(bind, el, param, value) {\n const node = element('input');\n for (const key in param) {\n if (key !== 'signal' && key !== 'element') {\n node.setAttribute(key === 'input' ? 'type' : key, param[key]);\n }\n }\n node.setAttribute('name', param.signal);\n node.value = value;\n el.appendChild(node);\n node.addEventListener('input', () => bind.update(node.value));\n bind.elements = [node];\n bind.set = value => node.value = value;\n}\n\n/**\n * Generates a checkbox input element.\n */\nfunction checkbox(bind, el, param, value) {\n const attr = {\n type: 'checkbox',\n name: param.signal\n };\n if (value) attr.checked = true;\n const node = element('input', attr);\n el.appendChild(node);\n node.addEventListener('change', () => bind.update(node.checked));\n bind.elements = [node];\n bind.set = value => node.checked = !!value || null;\n}\n\n/**\n * Generates a selection list input element.\n */\nfunction select(bind, el, param, value) {\n const node = element('select', {\n name: param.signal\n }),\n labels = param.labels || [];\n param.options.forEach((option, i) => {\n const attr = {\n value: option\n };\n if (valuesEqual(option, value)) attr.selected = true;\n node.appendChild(element('option', attr, (labels[i] || option) + ''));\n });\n el.appendChild(node);\n node.addEventListener('change', () => {\n bind.update(param.options[node.selectedIndex]);\n });\n bind.elements = [node];\n bind.set = value => {\n for (let i = 0, n = param.options.length; i < n; ++i) {\n if (valuesEqual(param.options[i], value)) {\n node.selectedIndex = i;\n return;\n }\n }\n };\n}\n\n/**\n * Generates a radio button group.\n */\nfunction radio(bind, el, param, value) {\n const group = element('span', {\n 'class': RadioClass\n }),\n labels = param.labels || [];\n el.appendChild(group);\n bind.elements = param.options.map((option, i) => {\n const attr = {\n type: 'radio',\n name: param.signal,\n value: option\n };\n if (valuesEqual(option, value)) attr.checked = true;\n const input = element('input', attr);\n input.addEventListener('change', () => bind.update(option));\n const label = element('label', {}, (labels[i] || option) + '');\n label.prepend(input);\n group.appendChild(label);\n return input;\n });\n bind.set = value => {\n const nodes = bind.elements,\n n = nodes.length;\n for (let i = 0; i < n; ++i) {\n if (valuesEqual(nodes[i].value, value)) nodes[i].checked = true;\n }\n };\n}\n\n/**\n * Generates a slider input element.\n */\nfunction range(bind, el, param, value) {\n value = value !== undefined ? value : (+param.max + +param.min) / 2;\n const max = param.max != null ? param.max : Math.max(100, +value) || 100,\n min = param.min || Math.min(0, max, +value) || 0,\n step = param.step || tickStep(min, max, 100);\n const node = element('input', {\n type: 'range',\n name: param.signal,\n min: min,\n max: max,\n step: step\n });\n node.value = value;\n const span = element('span', {}, +value);\n el.appendChild(node);\n el.appendChild(span);\n const update = () => {\n span.textContent = node.value;\n bind.update(+node.value);\n };\n\n // subscribe to both input and change\n node.addEventListener('input', update);\n node.addEventListener('change', update);\n bind.elements = [node];\n bind.set = value => {\n node.value = value;\n span.textContent = value;\n };\n}\nfunction valuesEqual(a, b) {\n return a === b || a + '' === b + '';\n}\n\nfunction initializeRenderer (view, r, el, constructor, scaleFactor, opt) {\n r = r || new constructor(view.loader());\n return r.initialize(el, width(view), height(view), offset(view), scaleFactor, opt).background(view.background());\n}\n\nfunction trap (view, fn) {\n return !fn ? null : function () {\n try {\n fn.apply(this, arguments);\n } catch (error) {\n view.error(error);\n }\n };\n}\n\nfunction initializeHandler (view, prevHandler, el, constructor) {\n // instantiate scenegraph handler\n const handler = new constructor(view.loader(), trap(view, view.tooltip())).scene(view.scenegraph().root).initialize(el, offset(view), view);\n\n // transfer event handlers\n if (prevHandler) {\n prevHandler.handlers().forEach(h => {\n handler.on(h.type, h.handler);\n });\n }\n return handler;\n}\n\nfunction initialize (el, elBind) {\n const view = this,\n type = view._renderType,\n config = view._eventConfig.bind,\n module = renderModule(type);\n\n // containing dom element\n el = view._el = el ? lookup(view, el, true) : null;\n\n // initialize aria attributes\n initializeAria(view);\n\n // select appropriate renderer & handler\n if (!module) view.error('Unrecognized renderer type: ' + type);\n const Handler = module.handler || CanvasHandler,\n Renderer = el ? module.renderer : module.headless;\n\n // initialize renderer and input handler\n view._renderer = !Renderer ? null : initializeRenderer(view, view._renderer, el, Renderer);\n view._handler = initializeHandler(view, view._handler, el, Handler);\n view._redraw = true;\n\n // initialize signal bindings\n if (el && config !== 'none') {\n elBind = elBind ? view._elBind = lookup(view, elBind, true) : el.appendChild(element('form', {\n 'class': 'vega-bindings'\n }));\n view._bind.forEach(_ => {\n if (_.param.element && config !== 'container') {\n _.element = lookup(view, _.param.element, !!_.param.input);\n }\n });\n view._bind.forEach(_ => {\n bind(view, _.element || elBind, _);\n });\n }\n return view;\n}\nfunction lookup(view, el, clear) {\n if (typeof el === 'string') {\n if (typeof document !== 'undefined') {\n el = document.querySelector(el);\n if (!el) {\n view.error('Signal bind element not found: ' + el);\n return null;\n }\n } else {\n view.error('DOM document instance not found.');\n return null;\n }\n }\n if (el && clear) {\n try {\n el.textContent = '';\n } catch (e) {\n el = null;\n view.error(e);\n }\n }\n return el;\n}\n\nconst number = _ => +_ || 0;\nconst paddingObject = _ => ({\n top: _,\n bottom: _,\n left: _,\n right: _\n});\nfunction padding (_) {\n return isObject(_) ? {\n top: number(_.top),\n bottom: number(_.bottom),\n left: number(_.left),\n right: number(_.right)\n } : paddingObject(number(_));\n}\n\n/**\n * Render the current scene in a headless fashion.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A Promise that resolves to a renderer.\n */\nasync function renderHeadless (view, type, scaleFactor, opt) {\n const module = renderModule(type),\n ctr = module && module.headless;\n if (!ctr) error('Unrecognized renderer type: ' + type);\n await view.runAsync();\n return initializeRenderer(view, null, null, ctr, scaleFactor, opt).renderAsync(view._scenegraph.root);\n}\n\n/**\n * Produce an image URL for the visualization. Depending on the type\n * parameter, the generated URL contains data for either a PNG or SVG image.\n * The URL can be used (for example) to download images of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @param {string} type - The image type. One of 'svg', 'png' or 'canvas'.\n * The 'canvas' and 'png' types are synonyms for a PNG image.\n * @return {Promise} - A promise that resolves to an image URL.\n */\nasync function renderToImageURL (type, scaleFactor) {\n if (type !== RenderType.Canvas && type !== RenderType.SVG && type !== RenderType.PNG) {\n error('Unrecognized image type: ' + type);\n }\n const r = await renderHeadless(this, type, scaleFactor);\n return type === RenderType.SVG ? toBlobURL(r.svg(), 'image/svg+xml') : r.canvas().toDataURL('image/png');\n}\nfunction toBlobURL(data, mime) {\n const blob = new Blob([data], {\n type: mime\n });\n return window.URL.createObjectURL(blob);\n}\n\n/**\n * Produce a Canvas instance containing a rendered visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to a Canvas instance.\n */\nasync function renderToCanvas (scaleFactor, opt) {\n const r = await renderHeadless(this, RenderType.Canvas, scaleFactor, opt);\n return r.canvas();\n}\n\n/**\n * Produce a rendered SVG string of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to an SVG string.\n */\nasync function renderToSVG (scaleFactor) {\n const r = await renderHeadless(this, RenderType.SVG, scaleFactor);\n return r.svg();\n}\n\nfunction runtime (view, spec, expr) {\n return context(view, transforms, functionContext, expr).parse(spec);\n}\n\nfunction scale(name) {\n var scales = this._runtime.scales;\n if (!hasOwnProperty(scales, name)) {\n error('Unrecognized scale or projection: ' + name);\n }\n return scales[name].value;\n}\n\nvar Width = 'width',\n Height = 'height',\n Padding = 'padding',\n Skip = {\n skip: true\n };\nfunction viewWidth(view, width) {\n var a = view.autosize(),\n p = view.padding();\n return width - (a && a.contains === Padding ? p.left + p.right : 0);\n}\nfunction viewHeight(view, height) {\n var a = view.autosize(),\n p = view.padding();\n return height - (a && a.contains === Padding ? p.top + p.bottom : 0);\n}\nfunction initializeResize(view) {\n var s = view._signals,\n w = s[Width],\n h = s[Height],\n p = s[Padding];\n function resetSize() {\n view._autosize = view._resize = 1;\n }\n\n // respond to width signal\n view._resizeWidth = view.add(null, _ => {\n view._width = _.size;\n view._viewWidth = viewWidth(view, _.size);\n resetSize();\n }, {\n size: w\n });\n\n // respond to height signal\n view._resizeHeight = view.add(null, _ => {\n view._height = _.size;\n view._viewHeight = viewHeight(view, _.size);\n resetSize();\n }, {\n size: h\n });\n\n // respond to padding signal\n const resizePadding = view.add(null, resetSize, {\n pad: p\n });\n\n // set rank to run immediately after source signal\n view._resizeWidth.rank = w.rank + 1;\n view._resizeHeight.rank = h.rank + 1;\n resizePadding.rank = p.rank + 1;\n}\nfunction resizeView(viewWidth, viewHeight, width, height, origin, auto) {\n this.runAfter(view => {\n let rerun = 0;\n\n // reset autosize flag\n view._autosize = 0;\n\n // width value changed: update signal, skip resize op\n if (view.width() !== width) {\n rerun = 1;\n view.signal(Width, width, Skip); // set width, skip update calc\n view._resizeWidth.skip(true); // skip width resize handler\n }\n\n // height value changed: update signal, skip resize op\n if (view.height() !== height) {\n rerun = 1;\n view.signal(Height, height, Skip); // set height, skip update calc\n view._resizeHeight.skip(true); // skip height resize handler\n }\n\n // view width changed: update view property, set resize flag\n if (view._viewWidth !== viewWidth) {\n view._resize = 1;\n view._viewWidth = viewWidth;\n }\n\n // view height changed: update view property, set resize flag\n if (view._viewHeight !== viewHeight) {\n view._resize = 1;\n view._viewHeight = viewHeight;\n }\n\n // origin changed: update view property, set resize flag\n if (view._origin[0] !== origin[0] || view._origin[1] !== origin[1]) {\n view._resize = 1;\n view._origin = origin;\n }\n\n // run dataflow on width/height signal change\n if (rerun) view.run('enter');\n if (auto) view.runAfter(v => v.resize());\n }, false, 1);\n}\n\n/**\n * Get the current view state, consisting of signal values and/or data sets.\n * @param {object} [options] - Options flags indicating which state to export.\n * If unspecified, all signals and data sets will be exported.\n * @param {function(string, Operator):boolean} [options.signals] - Optional\n * predicate function for testing if a signal should be included in the\n * exported state. If unspecified, all signals will be included, except for\n * those named 'parent' or those which refer to a Transform value.\n * @param {function(string, object):boolean} [options.data] - Optional\n * predicate function for testing if a data set's input should be included\n * in the exported state. If unspecified, all data sets that have been\n * explicitly modified will be included.\n * @param {boolean} [options.recurse=true] - Flag indicating if the exported\n * state should recursively include state from group mark sub-contexts.\n * @return {object} - An object containing the exported state values.\n */\nfunction getState(options) {\n return this._runtime.getState(options || {\n data: dataTest,\n signals: signalTest,\n recurse: true\n });\n}\nfunction dataTest(name, data) {\n return data.modified && isArray(data.input.value) && name.indexOf('_:vega:_');\n}\nfunction signalTest(name, op) {\n return !(name === 'parent' || op instanceof transforms.proxy);\n}\n\n/**\n * Sets the current view state and updates the view by invoking run.\n * @param {object} state - A state object containing signal and/or\n * data set values, following the format used by the getState method.\n * @return {View} - This view instance.\n */\nfunction setState(state) {\n this.runAsync(null, v => {\n v._trigger = false;\n v._runtime.setState(state);\n }, v => {\n v._trigger = true;\n });\n return this;\n}\n\nfunction timer (callback, delay) {\n function tick(elapsed) {\n callback({\n timestamp: Date.now(),\n elapsed: elapsed\n });\n }\n this._timers.push(interval(tick, delay));\n}\n\nfunction defaultTooltip (handler, event, item, value) {\n const el = handler.element();\n if (el) el.setAttribute('title', formatTooltip(value));\n}\nfunction formatTooltip(value) {\n return value == null ? '' : isArray(value) ? formatArray(value) : isObject(value) && !isDate(value) ? formatObject(value) : value + '';\n}\nfunction formatObject(obj) {\n return Object.keys(obj).map(key => {\n const v = obj[key];\n return key + ': ' + (isArray(v) ? formatArray(v) : formatValue(v));\n }).join('\\n');\n}\nfunction formatArray(value) {\n return '[' + value.map(formatValue).join(', ') + ']';\n}\nfunction formatValue(value) {\n return isArray(value) ? '[\\u2026]' : isObject(value) && !isDate(value) ? '{\\u2026}' : value;\n}\n\n/**\n * Create a new View instance from a Vega dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be performed upon dataflow runs.\n * @constructor\n * @param {object} spec - The Vega dataflow runtime specification.\n */\nfunction View(spec, options) {\n const view = this;\n options = options || {};\n Dataflow.call(view);\n if (options.loader) view.loader(options.loader);\n if (options.logger) view.logger(options.logger);\n if (options.logLevel != null) view.logLevel(options.logLevel);\n if (options.locale || spec.locale) {\n const loc = extend({}, spec.locale, options.locale);\n view.locale(locale(loc.number, loc.time));\n }\n view._el = null;\n view._elBind = null;\n view._renderType = options.renderer || RenderType.Canvas;\n view._scenegraph = new Scenegraph();\n const root = view._scenegraph.root;\n\n // initialize renderer, handler and event management\n view._renderer = null;\n view._tooltip = options.tooltip || defaultTooltip, view._redraw = true;\n view._handler = new CanvasHandler().scene(root);\n view._globalCursor = false;\n view._preventDefault = false;\n view._timers = [];\n view._eventListeners = [];\n view._resizeListeners = [];\n\n // initialize event configuration\n view._eventConfig = initializeEventConfig(spec.eventConfig);\n view.globalCursor(view._eventConfig.globalCursor);\n\n // initialize dataflow graph\n const ctx = runtime(view, spec, options.expr);\n view._runtime = ctx;\n view._signals = ctx.signals;\n view._bind = (spec.bindings || []).map(_ => ({\n state: null,\n param: extend({}, _)\n }));\n\n // initialize scenegraph\n if (ctx.root) ctx.root.set(root);\n root.source = ctx.data.root.input;\n view.pulse(ctx.data.root.input, view.changeset().insert(root.items));\n\n // initialize view size\n view._width = view.width();\n view._height = view.height();\n view._viewWidth = viewWidth(view, view._width);\n view._viewHeight = viewHeight(view, view._height);\n view._origin = [0, 0];\n view._resize = 0;\n view._autosize = 1;\n initializeResize(view);\n\n // initialize background color\n background(view);\n\n // initialize cursor\n cursor(view);\n\n // initialize view description\n view.description(spec.description);\n\n // initialize hover proessing, if requested\n if (options.hover) view.hover();\n\n // initialize DOM container(s) and renderer\n if (options.container) view.initialize(options.container, options.bind);\n}\nfunction lookupSignal(view, name) {\n return hasOwnProperty(view._signals, name) ? view._signals[name] : error('Unrecognized signal name: ' + stringValue(name));\n}\nfunction findOperatorHandler(op, handler) {\n const h = (op._targets || []).filter(op => op._update && op._update.handler === handler);\n return h.length ? h[0] : null;\n}\nfunction addOperatorListener(view, name, op, handler) {\n let h = findOperatorHandler(op, handler);\n if (!h) {\n h = trap(view, () => handler(name, op.value));\n h.handler = handler;\n view.on(op, null, h);\n }\n return view;\n}\nfunction removeOperatorListener(view, op, handler) {\n const h = findOperatorHandler(op, handler);\n if (h) op._targets.remove(h);\n return view;\n}\ninherits(View, Dataflow, {\n // -- DATAFLOW / RENDERING ----\n\n async evaluate(encode, prerun, postrun) {\n // evaluate dataflow and prerun\n await Dataflow.prototype.evaluate.call(this, encode, prerun);\n\n // render as needed\n if (this._redraw || this._resize) {\n try {\n if (this._renderer) {\n if (this._resize) {\n this._resize = 0;\n resizeRenderer(this);\n }\n await this._renderer.renderAsync(this._scenegraph.root);\n }\n this._redraw = false;\n } catch (e) {\n this.error(e);\n }\n }\n\n // evaluate postrun\n if (postrun) asyncCallback(this, postrun);\n return this;\n },\n dirty(item) {\n this._redraw = true;\n this._renderer && this._renderer.dirty(item);\n },\n // -- GET / SET ----\n\n description(text) {\n if (arguments.length) {\n const desc = text != null ? text + '' : null;\n if (desc !== this._desc) ariaLabel(this._el, this._desc = desc);\n return this;\n }\n return this._desc;\n },\n container() {\n return this._el;\n },\n scenegraph() {\n return this._scenegraph;\n },\n origin() {\n return this._origin.slice();\n },\n signal(name, value, options) {\n const op = lookupSignal(this, name);\n return arguments.length === 1 ? op.value : this.update(op, value, options);\n },\n width(_) {\n return arguments.length ? this.signal('width', _) : this.signal('width');\n },\n height(_) {\n return arguments.length ? this.signal('height', _) : this.signal('height');\n },\n padding(_) {\n return arguments.length ? this.signal('padding', padding(_)) : padding(this.signal('padding'));\n },\n autosize(_) {\n return arguments.length ? this.signal('autosize', _) : this.signal('autosize');\n },\n background(_) {\n return arguments.length ? this.signal('background', _) : this.signal('background');\n },\n renderer(type) {\n if (!arguments.length) return this._renderType;\n if (!renderModule(type)) error('Unrecognized renderer type: ' + type);\n if (type !== this._renderType) {\n this._renderType = type;\n this._resetRenderer();\n }\n return this;\n },\n tooltip(handler) {\n if (!arguments.length) return this._tooltip;\n if (handler !== this._tooltip) {\n this._tooltip = handler;\n this._resetRenderer();\n }\n return this;\n },\n loader(loader) {\n if (!arguments.length) return this._loader;\n if (loader !== this._loader) {\n Dataflow.prototype.loader.call(this, loader);\n this._resetRenderer();\n }\n return this;\n },\n resize() {\n // set flag to perform autosize\n this._autosize = 1;\n // touch autosize signal to ensure top-level ViewLayout runs\n return this.touch(lookupSignal(this, 'autosize'));\n },\n _resetRenderer() {\n if (this._renderer) {\n this._renderer = null;\n this.initialize(this._el, this._elBind);\n }\n },\n // -- SIZING ----\n _resizeView: resizeView,\n // -- EVENT HANDLING ----\n\n addEventListener(type, handler, options) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n // wrap callback in error handler\n callback = trap(this, handler);\n callback.raw = handler;\n }\n this._handler.on(type, callback);\n return this;\n },\n removeEventListener(type, handler) {\n var handlers = this._handler.handlers(type),\n i = handlers.length,\n h,\n t;\n\n // search registered handlers, remove if match found\n while (--i >= 0) {\n t = handlers[i].type;\n h = handlers[i].handler;\n if (type === t && (handler === h || handler === h.raw)) {\n this._handler.off(t, h);\n break;\n }\n }\n return this;\n },\n addResizeListener(handler) {\n const l = this._resizeListeners;\n if (l.indexOf(handler) < 0) {\n // add handler if it isn't already registered\n // note: error trapping handled elsewhere, so\n // no need to wrap handlers here\n l.push(handler);\n }\n return this;\n },\n removeResizeListener(handler) {\n var l = this._resizeListeners,\n i = l.indexOf(handler);\n if (i >= 0) {\n l.splice(i, 1);\n }\n return this;\n },\n addSignalListener(name, handler) {\n return addOperatorListener(this, name, lookupSignal(this, name), handler);\n },\n removeSignalListener(name, handler) {\n return removeOperatorListener(this, lookupSignal(this, name), handler);\n },\n addDataListener(name, handler) {\n return addOperatorListener(this, name, dataref(this, name).values, handler);\n },\n removeDataListener(name, handler) {\n return removeOperatorListener(this, dataref(this, name).values, handler);\n },\n globalCursor(_) {\n if (arguments.length) {\n if (this._globalCursor !== !!_) {\n const prev = setCursor(this, null); // clear previous cursor\n this._globalCursor = !!_;\n if (prev) setCursor(this, prev); // swap cursor\n }\n\n return this;\n } else {\n return this._globalCursor;\n }\n },\n preventDefault(_) {\n if (arguments.length) {\n this._preventDefault = _;\n return this;\n } else {\n return this._preventDefault;\n }\n },\n timer,\n events,\n finalize,\n hover,\n // -- DATA ----\n data,\n change,\n insert,\n remove,\n // -- SCALES --\n scale,\n // -- INITIALIZATION ----\n initialize,\n // -- HEADLESS RENDERING ----\n toImageURL: renderToImageURL,\n toCanvas: renderToCanvas,\n toSVG: renderToSVG,\n // -- SAVE / RESTORE STATE ----\n getState,\n setState\n});\n\nexport { View };\n","const VIEW = 'view',\n LBRACK = '[',\n RBRACK = ']',\n LBRACE = '{',\n RBRACE = '}',\n COLON = ':',\n COMMA = ',',\n NAME = '@',\n GT = '>',\n ILLEGAL = /[[\\]{}]/,\n DEFAULT_MARKS = {\n '*': 1,\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n };\nlet DEFAULT_SOURCE, MARKS;\n\n/**\n * Parse an event selector string.\n * Returns an array of event stream definitions.\n */\nfunction eventSelector (selector, source, marks) {\n DEFAULT_SOURCE = source || VIEW;\n MARKS = marks || DEFAULT_MARKS;\n return parseMerge(selector.trim()).map(parseSelector);\n}\nfunction isMarkType(type) {\n return MARKS[type];\n}\nfunction find(s, i, endChar, pushChar, popChar) {\n const n = s.length;\n let count = 0,\n c;\n for (; i < n; ++i) {\n c = s[i];\n if (!count && c === endChar) return i;else if (popChar && popChar.indexOf(c) >= 0) --count;else if (pushChar && pushChar.indexOf(c) >= 0) ++count;\n }\n return i;\n}\nfunction parseMerge(s) {\n const output = [],\n n = s.length;\n let start = 0,\n i = 0;\n while (i < n) {\n i = find(s, i, COMMA, LBRACK + LBRACE, RBRACK + RBRACE);\n output.push(s.substring(start, i).trim());\n start = ++i;\n }\n if (output.length === 0) {\n throw 'Empty event selector: ' + s;\n }\n return output;\n}\nfunction parseSelector(s) {\n return s[0] === '[' ? parseBetween(s) : parseStream(s);\n}\nfunction parseBetween(s) {\n const n = s.length;\n let i = 1,\n b;\n i = find(s, i, RBRACK, LBRACK, RBRACK);\n if (i === n) {\n throw 'Empty between selector: ' + s;\n }\n b = parseMerge(s.substring(1, i));\n if (b.length !== 2) {\n throw 'Between selector must have two elements: ' + s;\n }\n s = s.slice(i + 1).trim();\n if (s[0] !== GT) {\n throw 'Expected \\'>\\' after between selector: ' + s;\n }\n b = b.map(parseSelector);\n const stream = parseSelector(s.slice(1).trim());\n if (stream.between) {\n return {\n between: b,\n stream: stream\n };\n } else {\n stream.between = b;\n }\n return stream;\n}\nfunction parseStream(s) {\n const stream = {\n source: DEFAULT_SOURCE\n },\n source = [];\n let throttle = [0, 0],\n markname = 0,\n start = 0,\n n = s.length,\n i = 0,\n j,\n filter;\n\n // extract throttle from end\n if (s[n - 1] === RBRACE) {\n i = s.lastIndexOf(LBRACE);\n if (i >= 0) {\n try {\n throttle = parseThrottle(s.substring(i + 1, n - 1));\n } catch (e) {\n throw 'Invalid throttle specification: ' + s;\n }\n s = s.slice(0, i).trim();\n n = s.length;\n } else throw 'Unmatched right brace: ' + s;\n i = 0;\n }\n if (!n) throw s;\n\n // set name flag based on first char\n if (s[0] === NAME) markname = ++i;\n\n // extract first part of multi-part stream selector\n j = find(s, i, COLON);\n if (j < n) {\n source.push(s.substring(start, j).trim());\n start = i = ++j;\n }\n\n // extract remaining part of stream selector\n i = find(s, i, LBRACK);\n if (i === n) {\n source.push(s.substring(start, n).trim());\n } else {\n source.push(s.substring(start, i).trim());\n filter = [];\n start = ++i;\n if (start === n) throw 'Unmatched left bracket: ' + s;\n }\n\n // extract filters\n while (i < n) {\n i = find(s, i, RBRACK);\n if (i === n) throw 'Unmatched left bracket: ' + s;\n filter.push(s.substring(start, i).trim());\n if (i < n - 1 && s[++i] !== LBRACK) throw 'Expected left bracket: ' + s;\n start = ++i;\n }\n\n // marshall event stream specification\n if (!(n = source.length) || ILLEGAL.test(source[n - 1])) {\n throw 'Invalid event selector: ' + s;\n }\n if (n > 1) {\n stream.type = source[1];\n if (markname) {\n stream.markname = source[0].slice(1);\n } else if (isMarkType(source[0])) {\n stream.marktype = source[0];\n } else {\n stream.source = source[0];\n }\n } else {\n stream.type = source[0];\n }\n if (stream.type.slice(-1) === '!') {\n stream.consume = true;\n stream.type = stream.type.slice(0, -1);\n }\n if (filter != null) stream.filter = filter;\n if (throttle[0]) stream.throttle = throttle[0];\n if (throttle[1]) stream.debounce = throttle[1];\n return stream;\n}\nfunction parseThrottle(s) {\n const a = s.split(COMMA);\n if (!s.length || a.length > 2) throw s;\n return a.map(_ => {\n const x = +_;\n if (x !== x) throw s;\n return x;\n });\n}\n\nexport { eventSelector as parseSelector };\n","import { isObject, isArray, extend, hasOwnProperty, array, stringValue, peek, error, isString, splitAccessPath, mergeConfig } from 'vega-util';\nimport { parseExpression } from 'vega-functions';\nimport { parseSelector } from 'vega-event-selector';\nimport { isValidScaleType, isDiscrete, isQuantile, isContinuous, isDiscretizing } from 'vega-scale';\nimport { definition as definition$1 } from 'vega-dataflow';\n\nfunction parseAutosize (spec) {\n return isObject(spec) ? spec : {\n type: spec || 'pad'\n };\n}\n\nconst number = _ => +_ || 0;\nconst paddingObject = _ => ({\n top: _,\n bottom: _,\n left: _,\n right: _\n});\nfunction parsePadding (spec) {\n return !isObject(spec) ? paddingObject(number(spec)) : spec.signal ? spec : {\n top: number(spec.top),\n bottom: number(spec.bottom),\n left: number(spec.left),\n right: number(spec.right)\n };\n}\n\nconst encoder = _ => isObject(_) && !isArray(_) ? extend({}, _) : {\n value: _\n};\nfunction addEncode(object, name, value, set) {\n if (value != null) {\n const isEncoder = isObject(value) && !isArray(value) || isArray(value) && value.length && isObject(value[0]);\n\n // Always assign signal to update, even if the signal is from the enter block\n if (isEncoder) {\n object.update[name] = value;\n } else {\n object[set || 'enter'][name] = {\n value: value\n };\n }\n return 1;\n } else {\n return 0;\n }\n}\nfunction addEncoders(object, enter, update) {\n for (const name in enter) {\n addEncode(object, name, enter[name]);\n }\n for (const name in update) {\n addEncode(object, name, update[name], 'update');\n }\n}\nfunction extendEncode(encode, extra, skip) {\n for (const name in extra) {\n if (skip && hasOwnProperty(skip, name)) continue;\n encode[name] = extend(encode[name] || {}, extra[name]);\n }\n return encode;\n}\nfunction has(key, encode) {\n return encode && (encode.enter && encode.enter[key] || encode.update && encode.update[key]);\n}\n\nconst MarkRole = 'mark';\nconst FrameRole = 'frame';\nconst ScopeRole = 'scope';\nconst AxisRole = 'axis';\nconst AxisDomainRole = 'axis-domain';\nconst AxisGridRole = 'axis-grid';\nconst AxisLabelRole = 'axis-label';\nconst AxisTickRole = 'axis-tick';\nconst AxisTitleRole = 'axis-title';\nconst LegendRole = 'legend';\nconst LegendBandRole = 'legend-band';\nconst LegendEntryRole = 'legend-entry';\nconst LegendGradientRole = 'legend-gradient';\nconst LegendLabelRole = 'legend-label';\nconst LegendSymbolRole = 'legend-symbol';\nconst LegendTitleRole = 'legend-title';\nconst TitleRole = 'title';\nconst TitleTextRole = 'title-text';\nconst TitleSubtitleRole = 'title-subtitle';\n\nfunction applyDefaults (encode, type, role, style, config) {\n const defaults = {},\n enter = {};\n let update, key, skip, props;\n\n // if text mark, apply global lineBreak settings (#2370)\n key = 'lineBreak';\n if (type === 'text' && config[key] != null && !has(key, encode)) {\n applyDefault(defaults, key, config[key]);\n }\n\n // ignore legend and axis roles\n if (role == 'legend' || String(role).startsWith('axis')) {\n role = null;\n }\n\n // resolve mark config\n props = role === FrameRole ? config.group : role === MarkRole ? extend({}, config.mark, config[type]) : null;\n for (key in props) {\n // do not apply defaults if relevant fields are defined\n skip = has(key, encode) || (key === 'fill' || key === 'stroke') && (has('fill', encode) || has('stroke', encode));\n if (!skip) applyDefault(defaults, key, props[key]);\n }\n\n // resolve styles, apply with increasing precedence\n array(style).forEach(name => {\n const props = config.style && config.style[name];\n for (const key in props) {\n if (!has(key, encode)) {\n applyDefault(defaults, key, props[key]);\n }\n }\n });\n encode = extend({}, encode); // defensive copy\n for (key in defaults) {\n props = defaults[key];\n if (props.signal) {\n (update = update || {})[key] = props;\n } else {\n enter[key] = props;\n }\n }\n encode.enter = extend(enter, encode.enter);\n if (update) encode.update = extend(update, encode.update);\n return encode;\n}\nfunction applyDefault(defaults, key, value) {\n defaults[key] = value && value.signal ? {\n signal: value.signal\n } : {\n value: value\n };\n}\n\nconst scaleRef = scale => isString(scale) ? stringValue(scale) : scale.signal ? `(${scale.signal})` : field(scale);\nfunction entry$1(enc) {\n if (enc.gradient != null) {\n return gradient(enc);\n }\n let value = enc.signal ? `(${enc.signal})` : enc.color ? color(enc.color) : enc.field != null ? field(enc.field) : enc.value !== undefined ? stringValue(enc.value) : undefined;\n if (enc.scale != null) {\n value = scale(enc, value);\n }\n if (value === undefined) {\n value = null;\n }\n if (enc.exponent != null) {\n value = `pow(${value},${property(enc.exponent)})`;\n }\n if (enc.mult != null) {\n value += `*${property(enc.mult)}`;\n }\n if (enc.offset != null) {\n value += `+${property(enc.offset)}`;\n }\n if (enc.round) {\n value = `round(${value})`;\n }\n return value;\n}\nconst _color = (type, x, y, z) => `(${type}(${[x, y, z].map(entry$1).join(',')})+'')`;\nfunction color(enc) {\n return enc.c ? _color('hcl', enc.h, enc.c, enc.l) : enc.h || enc.s ? _color('hsl', enc.h, enc.s, enc.l) : enc.l || enc.a ? _color('lab', enc.l, enc.a, enc.b) : enc.r || enc.g || enc.b ? _color('rgb', enc.r, enc.g, enc.b) : null;\n}\nfunction gradient(enc) {\n // map undefined to null; expression lang does not allow undefined\n const args = [enc.start, enc.stop, enc.count].map(_ => _ == null ? null : stringValue(_));\n\n // trim null inputs from the end\n while (args.length && peek(args) == null) args.pop();\n args.unshift(scaleRef(enc.gradient));\n return `gradient(${args.join(',')})`;\n}\nfunction property(property) {\n return isObject(property) ? '(' + entry$1(property) + ')' : property;\n}\nfunction field(ref) {\n return resolveField(isObject(ref) ? ref : {\n datum: ref\n });\n}\nfunction resolveField(ref) {\n let object, level, field;\n if (ref.signal) {\n object = 'datum';\n field = ref.signal;\n } else if (ref.group || ref.parent) {\n level = Math.max(1, ref.level || 1);\n object = 'item';\n while (level-- > 0) {\n object += '.mark.group';\n }\n if (ref.parent) {\n field = ref.parent;\n object += '.datum';\n } else {\n field = ref.group;\n }\n } else if (ref.datum) {\n object = 'datum';\n field = ref.datum;\n } else {\n error('Invalid field reference: ' + stringValue(ref));\n }\n if (!ref.signal) {\n field = isString(field) ? splitAccessPath(field).map(stringValue).join('][') : resolveField(field);\n }\n return object + '[' + field + ']';\n}\nfunction scale(enc, value) {\n const scale = scaleRef(enc.scale);\n if (enc.range != null) {\n // pull value from scale range\n value = `lerp(_range(${scale}), ${+enc.range})`;\n } else {\n // run value through scale and/or pull scale bandwidth\n if (value !== undefined) value = `_scale(${scale}, ${value})`;\n if (enc.band) {\n value = (value ? value + '+' : '') + `_bandwidth(${scale})` + (+enc.band === 1 ? '' : '*' + property(enc.band));\n if (enc.extra) {\n // include logic to handle extraneous elements\n value = `(datum.extra ? _scale(${scale}, datum.extra.value) : ${value})`;\n }\n }\n if (value == null) value = '0';\n }\n return value;\n}\n\nfunction rule (enc) {\n let code = '';\n enc.forEach(rule => {\n const value = entry$1(rule);\n code += rule.test ? `(${rule.test})?${value}:` : value;\n });\n\n // if no else clause, terminate with null (#1366)\n if (peek(code) === ':') {\n code += 'null';\n }\n return code;\n}\n\nfunction parseEncode (encode, type, role, style, scope, params) {\n const enc = {};\n params = params || {};\n params.encoders = {\n $encode: enc\n };\n encode = applyDefaults(encode, type, role, style, scope.config);\n for (const key in encode) {\n enc[key] = parseBlock(encode[key], type, params, scope);\n }\n return params;\n}\nfunction parseBlock(block, marktype, params, scope) {\n const channels = {},\n fields = {};\n for (const name in block) {\n if (block[name] != null) {\n // skip any null entries\n channels[name] = parse$1(expr(block[name]), scope, params, fields);\n }\n }\n return {\n $expr: {\n marktype,\n channels\n },\n $fields: Object.keys(fields),\n $output: Object.keys(block)\n };\n}\nfunction expr(enc) {\n return isArray(enc) ? rule(enc) : entry$1(enc);\n}\nfunction parse$1(code, scope, params, fields) {\n const expr = parseExpression(code, scope);\n expr.$fields.forEach(name => fields[name] = 1);\n extend(params, expr.$params);\n return expr.$expr;\n}\n\nconst OUTER = 'outer',\n OUTER_INVALID = ['value', 'update', 'init', 'react', 'bind'];\nfunction outerError(prefix, name) {\n error(prefix + ' for \"outer\" push: ' + stringValue(name));\n}\nfunction parseSignal (signal, scope) {\n const name = signal.name;\n if (signal.push === OUTER) {\n // signal must already be defined, raise error if not\n if (!scope.signals[name]) outerError('No prior signal definition', name);\n // signal push must not use properties reserved for standard definition\n OUTER_INVALID.forEach(prop => {\n if (signal[prop] !== undefined) outerError('Invalid property ', prop);\n });\n } else {\n // define a new signal in the current scope\n const op = scope.addSignal(name, signal.value);\n if (signal.react === false) op.react = false;\n if (signal.bind) scope.addBinding(name, signal.bind);\n }\n}\n\nfunction Entry(type, value, params, parent) {\n this.id = -1;\n this.type = type;\n this.value = value;\n this.params = params;\n if (parent) this.parent = parent;\n}\nfunction entry(type, value, params, parent) {\n return new Entry(type, value, params, parent);\n}\nfunction operator(value, params) {\n return entry('operator', value, params);\n}\n\n// -----\n\nfunction ref(op) {\n const ref = {\n $ref: op.id\n };\n // if operator not yet registered, cache ref to resolve later\n if (op.id < 0) (op.refs = op.refs || []).push(ref);\n return ref;\n}\nfunction fieldRef$1(field, name) {\n return name ? {\n $field: field,\n $name: name\n } : {\n $field: field\n };\n}\nconst keyFieldRef = fieldRef$1('key');\nfunction compareRef(fields, orders) {\n return {\n $compare: fields,\n $order: orders\n };\n}\nfunction keyRef(fields, flat) {\n const ref = {\n $key: fields\n };\n if (flat) ref.$flat = true;\n return ref;\n}\n\n// -----\n\nconst Ascending = 'ascending';\nconst Descending = 'descending';\nfunction sortKey(sort) {\n return !isObject(sort) ? '' : (sort.order === Descending ? '-' : '+') + aggrField(sort.op, sort.field);\n}\nfunction aggrField(op, field) {\n return (op && op.signal ? '$' + op.signal : op || '') + (op && field ? '_' : '') + (field && field.signal ? '$' + field.signal : field || '');\n}\n\n// -----\n\nconst Scope$1 = 'scope';\nconst View = 'view';\nfunction isSignal(_) {\n return _ && _.signal;\n}\nfunction isExpr$1(_) {\n return _ && _.expr;\n}\nfunction hasSignal(_) {\n if (isSignal(_)) return true;\n if (isObject(_)) for (const key in _) {\n if (hasSignal(_[key])) return true;\n }\n return false;\n}\nfunction value(specValue, defaultValue) {\n return specValue != null ? specValue : defaultValue;\n}\nfunction deref(v) {\n return v && v.signal || v;\n}\n\nconst Timer = 'timer';\nfunction parseStream(stream, scope) {\n const method = stream.merge ? mergeStream : stream.stream ? nestedStream : stream.type ? eventStream : error('Invalid stream specification: ' + stringValue(stream));\n return method(stream, scope);\n}\nfunction eventSource(source) {\n return source === Scope$1 ? View : source || View;\n}\nfunction mergeStream(stream, scope) {\n const list = stream.merge.map(s => parseStream(s, scope)),\n entry = streamParameters({\n merge: list\n }, stream, scope);\n return scope.addStream(entry).id;\n}\nfunction nestedStream(stream, scope) {\n const id = parseStream(stream.stream, scope),\n entry = streamParameters({\n stream: id\n }, stream, scope);\n return scope.addStream(entry).id;\n}\nfunction eventStream(stream, scope) {\n let id;\n if (stream.type === Timer) {\n id = scope.event(Timer, stream.throttle);\n stream = {\n between: stream.between,\n filter: stream.filter\n };\n } else {\n id = scope.event(eventSource(stream.source), stream.type);\n }\n const entry = streamParameters({\n stream: id\n }, stream, scope);\n return Object.keys(entry).length === 1 ? id : scope.addStream(entry).id;\n}\nfunction streamParameters(entry, stream, scope) {\n let param = stream.between;\n if (param) {\n if (param.length !== 2) {\n error('Stream \"between\" parameter must have 2 entries: ' + stringValue(stream));\n }\n entry.between = [parseStream(param[0], scope), parseStream(param[1], scope)];\n }\n param = stream.filter ? [].concat(stream.filter) : [];\n if (stream.marktype || stream.markname || stream.markrole) {\n // add filter for mark type, name and/or role\n param.push(filterMark(stream.marktype, stream.markname, stream.markrole));\n }\n if (stream.source === Scope$1) {\n // add filter to limit events from sub-scope only\n param.push('inScope(event.item)');\n }\n if (param.length) {\n entry.filter = parseExpression('(' + param.join(')&&(') + ')', scope).$expr;\n }\n if ((param = stream.throttle) != null) {\n entry.throttle = +param;\n }\n if ((param = stream.debounce) != null) {\n entry.debounce = +param;\n }\n if (stream.consume) {\n entry.consume = true;\n }\n return entry;\n}\nfunction filterMark(type, name, role) {\n const item = 'event.item';\n return item + (type && type !== '*' ? '&&' + item + '.mark.marktype===\\'' + type + '\\'' : '') + (role ? '&&' + item + '.mark.role===\\'' + role + '\\'' : '') + (name ? '&&' + item + '.mark.name===\\'' + name + '\\'' : '');\n}\n\n// bypass expression parser for internal operator references\nconst OP_VALUE_EXPR = {\n code: '_.$value',\n ast: {\n type: 'Identifier',\n value: 'value'\n }\n};\nfunction parseUpdate (spec, scope, target) {\n const encode = spec.encode,\n entry = {\n target: target\n };\n let events = spec.events,\n update = spec.update,\n sources = [];\n if (!events) {\n error('Signal update missing events specification.');\n }\n\n // interpret as an event selector string\n if (isString(events)) {\n events = parseSelector(events, scope.isSubscope() ? Scope$1 : View);\n }\n\n // separate event streams from signal updates\n events = array(events).filter(s => s.signal || s.scale ? (sources.push(s), 0) : 1);\n\n // merge internal operator listeners\n if (sources.length > 1) {\n sources = [mergeSources(sources)];\n }\n\n // merge event streams, include as source\n if (events.length) {\n sources.push(events.length > 1 ? {\n merge: events\n } : events[0]);\n }\n if (encode != null) {\n if (update) error('Signal encode and update are mutually exclusive.');\n update = 'encode(item(),' + stringValue(encode) + ')';\n }\n\n // resolve update value\n entry.update = isString(update) ? parseExpression(update, scope) : update.expr != null ? parseExpression(update.expr, scope) : update.value != null ? update.value : update.signal != null ? {\n $expr: OP_VALUE_EXPR,\n $params: {\n $value: scope.signalRef(update.signal)\n }\n } : error('Invalid signal update specification.');\n if (spec.force) {\n entry.options = {\n force: true\n };\n }\n sources.forEach(source => scope.addUpdate(extend(streamSource(source, scope), entry)));\n}\nfunction streamSource(stream, scope) {\n return {\n source: stream.signal ? scope.signalRef(stream.signal) : stream.scale ? scope.scaleRef(stream.scale) : parseStream(stream, scope)\n };\n}\nfunction mergeSources(sources) {\n return {\n signal: '[' + sources.map(s => s.scale ? 'scale(\"' + s.scale + '\")' : s.signal) + ']'\n };\n}\n\nfunction parseSignalUpdates (signal, scope) {\n const op = scope.getSignal(signal.name);\n let expr = signal.update;\n if (signal.init) {\n if (expr) {\n error('Signals can not include both init and update expressions.');\n } else {\n expr = signal.init;\n op.initonly = true;\n }\n }\n if (expr) {\n expr = parseExpression(expr, scope);\n op.update = expr.$expr;\n op.params = expr.$params;\n }\n if (signal.on) {\n signal.on.forEach(_ => parseUpdate(_, scope, op.id));\n }\n}\n\nconst transform = name => (params, value, parent) => entry(name, value, params || undefined, parent);\nconst Aggregate = transform('aggregate');\nconst AxisTicks = transform('axisticks');\nconst Bound = transform('bound');\nconst Collect = transform('collect');\nconst Compare = transform('compare');\nconst DataJoin = transform('datajoin');\nconst Encode = transform('encode');\nconst Expression = transform('expression');\nconst Facet = transform('facet');\nconst Field = transform('field');\nconst Key = transform('key');\nconst LegendEntries = transform('legendentries');\nconst Load = transform('load');\nconst Mark = transform('mark');\nconst MultiExtent = transform('multiextent');\nconst MultiValues = transform('multivalues');\nconst Overlap = transform('overlap');\nconst Params = transform('params');\nconst PreFacet = transform('prefacet');\nconst Projection = transform('projection');\nconst Proxy = transform('proxy');\nconst Relay = transform('relay');\nconst Render = transform('render');\nconst Scale = transform('scale');\nconst Sieve = transform('sieve');\nconst SortItems = transform('sortitems');\nconst ViewLayout = transform('viewlayout');\nconst Values = transform('values');\n\nlet FIELD_REF_ID = 0;\nconst MULTIDOMAIN_SORT_OPS = {\n min: 'min',\n max: 'max',\n count: 'sum'\n};\nfunction initScale(spec, scope) {\n const type = spec.type || 'linear';\n if (!isValidScaleType(type)) {\n error('Unrecognized scale type: ' + stringValue(type));\n }\n scope.addScale(spec.name, {\n type,\n domain: undefined\n });\n}\nfunction parseScale(spec, scope) {\n const params = scope.getScale(spec.name).params;\n let key;\n params.domain = parseScaleDomain(spec.domain, spec, scope);\n if (spec.range != null) {\n params.range = parseScaleRange(spec, scope, params);\n }\n if (spec.interpolate != null) {\n parseScaleInterpolate(spec.interpolate, params);\n }\n if (spec.nice != null) {\n params.nice = parseScaleNice(spec.nice);\n }\n if (spec.bins != null) {\n params.bins = parseScaleBins(spec.bins, scope);\n }\n for (key in spec) {\n if (hasOwnProperty(params, key) || key === 'name') continue;\n params[key] = parseLiteral(spec[key], scope);\n }\n}\nfunction parseLiteral(v, scope) {\n return !isObject(v) ? v : v.signal ? scope.signalRef(v.signal) : error('Unsupported object: ' + stringValue(v));\n}\nfunction parseArray(v, scope) {\n return v.signal ? scope.signalRef(v.signal) : v.map(v => parseLiteral(v, scope));\n}\nfunction dataLookupError(name) {\n error('Can not find data set: ' + stringValue(name));\n}\n\n// -- SCALE DOMAIN ----\n\nfunction parseScaleDomain(domain, spec, scope) {\n if (!domain) {\n if (spec.domainMin != null || spec.domainMax != null) {\n error('No scale domain defined for domainMin/domainMax to override.');\n }\n return; // default domain\n }\n\n return domain.signal ? scope.signalRef(domain.signal) : (isArray(domain) ? explicitDomain : domain.fields ? multipleDomain : singularDomain)(domain, spec, scope);\n}\nfunction explicitDomain(domain, spec, scope) {\n return domain.map(v => parseLiteral(v, scope));\n}\nfunction singularDomain(domain, spec, scope) {\n const data = scope.getData(domain.data);\n if (!data) dataLookupError(domain.data);\n return isDiscrete(spec.type) ? data.valuesRef(scope, domain.field, parseSort(domain.sort, false)) : isQuantile(spec.type) ? data.domainRef(scope, domain.field) : data.extentRef(scope, domain.field);\n}\nfunction multipleDomain(domain, spec, scope) {\n const data = domain.data,\n fields = domain.fields.reduce((dom, d) => {\n d = isString(d) ? {\n data: data,\n field: d\n } : isArray(d) || d.signal ? fieldRef(d, scope) : d;\n dom.push(d);\n return dom;\n }, []);\n return (isDiscrete(spec.type) ? ordinalMultipleDomain : isQuantile(spec.type) ? quantileMultipleDomain : numericMultipleDomain)(domain, scope, fields);\n}\nfunction fieldRef(data, scope) {\n const name = '_:vega:_' + FIELD_REF_ID++,\n coll = Collect({});\n if (isArray(data)) {\n coll.value = {\n $ingest: data\n };\n } else if (data.signal) {\n const code = 'setdata(' + stringValue(name) + ',' + data.signal + ')';\n coll.params.input = scope.signalRef(code);\n }\n scope.addDataPipeline(name, [coll, Sieve({})]);\n return {\n data: name,\n field: 'data'\n };\n}\nfunction ordinalMultipleDomain(domain, scope, fields) {\n const sort = parseSort(domain.sort, true);\n let a, v;\n\n // get value counts for each domain field\n const counts = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.countsRef(scope, f.field, sort);\n });\n\n // aggregate the results from each domain field\n const p = {\n groupby: keyFieldRef,\n pulse: counts\n };\n if (sort) {\n a = sort.op || 'count';\n v = sort.field ? aggrField(a, sort.field) : 'count';\n p.ops = [MULTIDOMAIN_SORT_OPS[a]];\n p.fields = [scope.fieldRef(v)];\n p.as = [v];\n }\n a = scope.add(Aggregate(p));\n\n // collect aggregate output\n const c = scope.add(Collect({\n pulse: ref(a)\n }));\n\n // extract values for combined domain\n v = scope.add(Values({\n field: keyFieldRef,\n sort: scope.sortRef(sort),\n pulse: ref(c)\n }));\n return ref(v);\n}\nfunction parseSort(sort, multidomain) {\n if (sort) {\n if (!sort.field && !sort.op) {\n if (isObject(sort)) sort.field = 'key';else sort = {\n field: 'key'\n };\n } else if (!sort.field && sort.op !== 'count') {\n error('No field provided for sort aggregate op: ' + sort.op);\n } else if (multidomain && sort.field) {\n if (sort.op && !MULTIDOMAIN_SORT_OPS[sort.op]) {\n error('Multiple domain scales can not be sorted using ' + sort.op);\n }\n }\n }\n return sort;\n}\nfunction quantileMultipleDomain(domain, scope, fields) {\n // get value arrays for each domain field\n const values = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.domainRef(scope, f.field);\n });\n\n // combine value arrays\n return ref(scope.add(MultiValues({\n values: values\n })));\n}\nfunction numericMultipleDomain(domain, scope, fields) {\n // get extents for each domain field\n const extents = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.extentRef(scope, f.field);\n });\n\n // combine extents\n return ref(scope.add(MultiExtent({\n extents: extents\n })));\n}\n\n// -- SCALE BINS -----\n\nfunction parseScaleBins(v, scope) {\n return v.signal || isArray(v) ? parseArray(v, scope) : scope.objectProperty(v);\n}\n\n// -- SCALE NICE -----\n\nfunction parseScaleNice(nice) {\n return isObject(nice) ? {\n interval: parseLiteral(nice.interval),\n step: parseLiteral(nice.step)\n } : parseLiteral(nice);\n}\n\n// -- SCALE INTERPOLATION -----\n\nfunction parseScaleInterpolate(interpolate, params) {\n params.interpolate = parseLiteral(interpolate.type || interpolate);\n if (interpolate.gamma != null) {\n params.interpolateGamma = parseLiteral(interpolate.gamma);\n }\n}\n\n// -- SCALE RANGE -----\n\nfunction parseScaleRange(spec, scope, params) {\n const config = scope.config.range;\n let range = spec.range;\n if (range.signal) {\n return scope.signalRef(range.signal);\n } else if (isString(range)) {\n if (config && hasOwnProperty(config, range)) {\n spec = extend({}, spec, {\n range: config[range]\n });\n return parseScaleRange(spec, scope, params);\n } else if (range === 'width') {\n range = [0, {\n signal: 'width'\n }];\n } else if (range === 'height') {\n range = isDiscrete(spec.type) ? [0, {\n signal: 'height'\n }] : [{\n signal: 'height'\n }, 0];\n } else {\n error('Unrecognized scale range value: ' + stringValue(range));\n }\n } else if (range.scheme) {\n params.scheme = isArray(range.scheme) ? parseArray(range.scheme, scope) : parseLiteral(range.scheme, scope);\n if (range.extent) params.schemeExtent = parseArray(range.extent, scope);\n if (range.count) params.schemeCount = parseLiteral(range.count, scope);\n return;\n } else if (range.step) {\n params.rangeStep = parseLiteral(range.step, scope);\n return;\n } else if (isDiscrete(spec.type) && !isArray(range)) {\n return parseScaleDomain(range, spec, scope);\n } else if (!isArray(range)) {\n error('Unsupported range type: ' + stringValue(range));\n }\n return range.map(v => (isArray(v) ? parseArray : parseLiteral)(v, scope));\n}\n\nfunction parseProjection (proj, scope) {\n const config = scope.config.projection || {},\n params = {};\n for (const name in proj) {\n if (name === 'name') continue;\n params[name] = parseParameter$1(proj[name], name, scope);\n }\n\n // apply projection defaults from config\n for (const name in config) {\n if (params[name] == null) {\n params[name] = parseParameter$1(config[name], name, scope);\n }\n }\n scope.addProjection(proj.name, params);\n}\nfunction parseParameter$1(_, name, scope) {\n return isArray(_) ? _.map(_ => parseParameter$1(_, name, scope)) : !isObject(_) ? _ : _.signal ? scope.signalRef(_.signal) : name === 'fit' ? _ : error('Unsupported parameter object: ' + stringValue(_));\n}\n\nconst Top = 'top';\nconst Left = 'left';\nconst Right = 'right';\nconst Bottom = 'bottom';\nconst Center = 'center';\nconst Vertical = 'vertical';\nconst Start = 'start';\nconst Middle = 'middle';\nconst End = 'end';\nconst Index = 'index';\nconst Label = 'label';\nconst Offset = 'offset';\nconst Perc = 'perc';\nconst Perc2 = 'perc2';\nconst Value = 'value';\nconst GuideLabelStyle = 'guide-label';\nconst GuideTitleStyle = 'guide-title';\nconst GroupTitleStyle = 'group-title';\nconst GroupSubtitleStyle = 'group-subtitle';\nconst Symbols = 'symbol';\nconst Gradient = 'gradient';\nconst Discrete = 'discrete';\nconst Size = 'size';\nconst Shape = 'shape';\nconst Fill = 'fill';\nconst Stroke = 'stroke';\nconst StrokeWidth = 'strokeWidth';\nconst StrokeDash = 'strokeDash';\nconst Opacity = 'opacity';\n\n// Encoding channels supported by legends\n// In priority order of 'canonical' scale\nconst LegendScales = [Size, Shape, Fill, Stroke, StrokeWidth, StrokeDash, Opacity];\nconst Skip = {\n name: 1,\n style: 1,\n interactive: 1\n};\nconst zero = {\n value: 0\n};\nconst one = {\n value: 1\n};\n\nconst GroupMark = 'group';\nconst RectMark = 'rect';\nconst RuleMark = 'rule';\nconst SymbolMark = 'symbol';\nconst TextMark = 'text';\n\nfunction guideGroup (mark) {\n mark.type = GroupMark;\n mark.interactive = mark.interactive || false;\n return mark;\n}\n\nfunction lookup(spec, config) {\n const _ = (name, dflt) => value(spec[name], value(config[name], dflt));\n _.isVertical = s => Vertical === value(spec.direction, config.direction || (s ? config.symbolDirection : config.gradientDirection));\n _.gradientLength = () => value(spec.gradientLength, config.gradientLength || config.gradientWidth);\n _.gradientThickness = () => value(spec.gradientThickness, config.gradientThickness || config.gradientHeight);\n _.entryColumns = () => value(spec.columns, value(config.columns, +_.isVertical(true)));\n return _;\n}\nfunction getEncoding(name, encode) {\n const v = encode && (encode.update && encode.update[name] || encode.enter && encode.enter[name]);\n return v && v.signal ? v : v ? v.value : null;\n}\nfunction getStyle(name, scope, style) {\n const s = scope.config.style[style];\n return s && s[name];\n}\nfunction anchorExpr(s, e, m) {\n return `item.anchor === '${Start}' ? ${s} : item.anchor === '${End}' ? ${e} : ${m}`;\n}\nconst alignExpr$1 = anchorExpr(stringValue(Left), stringValue(Right), stringValue(Center));\nfunction tickBand(_) {\n const v = _('tickBand');\n let offset = _('tickOffset'),\n band,\n extra;\n if (!v) {\n // if no tick band entry, fall back on other properties\n band = _('bandPosition');\n extra = _('tickExtra');\n } else if (v.signal) {\n // if signal, augment code to interpret values\n band = {\n signal: `(${v.signal}) === 'extent' ? 1 : 0.5`\n };\n extra = {\n signal: `(${v.signal}) === 'extent'`\n };\n if (!isObject(offset)) {\n offset = {\n signal: `(${v.signal}) === 'extent' ? 0 : ${offset}`\n };\n }\n } else if (v === 'extent') {\n // if constant, simply set values\n band = 1;\n extra = true;\n offset = 0;\n } else {\n band = 0.5;\n extra = false;\n }\n return {\n extra,\n band,\n offset\n };\n}\nfunction extendOffset(value, offset) {\n return !offset ? value : !value ? offset : !isObject(value) ? {\n value,\n offset\n } : Object.assign({}, value, {\n offset: extendOffset(value.offset, offset)\n });\n}\n\nfunction guideMark (mark, extras) {\n if (extras) {\n mark.name = extras.name;\n mark.style = extras.style || mark.style;\n mark.interactive = !!extras.interactive;\n mark.encode = extendEncode(mark.encode, extras, Skip);\n } else {\n mark.interactive = false;\n }\n return mark;\n}\n\nfunction legendGradient (spec, scale, config, userEncode) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = _.gradientThickness(),\n length = _.gradientLength();\n let enter, start, stop, width, height;\n if (vertical) {\n start = [0, 1];\n stop = [0, 0];\n width = thickness;\n height = length;\n } else {\n start = [0, 0];\n stop = [1, 0];\n width = length;\n height = thickness;\n }\n const encode = {\n enter: enter = {\n opacity: zero,\n x: zero,\n y: zero,\n width: encoder(width),\n height: encoder(height)\n },\n update: extend({}, enter, {\n opacity: one,\n fill: {\n gradient: scale,\n start: start,\n stop: stop\n }\n }),\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gradientStrokeColor'),\n strokeWidth: _('gradientStrokeWidth')\n }, {\n // update\n opacity: _('gradientOpacity')\n });\n return guideMark({\n type: RectMark,\n role: LegendGradientRole,\n encode\n }, userEncode);\n}\n\nfunction legendGradientDiscrete (spec, scale, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = _.gradientThickness(),\n length = _.gradientLength();\n let u,\n v,\n uu,\n vv,\n adjust = '';\n vertical ? (u = 'y', uu = 'y2', v = 'x', vv = 'width', adjust = '1-') : (u = 'x', uu = 'x2', v = 'y', vv = 'height');\n const enter = {\n opacity: zero,\n fill: {\n scale: scale,\n field: Value\n }\n };\n enter[u] = {\n signal: adjust + 'datum.' + Perc,\n mult: length\n };\n enter[v] = zero;\n enter[uu] = {\n signal: adjust + 'datum.' + Perc2,\n mult: length\n };\n enter[vv] = encoder(thickness);\n const encode = {\n enter: enter,\n update: extend({}, enter, {\n opacity: one\n }),\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gradientStrokeColor'),\n strokeWidth: _('gradientStrokeWidth')\n }, {\n // update\n opacity: _('gradientOpacity')\n });\n return guideMark({\n type: RectMark,\n role: LegendBandRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nconst alignExpr = `datum.${Perc}<=0?\"${Left}\":datum.${Perc}>=1?\"${Right}\":\"${Center}\"`,\n baselineExpr = `datum.${Perc}<=0?\"${Bottom}\":datum.${Perc}>=1?\"${Top}\":\"${Middle}\"`;\nfunction legendGradientLabels (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = encoder(_.gradientThickness()),\n length = _.gradientLength();\n let overlap = _('labelOverlap'),\n enter,\n update,\n u,\n v,\n adjust = '';\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one,\n text: {\n field: Label\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontStyle: _('labelFontStyle'),\n fontWeight: _('labelFontWeight'),\n limit: value(spec.labelLimit, config.gradientLabelLimit)\n });\n if (vertical) {\n enter.align = {\n value: 'left'\n };\n enter.baseline = update.baseline = {\n signal: baselineExpr\n };\n u = 'y';\n v = 'x';\n adjust = '1-';\n } else {\n enter.align = update.align = {\n signal: alignExpr\n };\n enter.baseline = {\n value: 'top'\n };\n u = 'x';\n v = 'y';\n }\n enter[u] = update[u] = {\n signal: adjust + 'datum.' + Perc,\n mult: length\n };\n enter[v] = update[v] = thickness;\n thickness.offset = value(spec.labelOffset, config.gradientLabelOffset) || 0;\n overlap = overlap ? {\n separation: _('labelSeparation'),\n method: overlap,\n order: 'datum.' + Index\n } : undefined;\n\n // type, role, style, key, dataRef, encode, extras\n return guideMark({\n type: TextMark,\n role: LegendLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: dataRef,\n encode,\n overlap\n }, userEncode);\n}\n\n// userEncode is top-level, includes entries, symbols, labels\nfunction legendSymbolGroups (spec, config, userEncode, dataRef, columns) {\n const _ = lookup(spec, config),\n entries = userEncode.entries,\n interactive = !!(entries && entries.interactive),\n name = entries ? entries.name : undefined,\n height = _('clipHeight'),\n symbolOffset = _('symbolOffset'),\n valueRef = {\n data: 'value'\n },\n xSignal = `(${columns}) ? datum.${Offset} : datum.${Size}`,\n yEncode = height ? encoder(height) : {\n field: Size\n },\n index = `datum.${Index}`,\n ncols = `max(1, ${columns})`;\n let encode, enter, update, nrows, sort;\n yEncode.mult = 0.5;\n\n // -- LEGEND SYMBOLS --\n encode = {\n enter: enter = {\n opacity: zero,\n x: {\n signal: xSignal,\n mult: 0.5,\n offset: symbolOffset\n },\n y: yEncode\n },\n update: update = {\n opacity: one,\n x: enter.x,\n y: enter.y\n },\n exit: {\n opacity: zero\n }\n };\n let baseFill = null,\n baseStroke = null;\n if (!spec.fill) {\n baseFill = config.symbolBaseFillColor;\n baseStroke = config.symbolBaseStrokeColor;\n }\n addEncoders(encode, {\n fill: _('symbolFillColor', baseFill),\n shape: _('symbolType'),\n size: _('symbolSize'),\n stroke: _('symbolStrokeColor', baseStroke),\n strokeDash: _('symbolDash'),\n strokeDashOffset: _('symbolDashOffset'),\n strokeWidth: _('symbolStrokeWidth')\n }, {\n // update\n opacity: _('symbolOpacity')\n });\n LegendScales.forEach(scale => {\n if (spec[scale]) {\n update[scale] = enter[scale] = {\n scale: spec[scale],\n field: Value\n };\n }\n });\n const symbols = guideMark({\n type: SymbolMark,\n role: LegendSymbolRole,\n key: Value,\n from: valueRef,\n clip: height ? true : undefined,\n encode\n }, userEncode.symbols);\n\n // -- LEGEND LABELS --\n const labelOffset = encoder(symbolOffset);\n labelOffset.offset = _('labelOffset');\n encode = {\n enter: enter = {\n opacity: zero,\n x: {\n signal: xSignal,\n offset: labelOffset\n },\n y: yEncode\n },\n update: update = {\n opacity: one,\n text: {\n field: Label\n },\n x: enter.x,\n y: enter.y\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n align: _('labelAlign'),\n baseline: _('labelBaseline'),\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontStyle: _('labelFontStyle'),\n fontWeight: _('labelFontWeight'),\n limit: _('labelLimit')\n });\n const labels = guideMark({\n type: TextMark,\n role: LegendLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: valueRef,\n encode\n }, userEncode.labels);\n\n // -- LEGEND ENTRY GROUPS --\n encode = {\n enter: {\n noBound: {\n value: !height\n },\n // ignore width/height in bounds calc\n width: zero,\n height: height ? encoder(height) : zero,\n opacity: zero\n },\n exit: {\n opacity: zero\n },\n update: update = {\n opacity: one,\n row: {\n signal: null\n },\n column: {\n signal: null\n }\n }\n };\n\n // annotate and sort groups to ensure correct ordering\n if (_.isVertical(true)) {\n nrows = `ceil(item.mark.items.length / ${ncols})`;\n update.row.signal = `${index}%${nrows}`;\n update.column.signal = `floor(${index} / ${nrows})`;\n sort = {\n field: ['row', index]\n };\n } else {\n update.row.signal = `floor(${index} / ${ncols})`;\n update.column.signal = `${index} % ${ncols}`;\n sort = {\n field: index\n };\n }\n // handle zero column case (implies infinite columns)\n update.column.signal = `(${columns})?${update.column.signal}:${index}`;\n\n // facet legend entries into sub-groups\n dataRef = {\n facet: {\n data: dataRef,\n name: 'value',\n groupby: Index\n }\n };\n return guideGroup({\n role: ScopeRole,\n from: dataRef,\n encode: extendEncode(encode, entries, Skip),\n marks: [symbols, labels],\n name,\n interactive,\n sort\n });\n}\nfunction legendSymbolLayout(spec, config) {\n const _ = lookup(spec, config);\n\n // layout parameters for legend entries\n return {\n align: _('gridAlign'),\n columns: _.entryColumns(),\n center: {\n row: true,\n column: false\n },\n padding: {\n row: _('rowPadding'),\n column: _('columnPadding')\n }\n };\n}\n\n// expression logic for align, anchor, angle, and baseline calculation\nconst isL = 'item.orient === \"left\"',\n isR = 'item.orient === \"right\"',\n isLR = `(${isL} || ${isR})`,\n isVG = `datum.vgrad && ${isLR}`,\n baseline = anchorExpr('\"top\"', '\"bottom\"', '\"middle\"'),\n alignFlip = anchorExpr('\"right\"', '\"left\"', '\"center\"'),\n exprAlign = `datum.vgrad && ${isR} ? (${alignFlip}) : (${isLR} && !(datum.vgrad && ${isL})) ? \"left\" : ${alignExpr$1}`,\n exprAnchor = `item._anchor || (${isLR} ? \"middle\" : \"start\")`,\n exprAngle = `${isVG} ? (${isL} ? -90 : 90) : 0`,\n exprBaseline = `${isLR} ? (datum.vgrad ? (${isR} ? \"bottom\" : \"top\") : ${baseline}) : \"top\"`;\nfunction legendTitle (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config);\n const encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: one,\n x: {\n field: {\n group: 'padding'\n }\n },\n y: {\n field: {\n group: 'padding'\n }\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n orient: _('titleOrient'),\n _anchor: _('titleAnchor'),\n anchor: {\n signal: exprAnchor\n },\n angle: {\n signal: exprAngle\n },\n align: {\n signal: exprAlign\n },\n baseline: {\n signal: exprBaseline\n },\n text: spec.title,\n fill: _('titleColor'),\n fillOpacity: _('titleOpacity'),\n font: _('titleFont'),\n fontSize: _('titleFontSize'),\n fontStyle: _('titleFontStyle'),\n fontWeight: _('titleFontWeight'),\n limit: _('titleLimit'),\n lineHeight: _('titleLineHeight')\n }, {\n // require update\n align: _('titleAlign'),\n baseline: _('titleBaseline')\n });\n return guideMark({\n type: TextMark,\n role: LegendTitleRole,\n style: GuideTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction clip (clip, scope) {\n let expr;\n if (isObject(clip)) {\n if (clip.signal) {\n expr = clip.signal;\n } else if (clip.path) {\n expr = 'pathShape(' + param(clip.path) + ')';\n } else if (clip.sphere) {\n expr = 'geoShape(' + param(clip.sphere) + ', {type: \"Sphere\"})';\n }\n }\n return expr ? scope.signalRef(expr) : !!clip;\n}\nfunction param(value) {\n return isObject(value) && value.signal ? value.signal : stringValue(value);\n}\n\nfunction getRole (spec) {\n const role = spec.role || '';\n return !role.indexOf('axis') || !role.indexOf('legend') || !role.indexOf('title') ? role : spec.type === GroupMark ? ScopeRole : role || MarkRole;\n}\n\nfunction definition (spec) {\n return {\n marktype: spec.type,\n name: spec.name || undefined,\n role: spec.role || getRole(spec),\n zindex: +spec.zindex || undefined,\n aria: spec.aria,\n description: spec.description\n };\n}\n\nfunction interactive (spec, scope) {\n return spec && spec.signal ? scope.signalRef(spec.signal) : spec === false ? false : true;\n}\n\n/**\n * Parse a data transform specification.\n */\nfunction parseTransform (spec, scope) {\n const def = definition$1(spec.type);\n if (!def) error('Unrecognized transform type: ' + stringValue(spec.type));\n const t = entry(def.type.toLowerCase(), null, parseParameters(def, spec, scope));\n if (spec.signal) scope.addSignal(spec.signal, scope.proxy(t));\n t.metadata = def.metadata || {};\n return t;\n}\n\n/**\n * Parse all parameters of a data transform.\n */\nfunction parseParameters(def, spec, scope) {\n const params = {},\n n = def.params.length;\n for (let i = 0; i < n; ++i) {\n const pdef = def.params[i];\n params[pdef.name] = parseParameter(pdef, spec, scope);\n }\n return params;\n}\n\n/**\n * Parse a data transform parameter.\n */\nfunction parseParameter(def, spec, scope) {\n const type = def.type,\n value = spec[def.name];\n if (type === 'index') {\n return parseIndexParameter(def, spec, scope);\n } else if (value === undefined) {\n if (def.required) {\n error('Missing required ' + stringValue(spec.type) + ' parameter: ' + stringValue(def.name));\n }\n return;\n } else if (type === 'param') {\n return parseSubParameters(def, spec, scope);\n } else if (type === 'projection') {\n return scope.projectionRef(spec[def.name]);\n }\n return def.array && !isSignal(value) ? value.map(v => parameterValue(def, v, scope)) : parameterValue(def, value, scope);\n}\n\n/**\n * Parse a single parameter value.\n */\nfunction parameterValue(def, value, scope) {\n const type = def.type;\n if (isSignal(value)) {\n return isExpr(type) ? error('Expression references can not be signals.') : isField(type) ? scope.fieldRef(value) : isCompare(type) ? scope.compareRef(value) : scope.signalRef(value.signal);\n } else {\n const expr = def.expr || isField(type);\n return expr && outerExpr(value) ? scope.exprRef(value.expr, value.as) : expr && outerField(value) ? fieldRef$1(value.field, value.as) : isExpr(type) ? parseExpression(value, scope) : isData(type) ? ref(scope.getData(value).values) : isField(type) ? fieldRef$1(value) : isCompare(type) ? scope.compareRef(value) : value;\n }\n}\n\n/**\n * Parse parameter for accessing an index of another data set.\n */\nfunction parseIndexParameter(def, spec, scope) {\n if (!isString(spec.from)) {\n error('Lookup \"from\" parameter must be a string literal.');\n }\n return scope.getData(spec.from).lookupRef(scope, spec.key);\n}\n\n/**\n * Parse a parameter that contains one or more sub-parameter objects.\n */\nfunction parseSubParameters(def, spec, scope) {\n const value = spec[def.name];\n if (def.array) {\n if (!isArray(value)) {\n // signals not allowed!\n error('Expected an array of sub-parameters. Instead: ' + stringValue(value));\n }\n return value.map(v => parseSubParameter(def, v, scope));\n } else {\n return parseSubParameter(def, value, scope);\n }\n}\n\n/**\n * Parse a sub-parameter object.\n */\nfunction parseSubParameter(def, value, scope) {\n const n = def.params.length;\n let pdef;\n\n // loop over defs to find matching key\n for (let i = 0; i < n; ++i) {\n pdef = def.params[i];\n for (const k in pdef.key) {\n if (pdef.key[k] !== value[k]) {\n pdef = null;\n break;\n }\n }\n if (pdef) break;\n }\n // raise error if matching key not found\n if (!pdef) error('Unsupported parameter: ' + stringValue(value));\n\n // parse params, create Params transform, return ref\n const params = extend(parseParameters(pdef, value, scope), pdef.key);\n return ref(scope.add(Params(params)));\n}\n\n// -- Utilities -----\n\nconst outerExpr = _ => _ && _.expr;\nconst outerField = _ => _ && _.field;\nconst isData = _ => _ === 'data';\nconst isExpr = _ => _ === 'expr';\nconst isField = _ => _ === 'field';\nconst isCompare = _ => _ === 'compare';\n\nfunction parseData$1 (from, group, scope) {\n let facet, key, op, dataRef, parent;\n\n // if no source data, generate singleton datum\n if (!from) {\n dataRef = ref(scope.add(Collect(null, [{}])));\n }\n\n // if faceted, process facet specification\n else if (facet = from.facet) {\n if (!group) error('Only group marks can be faceted.');\n\n // use pre-faceted source data, if available\n if (facet.field != null) {\n dataRef = parent = getDataRef(facet, scope);\n } else {\n // generate facet aggregates if no direct data specification\n if (!from.data) {\n op = parseTransform(extend({\n type: 'aggregate',\n groupby: array(facet.groupby)\n }, facet.aggregate), scope);\n op.params.key = scope.keyRef(facet.groupby);\n op.params.pulse = getDataRef(facet, scope);\n dataRef = parent = ref(scope.add(op));\n } else {\n parent = ref(scope.getData(from.data).aggregate);\n }\n key = scope.keyRef(facet.groupby, true);\n }\n }\n\n // if not yet defined, get source data reference\n if (!dataRef) {\n dataRef = getDataRef(from, scope);\n }\n return {\n key: key,\n pulse: dataRef,\n parent: parent\n };\n}\nfunction getDataRef(from, scope) {\n return from.$ref ? from : from.data && from.data.$ref ? from.data : ref(scope.getData(from.data).output);\n}\n\nfunction DataScope(scope, input, output, values, aggr) {\n this.scope = scope; // parent scope object\n this.input = input; // first operator in pipeline (tuple input)\n this.output = output; // last operator in pipeline (tuple output)\n this.values = values; // operator for accessing tuples (but not tuple flow)\n\n // last aggregate in transform pipeline\n this.aggregate = aggr;\n\n // lookup table of field indices\n this.index = {};\n}\nDataScope.fromEntries = function (scope, entries) {\n const n = entries.length,\n values = entries[n - 1],\n output = entries[n - 2];\n let input = entries[0],\n aggr = null,\n i = 1;\n if (input && input.type === 'load') {\n input = entries[1];\n }\n\n // add operator entries to this scope, wire up pulse chain\n scope.add(entries[0]);\n for (; i < n; ++i) {\n entries[i].params.pulse = ref(entries[i - 1]);\n scope.add(entries[i]);\n if (entries[i].type === 'aggregate') aggr = entries[i];\n }\n return new DataScope(scope, input, output, values, aggr);\n};\nfunction fieldKey(field) {\n return isString(field) ? field : null;\n}\nfunction addSortField(scope, p, sort) {\n const as = aggrField(sort.op, sort.field);\n let s;\n if (p.ops) {\n for (let i = 0, n = p.as.length; i < n; ++i) {\n if (p.as[i] === as) return;\n }\n } else {\n p.ops = ['count'];\n p.fields = [null];\n p.as = ['count'];\n }\n if (sort.op) {\n p.ops.push((s = sort.op.signal) ? scope.signalRef(s) : sort.op);\n p.fields.push(scope.fieldRef(sort.field));\n p.as.push(as);\n }\n}\nfunction cache(scope, ds, name, optype, field, counts, index) {\n const cache = ds[name] || (ds[name] = {}),\n sort = sortKey(counts);\n let k = fieldKey(field),\n v,\n op;\n if (k != null) {\n scope = ds.scope;\n k = k + (sort ? '|' + sort : '');\n v = cache[k];\n }\n if (!v) {\n const params = counts ? {\n field: keyFieldRef,\n pulse: ds.countsRef(scope, field, counts)\n } : {\n field: scope.fieldRef(field),\n pulse: ref(ds.output)\n };\n if (sort) params.sort = scope.sortRef(counts);\n op = scope.add(entry(optype, undefined, params));\n if (index) ds.index[field] = op;\n v = ref(op);\n if (k != null) cache[k] = v;\n }\n return v;\n}\nDataScope.prototype = {\n countsRef(scope, field, sort) {\n const ds = this,\n cache = ds.counts || (ds.counts = {}),\n k = fieldKey(field);\n let v, a, p;\n if (k != null) {\n scope = ds.scope;\n v = cache[k];\n }\n if (!v) {\n p = {\n groupby: scope.fieldRef(field, 'key'),\n pulse: ref(ds.output)\n };\n if (sort && sort.field) addSortField(scope, p, sort);\n a = scope.add(Aggregate(p));\n v = scope.add(Collect({\n pulse: ref(a)\n }));\n v = {\n agg: a,\n ref: ref(v)\n };\n if (k != null) cache[k] = v;\n } else if (sort && sort.field) {\n addSortField(scope, v.agg.params, sort);\n }\n return v.ref;\n },\n tuplesRef() {\n return ref(this.values);\n },\n extentRef(scope, field) {\n return cache(scope, this, 'extent', 'extent', field, false);\n },\n domainRef(scope, field) {\n return cache(scope, this, 'domain', 'values', field, false);\n },\n valuesRef(scope, field, sort) {\n return cache(scope, this, 'vals', 'values', field, sort || true);\n },\n lookupRef(scope, field) {\n return cache(scope, this, 'lookup', 'tupleindex', field, false);\n },\n indataRef(scope, field) {\n return cache(scope, this, 'indata', 'tupleindex', field, true, true);\n }\n};\n\nfunction parseFacet (spec, scope, group) {\n const facet = spec.from.facet,\n name = facet.name,\n data = getDataRef(facet, scope);\n let op;\n if (!facet.name) {\n error('Facet must have a name: ' + stringValue(facet));\n }\n if (!facet.data) {\n error('Facet must reference a data set: ' + stringValue(facet));\n }\n if (facet.field) {\n op = scope.add(PreFacet({\n field: scope.fieldRef(facet.field),\n pulse: data\n }));\n } else if (facet.groupby) {\n op = scope.add(Facet({\n key: scope.keyRef(facet.groupby),\n group: ref(scope.proxy(group.parent)),\n pulse: data\n }));\n } else {\n error('Facet must specify groupby or field: ' + stringValue(facet));\n }\n\n // initialize facet subscope\n const subscope = scope.fork(),\n source = subscope.add(Collect()),\n values = subscope.add(Sieve({\n pulse: ref(source)\n }));\n subscope.addData(name, new DataScope(subscope, source, source, values));\n subscope.addSignal('parent', null);\n\n // parse faceted subflow\n op.params.subflow = {\n $subflow: subscope.parse(spec).toRuntime()\n };\n}\n\nfunction parseSubflow (spec, scope, input) {\n const op = scope.add(PreFacet({\n pulse: input.pulse\n })),\n subscope = scope.fork();\n subscope.add(Sieve());\n subscope.addSignal('parent', null);\n\n // parse group mark subflow\n op.params.subflow = {\n $subflow: subscope.parse(spec).toRuntime()\n };\n}\n\nfunction parseTrigger (spec, scope, name) {\n const remove = spec.remove,\n insert = spec.insert,\n toggle = spec.toggle,\n modify = spec.modify,\n values = spec.values,\n op = scope.add(operator());\n const update = 'if(' + spec.trigger + ',modify(\"' + name + '\",' + [insert, remove, toggle, modify, values].map(_ => _ == null ? 'null' : _).join(',') + '),0)';\n const expr = parseExpression(update, scope);\n op.update = expr.$expr;\n op.params = expr.$params;\n}\n\nfunction parseMark (spec, scope) {\n const role = getRole(spec),\n group = spec.type === GroupMark,\n facet = spec.from && spec.from.facet,\n overlap = spec.overlap;\n let layout = spec.layout || role === ScopeRole || role === FrameRole,\n ops,\n op,\n store,\n enc,\n name,\n layoutRef,\n boundRef;\n const nested = role === MarkRole || layout || facet;\n\n // resolve input data\n const input = parseData$1(spec.from, group, scope);\n\n // data join to map tuples to visual items\n op = scope.add(DataJoin({\n key: input.key || (spec.key ? fieldRef$1(spec.key) : undefined),\n pulse: input.pulse,\n clean: !group\n }));\n const joinRef = ref(op);\n\n // collect visual items\n op = store = scope.add(Collect({\n pulse: joinRef\n }));\n\n // connect visual items to scenegraph\n op = scope.add(Mark({\n markdef: definition(spec),\n interactive: interactive(spec.interactive, scope),\n clip: clip(spec.clip, scope),\n context: {\n $context: true\n },\n groups: scope.lookup(),\n parent: scope.signals.parent ? scope.signalRef('parent') : null,\n index: scope.markpath(),\n pulse: ref(op)\n }));\n const markRef = ref(op);\n\n // add visual encoders\n op = enc = scope.add(Encode(parseEncode(spec.encode, spec.type, role, spec.style, scope, {\n mod: false,\n pulse: markRef\n })));\n\n // monitor parent marks to propagate changes\n op.params.parent = scope.encode();\n\n // add post-encoding transforms, if defined\n if (spec.transform) {\n spec.transform.forEach(_ => {\n const tx = parseTransform(_, scope),\n md = tx.metadata;\n if (md.generates || md.changes) {\n error('Mark transforms should not generate new data.');\n }\n if (!md.nomod) enc.params.mod = true; // update encode mod handling\n tx.params.pulse = ref(op);\n scope.add(op = tx);\n });\n }\n\n // if item sort specified, perform post-encoding\n if (spec.sort) {\n op = scope.add(SortItems({\n sort: scope.compareRef(spec.sort),\n pulse: ref(op)\n }));\n }\n const encodeRef = ref(op);\n\n // add view layout operator if needed\n if (facet || layout) {\n layout = scope.add(ViewLayout({\n layout: scope.objectProperty(spec.layout),\n legends: scope.legends,\n mark: markRef,\n pulse: encodeRef\n }));\n layoutRef = ref(layout);\n }\n\n // compute bounding boxes\n const bound = scope.add(Bound({\n mark: markRef,\n pulse: layoutRef || encodeRef\n }));\n boundRef = ref(bound);\n\n // if group mark, recurse to parse nested content\n if (group) {\n // juggle layout & bounds to ensure they run *after* any faceting transforms\n if (nested) {\n ops = scope.operators;\n ops.pop();\n if (layout) ops.pop();\n }\n scope.pushState(encodeRef, layoutRef || boundRef, joinRef);\n facet ? parseFacet(spec, scope, input) // explicit facet\n : nested ? parseSubflow(spec, scope, input) // standard mark group\n : scope.parse(spec); // guide group, we can avoid nested scopes\n scope.popState();\n if (nested) {\n if (layout) ops.push(layout);\n ops.push(bound);\n }\n }\n\n // if requested, add overlap removal transform\n if (overlap) {\n boundRef = parseOverlap(overlap, boundRef, scope);\n }\n\n // render / sieve items\n const render = scope.add(Render({\n pulse: boundRef\n })),\n sieve = scope.add(Sieve({\n pulse: ref(render)\n }, undefined, scope.parent()));\n\n // if mark is named, make accessible as reactive geometry\n // add trigger updates if defined\n if (spec.name != null) {\n name = spec.name;\n scope.addData(name, new DataScope(scope, store, render, sieve));\n if (spec.on) spec.on.forEach(on => {\n if (on.insert || on.remove || on.toggle) {\n error('Marks only support modify triggers.');\n }\n parseTrigger(on, scope, name);\n });\n }\n}\nfunction parseOverlap(overlap, source, scope) {\n const method = overlap.method,\n bound = overlap.bound,\n sep = overlap.separation;\n const params = {\n separation: isSignal(sep) ? scope.signalRef(sep.signal) : sep,\n method: isSignal(method) ? scope.signalRef(method.signal) : method,\n pulse: source\n };\n if (overlap.order) {\n params.sort = scope.compareRef({\n field: overlap.order\n });\n }\n if (bound) {\n const tol = bound.tolerance;\n params.boundTolerance = isSignal(tol) ? scope.signalRef(tol.signal) : +tol;\n params.boundScale = scope.scaleRef(bound.scale);\n params.boundOrient = bound.orient;\n }\n return ref(scope.add(Overlap(params)));\n}\n\nfunction parseLegend (spec, scope) {\n const config = scope.config.legend,\n encode = spec.encode || {},\n _ = lookup(spec, config),\n legendEncode = encode.legend || {},\n name = legendEncode.name || undefined,\n interactive = legendEncode.interactive,\n style = legendEncode.style,\n scales = {};\n let scale = 0,\n entryLayout,\n params,\n children;\n\n // resolve scales and 'canonical' scale name\n LegendScales.forEach(s => spec[s] ? (scales[s] = spec[s], scale = scale || spec[s]) : 0);\n if (!scale) error('Missing valid scale for legend.');\n\n // resolve legend type (symbol, gradient, or discrete gradient)\n const type = legendType(spec, scope.scaleType(scale));\n\n // single-element data source for legend group\n const datum = {\n title: spec.title != null,\n scales: scales,\n type: type,\n vgrad: type !== 'symbol' && _.isVertical()\n };\n const dataRef = ref(scope.add(Collect(null, [datum])));\n\n // encoding properties for legend entry sub-group\n const entryEncode = {\n enter: {\n x: {\n value: 0\n },\n y: {\n value: 0\n }\n }\n };\n\n // data source for legend values\n const entryRef = ref(scope.add(LegendEntries(params = {\n type: type,\n scale: scope.scaleRef(scale),\n count: scope.objectProperty(_('tickCount')),\n limit: scope.property(_('symbolLimit')),\n values: scope.objectProperty(spec.values),\n minstep: scope.property(spec.tickMinStep),\n formatType: scope.property(spec.formatType),\n formatSpecifier: scope.property(spec.format)\n })));\n\n // continuous gradient legend\n if (type === Gradient) {\n children = [legendGradient(spec, scale, config, encode.gradient), legendGradientLabels(spec, config, encode.labels, entryRef)];\n // adjust default tick count based on the gradient length\n params.count = params.count || scope.signalRef(`max(2,2*floor((${deref(_.gradientLength())})/100))`);\n }\n\n // discrete gradient legend\n else if (type === Discrete) {\n children = [legendGradientDiscrete(spec, scale, config, encode.gradient, entryRef), legendGradientLabels(spec, config, encode.labels, entryRef)];\n }\n\n // symbol legend\n else {\n // determine legend symbol group layout\n entryLayout = legendSymbolLayout(spec, config);\n children = [legendSymbolGroups(spec, config, encode, entryRef, deref(entryLayout.columns))];\n // pass symbol size information to legend entry generator\n params.size = sizeExpression(spec, scope, children[0].marks);\n }\n\n // generate legend marks\n children = [guideGroup({\n role: LegendEntryRole,\n from: dataRef,\n encode: entryEncode,\n marks: children,\n layout: entryLayout,\n interactive\n })];\n\n // include legend title if defined\n if (datum.title) {\n children.push(legendTitle(spec, config, encode.title, dataRef));\n }\n\n // parse legend specification\n return parseMark(guideGroup({\n role: LegendRole,\n from: dataRef,\n encode: extendEncode(buildLegendEncode(_, spec, config), legendEncode, Skip),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\nfunction legendType(spec, scaleType) {\n let type = spec.type || Symbols;\n if (!spec.type && scaleCount(spec) === 1 && (spec.fill || spec.stroke)) {\n type = isContinuous(scaleType) ? Gradient : isDiscretizing(scaleType) ? Discrete : Symbols;\n }\n return type !== Gradient ? type : isDiscretizing(scaleType) ? Discrete : Gradient;\n}\nfunction scaleCount(spec) {\n return LegendScales.reduce((count, type) => count + (spec[type] ? 1 : 0), 0);\n}\nfunction buildLegendEncode(_, spec, config) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n offset: _('offset'),\n padding: _('padding'),\n titlePadding: _('titlePadding'),\n cornerRadius: _('cornerRadius'),\n fill: _('fillColor'),\n stroke: _('strokeColor'),\n strokeWidth: config.strokeWidth,\n strokeDash: config.strokeDash,\n x: _('legendX'),\n y: _('legendY'),\n // accessibility support\n format: spec.format,\n formatType: spec.formatType\n });\n return encode;\n}\nfunction sizeExpression(spec, scope, marks) {\n const size = deref(getChannel('size', spec, marks)),\n strokeWidth = deref(getChannel('strokeWidth', spec, marks)),\n fontSize = deref(getFontSize(marks[1].encode, scope, GuideLabelStyle));\n return parseExpression(`max(ceil(sqrt(${size})+${strokeWidth}),${fontSize})`, scope);\n}\nfunction getChannel(name, spec, marks) {\n return spec[name] ? `scale(\"${spec[name]}\",datum)` : getEncoding(name, marks[0].encode);\n}\nfunction getFontSize(encode, scope, style) {\n return getEncoding('fontSize', encode) || getStyle('fontSize', scope, style);\n}\n\nconst angleExpr = `item.orient===\"${Left}\"?-90:item.orient===\"${Right}\"?90:0`;\nfunction parseTitle (spec, scope) {\n spec = isString(spec) ? {\n text: spec\n } : spec;\n const _ = lookup(spec, scope.config.title),\n encode = spec.encode || {},\n userEncode = encode.group || {},\n name = userEncode.name || undefined,\n interactive = userEncode.interactive,\n style = userEncode.style,\n children = [];\n\n // single-element data source for group title\n const datum = {},\n dataRef = ref(scope.add(Collect(null, [datum])));\n\n // include title text\n children.push(buildTitle(spec, _, titleEncode(spec), dataRef));\n\n // include subtitle text\n if (spec.subtitle) {\n children.push(buildSubTitle(spec, _, encode.subtitle, dataRef));\n }\n\n // parse title specification\n return parseMark(guideGroup({\n role: TitleRole,\n from: dataRef,\n encode: groupEncode(_, userEncode),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\n\n// provide backwards-compatibility for title custom encode;\n// the top-level encode block has been *deprecated*.\nfunction titleEncode(spec) {\n const encode = spec.encode;\n return encode && encode.title || extend({\n name: spec.name,\n interactive: spec.interactive,\n style: spec.style\n }, encode);\n}\nfunction groupEncode(_, userEncode) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n anchor: _('anchor'),\n align: {\n signal: alignExpr$1\n },\n angle: {\n signal: angleExpr\n },\n limit: _('limit'),\n frame: _('frame'),\n offset: _('offset') || 0,\n padding: _('subtitlePadding')\n });\n return extendEncode(encode, userEncode, Skip);\n}\nfunction buildTitle(spec, _, userEncode, dataRef) {\n const zero = {\n value: 0\n },\n text = spec.text,\n encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: {\n value: 1\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n text: text,\n align: {\n signal: 'item.mark.group.align'\n },\n angle: {\n signal: 'item.mark.group.angle'\n },\n limit: {\n signal: 'item.mark.group.limit'\n },\n baseline: 'top',\n dx: _('dx'),\n dy: _('dy'),\n fill: _('color'),\n font: _('font'),\n fontSize: _('fontSize'),\n fontStyle: _('fontStyle'),\n fontWeight: _('fontWeight'),\n lineHeight: _('lineHeight')\n }, {\n // update\n align: _('align'),\n angle: _('angle'),\n baseline: _('baseline')\n });\n return guideMark({\n type: TextMark,\n role: TitleTextRole,\n style: GroupTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction buildSubTitle(spec, _, userEncode, dataRef) {\n const zero = {\n value: 0\n },\n text = spec.subtitle,\n encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: {\n value: 1\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n text: text,\n align: {\n signal: 'item.mark.group.align'\n },\n angle: {\n signal: 'item.mark.group.angle'\n },\n limit: {\n signal: 'item.mark.group.limit'\n },\n baseline: 'top',\n dx: _('dx'),\n dy: _('dy'),\n fill: _('subtitleColor'),\n font: _('subtitleFont'),\n fontSize: _('subtitleFontSize'),\n fontStyle: _('subtitleFontStyle'),\n fontWeight: _('subtitleFontWeight'),\n lineHeight: _('subtitleLineHeight')\n }, {\n // update\n align: _('align'),\n angle: _('angle'),\n baseline: _('baseline')\n });\n return guideMark({\n type: TextMark,\n role: TitleSubtitleRole,\n style: GroupSubtitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction parseData(data, scope) {\n const transforms = [];\n if (data.transform) {\n data.transform.forEach(tx => {\n transforms.push(parseTransform(tx, scope));\n });\n }\n if (data.on) {\n data.on.forEach(on => {\n parseTrigger(on, scope, data.name);\n });\n }\n scope.addDataPipeline(data.name, analyze(data, scope, transforms));\n}\n\n/**\n * Analyze a data pipeline, add needed operators.\n */\nfunction analyze(data, scope, ops) {\n const output = [];\n let source = null,\n modify = false,\n generate = false,\n upstream,\n i,\n n,\n t,\n m;\n if (data.values) {\n // hard-wired input data set\n if (isSignal(data.values) || hasSignal(data.format)) {\n // if either values is signal or format has signal, use dynamic loader\n output.push(load(scope, data));\n output.push(source = collect());\n } else {\n // otherwise, ingest upon dataflow init\n output.push(source = collect({\n $ingest: data.values,\n $format: data.format\n }));\n }\n } else if (data.url) {\n // load data from external source\n if (hasSignal(data.url) || hasSignal(data.format)) {\n // if either url or format has signal, use dynamic loader\n output.push(load(scope, data));\n output.push(source = collect());\n } else {\n // otherwise, request load upon dataflow init\n output.push(source = collect({\n $request: data.url,\n $format: data.format\n }));\n }\n } else if (data.source) {\n // derives from one or more other data sets\n source = upstream = array(data.source).map(d => ref(scope.getData(d).output));\n output.push(null); // populate later\n }\n\n // scan data transforms, add collectors as needed\n for (i = 0, n = ops.length; i < n; ++i) {\n t = ops[i];\n m = t.metadata;\n if (!source && !m.source) {\n output.push(source = collect());\n }\n output.push(t);\n if (m.generates) generate = true;\n if (m.modifies && !generate) modify = true;\n if (m.source) source = t;else if (m.changes) source = null;\n }\n if (upstream) {\n n = upstream.length - 1;\n output[0] = Relay({\n derive: modify,\n pulse: n ? upstream : upstream[0]\n });\n if (modify || n) {\n // collect derived and multi-pulse tuples\n output.splice(1, 0, collect());\n }\n }\n if (!source) output.push(collect());\n output.push(Sieve({}));\n return output;\n}\nfunction collect(values) {\n const s = Collect({}, values);\n s.metadata = {\n source: true\n };\n return s;\n}\nfunction load(scope, data) {\n return Load({\n url: data.url ? scope.property(data.url) : undefined,\n async: data.async ? scope.property(data.async) : undefined,\n values: data.values ? scope.property(data.values) : undefined,\n format: scope.objectProperty(data.format)\n });\n}\n\nconst isX = orient => orient === Bottom || orient === Top;\n\n// get sign coefficient based on axis orient\nconst getSign = (orient, a, b) => isSignal(orient) ? ifLeftTopExpr(orient.signal, a, b) : orient === Left || orient === Top ? a : b;\n\n// condition on axis x-direction\nconst ifX = (orient, a, b) => isSignal(orient) ? ifXEnc(orient.signal, a, b) : isX(orient) ? a : b;\n\n// condition on axis y-direction\nconst ifY = (orient, a, b) => isSignal(orient) ? ifYEnc(orient.signal, a, b) : isX(orient) ? b : a;\nconst ifTop = (orient, a, b) => isSignal(orient) ? ifTopExpr(orient.signal, a, b) : orient === Top ? {\n value: a\n} : {\n value: b\n};\nconst ifRight = (orient, a, b) => isSignal(orient) ? ifRightExpr(orient.signal, a, b) : orient === Right ? {\n value: a\n} : {\n value: b\n};\nconst ifXEnc = ($orient, a, b) => ifEnc(`${$orient} === '${Top}' || ${$orient} === '${Bottom}'`, a, b);\nconst ifYEnc = ($orient, a, b) => ifEnc(`${$orient} !== '${Top}' && ${$orient} !== '${Bottom}'`, a, b);\nconst ifLeftTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Left}' || ${$orient} === '${Top}'`, a, b);\nconst ifTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Top}'`, a, b);\nconst ifRightExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Right}'`, a, b);\nconst ifEnc = (test, a, b) => {\n // ensure inputs are encoder objects (or null)\n a = a != null ? encoder(a) : a;\n b = b != null ? encoder(b) : b;\n if (isSimple(a) && isSimple(b)) {\n // if possible generate simple signal expression\n a = a ? a.signal || stringValue(a.value) : null;\n b = b ? b.signal || stringValue(b.value) : null;\n return {\n signal: `${test} ? (${a}) : (${b})`\n };\n } else {\n // otherwise generate rule set\n return [extend({\n test\n }, a)].concat(b || []);\n }\n};\nconst isSimple = enc => enc == null || Object.keys(enc).length === 1;\nconst ifExpr = (test, a, b) => ({\n signal: `${test} ? (${toExpr(a)}) : (${toExpr(b)})`\n});\nconst ifOrient = ($orient, t, b, l, r) => ({\n signal: (l != null ? `${$orient} === '${Left}' ? (${toExpr(l)}) : ` : '') + (b != null ? `${$orient} === '${Bottom}' ? (${toExpr(b)}) : ` : '') + (r != null ? `${$orient} === '${Right}' ? (${toExpr(r)}) : ` : '') + (t != null ? `${$orient} === '${Top}' ? (${toExpr(t)}) : ` : '') + '(null)'\n});\nconst toExpr = v => isSignal(v) ? v.signal : v == null ? null : stringValue(v);\nconst mult = (sign, value) => value === 0 ? 0 : isSignal(sign) ? {\n signal: `(${sign.signal}) * ${value}`\n} : {\n value: sign * value\n};\nconst patch = (value, base) => {\n const s = value.signal;\n return s && s.endsWith('(null)') ? {\n signal: s.slice(0, -6) + base.signal\n } : value;\n};\n\nfunction fallback(prop, config, axisConfig, style) {\n let styleProp;\n if (config && hasOwnProperty(config, prop)) {\n return config[prop];\n } else if (hasOwnProperty(axisConfig, prop)) {\n return axisConfig[prop];\n } else if (prop.startsWith('title')) {\n switch (prop) {\n case 'titleColor':\n styleProp = 'fill';\n break;\n case 'titleFont':\n case 'titleFontSize':\n case 'titleFontWeight':\n styleProp = prop[5].toLowerCase() + prop.slice(6);\n }\n return style[GuideTitleStyle][styleProp];\n } else if (prop.startsWith('label')) {\n switch (prop) {\n case 'labelColor':\n styleProp = 'fill';\n break;\n case 'labelFont':\n case 'labelFontSize':\n styleProp = prop[5].toLowerCase() + prop.slice(6);\n }\n return style[GuideLabelStyle][styleProp];\n }\n return null;\n}\nfunction keys(objects) {\n const map = {};\n for (const obj of objects) {\n if (!obj) continue;\n for (const key in obj) map[key] = 1;\n }\n return Object.keys(map);\n}\nfunction axisConfig (spec, scope) {\n var config = scope.config,\n style = config.style,\n axis = config.axis,\n band = scope.scaleType(spec.scale) === 'band' && config.axisBand,\n orient = spec.orient,\n xy,\n or,\n key;\n if (isSignal(orient)) {\n const xyKeys = keys([config.axisX, config.axisY]),\n orientKeys = keys([config.axisTop, config.axisBottom, config.axisLeft, config.axisRight]);\n xy = {};\n for (key of xyKeys) {\n xy[key] = ifX(orient, fallback(key, config.axisX, axis, style), fallback(key, config.axisY, axis, style));\n }\n or = {};\n for (key of orientKeys) {\n or[key] = ifOrient(orient.signal, fallback(key, config.axisTop, axis, style), fallback(key, config.axisBottom, axis, style), fallback(key, config.axisLeft, axis, style), fallback(key, config.axisRight, axis, style));\n }\n } else {\n xy = orient === Top || orient === Bottom ? config.axisX : config.axisY;\n or = config['axis' + orient[0].toUpperCase() + orient.slice(1)];\n }\n const result = xy || or || band ? extend({}, axis, xy, or, band) : axis;\n return result;\n}\n\nfunction axisDomain (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n orient = spec.orient;\n let enter, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('domainColor'),\n strokeCap: _('domainCap'),\n strokeDash: _('domainDash'),\n strokeDashOffset: _('domainDashOffset'),\n strokeWidth: _('domainWidth'),\n strokeOpacity: _('domainOpacity')\n });\n const pos0 = position(spec, 0);\n const pos1 = position(spec, 1);\n enter.x = update.x = ifX(orient, pos0, zero);\n enter.x2 = update.x2 = ifX(orient, pos1);\n enter.y = update.y = ifY(orient, pos0, zero);\n enter.y2 = update.y2 = ifY(orient, pos1);\n return guideMark({\n type: RuleMark,\n role: AxisDomainRole,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction position(spec, pos) {\n return {\n scale: spec.scale,\n range: pos\n };\n}\n\nfunction axisGrid (spec, config, userEncode, dataRef, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n vscale = spec.gridScale,\n sign = getSign(orient, 1, -1),\n offset = offsetValue(spec.offset, sign);\n let enter, exit, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: exit = {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gridColor'),\n strokeCap: _('gridCap'),\n strokeDash: _('gridDash'),\n strokeDashOffset: _('gridDashOffset'),\n strokeOpacity: _('gridOpacity'),\n strokeWidth: _('gridWidth')\n });\n const tickPos = {\n scale: spec.scale,\n field: Value,\n band: band.band,\n extra: band.extra,\n offset: band.offset,\n round: _('tickRound')\n };\n const sz = ifX(orient, {\n signal: 'height'\n }, {\n signal: 'width'\n });\n const gridStart = vscale ? {\n scale: vscale,\n range: 0,\n mult: sign,\n offset: offset\n } : {\n value: 0,\n offset: offset\n };\n const gridEnd = vscale ? {\n scale: vscale,\n range: 1,\n mult: sign,\n offset: offset\n } : extend(sz, {\n mult: sign,\n offset: offset\n });\n enter.x = update.x = ifX(orient, tickPos, gridStart);\n enter.y = update.y = ifY(orient, tickPos, gridStart);\n enter.x2 = update.x2 = ifY(orient, gridEnd);\n enter.y2 = update.y2 = ifX(orient, gridEnd);\n exit.x = ifX(orient, tickPos);\n exit.y = ifY(orient, tickPos);\n return guideMark({\n type: RuleMark,\n role: AxisGridRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction offsetValue(offset, sign) {\n if (sign === 1) ; else if (!isObject(offset)) {\n offset = isSignal(sign) ? {\n signal: `(${sign.signal}) * (${offset || 0})`\n } : sign * (offset || 0);\n } else {\n let entry = offset = extend({}, offset);\n while (entry.mult != null) {\n if (!isObject(entry.mult)) {\n entry.mult = isSignal(sign) // no offset if sign === 1\n ? {\n signal: `(${entry.mult}) * (${sign.signal})`\n } : entry.mult * sign;\n return offset;\n } else {\n entry = entry.mult = extend({}, entry.mult);\n }\n }\n entry.mult = sign;\n }\n return offset;\n}\n\nfunction axisTicks (spec, config, userEncode, dataRef, size, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n sign = getSign(orient, -1, 1);\n let enter, exit, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: exit = {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('tickColor'),\n strokeCap: _('tickCap'),\n strokeDash: _('tickDash'),\n strokeDashOffset: _('tickDashOffset'),\n strokeOpacity: _('tickOpacity'),\n strokeWidth: _('tickWidth')\n });\n const tickSize = encoder(size);\n tickSize.mult = sign;\n const tickPos = {\n scale: spec.scale,\n field: Value,\n band: band.band,\n extra: band.extra,\n offset: band.offset,\n round: _('tickRound')\n };\n update.y = enter.y = ifX(orient, zero, tickPos);\n update.y2 = enter.y2 = ifX(orient, tickSize);\n exit.x = ifX(orient, tickPos);\n update.x = enter.x = ifY(orient, zero, tickPos);\n update.x2 = enter.x2 = ifY(orient, tickSize);\n exit.y = ifY(orient, tickPos);\n return guideMark({\n type: RuleMark,\n role: AxisTickRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction flushExpr(scale, threshold, a, b, c) {\n return {\n signal: 'flush(range(\"' + scale + '\"), ' + 'scale(\"' + scale + '\", datum.value), ' + threshold + ',' + a + ',' + b + ',' + c + ')'\n };\n}\nfunction axisLabels (spec, config, userEncode, dataRef, size, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n scale = spec.scale,\n sign = getSign(orient, -1, 1),\n flush = deref(_('labelFlush')),\n flushOffset = deref(_('labelFlushOffset')),\n labelAlign = _('labelAlign'),\n labelBaseline = _('labelBaseline');\n let flushOn = flush === 0 || !!flush,\n update;\n const tickSize = encoder(size);\n tickSize.mult = sign;\n tickSize.offset = encoder(_('labelPadding') || 0);\n tickSize.offset.mult = sign;\n const tickPos = {\n scale: scale,\n field: Value,\n band: 0.5,\n offset: extendOffset(band.offset, _('labelOffset'))\n };\n const align = ifX(orient, flushOn ? flushExpr(scale, flush, '\"left\"', '\"right\"', '\"center\"') : {\n value: 'center'\n }, ifRight(orient, 'left', 'right'));\n const baseline = ifX(orient, ifTop(orient, 'bottom', 'top'), flushOn ? flushExpr(scale, flush, '\"top\"', '\"bottom\"', '\"middle\"') : {\n value: 'middle'\n });\n const offsetExpr = flushExpr(scale, flush, `-(${flushOffset})`, flushOffset, 0);\n flushOn = flushOn && flushOffset;\n const enter = {\n opacity: zero,\n x: ifX(orient, tickPos, tickSize),\n y: ifY(orient, tickPos, tickSize)\n };\n const encode = {\n enter: enter,\n update: update = {\n opacity: one,\n text: {\n field: Label\n },\n x: enter.x,\n y: enter.y,\n align,\n baseline\n },\n exit: {\n opacity: zero,\n x: enter.x,\n y: enter.y\n }\n };\n addEncoders(encode, {\n dx: !labelAlign && flushOn ? ifX(orient, offsetExpr) : null,\n dy: !labelBaseline && flushOn ? ifY(orient, offsetExpr) : null\n });\n addEncoders(encode, {\n angle: _('labelAngle'),\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontWeight: _('labelFontWeight'),\n fontStyle: _('labelFontStyle'),\n limit: _('labelLimit'),\n lineHeight: _('labelLineHeight')\n }, {\n align: labelAlign,\n baseline: labelBaseline\n });\n const bound = _('labelBound');\n let overlap = _('labelOverlap');\n\n // if overlap method or bound defined, request label overlap removal\n overlap = overlap || bound ? {\n separation: _('labelSeparation'),\n method: overlap,\n order: 'datum.index',\n bound: bound ? {\n scale,\n orient,\n tolerance: bound\n } : null\n } : undefined;\n if (update.align !== align) {\n update.align = patch(update.align, align);\n }\n if (update.baseline !== baseline) {\n update.baseline = patch(update.baseline, baseline);\n }\n return guideMark({\n type: TextMark,\n role: AxisLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: dataRef,\n encode,\n overlap\n }, userEncode);\n}\n\nfunction axisTitle (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n sign = getSign(orient, -1, 1);\n let enter, update;\n const encode = {\n enter: enter = {\n opacity: zero,\n anchor: encoder(_('titleAnchor', null)),\n align: {\n signal: alignExpr$1\n }\n },\n update: update = extend({}, enter, {\n opacity: one,\n text: encoder(spec.title)\n }),\n exit: {\n opacity: zero\n }\n };\n const titlePos = {\n signal: `lerp(range(\"${spec.scale}\"), ${anchorExpr(0, 1, 0.5)})`\n };\n update.x = ifX(orient, titlePos);\n update.y = ifY(orient, titlePos);\n enter.angle = ifX(orient, zero, mult(sign, 90));\n enter.baseline = ifX(orient, ifTop(orient, Bottom, Top), {\n value: Bottom\n });\n update.angle = enter.angle;\n update.baseline = enter.baseline;\n addEncoders(encode, {\n fill: _('titleColor'),\n fillOpacity: _('titleOpacity'),\n font: _('titleFont'),\n fontSize: _('titleFontSize'),\n fontStyle: _('titleFontStyle'),\n fontWeight: _('titleFontWeight'),\n limit: _('titleLimit'),\n lineHeight: _('titleLineHeight')\n }, {\n // require update\n align: _('titleAlign'),\n angle: _('titleAngle'),\n baseline: _('titleBaseline')\n });\n autoLayout(_, orient, encode, userEncode);\n encode.update.align = patch(encode.update.align, enter.align);\n encode.update.angle = patch(encode.update.angle, enter.angle);\n encode.update.baseline = patch(encode.update.baseline, enter.baseline);\n return guideMark({\n type: TextMark,\n role: AxisTitleRole,\n style: GuideTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction autoLayout(_, orient, encode, userEncode) {\n const auto = (value, dim) => value != null ? (encode.update[dim] = patch(encoder(value), encode.update[dim]), false) : !has(dim, userEncode) ? true : false;\n const autoY = auto(_('titleX'), 'x'),\n autoX = auto(_('titleY'), 'y');\n encode.enter.auto = autoX === autoY ? encoder(autoX) : ifX(orient, encoder(autoX), encoder(autoY));\n}\n\nfunction parseAxis (spec, scope) {\n const config = axisConfig(spec, scope),\n encode = spec.encode || {},\n axisEncode = encode.axis || {},\n name = axisEncode.name || undefined,\n interactive = axisEncode.interactive,\n style = axisEncode.style,\n _ = lookup(spec, config),\n band = tickBand(_);\n\n // single-element data source for axis group\n const datum = {\n scale: spec.scale,\n ticks: !!_('ticks'),\n labels: !!_('labels'),\n grid: !!_('grid'),\n domain: !!_('domain'),\n title: spec.title != null\n };\n const dataRef = ref(scope.add(Collect({}, [datum])));\n\n // data source for axis ticks\n const ticksRef = ref(scope.add(AxisTicks({\n scale: scope.scaleRef(spec.scale),\n extra: scope.property(band.extra),\n count: scope.objectProperty(spec.tickCount),\n values: scope.objectProperty(spec.values),\n minstep: scope.property(spec.tickMinStep),\n formatType: scope.property(spec.formatType),\n formatSpecifier: scope.property(spec.format)\n })));\n\n // generate axis marks\n const children = [];\n let size;\n\n // include axis gridlines if requested\n if (datum.grid) {\n children.push(axisGrid(spec, config, encode.grid, ticksRef, band));\n }\n\n // include axis ticks if requested\n if (datum.ticks) {\n size = _('tickSize');\n children.push(axisTicks(spec, config, encode.ticks, ticksRef, size, band));\n }\n\n // include axis labels if requested\n if (datum.labels) {\n size = datum.ticks ? size : 0;\n children.push(axisLabels(spec, config, encode.labels, ticksRef, size, band));\n }\n\n // include axis domain path if requested\n if (datum.domain) {\n children.push(axisDomain(spec, config, encode.domain, dataRef));\n }\n\n // include axis title if defined\n if (datum.title) {\n children.push(axisTitle(spec, config, encode.title, dataRef));\n }\n\n // parse axis specification\n return parseMark(guideGroup({\n role: AxisRole,\n from: dataRef,\n encode: extendEncode(buildAxisEncode(_, spec), axisEncode, Skip),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\nfunction buildAxisEncode(_, spec) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n offset: _('offset') || 0,\n position: value(spec.position, 0),\n titlePadding: _('titlePadding'),\n minExtent: _('minExtent'),\n maxExtent: _('maxExtent'),\n range: {\n signal: `abs(span(range(\"${spec.scale}\")))`\n },\n translate: _('translate'),\n // accessibility support\n format: spec.format,\n formatType: spec.formatType\n });\n return encode;\n}\n\nfunction parseScope (spec, scope, preprocessed) {\n const signals = array(spec.signals),\n scales = array(spec.scales);\n\n // parse signal definitions, if not already preprocessed\n if (!preprocessed) signals.forEach(_ => parseSignal(_, scope));\n\n // parse cartographic projection definitions\n array(spec.projections).forEach(_ => parseProjection(_, scope));\n\n // initialize scale references\n scales.forEach(_ => initScale(_, scope));\n\n // parse data sources\n array(spec.data).forEach(_ => parseData(_, scope));\n\n // parse scale definitions\n scales.forEach(_ => parseScale(_, scope));\n\n // parse signal updates\n (preprocessed || signals).forEach(_ => parseSignalUpdates(_, scope));\n\n // parse axis definitions\n array(spec.axes).forEach(_ => parseAxis(_, scope));\n\n // parse mark definitions\n array(spec.marks).forEach(_ => parseMark(_, scope));\n\n // parse legend definitions\n array(spec.legends).forEach(_ => parseLegend(_, scope));\n\n // parse title, if defined\n if (spec.title) parseTitle(spec.title, scope);\n\n // parse collected lambda (anonymous) expressions\n scope.parseLambdas();\n return scope;\n}\n\nconst rootEncode = spec => extendEncode({\n enter: {\n x: {\n value: 0\n },\n y: {\n value: 0\n }\n },\n update: {\n width: {\n signal: 'width'\n },\n height: {\n signal: 'height'\n }\n }\n}, spec);\nfunction parseView(spec, scope) {\n const config = scope.config;\n\n // add scenegraph root\n const root = ref(scope.root = scope.add(operator()));\n\n // parse top-level signal definitions\n const signals = collectSignals(spec, config);\n signals.forEach(_ => parseSignal(_, scope));\n\n // assign description, event, legend, and locale configuration\n scope.description = spec.description || config.description;\n scope.eventConfig = config.events;\n scope.legends = scope.objectProperty(config.legend && config.legend.layout);\n scope.locale = config.locale;\n\n // store root group item\n const input = scope.add(Collect());\n\n // encode root group item\n const encode = scope.add(Encode(parseEncode(rootEncode(spec.encode), GroupMark, FrameRole, spec.style, scope, {\n pulse: ref(input)\n })));\n\n // perform view layout\n const parent = scope.add(ViewLayout({\n layout: scope.objectProperty(spec.layout),\n legends: scope.legends,\n autosize: scope.signalRef('autosize'),\n mark: root,\n pulse: ref(encode)\n }));\n scope.operators.pop();\n\n // parse remainder of specification\n scope.pushState(ref(encode), ref(parent), null);\n parseScope(spec, scope, signals);\n scope.operators.push(parent);\n\n // bound / render / sieve root item\n let op = scope.add(Bound({\n mark: root,\n pulse: ref(parent)\n }));\n op = scope.add(Render({\n pulse: ref(op)\n }));\n op = scope.add(Sieve({\n pulse: ref(op)\n }));\n\n // track metadata for root item\n scope.addData('root', new DataScope(scope, input, input, op));\n return scope;\n}\nfunction signalObject(name, value) {\n return value && value.signal ? {\n name,\n update: value.signal\n } : {\n name,\n value\n };\n}\n\n/**\n * Collect top-level signals, merging values as needed. Signals\n * defined in the config signals arrays are added only if that\n * signal is not explicitly defined in the specification.\n * Built-in signals (autosize, background, padding, width, height)\n * receive special treatment. They are initialized using the\n * top-level spec property, or, if undefined in the spec, using\n * the corresponding top-level config property. If this property\n * is a signal reference object, the signal expression maps to the\n * signal 'update' property. If the spec's top-level signal array\n * contains an entry that matches a built-in signal, that entry\n * will be merged with the built-in specification, potentially\n * overwriting existing 'value' or 'update' properties.\n */\nfunction collectSignals(spec, config) {\n const _ = name => value(spec[name], config[name]),\n signals = [signalObject('background', _('background')), signalObject('autosize', parseAutosize(_('autosize'))), signalObject('padding', parsePadding(_('padding'))), signalObject('width', _('width') || 0), signalObject('height', _('height') || 0)],\n pre = signals.reduce((p, s) => (p[s.name] = s, p), {}),\n map = {};\n\n // add spec signal array\n array(spec.signals).forEach(s => {\n if (hasOwnProperty(pre, s.name)) {\n // merge if built-in signal\n s = extend(pre[s.name], s);\n } else {\n // otherwise add to signal list\n signals.push(s);\n }\n map[s.name] = s;\n });\n\n // add config signal array\n array(config.signals).forEach(s => {\n if (!hasOwnProperty(map, s.name) && !hasOwnProperty(pre, s.name)) {\n // add to signal list if not already defined\n signals.push(s);\n }\n });\n return signals;\n}\n\nfunction Scope(config, options) {\n this.config = config || {};\n this.options = options || {};\n this.bindings = [];\n this.field = {};\n this.signals = {};\n this.lambdas = {};\n this.scales = {};\n this.events = {};\n this.data = {};\n this.streams = [];\n this.updates = [];\n this.operators = [];\n this.eventConfig = null;\n this.locale = null;\n this._id = 0;\n this._subid = 0;\n this._nextsub = [0];\n this._parent = [];\n this._encode = [];\n this._lookup = [];\n this._markpath = [];\n}\nfunction Subscope(scope) {\n this.config = scope.config;\n this.options = scope.options;\n this.legends = scope.legends;\n this.field = Object.create(scope.field);\n this.signals = Object.create(scope.signals);\n this.lambdas = Object.create(scope.lambdas);\n this.scales = Object.create(scope.scales);\n this.events = Object.create(scope.events);\n this.data = Object.create(scope.data);\n this.streams = [];\n this.updates = [];\n this.operators = [];\n this._id = 0;\n this._subid = ++scope._nextsub[0];\n this._nextsub = scope._nextsub;\n this._parent = scope._parent.slice();\n this._encode = scope._encode.slice();\n this._lookup = scope._lookup.slice();\n this._markpath = scope._markpath;\n}\nScope.prototype = Subscope.prototype = {\n parse(spec) {\n return parseScope(spec, this);\n },\n fork() {\n return new Subscope(this);\n },\n isSubscope() {\n return this._subid > 0;\n },\n toRuntime() {\n this.finish();\n return {\n description: this.description,\n operators: this.operators,\n streams: this.streams,\n updates: this.updates,\n bindings: this.bindings,\n eventConfig: this.eventConfig,\n locale: this.locale\n };\n },\n id() {\n return (this._subid ? this._subid + ':' : 0) + this._id++;\n },\n add(op) {\n this.operators.push(op);\n op.id = this.id();\n // if pre-registration references exist, resolve them now\n if (op.refs) {\n op.refs.forEach(ref => {\n ref.$ref = op.id;\n });\n op.refs = null;\n }\n return op;\n },\n proxy(op) {\n const vref = op instanceof Entry ? ref(op) : op;\n return this.add(Proxy({\n value: vref\n }));\n },\n addStream(stream) {\n this.streams.push(stream);\n stream.id = this.id();\n return stream;\n },\n addUpdate(update) {\n this.updates.push(update);\n return update;\n },\n // Apply metadata\n finish() {\n let name, ds;\n\n // annotate root\n if (this.root) this.root.root = true;\n\n // annotate signals\n for (name in this.signals) {\n this.signals[name].signal = name;\n }\n\n // annotate scales\n for (name in this.scales) {\n this.scales[name].scale = name;\n }\n\n // annotate data sets\n function annotate(op, name, type) {\n let data, list;\n if (op) {\n data = op.data || (op.data = {});\n list = data[name] || (data[name] = []);\n list.push(type);\n }\n }\n for (name in this.data) {\n ds = this.data[name];\n annotate(ds.input, name, 'input');\n annotate(ds.output, name, 'output');\n annotate(ds.values, name, 'values');\n for (const field in ds.index) {\n annotate(ds.index[field], name, 'index:' + field);\n }\n }\n return this;\n },\n // ----\n\n pushState(encode, parent, lookup) {\n this._encode.push(ref(this.add(Sieve({\n pulse: encode\n }))));\n this._parent.push(parent);\n this._lookup.push(lookup ? ref(this.proxy(lookup)) : null);\n this._markpath.push(-1);\n },\n popState() {\n this._encode.pop();\n this._parent.pop();\n this._lookup.pop();\n this._markpath.pop();\n },\n parent() {\n return peek(this._parent);\n },\n encode() {\n return peek(this._encode);\n },\n lookup() {\n return peek(this._lookup);\n },\n markpath() {\n const p = this._markpath;\n return ++p[p.length - 1];\n },\n // ----\n\n fieldRef(field, name) {\n if (isString(field)) return fieldRef$1(field, name);\n if (!field.signal) {\n error('Unsupported field reference: ' + stringValue(field));\n }\n const s = field.signal;\n let f = this.field[s];\n if (!f) {\n const params = {\n name: this.signalRef(s)\n };\n if (name) params.as = name;\n this.field[s] = f = ref(this.add(Field(params)));\n }\n return f;\n },\n compareRef(cmp) {\n let signal = false;\n const check = _ => isSignal(_) ? (signal = true, this.signalRef(_.signal)) : isExpr$1(_) ? (signal = true, this.exprRef(_.expr)) : _;\n const fields = array(cmp.field).map(check),\n orders = array(cmp.order).map(check);\n return signal ? ref(this.add(Compare({\n fields: fields,\n orders: orders\n }))) : compareRef(fields, orders);\n },\n keyRef(fields, flat) {\n let signal = false;\n const check = _ => isSignal(_) ? (signal = true, ref(sig[_.signal])) : _;\n const sig = this.signals;\n fields = array(fields).map(check);\n return signal ? ref(this.add(Key({\n fields: fields,\n flat: flat\n }))) : keyRef(fields, flat);\n },\n sortRef(sort) {\n if (!sort) return sort;\n\n // including id ensures stable sorting\n const a = aggrField(sort.op, sort.field),\n o = sort.order || Ascending;\n return o.signal ? ref(this.add(Compare({\n fields: a,\n orders: this.signalRef(o.signal)\n }))) : compareRef(a, o);\n },\n // ----\n\n event(source, type) {\n const key = source + ':' + type;\n if (!this.events[key]) {\n const id = this.id();\n this.streams.push({\n id: id,\n source: source,\n type: type\n });\n this.events[key] = id;\n }\n return this.events[key];\n },\n // ----\n\n hasOwnSignal(name) {\n return hasOwnProperty(this.signals, name);\n },\n addSignal(name, value) {\n if (this.hasOwnSignal(name)) {\n error('Duplicate signal name: ' + stringValue(name));\n }\n const op = value instanceof Entry ? value : this.add(operator(value));\n return this.signals[name] = op;\n },\n getSignal(name) {\n if (!this.signals[name]) {\n error('Unrecognized signal name: ' + stringValue(name));\n }\n return this.signals[name];\n },\n signalRef(s) {\n if (this.signals[s]) {\n return ref(this.signals[s]);\n } else if (!hasOwnProperty(this.lambdas, s)) {\n this.lambdas[s] = this.add(operator(null));\n }\n return ref(this.lambdas[s]);\n },\n parseLambdas() {\n const code = Object.keys(this.lambdas);\n for (let i = 0, n = code.length; i < n; ++i) {\n const s = code[i],\n e = parseExpression(s, this),\n op = this.lambdas[s];\n op.params = e.$params;\n op.update = e.$expr;\n }\n },\n property(spec) {\n return spec && spec.signal ? this.signalRef(spec.signal) : spec;\n },\n objectProperty(spec) {\n return !spec || !isObject(spec) ? spec : this.signalRef(spec.signal || propertyLambda(spec));\n },\n exprRef(code, name) {\n const params = {\n expr: parseExpression(code, this)\n };\n if (name) params.expr.$name = name;\n return ref(this.add(Expression(params)));\n },\n addBinding(name, bind) {\n if (!this.bindings) {\n error('Nested signals do not support binding: ' + stringValue(name));\n }\n this.bindings.push(extend({\n signal: name\n }, bind));\n },\n // ----\n\n addScaleProj(name, transform) {\n if (hasOwnProperty(this.scales, name)) {\n error('Duplicate scale or projection name: ' + stringValue(name));\n }\n this.scales[name] = this.add(transform);\n },\n addScale(name, params) {\n this.addScaleProj(name, Scale(params));\n },\n addProjection(name, params) {\n this.addScaleProj(name, Projection(params));\n },\n getScale(name) {\n if (!this.scales[name]) {\n error('Unrecognized scale name: ' + stringValue(name));\n }\n return this.scales[name];\n },\n scaleRef(name) {\n return ref(this.getScale(name));\n },\n scaleType(name) {\n return this.getScale(name).params.type;\n },\n projectionRef(name) {\n return this.scaleRef(name);\n },\n projectionType(name) {\n return this.scaleType(name);\n },\n // ----\n\n addData(name, dataScope) {\n if (hasOwnProperty(this.data, name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n return this.data[name] = dataScope;\n },\n getData(name) {\n if (!this.data[name]) {\n error('Undefined data set name: ' + stringValue(name));\n }\n return this.data[name];\n },\n addDataPipeline(name, entries) {\n if (hasOwnProperty(this.data, name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n return this.addData(name, DataScope.fromEntries(this, entries));\n }\n};\nfunction propertyLambda(spec) {\n return (isArray(spec) ? arrayLambda : objectLambda)(spec);\n}\nfunction arrayLambda(array) {\n const n = array.length;\n let code = '[';\n for (let i = 0; i < n; ++i) {\n const value = array[i];\n code += (i > 0 ? ',' : '') + (isObject(value) ? value.signal || propertyLambda(value) : stringValue(value));\n }\n return code + ']';\n}\nfunction objectLambda(obj) {\n let code = '{',\n i = 0,\n key,\n value;\n for (key in obj) {\n value = obj[key];\n code += (++i > 1 ? ',' : '') + stringValue(key) + ':' + (isObject(value) ? value.signal || propertyLambda(value) : stringValue(value));\n }\n return code + '}';\n}\n\n/**\n * Standard configuration defaults for Vega specification parsing.\n * Users can provide their own (sub-)set of these default values\n * by passing in a config object to the top-level parse method.\n */\nfunction defaults () {\n const defaultFont = 'sans-serif',\n defaultSymbolSize = 30,\n defaultStrokeWidth = 2,\n defaultColor = '#4c78a8',\n black = '#000',\n gray = '#888',\n lightGray = '#ddd';\n return {\n // default visualization description\n description: 'Vega visualization',\n // default padding around visualization\n padding: 0,\n // default for automatic sizing; options: 'none', 'pad', 'fit'\n // or provide an object (e.g., {'type': 'pad', 'resize': true})\n autosize: 'pad',\n // default view background color\n // covers the entire view component\n background: null,\n // default event handling configuration\n // preventDefault for view-sourced event types except 'wheel'\n events: {\n defaults: {\n allow: ['wheel']\n }\n },\n // defaults for top-level group marks\n // accepts mark properties (fill, stroke, etc)\n // covers the data rectangle within group width/height\n group: null,\n // defaults for basic mark types\n // each subset accepts mark properties (fill, stroke, etc)\n mark: null,\n arc: {\n fill: defaultColor\n },\n area: {\n fill: defaultColor\n },\n image: null,\n line: {\n stroke: defaultColor,\n strokeWidth: defaultStrokeWidth\n },\n path: {\n stroke: defaultColor\n },\n rect: {\n fill: defaultColor\n },\n rule: {\n stroke: black\n },\n shape: {\n stroke: defaultColor\n },\n symbol: {\n fill: defaultColor,\n size: 64\n },\n text: {\n fill: black,\n font: defaultFont,\n fontSize: 11\n },\n trail: {\n fill: defaultColor,\n size: defaultStrokeWidth\n },\n // style definitions\n style: {\n // axis & legend labels\n 'guide-label': {\n fill: black,\n font: defaultFont,\n fontSize: 10\n },\n // axis & legend titles\n 'guide-title': {\n fill: black,\n font: defaultFont,\n fontSize: 11,\n fontWeight: 'bold'\n },\n // headers, including chart title\n 'group-title': {\n fill: black,\n font: defaultFont,\n fontSize: 13,\n fontWeight: 'bold'\n },\n // chart subtitle\n 'group-subtitle': {\n fill: black,\n font: defaultFont,\n fontSize: 12\n },\n // defaults for styled point marks in Vega-Lite\n point: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'circle'\n },\n circle: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth\n },\n square: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'square'\n },\n // defaults for styled group marks in Vega-Lite\n cell: {\n fill: 'transparent',\n stroke: lightGray\n },\n view: {\n fill: 'transparent'\n }\n },\n // defaults for title\n title: {\n orient: 'top',\n anchor: 'middle',\n offset: 4,\n subtitlePadding: 3\n },\n // defaults for axes\n axis: {\n minExtent: 0,\n maxExtent: 200,\n bandPosition: 0.5,\n domain: true,\n domainWidth: 1,\n domainColor: gray,\n grid: false,\n gridWidth: 1,\n gridColor: lightGray,\n labels: true,\n labelAngle: 0,\n labelLimit: 180,\n labelOffset: 0,\n labelPadding: 2,\n ticks: true,\n tickColor: gray,\n tickOffset: 0,\n tickRound: true,\n tickSize: 5,\n tickWidth: 1,\n titlePadding: 4\n },\n // correction for centering bias\n axisBand: {\n tickOffset: -0.5\n },\n // defaults for cartographic projection\n projection: {\n type: 'mercator'\n },\n // defaults for legends\n legend: {\n orient: 'right',\n padding: 0,\n gridAlign: 'each',\n columnPadding: 10,\n rowPadding: 2,\n symbolDirection: 'vertical',\n gradientDirection: 'vertical',\n gradientLength: 200,\n gradientThickness: 16,\n gradientStrokeColor: lightGray,\n gradientStrokeWidth: 0,\n gradientLabelOffset: 2,\n labelAlign: 'left',\n labelBaseline: 'middle',\n labelLimit: 160,\n labelOffset: 4,\n labelOverlap: true,\n symbolLimit: 30,\n symbolType: 'circle',\n symbolSize: 100,\n symbolOffset: 0,\n symbolStrokeWidth: 1.5,\n symbolBaseFillColor: 'transparent',\n symbolBaseStrokeColor: gray,\n titleLimit: 180,\n titleOrient: 'top',\n titlePadding: 5,\n layout: {\n offset: 18,\n direction: 'horizontal',\n left: {\n direction: 'vertical'\n },\n right: {\n direction: 'vertical'\n }\n }\n },\n // defaults for scale ranges\n range: {\n category: {\n scheme: 'tableau10'\n },\n ordinal: {\n scheme: 'blues'\n },\n heatmap: {\n scheme: 'yellowgreenblue'\n },\n ramp: {\n scheme: 'blues'\n },\n diverging: {\n scheme: 'blueorange',\n extent: [1, 0]\n },\n symbol: ['circle', 'square', 'triangle-up', 'cross', 'diamond', 'triangle-right', 'triangle-down', 'triangle-left']\n }\n };\n}\n\nfunction parse (spec, config, options) {\n if (!isObject(spec)) {\n error('Input Vega specification must be an object.');\n }\n config = mergeConfig(defaults(), config, spec.config);\n return parseView(spec, new Scope(config, options)).toRuntime();\n}\n\nexport { AxisDomainRole, AxisGridRole, AxisLabelRole, AxisRole, AxisTickRole, AxisTitleRole, DataScope, FrameRole, LegendEntryRole, LegendLabelRole, LegendRole, LegendSymbolRole, LegendTitleRole, MarkRole, Scope, ScopeRole, defaults as config, parse, parseSignal as signal, parseSignalUpdates as signalUpdates, parseStream as stream };\n","// -- Transforms -----\n\nimport {extend} from 'vega-util';\nimport {transforms} from 'vega-dataflow';\nimport * as tx from 'vega-transforms';\nimport * as vtx from 'vega-view-transforms';\nimport * as encode from 'vega-encode';\nimport * as geo from 'vega-geo';\nimport * as force from 'vega-force';\nimport * as tree from 'vega-hierarchy';\nimport * as label from 'vega-label';\nimport * as reg from 'vega-regression';\nimport * as voronoi from 'vega-voronoi';\nimport * as wordcloud from 'vega-wordcloud';\nimport * as xf from 'vega-crossfilter';\nextend(\n transforms,\n tx, vtx, encode, geo, force, label, tree, reg, voronoi, wordcloud, xf\n);\n\n\n// -- Exports -----\n\nexport {version} from './package.json';\n\nexport * from 'vega-statistics';\n\nexport * from 'vega-time';\n\nexport * from 'vega-util';\n\nexport * from 'vega-loader';\n\nexport * from 'vega-scenegraph';\n\nexport {\n Dataflow,\n EventStream,\n Parameters,\n Pulse,\n MultiPulse,\n Operator,\n Transform,\n changeset,\n ingest,\n isTuple,\n definition,\n transform,\n transforms,\n tupleid\n} from 'vega-dataflow';\n\nexport {\n scale,\n scheme,\n interpolate,\n interpolateColors,\n interpolateRange,\n quantizeInterpolator\n} from 'vega-scale';\n\nexport {\n projection\n} from 'vega-projection';\n\nexport {\n View\n} from 'vega-view';\n\nexport {\n numberFormatDefaultLocale as formatLocale,\n timeFormatDefaultLocale as timeFormatLocale,\n locale,\n defaultLocale,\n resetDefaultLocale\n} from 'vega-format';\n\nexport {\n expressionFunction\n} from 'vega-functions';\n\nexport {\n parse\n} from 'vega-parser';\n\nexport {\n context as runtimeContext\n} from 'vega-runtime';\n\nexport {\n codegenExpression,\n parseExpression\n} from 'vega-expression';\n\nexport {\n parseSelector\n} from 'vega-event-selector';\n"],"names":["accessor","fn","fields","name","fname","accessorName","accessorFields","getter","path","length","get1","getN","field","obj","len","i","error","message","Error","splitAccessPath","p","n","j","c","q","b","s","push","substring","opt","get","id","identity","_","zero","one","truthy","falsy","log$1","method","level","input","args","concat","slice","call","console","apply","None","Error$1","Warn","Info","Debug","logger","handler","arguments","undefined","this","warn","info","debug","isArray","Array","isObject","Object","isLegalKey","key","mergeConfig","_len","configs","_key","reduce","out","source","signals","mergeNamed","r","layout","writeConfig","output","value","recurse","k","o","a","map","add","forEach","peek","array","toNumber","exp","sign","x","Math","log","symlog","log1p","abs","symexp","expm1","pow","exponent","pan","domain","delta","lift","ground","d0","d1","dd","panLinear","panLog","panPow","panSymlog","constant","zoom","anchor","scale","da","zoomLinear","zoomLog","zoomPow","zoomSymlog","quarter","date","Date","getMonth","utcquarter","getUTCMonth","clampRange","range","min","max","span","lo","hi","isFunction","DESCENDING","compare","orders","ord","fmap","gen","comparator","f","keys","ascending","u","v","compare1","compareN","order","debounce","delay","tid","e","clearTimeout","setTimeout","extend","extent","extentIndex","hop","prototype","hasOwnProperty","has","object","property","NULL","fastmap","test","has$1","size","empty","set","delete","clear","clean","next","flush","threshold","left","right","center","t","l","inherits","child","parent","members","proto","create","defineProperty","writable","enumerable","configurable","inrange","r0","r1","isBoolean","isDate","toString","isIterable","Symbol","iterator","isNumber","isRegExp","isString","flat","replace","lerp","frac","DEFAULT_MAX_SIZE","lruCache","maxsize","curr","prev","update","merge","array0","array1","n0","n1","merged","constructor","i0","i1","repeat","str","reps","pad","padchar","align","ceil","$","JSON","stringify","toBoolean","defaultParser","parse","toDate","parser","toSet","truncate","ellipsis","visitArray","filter","visitor","YEAR","QUARTER","MONTH","WEEK","DATE","DAY","DAYOFYEAR","HOURS","MINUTES","SECONDS","MILLISECONDS","TIME_UNITS","UNITS","timeUnits","units","m","unit","sort","defaultSpecifiers","timeUnitSpecifier","specifiers","end","fmt","start","join","trim","t0","localYear","y","setFullYear","setMonth","setDate","setHours","dayofyear","d","localDayOfYear","week","localWeekNum","timeDay","count","getFullYear","timeWeek","localFirst","getDay","localDate","H","M","S","L","utcdayofyear","utcDayOfYear","utcweek","utcWeekNum","UTC","getUTCFullYear","utcDay","utcWeek","utcFirst","setTime","getUTCDay","utcDate","setUTCFullYear","floor","step","inv","newDate","phase","getUnit","year","weekday","day","firstDay","localGet","getDate","getHours","getMinutes","getSeconds","getMilliseconds","localInv","w","timeFloor","utcGet","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","utcInv","utcFloor","timeIntervals","timeYear","timeMonth","every","timeHour","timeMinute","timeSecond","timeMillisecond","utcIntervals","utcYear","utcMonth","utcHour","utcMinute","utcSecond","utcMillisecond","timeInterval","utcInterval","offset","ival","timeOffset","utcOffset","sequence","stop","timeSequence","utcSequence","durationSecond","durationMinute","durationHour","durationDay","durationMonth","durationYear","Milli","Seconds","Minutes","Hours","Day","Month","Year","intervals","bin","ext","maxbins","target","bisector","tickStep","memoize","cache","spec","numberLocale","locale","format","formatPrefix","formatFloat","formatSpecifier","precision","type","numberFormat","decimalChar","dec","indexOf","idx","lastIndexOf","charCodeAt","rightmostDigit","formatSpan","specifier","isNaN","precisionPrefix","precisionRound","precisionFixed","defaultNumberLocale","defaultTimeLocale","resetNumberFormatDefaultLocale","numberFormatLocale","definition","formatLocale","numberFormatDefaultLocale","timeMultiFormat","interval","second","minute","hour","month","timeLocale","timeFormat","utcFormat","timeParse","utcParse","resetTimeFormatDefaultLocale","timeFormatLocale","timeFormatLocale$1","timeFormatDefaultLocale","createLocale","number","time","numberSpec","timeSpec","defaultLocale","protocol_re","allowed_re","whitespace_re","fileProtocol","async","load","uri","options","sanitize","url","href","localFile","file","http","fileAccess","result","isFile","loadFile","base","isAllowed","stringValue","hasProtocol","baseURL","startsWith","endsWith","mode","defaultProtocol","rel","context","crossOrigin","fileLoader","fs","filename","Promise","accept","reject","readFile","data","fileReject","httpLoader","fetch","response","ok","text","status","statusText","httpReject","isValid","Number","typeParsers","boolean","integer","string","unknown","typeTests","isInteger","typeList","inferType","values","inferTypes","types","delimitedFormat","delimiter","delim","dsv","responseType","header","dsvFormat","json","prop","Buffer","isBuffer","copy","parseJSON","filters","interior","exterior","topojson","feature","mesh","objects","features","csv","tsv","formats","reader","read","schema","timeParser","utcParser","datum","columns","parsers","parts","pattern","split","loader","loaderFactory","UniqueList","idFunc","list","ids","remove","splice","asyncCallback","df","callback","err","TUPLE_ID_KEY","TUPLE_ID","isTuple","tupleid","setid","ingest$1","derive","rederive","stableCompare","cmp","isChangeSet","changeset","rem","mod","remp","modp","reflow","insert","modify","tuple","encode","pulse","tuples","cur","modifies","CACHE","Parameters","index","force","modified","OP_ID","NO_PARAMS","Operator","init","params","react","stamp","rank","qrank","flags","_update","parameters","flag","bit","state","targets","_targets","skip","initonly","argval","_argval","argops","_argops","deps","op","marshall","item","detach","evaluate","StopPropagation","run","rv","STREAM_ID","EventStream","receive","_filter","_apply","stream","consume","_consume","evt","val","trg","preventDefault","stopPropagation","throttle","pause","now","dataflow","between","active","SKIP","onStream","func","touch","onOperator","updater","connect","Pulse","materialize","visit","addFilter","MultiPulse","pulses","hash","changed","ADD","REM","MOD","changes","reentrant","ADD_REM","ADD_MOD","ALL","REFLOW","SOURCE","NO_SOURCE","NO_FIELDS","fork","clone","addAll","src","addF","remF","modF","srcF","cleans","runAfter","nomod","some","sum","NO_OPT","Heap","nodes","siftdown","pop","last","ridx","cidx","siftup","pidx","Dataflow","logLevel","_clock","_rank","_locale","_loader","_touched","_input","_pulse","_heap","_postrun","logMethod","_log","Transform","cleanThreshold","shift","sources","targetRank","rerank","queue","_enqueue","ingest","preload","pending","_pending","requests","done","loadPending","res","request","send","document","querySelectorAll","addEventListener","on","prerun","postrun","_getPulse","then","pr","priority","all","cb","runAsync","_running","enqueue","singlePulse","transform","transforms","Definition","toLowerCase","numbers","valueof","quantiles","Float64Array","from","quantileSorted","quartiles","estimateBandwidth","deviation","h","maxb","logb","div","divide","minstep","steps","round","eps","nice","bootstrapCI","samples","alpha","mu","random","quantile","dotbin","smooth","thresh","smoothing","exports","SQRT2PI","sqrt","PI","SQRT2","nextSample","NaN","sampleNormal","mean","stdev","rds","densityNormal","z","cumulativeNormal","Z","cd","quantileNormal","isFinite","Infinity","erfinv","gaussian","sigma","dist","sample","pdf","cdf","icdf","kde","support","bandwidth","kernel","sampleLogNormal","densityLogNormal","cumulativeLogNormal","quantileLogNormal","lognormal","mixture","dists","weights","normalize","distributions","sampleUniform","densityUniform","cumulativeUniform","quantileUniform","uniform","coef","predict","rSquared","ols","uX","uY","uXY","uX2","slope","points","X","Y","xv","yv","ux","uy","visitPoints","SSE","SST","dx","dy","sse","sst","linear","XY","X2","ly","xy","YL","XYL","X2Y","c0","c1","YS","lx","quad","x2","X3","X4","X2X2","poly","lhs","rhs","matrix","gaussianElimination","uncenter","maxiters","epsilon","loess","bw","yhat","residuals","robustWeights","fill","iter","edge","W","denom","xk","yk","tricube","xkw","updateInterval","medianResidual","median","arg","cnt","MIN_RADIANS","sampleCurve","minSteps","maxSteps","point","minX","maxX","p0","p1","sx","sy","ymin","ymax","scaleY","pm","angleDelta","a0","atan2","a1","groupkey","String","measureName","as","noop","base_op","AggregateOps","cell","store","num","__count__","missing","valid","product","mean_d","average","req","variance","dev","variancep","stdevp","stderr","distinct","ci0","ci1","q2","q1","q3","argmin","argmax","ValidAggregateOps","createMeasure","compareIndex","_ops","_out","compileMeasures","agg","ops","getreqs","resolve","ctr","TupleStore","reset","measure","prototype$1","Aggregate","_adds","_mods","_alen","_mlen","_drop","_cross","_dims","_dnames","_measures","_countOnly","_counts","_prev","_inputs","_outputs","_add","_rem","_ext","_get","_q","quartile","ci","_ci","Aggregate$1","metadata","generates","null","default","aggr","drop","cross","dims","vals","collect","cells","generate","inputs","outputs","inputMap","inputVisit","groupby","dname","cellkey","mname","outname","newcell","newtuple","measures","names","celltuple","counts","adds","mods","Bin","SortedList","resort","Collect","Compare","update$5","CountPattern","Cross","required","band","bins","_bins","b0","b1","Collect$1","root","process","tokens","tcase","match","toUpperCase","tokenize","case","_parameterCheck","_match","_stop","_finish","RegExp","stopwords","_tuples","Distributions","randomKDE","randomMixture","normal","randomNormal","randomLogNormal","randomUniform","DISTRIBUTIONS","FUNCTION","FIELD","def","Density","function","fieldNames","partition$1","groups","g","distribution","minsteps","maxsteps","DotBin","Expression","update$4","expr","Extent","Subflow","Facet","_keys","Field","update$3","Filter","Flatten","Fold","Formula","Generate","autostep","detachSubflow","activate","flow","subflow","flows","sf","_group","detached","initTargets","act","rekey","group","k0","k1","isMod","revisit","arrays","maxlen","fnames","generator","Methods","Empty","Impute","JoinAggregate","KDE","Key","update$2","Load","Lookup","MultiExtent","update$1","extents","MultiValues","Params","Pivot","PreFacet","Project","Proxy","Quantile","gVals","kVal","impute","getValue","getField","fName","kName","gNames","keyvals","gKey","kMap","gMap","partition","_impute","cumulative","density","defaultValue","_transform","limit","pivotKeys","bind","aggregateParams","project","lut","dt","Quantile$1","Relay","Sample","Sequence","Sieve","TimeUnit","probs","cap","OUTPUT","TupleIndex","Values","utc","timezone","_floor","u0","u1","timeBin","tunits","WindowOps","row_number","dense_rank","drank","percent_rank","cume_dist","cume","ntile","lag","lead","first_value","last_value","nth_value","nth","prev_value","next_value","find","ValidWindowOps","WindowState","windows","countOnly","visitInputs","param","WindowOp","Window","processPartition","ignorePeers","frame","setWindow","adjustRange","bisect","wind","domCanvas","createElement","getContext","width","height","domImage","Image","bandSpace","paddingInner","paddingOuter","space","Linear","Log","Pow","Sqrt","Symlog","Time","Sequential","Diverging","Quantize","Threshold","Ordinal","Point","Band","BinOrdinal","Continuous","Discrete","Discretizing","Interpolating","Temporal","scaleOrdinal","ordinalRange","range$1","rescale","reverse","rangeRound","padding","invertRange","bisectRight","invert","pointish","scales","Map","VEGA_SCALE","registerScale","invertExtent","invertRangeExtent","isValidScaleType","hasType","isContinuous","isDiscrete","isDiscretizing","isLogarithmic","isInterpolating","isQuantile","scaleIdentity","scale$4","scaleLinear","scaleLog","scalePow","scaleSqrt","scaleSymlog","scaleTime","scaleUtc","scaleSequential","scaleSequentialLog","scaleSequentialPow","scaleSequentialSqrt","scaleSequentialSymlog","scaleDiverging","scaleDivergingLog","scaleDivergingPow","scaleDivergingSqrt","scaleDivergingSymlog","scaleQuantile","scaleQuantize","scaleThreshold","scaleBinOrdinal","tickFormat","tickFormat$1","scaleProps","interpolateRange","interpolator","interpolateColors","colors","gamma","$$1","piecewise","interpolate","quantizeInterpolator","scaleFraction","scale$1","interp","palette","scheme","schemes","category10","category20","category20b","category20c","tableau10","tableau20","accent","dark2","paired","pastel1","pastel2","set1","set2","set3","blues","greens","greys","oranges","purples","reds","blueGreen","bluePurple","greenBlue","orangeRed","purpleBlue","purpleBlueGreen","purpleRed","redPurple","yellowGreen","yellowOrangeBrown","yellowOrangeRed","blueOrange","brownBlueGreen","purpleGreen","purpleOrange","redBlue","redGrey","yellowGreenBlue","redYellowBlue","redYellowGreen","pinkYellowGreen","spectral","viridis","magma","inferno","plasma","cividis","rainbow","sinebow","turbo","browns","tealBlues","teals","warmGreys","goldGreen","goldOrange","goldRed","lightGreyRed","lightGreyTeal","lightMulti","lightOrange","lightTealBlue","darkBlue","darkGold","darkGreen","darkMulti","darkRed","SymbolLegend","DiscreteLegend","defaultFormatter","descending","tickCount","minStep","validTicks","ticks","endpoints","tickValues","formatType","noSkip","varfmt","tickLog","symbols","labelValues","binValues","thresholds","thresholdValues","isDiscreteRange","labelFormat","thresholdFormat","formatRange","formatDiscrete","formatPoint","formatValue","dflt","isTemporal","domainCaption","gradient_id","patternPrefix","isGradient","gradient","gradientRef","defs","prefix","x1","y1","y2","r2","Gradient","stops","color","lookup","basis","curve","curveBasis","curveBasisClosed","curveBasisOpen","bundle","curveBundle","tension","cardinal","curveCardinal","curveCardinalOpen","curveCardinalClosed","curveCatmullRom","curveCatmullRomClosed","curveCatmullRomOpen","curveLinear","curveLinearClosed","monotone","horizontal","curveMonotoneY","vertical","curveMonotoneX","natural","curveNatural","curveStep","curveStepAfter","curveStepBefore","curves","orientation","entry","paramCounts","commandPattern","numberPattern","spacePattern","flagPattern","commands","cmd","paramCount","segment","ws","parseParams","DegToRad","Epsilon","HalfPi","Tau","HalfSqrt3","segmentCache","bezierCache","bezier","cx","cy","th0","th1","rx","ry","sin_th","cos_th","a00","a01","a10","a11","cos_th0","cos","sin_th0","sin","cos_th1","sin_th1","th_half","sin_th_h2","x3","y3","temp","current","sX","sY","pathRender","tempX","tempY","tempControlX","tempControlY","previous","controlX","controlY","anchorX","anchorY","beginPath","lineTo","moveTo","bezierCurveTo","quadraticCurveTo","drawArc","closePath","coords","seg","large","sweep","rotateX","ox","oy","th","px","py","pl","x0","y0","sfactor_sq","sfactor","xc","yc","th_arc","segs","th2","th3","segments","bez","Tan30","builtins","circle","draw","arc","diamond","square","rect","arrow","wedge","triangle","stroke","custom","parsed","customSymbol","C","rectangleX","rectangleY","rectangleWidth","rectangleHeight","clamp","vg_rect","crTL","crTR","crBL","crBR","rectangle","buffer","tl","tr","bl","br","path$3","cornerRadius","vg_trail","defined","ready","w2","ud","hypot","trail","defined0","value$1","arcShape","arc$2","startAngle","endAngle","padAngle","innerRadius","outerRadius","areavShape","area$2","area","areahShape","lineShape","line$2","rectShape","cornerRadiusTopLeft","cornerRadiusTopRight","cornerRadiusBottomRight","cornerRadiusBottomLeft","symbolShape","symbol$2","symbol","shape","trailShape","hasCornerRadius","clip_id","resetSVGClipId","clip$1","renderer","clip","_defs","clipping","Bounds","union","Item","mark","bounds","GroupItem","items","ResourceLoader","customLoader","increment","decrement","boundStroke","miter","opacity","strokeOpacity","sw","strokeWidth","expand","strokeJoin","miterAdjustment","MAX_VALUE","equals","translate","rotate","angle","rotatedPoints","intersect","encloses","alignsWith","intersects","contains","sanitizeURL","catch","loadImage","image$1","img","cors","onload","onerror","complete","poll","circleThreshold","rot","ma","mb","mc","md","addL","addX","addY","addp","addpL","boundContext","deg","context$1","px1","py1","px2","py2","quadExtrema","px3","py3","cubicExtrema","sa","ea","ccw","t1","cubic","s2","t2","canvas","intersectPath","brush","isPointInPath","intersectPoint","box","intersectRect","intersectRule","intersectBoxLine","blend","globalCompositeOperation","addStops","addColorStop","createRadialGradient","image","ictx","fillStyle","createLinearGradient","fillRect","createPattern","fillOpacity","globalAlpha","lw","strokeStyle","lineWidth","lineCap","strokeCap","lineJoin","miterLimit","strokeMiterLimit","setLineDash","strokeDash","lineDashOffset","strokeDashOffset","zindex","zorder","scene","zdirty","zitems","pickVisit","hit","drawAll","drawPath","drawOne","pick$1","gx","gy","pixelRatio","hitPath","filled","lc","isPointInStroke","pickPath","translateItem","markItemPath","isect","tag","nested","attr","emit","rotateItem","bound","pick","markMultiItemPath","tip","orient","clipGroup","offset$1","strokeOffset","emitRectangle","off","rectanglePath","hitBackground","hitForeground","hitCorner","noBound","fore","strokeForeground","save","restore","dw","dh","ix","interactive","marktype","pickMark","content","background","foreground","xmlns","version","getImage","imageWidth","aspect","imageHeight","imageXOffset","imageYOffset","baseline","toDataURL","ar0","ar1","imageSmoothingEnabled","drawImage","xOffset","yOffset","line","path$1","scaleX","pathCache","path$2","transformItem","draw$2","rule","widthCache","textMetrics","fontSize","measureWidth","estimateWidth","useCanvas","use","_estimateWidth","textValue","currentFontHeight","_measureWidth","font","currentFont","measureText","lineHeight","textLines","lineBreak","multiLineOffset","widthGetter","mid","rtl","dir","fontFamily","quote","fontStyle","fontVariant","fontWeight","textAlign","tempBounds","anchorPoint","radius","theta","lh","fillText","strokeText","ax","ay","Marks","boundItem","DUMMY","boundMark","hasItems","sceneToJSON","indent","sceneFromJSON","initialize","Scenegraph","createMark","role","aria","description","domCreate","doc","ns","createElementNS","domFind","el","childNodes","tagName","domChild","ownerDocument","insertBefore","domClear","removeChild","cssClass","event","getBoundingClientRect","clientX","clientLeft","clientY","top","clientTop","Handler","customTooltip","_active","_handlers","_tooltip","defaultTooltip","element","setAttribute","Renderer","_el","_bgcolor","toJSON","markdef","origin","_obj","firstChild","_origin","_scene","_handlerIndex","handlers","eventName","handleHref","MouseEvent","dispatchEvent","handleTooltip","show","tooltip","mdef","resolveItem","getItemBoundingClientRect","bottom","scaleFactor","resize","bgcolor","_width","_height","_scale","dirty","render","_call","_render","renderAsync","_ready","_load","redraw","DragEnterEvent","DragLeaveEvent","DragOverEvent","MouseDownEvent","MouseMoveEvent","MouseOutEvent","MouseOverEvent","ClickEvent","MouseWheelEvent","TouchStartEvent","TouchMoveEvent","TouchEndEvent","TooltipShowEvent","TooltipHideEvent","HrefEvent","CanvasHandler","_down","_touch","_first","_events","eventBundle","eventListenerCheck","fire","move","moveEvent","overEvent","outEvent","pickEvent","exit","inactive","_canvas","events","DOMMouseScroll","mousemove","dragover","mouseout","dragleave","mousedown","click","touchstart","changedTouches","touchmove","touchend","vegaType","window","devicePixelRatio","CanvasRenderer","_options","_redraw","_dirty","_tempb","base$1","SVGHandler","_hrefHandler","listener","_tooltipHandler","externalContext","appendChild","inDOM","HTMLElement","parentNode","ratio","style","setTransform","ctx","db","vb","viewBounds","clipToBounds","clearRect","__data__","svg","_svg","removeEventListener","ARIA_HIDDEN","ARIA_LABEL","ARIA_ROLE","ARIA_ROLEDESCRIPTION","GRAPHICS_OBJECT","GRAPHICS_SYMBOL","roledesc","label","AriaIgnore","AriaGuides","axis","desc","caption","title","extractTitle","legend","props","channelCaption","titleCaption","AriaEncode","ariaRole","ariaRoleDescription","ariaItemAttributes","hide","ariaMarkAttributes","ariaGuide","ariaMark","innerText","attrText","markup","buf","outer","inner","stack","open","attrs","close","serializeXML","node","_serialize","hasAttributes","attributes","hasChildNodes","children","nodeType","nodeValue","stylesAttr","stylesCss","rootAttributes","svgns","SVGRenderer","_dirtyID","_root","dirtyParents","updateGradient","grad","pt","setAttributes","viewBox","preserveAspectRatio","fx","fy","fr","updateClipping","mask","sibling","__values__","bg","cg","fg","ownerSVGElement","previousSibling","siblingCheck","nextSibling","_clearDefs","setAttributeNS","RootIndex","setProperty","removeAttribute","_dirtyCheck","_dirtyAll","isDirty","isGroup","lastChild","extra","mark_extras","setStyle","ts","textContent","removeAttributeNS","removeProperty","loc","location","SVGStringRenderer","_text","class","attrList","_hrefs","prefixed","styleList","display","Canvas","RenderType","PNG","SVG","modules","renderModule","hits","intersectMark","intersectGroup","visitMark","intersectItem","marks","headless","clipBounds","boundClip","TOLERANCE","sceneEqual","pathEqual","ka","kb","objectEqual","Top","Left","Right","Bottom","TopLeft","TopRight","BottomLeft","BottomRight","Start","Middle","End","Group","AxisRole","TitleRole","FrameRole","ScopeRole","LegendRole","RowHeader","RowFooter","RowTitle","ColHeader","ColFooter","ColTitle","Padding","Symbols","Fit","FitX","FitY","Pad","All","Each","Flush","Column","Row","Bound","view","rebound","markBounds","COUNTER_NAME","Identifier","Mark","Overlap","Identifier$1","counter","_signals","scenegraph","lookup$1","Init","methods","parity","greedy","sep","hasOverlap","hasBounds","Render","separation","boundScale","boundTolerance","boundTest","tolerance","boundOrient","isYAxis","axisLayout","indices","grid","labels","axisIndices","position","minExtent","maxExtent","titlePadding","dl","axisTitleLayout","auto","bboxFlush","bboxFull","offsetValue","gridLayout","nodirty","bbox","alignCol","alignRow","padCol","padRow","ncols","nrows","xExtent","xMax","yExtent","yMax","boxes","trellisLayout","views","rowheaders","rowfooters","colheaders","colfooters","rowtitle","coltitle","gridLayoutGroups","boundFlush","boundFull","headerBand","layoutHeaders","footerBand","titleAnchor","titleBand","layoutTitle","headers","isX","bf","stride","back","legendParams","config","xb","yb","legends","offsets","mult","column","row","legendLayout","_bounds","ex","ey","tpad","tx","ty","legendTitleOffset","legendGroupLayout","legendBounds","entries","widths","legendEntryLayout","lr","noBar","vgrad","ViewLayout","xBounds","yBounds","autosize","pos","subtitle","titleLayout","_autosize","viewWidth","viewHeight","_resizeView","viewSizeLayout","layoutGroup","shouldReflow","AxisTicks","DataJoin","defaultItemCreate","Encode","LegendEntries","newMap","fmod","encoders","reenter","enter","fraction","lskip","perc","adjust","labelFraction","perc2","sourceX","sourceY","targetX","targetY","LinkPath","Paths","rr","iy","lineR","sr","ta","arcR","curveR","orthoX","orthoY","orthoR","sc","ss","tc","diagonalX","diagonalY","diagonalR","mr","Pie","DEFAULT_COUNT","includePad","Scale","domainCheck","adjustScheme","flip","SortItems","isContinuousColor","rawDomain","domainMid","scaleKey","rangeStep","configureRangeStep","scheme$1","schemeExtent","interpolateGamma","schemeCount","configureScheme","interpolateRound","interpolate$1","configureRange","domainRaw","configureBins","raw","includeZero","padDomain","domainMin","domainMax","domainImplicit","scaleImplicit","configureDomain","Zero","Center","Normalize","DefOutput","Stack","stackCenter","stackNormalize","stackZero","lastPos","lastNeg","pi","halfPi","sqrt2","asin","mollweideBromleyTheta","cp","phi","cpsinPhi","mollweideRaw","forward","lambda","mollweideBromleyRaw","defaultPath","geoPath","projectionProperties","projection","proj","projections","pointRadius","getProjectionPath","albers","geoAlbers","albersusa","geoAlbersUsa","azimuthalequalarea","geoAzimuthalEqualArea","azimuthalequidistant","geoAzimuthalEquidistant","conicconformal","geoConicConformal","conicequalarea","geoConicEqualArea","conicequidistant","geoConicEquidistant","equalEarth","geoEqualEarth","equirectangular","geoEquirectangular","gnomonic","geoGnomonic","geoIdentity","mercator","geoMercator","mollweide","geoProjection","naturalEarth1","geoNaturalEarth1","orthographic","geoOrthographic","stereographic","geoStereographic","transversemercator","geoTransverseMercator","cases","contours","smoothLinear","tz","contour","polygons","holes","t3","fragmentByStart","fragmentByEnd","stitch","startIndex","endIndex","ring","unshift","isorings","hole","polygon","coordinates","v0","xt","yt","v1","_0","_1","ringContains","xi","yi","pj","xj","yj","segmentContains","collinear","quantize","Isocontour","transformPolygon","transformRing","transformPoint","geometry","bandwidthNRD","density2D","weight","values0","Float32Array","values1","blurX","blurY","sz","cellSize","LN2","KDE2D","levels","paths","transformPaths","PARAMS","Contour","post","Feature","FeatureCollection","GeoJSON","GeoPath","GeoPoint","GeoShape","Graticule","geoGraticule","Heatmap","dependency","$x","$y","$value","$max","Projection","_features","_points","lon","lat","geojson","initPath","shapeGenerator","shared","dep","opacity_","rgb","color_","can","getImageData","pix","putImageData","toCanvas","fit","featurize","collectGeoJSON","fitExtent","fitSize","ForceMap","forceCenter","collide","forceCollide","nbody","forceManyBody","link","forceLink","forceX","forceY","Forces","ForceParams","ForceConfig","ForceOutput","Force","setup","sim","forces","getForce","numForces","setForceParam","change","iters","iterations","forceSimulation","restart","stopped","simulation","static","tick","alphaDecay","alphaMin","finish","tree","each","Nest","treesource","nest","depth","valuesByKey","keyValue","HierarchyLayout","hierarchy","defaultSeparation","setParams","setFields","Output$3","Pack","pack","Output$2","Partition","Stratify","parentKey","stratify","parentId","Layouts","tidy","cluster","Output$1","Tree","TreeLinks","links","Tiles","binary","treemapBinary","dice","treemapDice","treemapSlice","slicedice","treemapSliceDice","squarify","treemapSquarify","resquarify","treemapResquarify","Output","Treemap","treemap","tile","ALPHA_MASK","getBuffer","Uint32Array","prepare","DIV","SIZE","RIGHT0","RIGHT1","scaler","bitmap","_set","_clear","getRange","indexStart","indexEnd","setRange","clearRange","outOfBounds","Bitmap","textWidth","textHeight","collision","bm0","bm1","X_DIR","Y_DIR","Aligns","Baselines","_x1","_x2","_y1","_y2","boundary","isInside","anchorCode","TOP","MIDDLE","middle","BOTTOM","placeAreaLabel","naive","bitmaps","avoidBaseMark","markIndex","areaWidth","maxAreaWidth","tryLabel","_x","_y","maxSize","_xMid","_yMid","swapTmp","labelPlaced","labelPlaced2","floodfill","bm2","labelLayout","texts","avoidMarks","lineAnchor","positions","getOffsets","anchors","Int8Array","getAnchors","grouptype","isGroupArea","markBoundary","infPadding","isNaiveGroupArea","maxTextWidth","maxTextHeight","labelInside","baseMark","border","baseMarkContext","strokeContext","baseMarkBuffer","strokeBuffer","layer1","layer2","strokeAlpha","baseMarkAlpha","markBitmaps","baseBitmaps","place","sizeFactor","insideFactor","SQRT1_2","placeMarkLabel","Anchors","Label","Label$1","Loess","regressionLoess","regressionConstant","regressionLinear","regressionLog","regressionExp","regressionPow","regressionQuad","regressionPoly","Regression","dof","degreesOfFreedom","model","dom","Voronoi","defaultExtent","toPathString","voronoi","Delaunay","cellPolygon","cloudRadians","cw","ch","cloud","spiral","archimedeanSpiral","words","board","dxdy","startX","startY","maxDelta","cloudCollide","collideRects","sprite","msx","contextAndRatio","zeroArray","tags","xoff","yoff","hasText","cloudSprite","cloudBounds","functor","spirals","di","w32","maxh","cr","wcr","wsr","hcr","hsr","pixels","seen","seenRow","archimedean","rectangular","Wordcloud","fontSizeRange","fsize","sizeScale","array8","Uint8Array","array16","Uint16Array","array32","Dimension","query","onAdd","added","dim","SortedIndex","addi","oldv","oldi","addv","permute","value0","index0","value1","index1","bisectLeft","reindex","CrossFilter","lengthen","_index","Bitmaps","_indices","ResolveFilter","reinit","eval","bits","remMap","modMap","indexMap","incrementOne","incrementAll","old","lo1","hi1","lo0","hi0","ignore","pass","Literal","Property","ArrayExpression","BinaryExpression","CallExpression","ConditionalExpression","LogicalExpression","MemberExpression","ObjectExpression","UnaryExpression","ASTNode","TokenName","lookahead","elements","callee","consequent","alternate","properties","argument","TokenBooleanLiteral","TokenEOF","TokenIdentifier","TokenKeyword","TokenNullLiteral","TokenNumericLiteral","TokenPunctuator","TokenStringLiteral","SyntaxArrayExpression","SyntaxBinaryExpression","SyntaxCallExpression","SyntaxConditionalExpression","SyntaxIdentifier","SyntaxLiteral","SyntaxLogicalExpression","SyntaxMemberExpression","SyntaxObjectExpression","SyntaxProperty","SyntaxUnaryExpression","MessageUnexpectedToken","MessageUnexpectedNumber","MessageUnexpectedString","MessageUnexpectedIdentifier","MessageUnexpectedReserved","MessageUnexpectedEOS","MessageInvalidRegExp","MessageUnterminatedRegExp","MessageStrictOctalLiteral","MessageStrictDuplicateProperty","ILLEGAL","DISABLED","RegexNonAsciiIdentifierStart","RegexNonAsciiIdentifierPart","assert","condition","isDecimalDigit","isHexDigit","isOctalDigit","isWhiteSpace","isLineTerminator","isIdentifierStart","fromCharCode","isIdentifierPart","keywords","if","in","do","var","for","new","try","let","else","void","with","enum","while","break","throw","const","yield","super","return","typeof","switch","export","import","public","finally","extends","package","private","continue","debugger","interface","protected","instanceof","implements","skipComment","scanHexEscape","code","throwError","scanUnicodeCodePointEscape","cu1","cu2","getEscapedIdentifier","substr","scanIdentifier","getIdentifier","scanPunctuator","code2","ch2","ch3","ch4","ch1","scanNumericLiteral","parseInt","scanHexLiteral","octal","scanOctalLiteral","parseFloat","scanRegExp","body","classMarker","terminated","literal","scanRegExpBody","search","scanRegExpFlags","tmp","$0","$1","exception","testRegExp","regex","advance","scanStringLiteral","lex","token","finishBinaryExpression","operator","finishCallExpression","finishIdentifier","finishLiteral","finishMemberExpression","computed","member","finishProperty","kind","messageFormat","msg","whole","throwUnexpected","expect","matchKeyword","keyword","parseArrayInitialiser","parseConditionalExpression","finishArrayExpression","parseObjectPropertyKey","parseObjectProperty","parseObjectInitialiser","finishObjectExpression","legalKeywords","parsePrimaryExpression","parseExpression","parseGroupExpression","parseArguments","parseNonComputedProperty","isIdentifierName","parseComputedMember","parsePostfixExpression","parseLeftHandSideExpressionAllowCall","parseUnaryExpression","finishUnaryExpression","binaryPrecedence","prec","marker","markers","parseBinaryExpression","finishConditionalExpression","Constants","E","LN10","LOG2E","LOG10E","MIN_VALUE","Functions","codegen","cast","fncall","STRING","REGEXP","acos","atan","tan","datetime","hours","minutes","seconds","milliseconds","timezoneoffset","utcdate","utcday","utcyear","utcmonth","utchours","utcminutes","utcseconds","utcmilliseconds","upper","lower","regexp","allowed","forbidden","constants","functions","globalvar","fieldvar","outputGlobal","globals","memberDepth","ast","Generators","stripQuotes","Intersect","Union","VlMulti","VlPoint","Or","And","SelectionId","$selectionId","TYPE_ENUM","TYPE_RANGE_INC","TYPE_RANGE_EXC","TYPE_RANGE_LE","TYPE_RANGE_RE","UNIT_INDEX","testPoint","dval","intersection","E_union","E_intersect","R_union","R_intersect","DataPrefix","IndexPrefix","selectionVisitor","scope","indexName","dataName","getData","indataRef","tuplesRef","wrap","dateObj","setYear","ScalePrefix","SignalPrefix","dataVisitor","scaleVisitor","addScaleDependency","scaleName","scaleRef","getScale","nameOrFunction","maybeScale","isRegisteredScale","internalScaleFunctions","fnctx","visitors","__bandwidth","_bandwidth","_range","ref","geoMethod","methodName","globalMethod","geoArea","geoArea$1","geoBounds","geoBounds$1","geoCentroid","geoCentroid$1","channel_luminance_value","channelValue","luminance","equal","equalArray","equalObject","removePredicate","accessors","seq","ArrayBuffer","isView","treeNodes","_window","intersect$1","array$1","markname","functionContext","isDefined","indexof","_len2","_key2","lastindexof","_len3","_key3","repl","_len4","_key4","pluck","lab","hcl","hsl","contrast","color1","color2","lum1","lum2","monthFormat","monthAbbrevFormat","dayFormat","dayAbbrevFormat","inScope","pinchDistance","touches","pinchAngle","screen","containerSize","container","clientWidth","clientHeight","windowSize","innerWidth","innerHeight","bandspace","setdata","pathShape","pathParse","retval","toggle","predicate","_trigger","lassoAppend","lasso","minDist","lassoPath","_ref","intersectLasso","pixelLasso","bb","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","testx","testy","intersections","prevX","prevY","pointInPolygon","eventFunctions","eventPrefix","thisPrefix","astVisitors","codegenParams","codeGenerator","codegenExpression","expressionFunction","signalName","getSignal","signalRef","$expr","$fields","$params","ancestors","miss","unitIdx","isMulti","vl5","resUnit","resolved","multiRes","charAt","acc","Skip","Swap","canonicalType","expression","Function","expressionCodegen","parameter","channels","adjustSpatial","lt","gt","_compare","parseParameter","PARSERS","$ref","$key","$flat","parseParameters","parameterExpression","$field","$name","$encode","enc","encodeExpression","$output","$compare","$order","$tupleid","$subflow","subctx","operators","Context","Subcontext","ariaLabel","subcontext","isCollect","$ingest","$format","$request","unresolved","signal","operatorExpression","eventExpression","handlerExpression","eventConfig","parseOperator","parseOperatorParameters","streams","parseStream","updates","parseUpdate","isOperator","srcid","dataset","getState","setState","substate","Default","setCursor","cursor","globalCursor","dataref","_runtime","_viewWidth","_viewHeight","eventExtend","_renderer","vega","itemGroup","extension","VIEW","TIMER","WINDOW","NO_TRAP","trap","trackEventListener","_eventListeners","permit","_eventConfig","itemFilter","markTarget","invoke","BindClass","NameClass","RadioClass","Event","wrapper","form","checkbox","select","radio","checked","option","valuesEqual","selected","selectedIndex","prepend","initializeRenderer","querySelector","paddingObject","renderHeadless","module","_scenegraph","Width","Height","dataTest","signalTest","proxy","formatArray","formatTooltip","View","_elBind","_renderType","_handler","_globalCursor","_preventDefault","_timers","_resizeListeners","defaults","unpack","initializeEventConfig","runtime","_bind","bindings","_resize","resetSize","_resizeWidth","_resizeHeight","resizePadding","initializeResize","_background","user","hover","lookupSignal","findOperatorHandler","addOperatorListener","removeOperatorListener","resizeRenderer","_desc","_resetRenderer","rerun","addResizeListener","removeResizeListener","addSignalListener","removeSignalListener","addDataListener","removeDataListener","timer","elapsed","timestamp","prevent","allow","finalize","timers","listeners","hoverSet","leaveSet","elBind","initializeAria","prevHandler","initializeHandler","binding","toImageURL","mime","blob","Blob","URL","createObjectURL","toBlobURL","toSVG","LBRACK","RBRACK","LBRACE","RBRACE","COLON","COMMA","NAME","GT","DEFAULT_MARKS","DEFAULT_SOURCE","MARKS","eventSelector","selector","parseMerge","parseSelector","endChar","pushChar","popChar","parseBetween","parseThrottle","isMarkType","parseAutosize","parsePadding","encoder","addEncode","addEncoders","extendEncode","MarkRole","AxisDomainRole","AxisGridRole","AxisLabelRole","AxisTickRole","AxisTitleRole","LegendBandRole","LegendEntryRole","LegendGradientRole","LegendLabelRole","LegendSymbolRole","LegendTitleRole","TitleTextRole","TitleSubtitleRole","applyDefault","entry$1","_color","resolveField","parseEncode","applyDefaults","parseBlock","block","parse$1","OUTER","OUTER_INVALID","outerError","parseSignal","addSignal","addBinding","Entry","refs","fieldRef$1","keyFieldRef","compareRef","Descending","aggrField","Scope$1","isSignal","hasSignal","specValue","deref","Timer","mergeStream","nestedStream","eventStream","streamParameters","addStream","eventSource","markrole","filterMark","OP_VALUE_EXPR","isSubscope","mergeSources","addUpdate","streamSource","FIELD_REF_ID","MULTIDOMAIN_SORT_OPS","parseScale","parseScaleDomain","parseScaleRange","parseLiteral","parseScaleInterpolate","parseArray","objectProperty","parseScaleBins","dataLookupError","explicitDomain","multipleDomain","singularDomain","valuesRef","parseSort","domainRef","extentRef","coll","addDataPipeline","fieldRef","ordinalMultipleDomain","quantileMultipleDomain","numericMultipleDomain","countsRef","sortRef","multidomain","parseParameter$1","Vertical","Index","Offset","Perc","Perc2","Value","GuideLabelStyle","GuideTitleStyle","GroupTitleStyle","GroupSubtitleStyle","Size","LegendScales","GroupMark","RectMark","RuleMark","SymbolMark","TextMark","guideGroup","isVertical","direction","symbolDirection","gradientDirection","gradientLength","gradientWidth","gradientThickness","gradientHeight","entryColumns","getEncoding","anchorExpr","alignExpr$1","extendOffset","assign","guideMark","extras","legendGradient","userEncode","thickness","legendGradientDiscrete","dataRef","uu","vv","alignExpr","baselineExpr","legendGradientLabels","overlap","labelLimit","gradientLabelLimit","labelOffset","gradientLabelOffset","legendSymbolGroups","symbolOffset","valueRef","xSignal","yEncode","baseFill","baseStroke","symbolBaseFillColor","symbolBaseStrokeColor","facet","isL","isR","isLR","isVG","exprAlign","exprAnchor","exprAngle","exprBaseline","sphere","getRole","parseTransform","definition$1","pdef","lookupRef","parseIndexParameter","parseSubParameter","parseSubParameters","projectionRef","parameterValue","isExpr","isField","isCompare","outerExpr","exprRef","outerField","isData","getDataRef","DataScope","aggregate","fieldKey","addSortField","ds","optype","sortKey","parseTrigger","trigger","parseMark","layoutRef","boundRef","keyRef","parseData$1","joinRef","$context","markpath","markRef","encodeRef","pushState","subscope","addData","toRuntime","parseFacet","parseSubflow","popState","tol","parseOverlap","sieve","parseLegend","legendEncode","entryLayout","scaleType","scaleCount","legendType","entryRef","tickMinStep","legendSymbolLayout","getChannel","getStyle","getFontSize","sizeExpression","_anchor","legendTitle","buildLegendEncode","fromEntries","angleExpr","parseTitle","buildTitle","titleEncode","buildSubTitle","groupEncode","parseData","upstream","analyze","getSign","ifLeftTopExpr","ifX","ifXEnc","ifY","ifYEnc","ifTop","ifTopExpr","ifRight","ifRightExpr","$orient","ifEnc","ifExpr","isSimple","toExpr","ifOrient","patch","fallback","axisConfig","styleProp","axisGrid","vscale","gridScale","tickPos","gridStart","gridEnd","flushExpr","axisTitle","titlePos","autoY","autoX","autoLayout","parseAxis","or","axisBand","xyKeys","axisX","axisY","orientKeys","axisTop","axisBottom","axisLeft","axisRight","axisEncode","tickBand","ticksRef","tickSize","axisTicks","flushOffset","labelAlign","labelBaseline","flushOn","offsetExpr","axisLabels","pos0","pos1","axisDomain","buildAxisEncode","parseScope","preprocessed","addProjection","parseProjection","addScale","initScale","parseSignalUpdates","axes","parseLambdas","rootEncode","parseView","signalObject","pre","collectSignals","Scope","lambdas","_id","_subid","_nextsub","_parent","_encode","_lookup","_markpath","Subscope","propertyLambda","arrayLambda","objectLambda","vref","annotate","check","isExpr$1","sig","hasOwnSignal","addScaleProj","projectionType","dataScope","vtx","geo","reg","wordcloud","xf","defaultFont","defaultColor","black","gray","lightGray","subtitlePadding","bandPosition","domainWidth","domainColor","gridWidth","gridColor","labelAngle","labelPadding","tickColor","tickOffset","tickRound","tickWidth","gridAlign","columnPadding","rowPadding","gradientStrokeColor","gradientStrokeWidth","labelOverlap","symbolLimit","symbolType","symbolSize","symbolStrokeWidth","titleLimit","titleOrient","category","ordinal","heatmap","ramp","diverging","seed"],"mappings":"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","x_google_ignoreList":[12,13]} \ No newline at end of file +{"version":3,"file":"vega-core.min.js","sources":["../../vega-util/build/vega-util.module.js","../../vega-time/build/vega-time.module.js","../../vega-format/build/vega-format.module.js","../../vega-loader/build/vega-loader.browser.module.js","../../vega-dataflow/build/vega-dataflow.module.js","../../vega-statistics/build/vega-statistics.module.js","../../vega-transforms/build/vega-transforms.module.js","../../vega-canvas/build/vega-canvas.browser.module.js","../../vega-scale/build/vega-scale.module.js","../../vega-scenegraph/build/vega-scenegraph.module.js","../../vega-view-transforms/build/vega-view-transforms.module.js","../../vega-encode/build/vega-encode.module.js","../../../node_modules/d3-geo-projection/src/math.js","../../../node_modules/d3-geo-projection/src/mollweide.js","../../vega-projection/build/vega-projection.module.js","../../vega-geo/build/vega-geo.module.js","../../vega-force/build/vega-force.module.js","../../vega-hierarchy/build/vega-hierarchy.module.js","../../vega-label/build/vega-label.module.js","../../vega-regression/build/vega-regression.module.js","../../vega-voronoi/build/vega-voronoi.module.js","../../vega-wordcloud/build/vega-wordcloud.module.js","../../vega-crossfilter/build/vega-crossfilter.module.js","../../vega-expression/build/vega-expression.module.js","../../vega-selections/build/vega-selection.module.js","../../vega-functions/build/vega-functions.module.js","../../vega-runtime/build/vega-runtime.module.js","../../vega-view/build/vega-view.module.js","../../vega-event-selector/build/vega-event-selector.module.js","../../vega-parser/build/vega-parser.module.js","../index.js"],"sourcesContent":["function accessor (fn, fields, name) {\n fn.fields = fields || [];\n fn.fname = name;\n return fn;\n}\nfunction accessorName(fn) {\n return fn == null ? null : fn.fname;\n}\nfunction accessorFields(fn) {\n return fn == null ? null : fn.fields;\n}\n\nfunction getter (path) {\n return path.length === 1 ? get1(path[0]) : getN(path);\n}\nconst get1 = field => function (obj) {\n return obj[field];\n};\nconst getN = path => {\n const len = path.length;\n return function (obj) {\n for (let i = 0; i < len; ++i) {\n obj = obj[path[i]];\n }\n return obj;\n };\n};\n\nfunction error (message) {\n throw Error(message);\n}\n\nfunction splitAccessPath (p) {\n const path = [],\n n = p.length;\n let q = null,\n b = 0,\n s = '',\n i,\n j,\n c;\n p = p + '';\n function push() {\n path.push(s + p.substring(i, j));\n s = '';\n i = j + 1;\n }\n for (i = j = 0; j < n; ++j) {\n c = p[j];\n if (c === '\\\\') {\n s += p.substring(i, j++);\n i = j;\n } else if (c === q) {\n push();\n q = null;\n b = -1;\n } else if (q) {\n continue;\n } else if (i === b && c === '\"') {\n i = j + 1;\n q = c;\n } else if (i === b && c === \"'\") {\n i = j + 1;\n q = c;\n } else if (c === '.' && !b) {\n if (j > i) {\n push();\n } else {\n i = j + 1;\n }\n } else if (c === '[') {\n if (j > i) push();\n b = i = j + 1;\n } else if (c === ']') {\n if (!b) error('Access path missing open bracket: ' + p);\n if (b > 0) push();\n b = 0;\n i = j + 1;\n }\n }\n if (b) error('Access path missing closing bracket: ' + p);\n if (q) error('Access path missing closing quote: ' + p);\n if (j > i) {\n j++;\n push();\n }\n return path;\n}\n\nfunction field (field, name, opt) {\n const path = splitAccessPath(field);\n field = path.length === 1 ? path[0] : field;\n return accessor((opt && opt.get || getter)(path), [field], name || field);\n}\n\nconst id = field('id');\nconst identity = accessor(_ => _, [], 'identity');\nconst zero = accessor(() => 0, [], 'zero');\nconst one = accessor(() => 1, [], 'one');\nconst truthy = accessor(() => true, [], 'true');\nconst falsy = accessor(() => false, [], 'false');\n\nfunction log$1(method, level, input) {\n const args = [level].concat([].slice.call(input));\n console[method].apply(console, args); // eslint-disable-line no-console\n}\n\nconst None = 0;\nconst Error$1 = 1;\nconst Warn = 2;\nconst Info = 3;\nconst Debug = 4;\nfunction logger (_, method) {\n let handler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : log$1;\n let level = _ || None;\n return {\n level(_) {\n if (arguments.length) {\n level = +_;\n return this;\n } else {\n return level;\n }\n },\n error() {\n if (level >= Error$1) handler(method || 'error', 'ERROR', arguments);\n return this;\n },\n warn() {\n if (level >= Warn) handler(method || 'warn', 'WARN', arguments);\n return this;\n },\n info() {\n if (level >= Info) handler(method || 'log', 'INFO', arguments);\n return this;\n },\n debug() {\n if (level >= Debug) handler(method || 'log', 'DEBUG', arguments);\n return this;\n }\n };\n}\n\nvar isArray = Array.isArray;\n\nfunction isObject (_) {\n return _ === Object(_);\n}\n\nconst isLegalKey = key => key !== '__proto__';\nfunction mergeConfig() {\n for (var _len = arguments.length, configs = new Array(_len), _key = 0; _key < _len; _key++) {\n configs[_key] = arguments[_key];\n }\n return configs.reduce((out, source) => {\n for (const key in source) {\n if (key === 'signals') {\n // for signals, we merge the signals arrays\n // source signals take precedence over\n // existing signals with the same name\n out.signals = mergeNamed(out.signals, source.signals);\n } else {\n // otherwise, merge objects subject to recursion constraints\n // for legend block, recurse for the layout entry only\n // for style block, recurse for all properties\n // otherwise, no recursion: objects overwrite, no merging\n const r = key === 'legend' ? {\n layout: 1\n } : key === 'style' ? true : null;\n writeConfig(out, key, source[key], r);\n }\n }\n return out;\n }, {});\n}\nfunction writeConfig(output, key, value, recurse) {\n if (!isLegalKey(key)) return;\n let k, o;\n if (isObject(value) && !isArray(value)) {\n o = isObject(output[key]) ? output[key] : output[key] = {};\n for (k in value) {\n if (recurse && (recurse === true || recurse[k])) {\n writeConfig(o, k, value[k]);\n } else if (isLegalKey(k)) {\n o[k] = value[k];\n }\n }\n } else {\n output[key] = value;\n }\n}\nfunction mergeNamed(a, b) {\n if (a == null) return b;\n const map = {},\n out = [];\n function add(_) {\n if (!map[_.name]) {\n map[_.name] = 1;\n out.push(_);\n }\n }\n b.forEach(add);\n a.forEach(add);\n return out;\n}\n\nfunction peek (array) {\n return array[array.length - 1];\n}\n\nfunction toNumber (_) {\n return _ == null || _ === '' ? null : +_;\n}\n\nconst exp = sign => x => sign * Math.exp(x);\nconst log = sign => x => Math.log(sign * x);\nconst symlog = c => x => Math.sign(x) * Math.log1p(Math.abs(x / c));\nconst symexp = c => x => Math.sign(x) * Math.expm1(Math.abs(x)) * c;\nconst pow = exponent => x => x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\nfunction pan(domain, delta, lift, ground) {\n const d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n dd = (d1 - d0) * delta;\n return [ground(d0 - dd), ground(d1 - dd)];\n}\nfunction panLinear(domain, delta) {\n return pan(domain, delta, toNumber, identity);\n}\nfunction panLog(domain, delta) {\n var sign = Math.sign(domain[0]);\n return pan(domain, delta, log(sign), exp(sign));\n}\nfunction panPow(domain, delta, exponent) {\n return pan(domain, delta, pow(exponent), pow(1 / exponent));\n}\nfunction panSymlog(domain, delta, constant) {\n return pan(domain, delta, symlog(constant), symexp(constant));\n}\nfunction zoom(domain, anchor, scale, lift, ground) {\n const d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n return [ground(da + (d0 - da) * scale), ground(da + (d1 - da) * scale)];\n}\nfunction zoomLinear(domain, anchor, scale) {\n return zoom(domain, anchor, scale, toNumber, identity);\n}\nfunction zoomLog(domain, anchor, scale) {\n const sign = Math.sign(domain[0]);\n return zoom(domain, anchor, scale, log(sign), exp(sign));\n}\nfunction zoomPow(domain, anchor, scale, exponent) {\n return zoom(domain, anchor, scale, pow(exponent), pow(1 / exponent));\n}\nfunction zoomSymlog(domain, anchor, scale, constant) {\n return zoom(domain, anchor, scale, symlog(constant), symexp(constant));\n}\n\nfunction quarter(date) {\n return 1 + ~~(new Date(date).getMonth() / 3);\n}\nfunction utcquarter(date) {\n return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n\nfunction array (_) {\n return _ != null ? isArray(_) ? _ : [_] : [];\n}\n\n/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nfunction clampRange (range, min, max) {\n let lo = range[0],\n hi = range[1],\n span;\n if (hi < lo) {\n span = hi;\n hi = lo;\n lo = span;\n }\n span = hi - lo;\n return span >= max - min ? [min, max] : [lo = Math.min(Math.max(lo, min), max - span), lo + span];\n}\n\nfunction isFunction (_) {\n return typeof _ === 'function';\n}\n\nconst DESCENDING = 'descending';\nfunction compare (fields, orders, opt) {\n opt = opt || {};\n orders = array(orders) || [];\n const ord = [],\n get = [],\n fmap = {},\n gen = opt.comparator || comparator;\n array(fields).forEach((f, i) => {\n if (f == null) return;\n ord.push(orders[i] === DESCENDING ? -1 : 1);\n get.push(f = isFunction(f) ? f : field(f, null, opt));\n (accessorFields(f) || []).forEach(_ => fmap[_] = 1);\n });\n return get.length === 0 ? null : accessor(gen(get, ord), Object.keys(fmap));\n}\nconst ascending = (u, v) => (u < v || u == null) && v != null ? -1 : (u > v || v == null) && u != null ? 1 : (v = v instanceof Date ? +v : v, u = u instanceof Date ? +u : u) !== u && v === v ? -1 : v !== v && u === u ? 1 : 0;\nconst comparator = (fields, orders) => fields.length === 1 ? compare1(fields[0], orders[0]) : compareN(fields, orders, fields.length);\nconst compare1 = (field, order) => function (a, b) {\n return ascending(field(a), field(b)) * order;\n};\nconst compareN = (fields, orders, n) => {\n orders.push(0); // pad zero for convenient lookup\n return function (a, b) {\n let f,\n c = 0,\n i = -1;\n while (c === 0 && ++i < n) {\n f = fields[i];\n c = ascending(f(a), f(b));\n }\n return c * orders[i];\n };\n};\n\nfunction constant (_) {\n return isFunction(_) ? _ : () => _;\n}\n\nfunction debounce (delay, handler) {\n let tid;\n return e => {\n if (tid) clearTimeout(tid);\n tid = setTimeout(() => (handler(e), tid = null), delay);\n };\n}\n\nfunction extend (_) {\n for (let x, k, i = 1, len = arguments.length; i < len; ++i) {\n x = arguments[i];\n for (k in x) {\n _[k] = x[k];\n }\n }\n return _;\n}\n\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nfunction extent (array, f) {\n let i = 0,\n n,\n v,\n min,\n max;\n if (array && (n = array.length)) {\n if (f == null) {\n // find first valid value\n for (v = array[i]; i < n && (v == null || v !== v); v = array[++i]);\n min = max = v;\n\n // visit all other values\n for (; i < n; ++i) {\n v = array[i];\n // skip null/undefined; NaN will fail all comparisons\n if (v != null) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n } else {\n // find first valid value\n for (v = f(array[i]); i < n && (v == null || v !== v); v = f(array[++i]));\n min = max = v;\n\n // visit all other values\n for (; i < n; ++i) {\n v = f(array[i]);\n // skip null/undefined; NaN will fail all comparisons\n if (v != null) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n }\n }\n return [min, max];\n}\n\nfunction extentIndex (array, f) {\n const n = array.length;\n let i = -1,\n a,\n b,\n c,\n u,\n v;\n if (f == null) {\n while (++i < n) {\n b = array[i];\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n if (i === n) return [-1, -1];\n u = v = i;\n while (++i < n) {\n b = array[i];\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n } else {\n while (++i < n) {\n b = f(array[i], i, array);\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n if (i === n) return [-1, -1];\n u = v = i;\n while (++i < n) {\n b = f(array[i], i, array);\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n }\n return [u, v];\n}\n\nconst hop = Object.prototype.hasOwnProperty;\nfunction has (object, property) {\n return hop.call(object, property);\n}\n\nconst NULL = {};\nfunction fastmap (input) {\n let obj = {},\n test;\n function has$1(key) {\n return has(obj, key) && obj[key] !== NULL;\n }\n const map = {\n size: 0,\n empty: 0,\n object: obj,\n has: has$1,\n get(key) {\n return has$1(key) ? obj[key] : undefined;\n },\n set(key, value) {\n if (!has$1(key)) {\n ++map.size;\n if (obj[key] === NULL) --map.empty;\n }\n obj[key] = value;\n return this;\n },\n delete(key) {\n if (has$1(key)) {\n --map.size;\n ++map.empty;\n obj[key] = NULL;\n }\n return this;\n },\n clear() {\n map.size = map.empty = 0;\n map.object = obj = {};\n },\n test(_) {\n if (arguments.length) {\n test = _;\n return map;\n } else {\n return test;\n }\n },\n clean() {\n const next = {};\n let size = 0;\n for (const key in obj) {\n const value = obj[key];\n if (value !== NULL && (!test || !test(value))) {\n next[key] = value;\n ++size;\n }\n }\n map.size = size;\n map.empty = 0;\n map.object = obj = next;\n }\n };\n if (input) Object.keys(input).forEach(key => {\n map.set(key, input[key]);\n });\n return map;\n}\n\nfunction flush (range, value, threshold, left, right, center) {\n if (!threshold && threshold !== 0) return center;\n const t = +threshold;\n let a = range[0],\n b = peek(range),\n l;\n\n // swap endpoints if range is reversed\n if (b < a) {\n l = a;\n a = b;\n b = l;\n }\n\n // compare value to endpoints\n l = Math.abs(value - a);\n const r = Math.abs(b - value);\n\n // adjust if value is within threshold distance of endpoint\n return l < r && l <= t ? left : r <= t ? right : center;\n}\n\nfunction inherits (child, parent, members) {\n const proto = child.prototype = Object.create(parent.prototype);\n Object.defineProperty(proto, 'constructor', {\n value: child,\n writable: true,\n enumerable: true,\n configurable: true\n });\n return extend(proto, members);\n}\n\n/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nfunction inrange (value, range, left, right) {\n let r0 = range[0],\n r1 = range[range.length - 1],\n t;\n if (r0 > r1) {\n t = r0;\n r0 = r1;\n r1 = t;\n }\n left = left === undefined || left;\n right = right === undefined || right;\n return (left ? r0 <= value : r0 < value) && (right ? value <= r1 : value < r1);\n}\n\nfunction isBoolean (_) {\n return typeof _ === 'boolean';\n}\n\nfunction isDate (_) {\n return Object.prototype.toString.call(_) === '[object Date]';\n}\n\nfunction isIterable (_) {\n return _ && isFunction(_[Symbol.iterator]);\n}\n\nfunction isNumber (_) {\n return typeof _ === 'number';\n}\n\nfunction isRegExp (_) {\n return Object.prototype.toString.call(_) === '[object RegExp]';\n}\n\nfunction isString (_) {\n return typeof _ === 'string';\n}\n\nfunction key (fields, flat, opt) {\n if (fields) {\n fields = flat ? array(fields).map(f => f.replace(/\\\\(.)/g, '$1')) : array(fields);\n }\n const len = fields && fields.length,\n gen = opt && opt.get || getter,\n map = f => gen(flat ? [f] : splitAccessPath(f));\n let fn;\n if (!len) {\n fn = function () {\n return '';\n };\n } else if (len === 1) {\n const get = map(fields[0]);\n fn = function (_) {\n return '' + get(_);\n };\n } else {\n const get = fields.map(map);\n fn = function (_) {\n let s = '' + get[0](_),\n i = 0;\n while (++i < len) s += '|' + get[i](_);\n return s;\n };\n }\n return accessor(fn, fields, 'key');\n}\n\nfunction lerp (array, frac) {\n const lo = array[0],\n hi = peek(array),\n f = +frac;\n return !f ? lo : f === 1 ? hi : lo + f * (hi - lo);\n}\n\nconst DEFAULT_MAX_SIZE = 10000;\n\n// adapted from https://github.com/dominictarr/hashlru/ (MIT License)\nfunction lruCache (maxsize) {\n maxsize = +maxsize || DEFAULT_MAX_SIZE;\n let curr, prev, size;\n const clear = () => {\n curr = {};\n prev = {};\n size = 0;\n };\n const update = (key, value) => {\n if (++size > maxsize) {\n prev = curr;\n curr = {};\n size = 1;\n }\n return curr[key] = value;\n };\n clear();\n return {\n clear,\n has: key => has(curr, key) || has(prev, key),\n get: key => has(curr, key) ? curr[key] : has(prev, key) ? update(key, prev[key]) : undefined,\n set: (key, value) => has(curr, key) ? curr[key] = value : update(key, value)\n };\n}\n\nfunction merge (compare, array0, array1, output) {\n const n0 = array0.length,\n n1 = array1.length;\n if (!n1) return array0;\n if (!n0) return array1;\n const merged = output || new array0.constructor(n0 + n1);\n let i0 = 0,\n i1 = 0,\n i = 0;\n for (; i0 < n0 && i1 < n1; ++i) {\n merged[i] = compare(array0[i0], array1[i1]) > 0 ? array1[i1++] : array0[i0++];\n }\n for (; i0 < n0; ++i0, ++i) {\n merged[i] = array0[i0];\n }\n for (; i1 < n1; ++i1, ++i) {\n merged[i] = array1[i1];\n }\n return merged;\n}\n\nfunction repeat (str, reps) {\n let s = '';\n while (--reps >= 0) s += str;\n return s;\n}\n\nfunction pad (str, length, padchar, align) {\n const c = padchar || ' ',\n s = str + '',\n n = length - s.length;\n return n <= 0 ? s : align === 'left' ? repeat(c, n) + s : align === 'center' ? repeat(c, ~~(n / 2)) + s + repeat(c, Math.ceil(n / 2)) : s + repeat(c, n);\n}\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\nfunction span (array) {\n return array && peek(array) - array[0] || 0;\n}\n\nfunction $(x) {\n return isArray(x) ? '[' + x.map($) + ']' : isObject(x) || isString(x) ?\n // Output valid JSON and JS source strings.\n // See http://timelessrepo.com/json-isnt-a-javascript-subset\n JSON.stringify(x).replace('\\u2028', '\\\\u2028').replace('\\u2029', '\\\\u2029') : x;\n}\n\nfunction toBoolean (_) {\n return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n}\n\nconst defaultParser = _ => isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\nfunction toDate (_, parser) {\n parser = parser || defaultParser;\n return _ == null || _ === '' ? null : parser(_);\n}\n\nfunction toString (_) {\n return _ == null || _ === '' ? null : _ + '';\n}\n\nfunction toSet (_) {\n const s = {},\n n = _.length;\n for (let i = 0; i < n; ++i) s[_[i]] = true;\n return s;\n}\n\nfunction truncate (str, length, align, ellipsis) {\n const e = ellipsis != null ? ellipsis : '\\u2026',\n s = str + '',\n n = s.length,\n l = Math.max(0, length - e.length);\n return n <= length ? s : align === 'left' ? e + s.slice(n - l) : align === 'center' ? s.slice(0, Math.ceil(l / 2)) + e + s.slice(n - ~~(l / 2)) : s.slice(0, l) + e;\n}\n\nfunction visitArray (array, filter, visitor) {\n if (array) {\n if (filter) {\n const n = array.length;\n for (let i = 0; i < n; ++i) {\n const t = filter(array[i]);\n if (t) visitor(t, i, array);\n }\n } else {\n array.forEach(visitor);\n }\n }\n}\n\nexport { Debug, Error$1 as Error, Info, None, Warn, accessor, accessorFields, accessorName, array, ascending, clampRange, compare, constant, debounce, error, extend, extent, extentIndex, falsy, fastmap, field, flush, has as hasOwnProperty, id, identity, inherits, inrange, isArray, isBoolean, isDate, isFunction, isIterable, isNumber, isObject, isRegExp, isString, key, lerp, logger, lruCache, merge, mergeConfig, one, pad, panLinear, panLog, panPow, panSymlog, peek, quarter, repeat, span, splitAccessPath, $ as stringValue, toBoolean, toDate, toNumber, toSet, toString, truncate, truthy, utcquarter, visitArray, writeConfig, zero, zoomLinear, zoomLog, zoomPow, zoomSymlog };\n","import { array, error, hasOwnProperty, extend, peek, toSet, constant, zero, one, span } from 'vega-util';\nimport { timeDay, timeWeek, utcDay, utcWeek, timeYear, timeMonth, timeHour, timeMinute, timeSecond, timeMillisecond, utcYear, utcMonth, utcHour, utcMinute, utcSecond, utcMillisecond } from 'd3-time';\nimport { bisector, tickStep } from 'd3-array';\n\nconst YEAR = 'year';\nconst QUARTER = 'quarter';\nconst MONTH = 'month';\nconst WEEK = 'week';\nconst DATE = 'date';\nconst DAY = 'day';\nconst DAYOFYEAR = 'dayofyear';\nconst HOURS = 'hours';\nconst MINUTES = 'minutes';\nconst SECONDS = 'seconds';\nconst MILLISECONDS = 'milliseconds';\nconst TIME_UNITS = [YEAR, QUARTER, MONTH, WEEK, DATE, DAY, DAYOFYEAR, HOURS, MINUTES, SECONDS, MILLISECONDS];\nconst UNITS = TIME_UNITS.reduce((o, u, i) => (o[u] = 1 + i, o), {});\nfunction timeUnits(units) {\n const u = array(units).slice(),\n m = {};\n\n // check validity\n if (!u.length) error('Missing time unit.');\n u.forEach(unit => {\n if (hasOwnProperty(UNITS, unit)) {\n m[unit] = 1;\n } else {\n error(`Invalid time unit: ${unit}.`);\n }\n });\n const numTypes = (m[WEEK] || m[DAY] ? 1 : 0) + (m[QUARTER] || m[MONTH] || m[DATE] ? 1 : 0) + (m[DAYOFYEAR] ? 1 : 0);\n if (numTypes > 1) {\n error(`Incompatible time units: ${units}`);\n }\n\n // ensure proper sort order\n u.sort((a, b) => UNITS[a] - UNITS[b]);\n return u;\n}\nconst defaultSpecifiers = {\n [YEAR]: '%Y ',\n [QUARTER]: 'Q%q ',\n [MONTH]: '%b ',\n [DATE]: '%d ',\n [WEEK]: 'W%U ',\n [DAY]: '%a ',\n [DAYOFYEAR]: '%j ',\n [HOURS]: '%H:00',\n [MINUTES]: '00:%M',\n [SECONDS]: ':%S',\n [MILLISECONDS]: '.%L',\n [`${YEAR}-${MONTH}`]: '%Y-%m ',\n [`${YEAR}-${MONTH}-${DATE}`]: '%Y-%m-%d ',\n [`${HOURS}-${MINUTES}`]: '%H:%M'\n};\nfunction timeUnitSpecifier(units, specifiers) {\n const s = extend({}, defaultSpecifiers, specifiers),\n u = timeUnits(units),\n n = u.length;\n let fmt = '',\n start = 0,\n end,\n key;\n for (start = 0; start < n;) {\n for (end = u.length; end > start; --end) {\n key = u.slice(start, end).join('-');\n if (s[key] != null) {\n fmt += s[key];\n start = end;\n break;\n }\n }\n }\n return fmt.trim();\n}\n\nconst t0 = new Date();\nfunction localYear(y) {\n t0.setFullYear(y);\n t0.setMonth(0);\n t0.setDate(1);\n t0.setHours(0, 0, 0, 0);\n return t0;\n}\nfunction dayofyear(d) {\n return localDayOfYear(new Date(d));\n}\nfunction week(d) {\n return localWeekNum(new Date(d));\n}\nfunction localDayOfYear(d) {\n return timeDay.count(localYear(d.getFullYear()) - 1, d);\n}\nfunction localWeekNum(d) {\n return timeWeek.count(localYear(d.getFullYear()) - 1, d);\n}\nfunction localFirst(y) {\n return localYear(y).getDay();\n}\nfunction localDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(-1, m, d, H, M, S, L);\n date.setFullYear(y);\n return date;\n }\n return new Date(y, m, d, H, M, S, L);\n}\nfunction utcdayofyear(d) {\n return utcDayOfYear(new Date(d));\n}\nfunction utcweek(d) {\n return utcWeekNum(new Date(d));\n}\nfunction utcDayOfYear(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcDay.count(y - 1, d);\n}\nfunction utcWeekNum(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcWeek.count(y - 1, d);\n}\nfunction utcFirst(y) {\n t0.setTime(Date.UTC(y, 0, 1));\n return t0.getUTCDay();\n}\nfunction utcDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(Date.UTC(-1, m, d, H, M, S, L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(y, m, d, H, M, S, L));\n}\n\nfunction floor(units, step, get, inv, newDate) {\n const s = step || 1,\n b = peek(units),\n _ = (unit, p, key) => {\n key = key || unit;\n return getUnit(get[key], inv[key], unit === b && s, p);\n };\n const t = new Date(),\n u = toSet(units),\n y = u[YEAR] ? _(YEAR) : constant(2012),\n m = u[MONTH] ? _(MONTH) : u[QUARTER] ? _(QUARTER) : zero,\n d = u[WEEK] && u[DAY] ? _(DAY, 1, WEEK + DAY) : u[WEEK] ? _(WEEK, 1) : u[DAY] ? _(DAY, 1) : u[DATE] ? _(DATE, 1) : u[DAYOFYEAR] ? _(DAYOFYEAR, 1) : one,\n H = u[HOURS] ? _(HOURS) : zero,\n M = u[MINUTES] ? _(MINUTES) : zero,\n S = u[SECONDS] ? _(SECONDS) : zero,\n L = u[MILLISECONDS] ? _(MILLISECONDS) : zero;\n return function (v) {\n t.setTime(+v);\n const year = y(t);\n return newDate(year, m(t), d(t, year), H(t), M(t), S(t), L(t));\n };\n}\nfunction getUnit(f, inv, step, phase) {\n const u = step <= 1 ? f : phase ? (d, y) => phase + step * Math.floor((f(d, y) - phase) / step) : (d, y) => step * Math.floor(f(d, y) / step);\n return inv ? (d, y) => inv(u(d, y), y) : u;\n}\n\n// returns the day of the year based on week number, day of week,\n// and the day of the week for the first day of the year\nfunction weekday(week, day, firstDay) {\n return day + week * 7 - (firstDay + 6) % 7;\n}\n\n// -- LOCAL TIME --\n\nconst localGet = {\n [YEAR]: d => d.getFullYear(),\n [QUARTER]: d => Math.floor(d.getMonth() / 3),\n [MONTH]: d => d.getMonth(),\n [DATE]: d => d.getDate(),\n [HOURS]: d => d.getHours(),\n [MINUTES]: d => d.getMinutes(),\n [SECONDS]: d => d.getSeconds(),\n [MILLISECONDS]: d => d.getMilliseconds(),\n [DAYOFYEAR]: d => localDayOfYear(d),\n [WEEK]: d => localWeekNum(d),\n [WEEK + DAY]: (d, y) => weekday(localWeekNum(d), d.getDay(), localFirst(y)),\n [DAY]: (d, y) => weekday(1, d.getDay(), localFirst(y))\n};\nconst localInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, localFirst(y))\n};\nfunction timeFloor(units, step) {\n return floor(units, step || 1, localGet, localInv, localDate);\n}\n\n// -- UTC TIME --\n\nconst utcGet = {\n [YEAR]: d => d.getUTCFullYear(),\n [QUARTER]: d => Math.floor(d.getUTCMonth() / 3),\n [MONTH]: d => d.getUTCMonth(),\n [DATE]: d => d.getUTCDate(),\n [HOURS]: d => d.getUTCHours(),\n [MINUTES]: d => d.getUTCMinutes(),\n [SECONDS]: d => d.getUTCSeconds(),\n [MILLISECONDS]: d => d.getUTCMilliseconds(),\n [DAYOFYEAR]: d => utcDayOfYear(d),\n [WEEK]: d => utcWeekNum(d),\n [DAY]: (d, y) => weekday(1, d.getUTCDay(), utcFirst(y)),\n [WEEK + DAY]: (d, y) => weekday(utcWeekNum(d), d.getUTCDay(), utcFirst(y))\n};\nconst utcInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, utcFirst(y))\n};\nfunction utcFloor(units, step) {\n return floor(units, step || 1, utcGet, utcInv, utcDate);\n}\n\nconst timeIntervals = {\n [YEAR]: timeYear,\n [QUARTER]: timeMonth.every(3),\n [MONTH]: timeMonth,\n [WEEK]: timeWeek,\n [DATE]: timeDay,\n [DAY]: timeDay,\n [DAYOFYEAR]: timeDay,\n [HOURS]: timeHour,\n [MINUTES]: timeMinute,\n [SECONDS]: timeSecond,\n [MILLISECONDS]: timeMillisecond\n};\nconst utcIntervals = {\n [YEAR]: utcYear,\n [QUARTER]: utcMonth.every(3),\n [MONTH]: utcMonth,\n [WEEK]: utcWeek,\n [DATE]: utcDay,\n [DAY]: utcDay,\n [DAYOFYEAR]: utcDay,\n [HOURS]: utcHour,\n [MINUTES]: utcMinute,\n [SECONDS]: utcSecond,\n [MILLISECONDS]: utcMillisecond\n};\nfunction timeInterval(unit) {\n return timeIntervals[unit];\n}\nfunction utcInterval(unit) {\n return utcIntervals[unit];\n}\nfunction offset(ival, date, step) {\n return ival ? ival.offset(date, step) : undefined;\n}\nfunction timeOffset(unit, date, step) {\n return offset(timeInterval(unit), date, step);\n}\nfunction utcOffset(unit, date, step) {\n return offset(utcInterval(unit), date, step);\n}\nfunction sequence(ival, start, stop, step) {\n return ival ? ival.range(start, stop, step) : undefined;\n}\nfunction timeSequence(unit, start, stop, step) {\n return sequence(timeInterval(unit), start, stop, step);\n}\nfunction utcSequence(unit, start, stop, step) {\n return sequence(utcInterval(unit), start, stop, step);\n}\n\nconst durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\nconst Milli = [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS],\n Seconds = Milli.slice(0, -1),\n Minutes = Seconds.slice(0, -1),\n Hours = Minutes.slice(0, -1),\n Day = Hours.slice(0, -1),\n Week = [YEAR, WEEK],\n Month = [YEAR, MONTH],\n Year = [YEAR];\nconst intervals = [[Seconds, 1, durationSecond], [Seconds, 5, 5 * durationSecond], [Seconds, 15, 15 * durationSecond], [Seconds, 30, 30 * durationSecond], [Minutes, 1, durationMinute], [Minutes, 5, 5 * durationMinute], [Minutes, 15, 15 * durationMinute], [Minutes, 30, 30 * durationMinute], [Hours, 1, durationHour], [Hours, 3, 3 * durationHour], [Hours, 6, 6 * durationHour], [Hours, 12, 12 * durationHour], [Day, 1, durationDay], [Week, 1, durationWeek], [Month, 1, durationMonth], [Month, 3, 3 * durationMonth], [Year, 1, durationYear]];\nfunction bin (opt) {\n const ext = opt.extent,\n max = opt.maxbins || 40,\n target = Math.abs(span(ext)) / max;\n let i = bisector(i => i[2]).right(intervals, target),\n units,\n step;\n if (i === intervals.length) {\n units = Year, step = tickStep(ext[0] / durationYear, ext[1] / durationYear, max);\n } else if (i) {\n i = intervals[target / intervals[i - 1][2] < intervals[i][2] / target ? i - 1 : i];\n units = i[0];\n step = i[1];\n } else {\n units = Milli;\n step = Math.max(tickStep(ext[0], ext[1], max), 1);\n }\n return {\n units,\n step\n };\n}\n\nexport { DATE, DAY, DAYOFYEAR, HOURS, MILLISECONDS, MINUTES, MONTH, QUARTER, SECONDS, TIME_UNITS, WEEK, YEAR, dayofyear, bin as timeBin, timeFloor, timeInterval, timeOffset, timeSequence, timeUnitSpecifier, timeUnits, utcFloor, utcInterval, utcOffset, utcSequence, utcdayofyear, utcweek, week };\n","import { tickStep } from 'd3-array';\nimport { formatSpecifier, precisionFixed, precisionRound, precisionPrefix, format, formatPrefix, formatLocale } from 'd3-format';\nimport { SECONDS, MINUTES, HOURS, DATE, WEEK, MONTH, QUARTER, YEAR, MILLISECONDS, DAY, timeInterval, utcInterval } from 'vega-time';\nimport { isString, isObject, error, extend } from 'vega-util';\nimport { timeFormat, timeParse, utcFormat, utcParse, timeFormatLocale as timeFormatLocale$1 } from 'd3-time-format';\n\nfunction memoize (method) {\n const cache = {};\n return spec => cache[spec] || (cache[spec] = method(spec));\n}\n\nfunction trimZeroes(numberFormat, decimalChar) {\n return x => {\n const str = numberFormat(x),\n dec = str.indexOf(decimalChar);\n if (dec < 0) return str;\n let idx = rightmostDigit(str, dec);\n const end = idx < str.length ? str.slice(idx) : '';\n while (--idx > dec) if (str[idx] !== '0') {\n ++idx;\n break;\n }\n return str.slice(0, idx) + end;\n };\n}\nfunction rightmostDigit(str, dec) {\n let i = str.lastIndexOf('e'),\n c;\n if (i > 0) return i;\n for (i = str.length; --i > dec;) {\n c = str.charCodeAt(i);\n if (c >= 48 && c <= 57) return i + 1; // is digit\n }\n}\n\nfunction numberLocale(locale) {\n const format = memoize(locale.format),\n formatPrefix = locale.formatPrefix;\n return {\n format,\n formatPrefix,\n formatFloat(spec) {\n const s = formatSpecifier(spec || ',');\n if (s.precision == null) {\n s.precision = 12;\n switch (s.type) {\n case '%':\n s.precision -= 2;\n break;\n case 'e':\n s.precision -= 1;\n break;\n }\n return trimZeroes(format(s),\n // number format\n format('.1f')(1)[1] // decimal point character\n );\n } else {\n return format(s);\n }\n },\n formatSpan(start, stop, count, specifier) {\n specifier = formatSpecifier(specifier == null ? ',f' : specifier);\n const step = tickStep(start, stop, count),\n value = Math.max(Math.abs(start), Math.abs(stop));\n let precision;\n if (specifier.precision == null) {\n switch (specifier.type) {\n case 's':\n {\n if (!isNaN(precision = precisionPrefix(step, value))) {\n specifier.precision = precision;\n }\n return formatPrefix(specifier, value);\n }\n case '':\n case 'e':\n case 'g':\n case 'p':\n case 'r':\n {\n if (!isNaN(precision = precisionRound(step, value))) {\n specifier.precision = precision - (specifier.type === 'e');\n }\n break;\n }\n case 'f':\n case '%':\n {\n if (!isNaN(precision = precisionFixed(step))) {\n specifier.precision = precision - (specifier.type === '%') * 2;\n }\n break;\n }\n }\n }\n return format(specifier);\n }\n };\n}\nlet defaultNumberLocale;\nresetNumberFormatDefaultLocale();\nfunction resetNumberFormatDefaultLocale() {\n return defaultNumberLocale = numberLocale({\n format: format,\n formatPrefix: formatPrefix\n });\n}\nfunction numberFormatLocale(definition) {\n return numberLocale(formatLocale(definition));\n}\nfunction numberFormatDefaultLocale(definition) {\n return arguments.length ? defaultNumberLocale = numberFormatLocale(definition) : defaultNumberLocale;\n}\n\nfunction timeMultiFormat(format, interval, spec) {\n spec = spec || {};\n if (!isObject(spec)) {\n error(`Invalid time multi-format specifier: ${spec}`);\n }\n const second = interval(SECONDS),\n minute = interval(MINUTES),\n hour = interval(HOURS),\n day = interval(DATE),\n week = interval(WEEK),\n month = interval(MONTH),\n quarter = interval(QUARTER),\n year = interval(YEAR),\n L = format(spec[MILLISECONDS] || '.%L'),\n S = format(spec[SECONDS] || ':%S'),\n M = format(spec[MINUTES] || '%I:%M'),\n H = format(spec[HOURS] || '%I %p'),\n d = format(spec[DATE] || spec[DAY] || '%a %d'),\n w = format(spec[WEEK] || '%b %d'),\n m = format(spec[MONTH] || '%B'),\n q = format(spec[QUARTER] || '%B'),\n y = format(spec[YEAR] || '%Y');\n return date => (second(date) < date ? L : minute(date) < date ? S : hour(date) < date ? M : day(date) < date ? H : month(date) < date ? week(date) < date ? d : w : year(date) < date ? quarter(date) < date ? m : q : y)(date);\n}\nfunction timeLocale(locale) {\n const timeFormat = memoize(locale.format),\n utcFormat = memoize(locale.utcFormat);\n return {\n timeFormat: spec => isString(spec) ? timeFormat(spec) : timeMultiFormat(timeFormat, timeInterval, spec),\n utcFormat: spec => isString(spec) ? utcFormat(spec) : timeMultiFormat(utcFormat, utcInterval, spec),\n timeParse: memoize(locale.parse),\n utcParse: memoize(locale.utcParse)\n };\n}\nlet defaultTimeLocale;\nresetTimeFormatDefaultLocale();\nfunction resetTimeFormatDefaultLocale() {\n return defaultTimeLocale = timeLocale({\n format: timeFormat,\n parse: timeParse,\n utcFormat: utcFormat,\n utcParse: utcParse\n });\n}\nfunction timeFormatLocale(definition) {\n return timeLocale(timeFormatLocale$1(definition));\n}\nfunction timeFormatDefaultLocale(definition) {\n return arguments.length ? defaultTimeLocale = timeFormatLocale(definition) : defaultTimeLocale;\n}\n\nconst createLocale = (number, time) => extend({}, number, time);\nfunction locale(numberSpec, timeSpec) {\n const number = numberSpec ? numberFormatLocale(numberSpec) : numberFormatDefaultLocale();\n const time = timeSpec ? timeFormatLocale(timeSpec) : timeFormatDefaultLocale();\n return createLocale(number, time);\n}\nfunction defaultLocale(numberSpec, timeSpec) {\n const args = arguments.length;\n if (args && args !== 2) {\n error('defaultLocale expects either zero or two arguments.');\n }\n return args ? createLocale(numberFormatDefaultLocale(numberSpec), timeFormatDefaultLocale(timeSpec)) : createLocale(numberFormatDefaultLocale(), timeFormatDefaultLocale());\n}\nfunction resetDefaultLocale() {\n resetNumberFormatDefaultLocale();\n resetTimeFormatDefaultLocale();\n return defaultLocale();\n}\n\nexport { defaultLocale, locale, numberFormatDefaultLocale, numberFormatLocale, resetDefaultLocale, resetNumberFormatDefaultLocale, resetTimeFormatDefaultLocale, timeFormatDefaultLocale, timeFormatLocale };\n","import { extend, error, stringValue, isFunction, toBoolean, toNumber, toDate, toString, identity, field, isObject, isArray, isIterable, hasOwnProperty } from 'vega-util';\nimport { dsvFormat } from 'd3-dsv';\nimport { feature, mesh } from 'topojson-client';\nimport { timeFormatDefaultLocale } from 'vega-format';\n\n// Matches absolute URLs with optional protocol\n// https://... file://... //...\nconst protocol_re = /^(data:|([A-Za-z]+:)?\\/\\/)/;\n\n// Matches allowed URIs. From https://github.com/cure53/DOMPurify/blob/master/src/regexp.js with added file://\nconst allowed_re = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i; // eslint-disable-line no-useless-escape\nconst whitespace_re = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g; // eslint-disable-line no-control-regex\n\n// Special treatment in node.js for the file: protocol\nconst fileProtocol = 'file://';\n\n/**\n * Factory for a loader constructor that provides methods for requesting\n * files from either the network or disk, and for sanitizing request URIs.\n * @param {function} fetch - The Fetch API for HTTP network requests.\n * If null or undefined, HTTP loading will be disabled.\n * @param {object} fs - The file system interface for file loading.\n * If null or undefined, local file loading will be disabled.\n * @return {function} A loader constructor with the following signature:\n * param {object} [options] - Optional default loading options to use.\n * return {object} - A new loader instance.\n */\nfunction loaderFactory (fetch, fs) {\n return options => ({\n options: options || {},\n sanitize: sanitize,\n load: load,\n fileAccess: !!fs,\n file: fileLoader(fs),\n http: httpLoader(fetch)\n });\n}\n\n/**\n * Load an external resource, typically either from the web or from the local\n * filesystem. This function uses {@link sanitize} to first sanitize the uri,\n * then calls either {@link http} (for web requests) or {@link file} (for\n * filesystem loading).\n * @param {string} uri - The resource indicator (e.g., URL or filename).\n * @param {object} [options] - Optional loading options. These options will\n * override any existing default options.\n * @return {Promise} - A promise that resolves to the loaded content.\n */\nasync function load(uri, options) {\n const opt = await this.sanitize(uri, options),\n url = opt.href;\n return opt.localFile ? this.file(url) : this.http(url, options);\n}\n\n/**\n * URI sanitizer function.\n * @param {string} uri - The uri (url or filename) to check.\n * @param {object} options - An options hash.\n * @return {Promise} - A promise that resolves to an object containing\n * sanitized uri data, or rejects it the input uri is deemed invalid.\n * The properties of the resolved object are assumed to be\n * valid attributes for an HTML 'a' tag. The sanitized uri *must* be\n * provided by the 'href' property of the returned object.\n */\nasync function sanitize(uri, options) {\n options = extend({}, this.options, options);\n const fileAccess = this.fileAccess,\n result = {\n href: null\n };\n let isFile, loadFile, base;\n const isAllowed = allowed_re.test(uri.replace(whitespace_re, ''));\n if (uri == null || typeof uri !== 'string' || !isAllowed) {\n error('Sanitize failure, invalid URI: ' + stringValue(uri));\n }\n const hasProtocol = protocol_re.test(uri);\n\n // if relative url (no protocol/host), prepend baseURL\n if ((base = options.baseURL) && !hasProtocol) {\n // Ensure that there is a slash between the baseURL (e.g. hostname) and url\n if (!uri.startsWith('/') && !base.endsWith('/')) {\n uri = '/' + uri;\n }\n uri = base + uri;\n }\n\n // should we load from file system?\n loadFile = (isFile = uri.startsWith(fileProtocol)) || options.mode === 'file' || options.mode !== 'http' && !hasProtocol && fileAccess;\n if (isFile) {\n // strip file protocol\n uri = uri.slice(fileProtocol.length);\n } else if (uri.startsWith('//')) {\n if (options.defaultProtocol === 'file') {\n // if is file, strip protocol and set loadFile flag\n uri = uri.slice(2);\n loadFile = true;\n } else {\n // if relative protocol (starts with '//'), prepend default protocol\n uri = (options.defaultProtocol || 'http') + ':' + uri;\n }\n }\n\n // set non-enumerable mode flag to indicate local file load\n Object.defineProperty(result, 'localFile', {\n value: !!loadFile\n });\n\n // set uri\n result.href = uri;\n\n // set default result target, if specified\n if (options.target) {\n result.target = options.target + '';\n }\n\n // set default result rel, if specified (#1542)\n if (options.rel) {\n result.rel = options.rel + '';\n }\n\n // provide control over cross-origin image handling (#2238)\n // https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image\n if (options.context === 'image' && options.crossOrigin) {\n result.crossOrigin = options.crossOrigin + '';\n }\n\n // return\n return result;\n}\n\n/**\n * File system loader factory.\n * @param {object} fs - The file system interface.\n * @return {function} - A file loader with the following signature:\n * param {string} filename - The file system path to load.\n * param {string} filename - The file system path to load.\n * return {Promise} A promise that resolves to the file contents.\n */\nfunction fileLoader(fs) {\n return fs ? filename => new Promise((accept, reject) => {\n fs.readFile(filename, (error, data) => {\n if (error) reject(error);else accept(data);\n });\n }) : fileReject;\n}\n\n/**\n * Default file system loader that simply rejects.\n */\nasync function fileReject() {\n error('No file system access.');\n}\n\n/**\n * HTTP request handler factory.\n * @param {function} fetch - The Fetch API method.\n * @return {function} - An http loader with the following signature:\n * param {string} url - The url to request.\n * param {object} options - An options hash.\n * return {Promise} - A promise that resolves to the file contents.\n */\nfunction httpLoader(fetch) {\n return fetch ? async function (url, options) {\n const opt = extend({}, this.options.http, options),\n type = options && options.response,\n response = await fetch(url, opt);\n return !response.ok ? error(response.status + '' + response.statusText) : isFunction(response[type]) ? response[type]() : response.text();\n } : httpReject;\n}\n\n/**\n * Default http request handler that simply rejects.\n */\nasync function httpReject() {\n error('No HTTP fetch method available.');\n}\n\nconst isValid = _ => _ != null && _ === _;\nconst isBoolean = _ => _ === 'true' || _ === 'false' || _ === true || _ === false;\nconst isDate = _ => !Number.isNaN(Date.parse(_));\nconst isNumber = _ => !Number.isNaN(+_) && !(_ instanceof Date);\nconst isInteger = _ => isNumber(_) && Number.isInteger(+_);\nconst typeParsers = {\n boolean: toBoolean,\n integer: toNumber,\n number: toNumber,\n date: toDate,\n string: toString,\n unknown: identity\n};\nconst typeTests = [isBoolean, isInteger, isNumber, isDate];\nconst typeList = ['boolean', 'integer', 'number', 'date'];\nfunction inferType(values, field) {\n if (!values || !values.length) return 'unknown';\n const n = values.length,\n m = typeTests.length,\n a = typeTests.map((_, i) => i + 1);\n for (let i = 0, t = 0, j, value; i < n; ++i) {\n value = field ? values[i][field] : values[i];\n for (j = 0; j < m; ++j) {\n if (a[j] && isValid(value) && !typeTests[j](value)) {\n a[j] = 0;\n ++t;\n if (t === typeTests.length) return 'string';\n }\n }\n }\n return typeList[a.reduce((u, v) => u === 0 ? v : u, 0) - 1];\n}\nfunction inferTypes(data, fields) {\n return fields.reduce((types, field) => {\n types[field] = inferType(data, field);\n return types;\n }, {});\n}\n\nfunction delimitedFormat(delimiter) {\n const parse = function (data, format) {\n const delim = {\n delimiter: delimiter\n };\n return dsv(data, format ? extend(format, delim) : delim);\n };\n parse.responseType = 'text';\n return parse;\n}\nfunction dsv(data, format) {\n if (format.header) {\n data = format.header.map(stringValue).join(format.delimiter) + '\\n' + data;\n }\n return dsvFormat(format.delimiter).parse(data + '');\n}\ndsv.responseType = 'text';\n\nfunction isBuffer(_) {\n return typeof Buffer === 'function' && isFunction(Buffer.isBuffer) ? Buffer.isBuffer(_) : false;\n}\nfunction json(data, format) {\n const prop = format && format.property ? field(format.property) : identity;\n return isObject(data) && !isBuffer(data) ? parseJSON(prop(data), format) : prop(JSON.parse(data));\n}\njson.responseType = 'json';\nfunction parseJSON(data, format) {\n if (!isArray(data) && isIterable(data)) {\n data = [...data];\n }\n return format && format.copy ? JSON.parse(JSON.stringify(data)) : data;\n}\n\nconst filters = {\n interior: (a, b) => a !== b,\n exterior: (a, b) => a === b\n};\nfunction topojson(data, format) {\n let method, object, property, filter;\n data = json(data, format);\n if (format && format.feature) {\n method = feature;\n property = format.feature;\n } else if (format && format.mesh) {\n method = mesh;\n property = format.mesh;\n filter = filters[format.filter];\n } else {\n error('Missing TopoJSON feature or mesh parameter.');\n }\n object = (object = data.objects[property]) ? method(data, object, filter) : error('Invalid TopoJSON object: ' + property);\n return object && object.features || [object];\n}\ntopojson.responseType = 'json';\n\nconst format = {\n dsv: dsv,\n csv: delimitedFormat(','),\n tsv: delimitedFormat('\\t'),\n json: json,\n topojson: topojson\n};\nfunction formats(name, reader) {\n if (arguments.length > 1) {\n format[name] = reader;\n return this;\n } else {\n return hasOwnProperty(format, name) ? format[name] : null;\n }\n}\nfunction responseType(type) {\n const f = formats(type);\n return f && f.responseType || 'text';\n}\n\nfunction read (data, schema, timeParser, utcParser) {\n schema = schema || {};\n const reader = formats(schema.type || 'json');\n if (!reader) error('Unknown data format type: ' + schema.type);\n data = reader(data, schema);\n if (schema.parse) parse(data, schema.parse, timeParser, utcParser);\n if (hasOwnProperty(data, 'columns')) delete data.columns;\n return data;\n}\nfunction parse(data, types, timeParser, utcParser) {\n if (!data.length) return; // early exit for empty data\n\n const locale = timeFormatDefaultLocale();\n timeParser = timeParser || locale.timeParse;\n utcParser = utcParser || locale.utcParse;\n let fields = data.columns || Object.keys(data[0]),\n datum,\n field,\n i,\n j,\n n,\n m;\n if (types === 'auto') types = inferTypes(data, fields);\n fields = Object.keys(types);\n const parsers = fields.map(field => {\n const type = types[field];\n let parts, pattern;\n if (type && (type.startsWith('date:') || type.startsWith('utc:'))) {\n parts = type.split(/:(.+)?/, 2); // split on first :\n pattern = parts[1];\n if (pattern[0] === '\\'' && pattern[pattern.length - 1] === '\\'' || pattern[0] === '\"' && pattern[pattern.length - 1] === '\"') {\n pattern = pattern.slice(1, -1);\n }\n const parse = parts[0] === 'utc' ? utcParser : timeParser;\n return parse(pattern);\n }\n if (!typeParsers[type]) {\n throw Error('Illegal format pattern: ' + field + ':' + type);\n }\n return typeParsers[type];\n });\n for (i = 0, n = data.length, m = fields.length; i < n; ++i) {\n datum = data[i];\n for (j = 0; j < m; ++j) {\n field = fields[j];\n datum[field] = parsers[j](datum[field]);\n }\n }\n}\n\nconst loader = loaderFactory(typeof fetch !== 'undefined' && fetch,\n// use built-in fetch API\nnull // no file system access\n);\n\nexport { format, formats, inferType, inferTypes, loader, read, responseType, typeParsers };\n","import { identity, array, isFunction, constant, isArray, id, error, truthy, debounce, extend, visitArray, inherits, logger, Error, hasOwnProperty } from 'vega-util';\nimport { read, responseType, loader } from 'vega-loader';\nimport { defaultLocale } from 'vega-format';\n\nfunction UniqueList(idFunc) {\n const $ = idFunc || identity,\n list = [],\n ids = {};\n list.add = _ => {\n const id = $(_);\n if (!ids[id]) {\n ids[id] = 1;\n list.push(_);\n }\n return list;\n };\n list.remove = _ => {\n const id = $(_);\n if (ids[id]) {\n ids[id] = 0;\n const idx = list.indexOf(_);\n if (idx >= 0) list.splice(idx, 1);\n }\n return list;\n };\n return list;\n}\n\n/**\n * Invoke and await a potentially async callback function. If\n * an error occurs, trap it and route to Dataflow.error.\n * @param {Dataflow} df - The dataflow instance\n * @param {function} callback - A callback function to invoke\n * and then await. The dataflow will be passed as the single\n * argument to the function.\n */\nasync function asyncCallback (df, callback) {\n try {\n await callback(df);\n } catch (err) {\n df.error(err);\n }\n}\n\nconst TUPLE_ID_KEY = Symbol('vega_id');\nlet TUPLE_ID = 1;\n\n/**\n * Checks if an input value is a registered tuple.\n * @param {*} t - The value to check.\n * @return {boolean} True if the input is a tuple, false otherwise.\n */\nfunction isTuple(t) {\n return !!(t && tupleid(t));\n}\n\n/**\n * Returns the id of a tuple.\n * @param {object} t - The input tuple.\n * @return {*} the tuple id.\n */\nfunction tupleid(t) {\n return t[TUPLE_ID_KEY];\n}\n\n/**\n * Sets the id of a tuple.\n * @param {object} t - The input tuple.\n * @param {*} id - The id value to set.\n * @return {object} the input tuple.\n */\nfunction setid(t, id) {\n t[TUPLE_ID_KEY] = id;\n return t;\n}\n\n/**\n * Ingest an object or value as a data tuple.\n * If the input value is an object, an id field will be added to it. For\n * efficiency, the input object is modified directly. A copy is not made.\n * If the input value is a literal, it will be wrapped in a new object\n * instance, with the value accessible as the 'data' property.\n * @param datum - The value to ingest.\n * @return {object} The ingested data tuple.\n */\nfunction ingest$1(datum) {\n const t = datum === Object(datum) ? datum : {\n data: datum\n };\n return tupleid(t) ? t : setid(t, TUPLE_ID++);\n}\n\n/**\n * Given a source tuple, return a derived copy.\n * @param {object} t - The source tuple.\n * @return {object} The derived tuple.\n */\nfunction derive(t) {\n return rederive(t, ingest$1({}));\n}\n\n/**\n * Rederive a derived tuple by copying values from the source tuple.\n * @param {object} t - The source tuple.\n * @param {object} d - The derived tuple.\n * @return {object} The derived tuple.\n */\nfunction rederive(t, d) {\n for (const k in t) d[k] = t[k];\n return d;\n}\n\n/**\n * Replace an existing tuple with a new tuple.\n * @param {object} t - The existing data tuple.\n * @param {object} d - The new tuple that replaces the old.\n * @return {object} The new tuple.\n */\nfunction replace(t, d) {\n return setid(d, tupleid(t));\n}\n\n/**\n * Generate an augmented comparator function that provides stable\n * sorting by tuple id when the given comparator produces ties.\n * @param {function} cmp - The comparator to augment.\n * @param {function} [f] - Optional tuple accessor function.\n * @return {function} An augmented comparator function.\n */\nfunction stableCompare(cmp, f) {\n return !cmp ? null : f ? (a, b) => cmp(a, b) || tupleid(f(a)) - tupleid(f(b)) : (a, b) => cmp(a, b) || tupleid(a) - tupleid(b);\n}\n\nfunction isChangeSet(v) {\n return v && v.constructor === changeset;\n}\nfunction changeset() {\n const add = [],\n // insert tuples\n rem = [],\n // remove tuples\n mod = [],\n // modify tuples\n remp = [],\n // remove by predicate\n modp = []; // modify by predicate\n let clean = null,\n reflow = false;\n return {\n constructor: changeset,\n insert(t) {\n const d = array(t),\n n = d.length;\n for (let i = 0; i < n; ++i) add.push(d[i]);\n return this;\n },\n remove(t) {\n const a = isFunction(t) ? remp : rem,\n d = array(t),\n n = d.length;\n for (let i = 0; i < n; ++i) a.push(d[i]);\n return this;\n },\n modify(t, field, value) {\n const m = {\n field: field,\n value: constant(value)\n };\n if (isFunction(t)) {\n m.filter = t;\n modp.push(m);\n } else {\n m.tuple = t;\n mod.push(m);\n }\n return this;\n },\n encode(t, set) {\n if (isFunction(t)) modp.push({\n filter: t,\n field: set\n });else mod.push({\n tuple: t,\n field: set\n });\n return this;\n },\n clean(value) {\n clean = value;\n return this;\n },\n reflow() {\n reflow = true;\n return this;\n },\n pulse(pulse, tuples) {\n const cur = {},\n out = {};\n let i, n, m, f, t, id;\n\n // build lookup table of current tuples\n for (i = 0, n = tuples.length; i < n; ++i) {\n cur[tupleid(tuples[i])] = 1;\n }\n\n // process individual tuples to remove\n for (i = 0, n = rem.length; i < n; ++i) {\n t = rem[i];\n cur[tupleid(t)] = -1;\n }\n\n // process predicate-based removals\n for (i = 0, n = remp.length; i < n; ++i) {\n f = remp[i];\n tuples.forEach(t => {\n if (f(t)) cur[tupleid(t)] = -1;\n });\n }\n\n // process all add tuples\n for (i = 0, n = add.length; i < n; ++i) {\n t = add[i];\n id = tupleid(t);\n if (cur[id]) {\n // tuple already resides in dataset\n // if flagged for both add and remove, cancel\n cur[id] = 1;\n } else {\n // tuple does not reside in dataset, add\n pulse.add.push(ingest$1(add[i]));\n }\n }\n\n // populate pulse rem list\n for (i = 0, n = tuples.length; i < n; ++i) {\n t = tuples[i];\n if (cur[tupleid(t)] < 0) pulse.rem.push(t);\n }\n\n // modify helper method\n function modify(t, f, v) {\n if (v) {\n t[f] = v(t);\n } else {\n pulse.encode = f;\n }\n if (!reflow) out[tupleid(t)] = t;\n }\n\n // process individual tuples to modify\n for (i = 0, n = mod.length; i < n; ++i) {\n m = mod[i];\n t = m.tuple;\n f = m.field;\n id = cur[tupleid(t)];\n if (id > 0) {\n modify(t, f, m.value);\n pulse.modifies(f);\n }\n }\n\n // process predicate-based modifications\n for (i = 0, n = modp.length; i < n; ++i) {\n m = modp[i];\n f = m.filter;\n tuples.forEach(t => {\n if (f(t) && cur[tupleid(t)] > 0) {\n modify(t, m.field, m.value);\n }\n });\n pulse.modifies(m.field);\n }\n\n // upon reflow request, populate mod with all non-removed tuples\n // otherwise, populate mod with modified tuples only\n if (reflow) {\n pulse.mod = rem.length || remp.length ? tuples.filter(t => cur[tupleid(t)] > 0) : tuples.slice();\n } else {\n for (id in out) pulse.mod.push(out[id]);\n }\n\n // set pulse garbage collection request\n if (clean || clean == null && (rem.length || remp.length)) {\n pulse.clean(true);\n }\n return pulse;\n }\n };\n}\n\nconst CACHE = '_:mod:_';\n\n/**\n * Hash that tracks modifications to assigned values.\n * Callers *must* use the set method to update values.\n */\nfunction Parameters() {\n Object.defineProperty(this, CACHE, {\n writable: true,\n value: {}\n });\n}\nParameters.prototype = {\n /**\n * Set a parameter value. If the parameter value changes, the parameter\n * will be recorded as modified.\n * @param {string} name - The parameter name.\n * @param {number} index - The index into an array-value parameter. Ignored if\n * the argument is undefined, null or less than zero.\n * @param {*} value - The parameter value to set.\n * @param {boolean} [force=false] - If true, records the parameter as modified\n * even if the value is unchanged.\n * @return {Parameters} - This parameter object.\n */\n set(name, index, value, force) {\n const o = this,\n v = o[name],\n mod = o[CACHE];\n if (index != null && index >= 0) {\n if (v[index] !== value || force) {\n v[index] = value;\n mod[index + ':' + name] = -1;\n mod[name] = -1;\n }\n } else if (v !== value || force) {\n o[name] = value;\n mod[name] = isArray(value) ? 1 + value.length : -1;\n }\n return o;\n },\n /**\n * Tests if one or more parameters has been modified. If invoked with no\n * arguments, returns true if any parameter value has changed. If the first\n * argument is array, returns trues if any parameter name in the array has\n * changed. Otherwise, tests if the given name and optional array index has\n * changed.\n * @param {string} name - The parameter name to test.\n * @param {number} [index=undefined] - The parameter array index to test.\n * @return {boolean} - Returns true if a queried parameter was modified.\n */\n modified(name, index) {\n const mod = this[CACHE];\n if (!arguments.length) {\n for (const k in mod) {\n if (mod[k]) return true;\n }\n return false;\n } else if (isArray(name)) {\n for (let k = 0; k < name.length; ++k) {\n if (mod[name[k]]) return true;\n }\n return false;\n }\n return index != null && index >= 0 ? index + 1 < mod[name] || !!mod[index + ':' + name] : !!mod[name];\n },\n /**\n * Clears the modification records. After calling this method,\n * all parameters are considered unmodified.\n */\n clear() {\n this[CACHE] = {};\n return this;\n }\n};\n\nlet OP_ID = 0;\nconst PULSE = 'pulse',\n NO_PARAMS = new Parameters();\n\n// Boolean Flags\nconst SKIP$1 = 1,\n MODIFIED = 2;\n\n/**\n * An Operator is a processing node in a dataflow graph.\n * Each operator stores a value and an optional value update function.\n * Operators can accept a hash of named parameters. Parameter values can\n * either be direct (JavaScript literals, arrays, objects) or indirect\n * (other operators whose values will be pulled dynamically). Operators\n * included as parameters will have this operator added as a dependency.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {function(object, Pulse)} [update] - An update function. Upon\n * evaluation of this operator, the update function will be invoked and the\n * return value will be used as the new value of this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @see parameters\n */\nfunction Operator(init, update, params, react) {\n this.id = ++OP_ID;\n this.value = init;\n this.stamp = -1;\n this.rank = -1;\n this.qrank = -1;\n this.flags = 0;\n if (update) {\n this._update = update;\n }\n if (params) this.parameters(params, react);\n}\nfunction flag(bit) {\n return function (state) {\n const f = this.flags;\n if (arguments.length === 0) return !!(f & bit);\n this.flags = state ? f | bit : f & ~bit;\n return this;\n };\n}\nOperator.prototype = {\n /**\n * Returns a list of target operators dependent on this operator.\n * If this list does not exist, it is created and then returned.\n * @return {UniqueList}\n */\n targets() {\n return this._targets || (this._targets = UniqueList(id));\n },\n /**\n * Sets the value of this operator.\n * @param {*} value - the value to set.\n * @return {Number} Returns 1 if the operator value has changed\n * according to strict equality, returns 0 otherwise.\n */\n set(value) {\n if (this.value !== value) {\n this.value = value;\n return 1;\n } else {\n return 0;\n }\n },\n /**\n * Indicates that operator evaluation should be skipped on the next pulse.\n * This operator will still propagate incoming pulses, but its update function\n * will not be invoked. The skip flag is reset after every pulse, so calling\n * this method will affect processing of the next pulse only.\n */\n skip: flag(SKIP$1),\n /**\n * Indicates that this operator's value has been modified on its most recent\n * pulse. Normally modification is checked via strict equality; however, in\n * some cases it is more efficient to update the internal state of an object.\n * In those cases, the modified flag can be used to trigger propagation. Once\n * set, the modification flag persists across pulses until unset. The flag can\n * be used with the last timestamp to test if a modification is recent.\n */\n modified: flag(MODIFIED),\n /**\n * Sets the parameters for this operator. The parameter values are analyzed for\n * operator instances. If found, this operator will be added as a dependency\n * of the parameterizing operator. Operator values are dynamically marshalled\n * from each operator parameter prior to evaluation. If a parameter value is\n * an array, the array will also be searched for Operator instances. However,\n * the search does not recurse into sub-arrays or object properties.\n * @param {object} params - A hash of operator parameters.\n * @param {boolean} [react=true] - A flag indicating if this operator should\n * automatically update (react) when parameter values change. In other words,\n * this flag determines if the operator registers itself as a listener on\n * any upstream operators included in the parameters.\n * @param {boolean} [initonly=false] - A flag indicating if this operator\n * should calculate an update only upon its initial evaluation, then\n * deregister dependencies and suppress all future update invocations.\n * @return {Operator[]} - An array of upstream dependencies.\n */\n parameters(params, react, initonly) {\n react = react !== false;\n const argval = this._argval = this._argval || new Parameters(),\n argops = this._argops = this._argops || [],\n deps = [];\n let name, value, n, i;\n const add = (name, index, value) => {\n if (value instanceof Operator) {\n if (value !== this) {\n if (react) value.targets().add(this);\n deps.push(value);\n }\n argops.push({\n op: value,\n name: name,\n index: index\n });\n } else {\n argval.set(name, index, value);\n }\n };\n for (name in params) {\n value = params[name];\n if (name === PULSE) {\n array(value).forEach(op => {\n if (!(op instanceof Operator)) {\n error('Pulse parameters must be operator instances.');\n } else if (op !== this) {\n op.targets().add(this);\n deps.push(op);\n }\n });\n this.source = value;\n } else if (isArray(value)) {\n argval.set(name, -1, Array(n = value.length));\n for (i = 0; i < n; ++i) add(name, i, value[i]);\n } else {\n add(name, -1, value);\n }\n }\n this.marshall().clear(); // initialize values\n if (initonly) argops.initonly = true;\n return deps;\n },\n /**\n * Internal method for marshalling parameter values.\n * Visits each operator dependency to pull the latest value.\n * @return {Parameters} A Parameters object to pass to the update function.\n */\n marshall(stamp) {\n const argval = this._argval || NO_PARAMS,\n argops = this._argops;\n let item, i, op, mod;\n if (argops) {\n const n = argops.length;\n for (i = 0; i < n; ++i) {\n item = argops[i];\n op = item.op;\n mod = op.modified() && op.stamp === stamp;\n argval.set(item.name, item.index, op.value, mod);\n }\n if (argops.initonly) {\n for (i = 0; i < n; ++i) {\n item = argops[i];\n item.op.targets().remove(this);\n }\n this._argops = null;\n this._update = null;\n }\n }\n return argval;\n },\n /**\n * Detach this operator from the dataflow.\n * Unregisters listeners on upstream dependencies.\n */\n detach() {\n const argops = this._argops;\n let i, n, item, op;\n if (argops) {\n for (i = 0, n = argops.length; i < n; ++i) {\n item = argops[i];\n op = item.op;\n if (op._targets) {\n op._targets.remove(this);\n }\n }\n }\n\n // remove references to the source and pulse object,\n // if present, to prevent memory leaks of old data.\n this.pulse = null;\n this.source = null;\n },\n /**\n * Delegate method to perform operator processing.\n * Subclasses can override this method to perform custom processing.\n * By default, it marshalls parameters and calls the update function\n * if that function is defined. If the update function does not\n * change the operator value then StopPropagation is returned.\n * If no update function is defined, this method does nothing.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return The output pulse or StopPropagation. A falsy return value\n * (including undefined) will let the input pulse pass through.\n */\n evaluate(pulse) {\n const update = this._update;\n if (update) {\n const params = this.marshall(pulse.stamp),\n v = update.call(this, params, pulse);\n params.clear();\n if (v !== this.value) {\n this.value = v;\n } else if (!this.modified()) {\n return pulse.StopPropagation;\n }\n }\n },\n /**\n * Run this operator for the current pulse. If this operator has already\n * been run at (or after) the pulse timestamp, returns StopPropagation.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\n run(pulse) {\n if (pulse.stamp < this.stamp) return pulse.StopPropagation;\n let rv;\n if (this.skip()) {\n this.skip(false);\n rv = 0;\n } else {\n rv = this.evaluate(pulse);\n }\n return this.pulse = rv || pulse;\n }\n};\n\n/**\n * Add an operator to the dataflow graph. This function accepts a\n * variety of input argument types. The basic signature supports an\n * initial value, update function and parameters. If the first parameter\n * is an Operator instance, it will be added directly. If it is a\n * constructor for an Operator subclass, a new instance will be instantiated.\n * Otherwise, if the first parameter is a function instance, it will be used\n * as the update function and a null initial value is assumed.\n * @param {*} init - One of: the operator to add, the initial value of\n * the operator, an operator class to instantiate, or an update function.\n * @param {function} [update] - The operator update function.\n * @param {object} [params] - The operator parameters.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @return {Operator} - The added operator.\n */\nfunction add (init, update, params, react) {\n let shift = 1,\n op;\n if (init instanceof Operator) {\n op = init;\n } else if (init && init.prototype instanceof Operator) {\n op = new init();\n } else if (isFunction(init)) {\n op = new Operator(null, init);\n } else {\n shift = 0;\n op = new Operator(init, update);\n }\n this.rank(op);\n if (shift) {\n react = params;\n params = update;\n }\n if (params) this.connect(op, op.parameters(params, react));\n this.touch(op);\n return op;\n}\n\n/**\n * Connect a target operator as a dependent of source operators.\n * If necessary, this method will rerank the target operator and its\n * dependents to ensure propagation proceeds in a topologically sorted order.\n * @param {Operator} target - The target operator.\n * @param {Array} - The source operators that should propagate\n * to the target operator.\n */\nfunction connect (target, sources) {\n const targetRank = target.rank,\n n = sources.length;\n for (let i = 0; i < n; ++i) {\n if (targetRank < sources[i].rank) {\n this.rerank(target);\n return;\n }\n }\n}\n\nlet STREAM_ID = 0;\n\n/**\n * Models an event stream.\n * @constructor\n * @param {function(Object, number): boolean} [filter] - Filter predicate.\n * Events pass through when truthy, events are suppressed when falsy.\n * @param {function(Object): *} [apply] - Applied to input events to produce\n * new event values.\n * @param {function(Object)} [receive] - Event callback function to invoke\n * upon receipt of a new event. Use to override standard event processing.\n */\nfunction EventStream(filter, apply, receive) {\n this.id = ++STREAM_ID;\n this.value = null;\n if (receive) this.receive = receive;\n if (filter) this._filter = filter;\n if (apply) this._apply = apply;\n}\n\n/**\n * Creates a new event stream instance with the provided\n * (optional) filter, apply and receive functions.\n * @param {function(Object, number): boolean} [filter] - Filter predicate.\n * Events pass through when truthy, events are suppressed when falsy.\n * @param {function(Object): *} [apply] - Applied to input events to produce\n * new event values.\n * @see EventStream\n */\nfunction stream(filter, apply, receive) {\n return new EventStream(filter, apply, receive);\n}\nEventStream.prototype = {\n _filter: truthy,\n _apply: identity,\n targets() {\n return this._targets || (this._targets = UniqueList(id));\n },\n consume(_) {\n if (!arguments.length) return !!this._consume;\n this._consume = !!_;\n return this;\n },\n receive(evt) {\n if (this._filter(evt)) {\n const val = this.value = this._apply(evt),\n trg = this._targets,\n n = trg ? trg.length : 0;\n for (let i = 0; i < n; ++i) trg[i].receive(val);\n if (this._consume) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n }\n },\n filter(filter) {\n const s = stream(filter);\n this.targets().add(s);\n return s;\n },\n apply(apply) {\n const s = stream(null, apply);\n this.targets().add(s);\n return s;\n },\n merge() {\n const s = stream();\n this.targets().add(s);\n for (let i = 0, n = arguments.length; i < n; ++i) {\n arguments[i].targets().add(s);\n }\n return s;\n },\n throttle(pause) {\n let t = -1;\n return this.filter(() => {\n const now = Date.now();\n if (now - t > pause) {\n t = now;\n return 1;\n } else {\n return 0;\n }\n });\n },\n debounce(delay) {\n const s = stream();\n this.targets().add(stream(null, null, debounce(delay, e => {\n const df = e.dataflow;\n s.receive(e);\n if (df && df.run) df.run();\n })));\n return s;\n },\n between(a, b) {\n let active = false;\n a.targets().add(stream(null, null, () => active = true));\n b.targets().add(stream(null, null, () => active = false));\n return this.filter(() => active);\n },\n detach() {\n // ensures compatibility with operators (#2753)\n // remove references to other streams and filter functions that may\n // be bound to subcontexts that need to be garbage collected.\n this._filter = truthy;\n this._targets = null;\n }\n};\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor. The input must\n * support the addEventListener method.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @param {function(object): *} [apply] - Event application function.\n * If provided, this function will be invoked and the result will be\n * used as the downstream event value.\n * @return {EventStream}\n */\nfunction events (source, type, filter, apply) {\n const df = this,\n s = stream(filter, apply),\n send = function (e) {\n e.dataflow = df;\n try {\n s.receive(e);\n } catch (error) {\n df.error(error);\n } finally {\n df.run();\n }\n };\n let sources;\n if (typeof source === 'string' && typeof document !== 'undefined') {\n sources = document.querySelectorAll(source);\n } else {\n sources = array(source);\n }\n const n = sources.length;\n for (let i = 0; i < n; ++i) {\n sources[i].addEventListener(type, send);\n }\n return s;\n}\n\nfunction parse(data, format) {\n const locale = this.locale();\n return read(data, format, locale.timeParse, locale.utcParse);\n}\n\n/**\n * Ingests new data into the dataflow. First parses the data using the\n * vega-loader read method, then pulses a changeset to the target operator.\n * @param {Operator} target - The Operator to target with ingested data,\n * typically a Collect transform instance.\n * @param {*} data - The input data, prior to parsing. For JSON this may\n * be a string or an object. For CSV, TSV, etc should be a string.\n * @param {object} format - The data format description for parsing\n * loaded data. This object is passed to the vega-loader read method.\n * @returns {Dataflow}\n */\nfunction ingest(target, data, format) {\n data = this.parse(data, format);\n return this.pulse(target, this.changeset().insert(data));\n}\n\n/**\n * Request data from an external source, parse it, and return a Promise.\n * @param {string} url - The URL from which to load the data. This string\n * is passed to the vega-loader load method.\n * @param {object} [format] - The data format description for parsing\n * loaded data. This object is passed to the vega-loader read method.\n * @return {Promise} A Promise that resolves upon completion of the request.\n * The resolved object contains the following properties:\n * - data: an array of parsed data (or null upon error)\n * - status: a code for success (0), load fail (-1), or parse fail (-2)\n */\nasync function request(url, format) {\n const df = this;\n let status = 0,\n data;\n try {\n data = await df.loader().load(url, {\n context: 'dataflow',\n response: responseType(format && format.type)\n });\n try {\n data = df.parse(data, format);\n } catch (err) {\n status = -2;\n df.warn('Data ingestion failed', url, err);\n }\n } catch (err) {\n status = -1;\n df.warn('Loading failed', url, err);\n }\n return {\n data,\n status\n };\n}\nasync function preload(target, url, format) {\n const df = this,\n pending = df._pending || loadPending(df);\n pending.requests += 1;\n const res = await df.request(url, format);\n df.pulse(target, df.changeset().remove(truthy).insert(res.data || []));\n pending.done();\n return res;\n}\nfunction loadPending(df) {\n let accept;\n const pending = new Promise(a => accept = a);\n pending.requests = 0;\n pending.done = () => {\n if (--pending.requests === 0) {\n df._pending = null;\n accept(df);\n }\n };\n return df._pending = pending;\n}\n\nconst SKIP = {\n skip: true\n};\n\n/**\n * Perform operator updates in response to events. Applies an\n * update function to compute a new operator value. If the update function\n * returns a {@link ChangeSet}, the operator will be pulsed with those tuple\n * changes. Otherwise, the operator value will be updated to the return value.\n * @param {EventStream|Operator} source - The event source to react to.\n * This argument can be either an EventStream or an Operator.\n * @param {Operator|function(object):Operator} target - The operator to update.\n * This argument can either be an Operator instance or (if the source\n * argument is an EventStream), a function that accepts an event object as\n * input and returns an Operator to target.\n * @param {function(Parameters,Event): *} [update] - Optional update function\n * to compute the new operator value, or a literal value to set. Update\n * functions expect to receive a parameter object and event as arguments.\n * This function can either return a new operator value or (if the source\n * argument is an EventStream) a {@link ChangeSet} instance to pulse\n * the target operator with tuple changes.\n * @param {object} [params] - The update function parameters.\n * @param {object} [options] - Additional options hash. If not overridden,\n * updated operators will be skipped by default.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @return {Dataflow}\n */\nfunction on (source, target, update, params, options) {\n const fn = source instanceof Operator ? onOperator : onStream;\n fn(this, source, target, update, params, options);\n return this;\n}\nfunction onStream(df, stream, target, update, params, options) {\n const opt = extend({}, options, SKIP);\n let func, op;\n if (!isFunction(target)) target = constant(target);\n if (update === undefined) {\n func = e => df.touch(target(e));\n } else if (isFunction(update)) {\n op = new Operator(null, update, params, false);\n func = e => {\n op.evaluate(e);\n const t = target(e),\n v = op.value;\n isChangeSet(v) ? df.pulse(t, v, options) : df.update(t, v, opt);\n };\n } else {\n func = e => df.update(target(e), update, opt);\n }\n stream.apply(func);\n}\nfunction onOperator(df, source, target, update, params, options) {\n if (update === undefined) {\n source.targets().add(target);\n } else {\n const opt = options || {},\n op = new Operator(null, updater(target, update), params, false);\n op.modified(opt.force);\n op.rank = source.rank; // immediately follow source\n source.targets().add(op); // add dependency\n\n if (target) {\n op.skip(true); // skip first invocation\n op.value = target.value; // initialize value\n op.targets().add(target); // chain dependencies\n df.connect(target, [op]); // rerank as needed, #1672\n }\n }\n}\n\nfunction updater(target, update) {\n update = isFunction(update) ? update : constant(update);\n return target ? function (_, pulse) {\n const value = update(_, pulse);\n if (!target.skip()) {\n target.skip(value !== this.value).value = value;\n }\n return value;\n } : update;\n}\n\n/**\n * Assigns a rank to an operator. Ranks are assigned in increasing order\n * by incrementing an internal rank counter.\n * @param {Operator} op - The operator to assign a rank.\n */\nfunction rank(op) {\n op.rank = ++this._rank;\n}\n\n/**\n * Re-ranks an operator and all downstream target dependencies. This\n * is necessary when upstream dependencies of higher rank are added to\n * a target operator.\n * @param {Operator} op - The operator to re-rank.\n */\nfunction rerank(op) {\n const queue = [op];\n let cur, list, i;\n while (queue.length) {\n this.rank(cur = queue.pop());\n if (list = cur._targets) {\n for (i = list.length; --i >= 0;) {\n queue.push(cur = list[i]);\n if (cur === op) error('Cycle detected in dataflow graph.');\n }\n }\n }\n}\n\n/**\n * Sentinel value indicating pulse propagation should stop.\n */\nconst StopPropagation = {};\n\n// Pulse visit type flags\nconst ADD = 1 << 0,\n REM = 1 << 1,\n MOD = 1 << 2,\n ADD_REM = ADD | REM,\n ADD_MOD = ADD | MOD,\n ALL = ADD | REM | MOD,\n REFLOW = 1 << 3,\n SOURCE = 1 << 4,\n NO_SOURCE = 1 << 5,\n NO_FIELDS = 1 << 6;\n\n/**\n * A Pulse enables inter-operator communication during a run of the\n * dataflow graph. In addition to the current timestamp, a pulse may also\n * contain a change-set of added, removed or modified data tuples, as well as\n * a pointer to a full backing data source. Tuple change sets may not\n * be fully materialized; for example, to prevent needless array creation\n * a change set may include larger arrays and corresponding filter functions.\n * The pulse provides a {@link visit} method to enable proper and efficient\n * iteration over requested data tuples.\n *\n * In addition, each pulse can track modification flags for data tuple fields.\n * Responsible transform operators should call the {@link modifies} method to\n * indicate changes to data fields. The {@link modified} method enables\n * querying of this modification state.\n *\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The current propagation timestamp.\n * @param {string} [encode] - An optional encoding set name, which is then\n * accessible as Pulse.encode. Operators can respond to (or ignore) this\n * setting as appropriate. This parameter can be used in conjunction with\n * the Encode transform in the vega-encode module.\n */\nfunction Pulse(dataflow, stamp, encode) {\n this.dataflow = dataflow;\n this.stamp = stamp == null ? -1 : stamp;\n this.add = [];\n this.rem = [];\n this.mod = [];\n this.fields = null;\n this.encode = encode || null;\n}\nfunction materialize(data, filter) {\n const out = [];\n visitArray(data, filter, _ => out.push(_));\n return out;\n}\nfunction filter(pulse, flags) {\n const map = {};\n pulse.visit(flags, t => {\n map[tupleid(t)] = 1;\n });\n return t => map[tupleid(t)] ? null : t;\n}\nfunction addFilter(a, b) {\n return a ? (t, i) => a(t, i) && b(t, i) : b;\n}\nPulse.prototype = {\n /**\n * Sentinel value indicating pulse propagation should stop.\n */\n StopPropagation,\n /**\n * Boolean flag indicating ADD (added) tuples.\n */\n ADD,\n /**\n * Boolean flag indicating REM (removed) tuples.\n */\n REM,\n /**\n * Boolean flag indicating MOD (modified) tuples.\n */\n MOD,\n /**\n * Boolean flag indicating ADD (added) and REM (removed) tuples.\n */\n ADD_REM,\n /**\n * Boolean flag indicating ADD (added) and MOD (modified) tuples.\n */\n ADD_MOD,\n /**\n * Boolean flag indicating ADD, REM and MOD tuples.\n */\n ALL,\n /**\n * Boolean flag indicating all tuples in a data source\n * except for the ADD, REM and MOD tuples.\n */\n REFLOW,\n /**\n * Boolean flag indicating a 'pass-through' to a\n * backing data source, ignoring ADD, REM and MOD tuples.\n */\n SOURCE,\n /**\n * Boolean flag indicating that source data should be\n * suppressed when creating a forked pulse.\n */\n NO_SOURCE,\n /**\n * Boolean flag indicating that field modifications should be\n * suppressed when creating a forked pulse.\n */\n NO_FIELDS,\n /**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created.\n * @return {Pulse} - The forked pulse instance.\n * @see init\n */\n fork(flags) {\n return new Pulse(this.dataflow).init(this, flags);\n },\n /**\n * Creates a copy of this pulse with new materialized array\n * instances for the ADD, REM, MOD, and SOURCE arrays.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse} - The cloned pulse instance.\n * @see init\n */\n clone() {\n const p = this.fork(ALL);\n p.add = p.add.slice();\n p.rem = p.rem.slice();\n p.mod = p.mod.slice();\n if (p.source) p.source = p.source.slice();\n return p.materialize(ALL | SOURCE);\n },\n /**\n * Returns a pulse that adds all tuples from a backing source. This is\n * useful for cases where operators are added to a dataflow after an\n * upstream data pipeline has already been processed, ensuring that\n * new operators can observe all tuples within a stream.\n * @return {Pulse} - A pulse instance with all source tuples included\n * in the add array. If the current pulse already has all source\n * tuples in its add array, it is returned directly. If the current\n * pulse does not have a backing source, it is returned directly.\n */\n addAll() {\n let p = this;\n const reuse = !p.source || p.add === p.rem // special case for indexed set (e.g., crossfilter)\n || !p.rem.length && p.source.length === p.add.length;\n if (reuse) {\n return p;\n } else {\n p = new Pulse(this.dataflow).init(this);\n p.add = p.source;\n p.rem = []; // new operators can ignore rem #2769\n return p;\n }\n },\n /**\n * Initialize this pulse based on the values of another pulse. This method\n * is used internally by {@link fork} to initialize a new forked tuple.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {Pulse} src - The source pulse to copy from.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created. By default, source data arrays are copied\n * to the new pulse. Use the NO_SOURCE flag to enforce a null source.\n * @return {Pulse} - Returns this Pulse instance.\n */\n init(src, flags) {\n const p = this;\n p.stamp = src.stamp;\n p.encode = src.encode;\n if (src.fields && !(flags & NO_FIELDS)) {\n p.fields = src.fields;\n }\n if (flags & ADD) {\n p.addF = src.addF;\n p.add = src.add;\n } else {\n p.addF = null;\n p.add = [];\n }\n if (flags & REM) {\n p.remF = src.remF;\n p.rem = src.rem;\n } else {\n p.remF = null;\n p.rem = [];\n }\n if (flags & MOD) {\n p.modF = src.modF;\n p.mod = src.mod;\n } else {\n p.modF = null;\n p.mod = [];\n }\n if (flags & NO_SOURCE) {\n p.srcF = null;\n p.source = null;\n } else {\n p.srcF = src.srcF;\n p.source = src.source;\n if (src.cleans) p.cleans = src.cleans;\n }\n return p;\n },\n /**\n * Schedules a function to run after pulse propagation completes.\n * @param {function} func - The function to run.\n */\n runAfter(func) {\n this.dataflow.runAfter(func);\n },\n /**\n * Indicates if tuples have been added, removed or modified.\n * @param {number} [flags] - The tuple types (ADD, REM or MOD) to query.\n * Defaults to ALL, returning true if any tuple type has changed.\n * @return {boolean} - Returns true if one or more queried tuple types have\n * changed, false otherwise.\n */\n changed(flags) {\n const f = flags || ALL;\n return f & ADD && this.add.length || f & REM && this.rem.length || f & MOD && this.mod.length;\n },\n /**\n * Forces a \"reflow\" of tuple values, such that all tuples in the backing\n * source are added to the MOD set, unless already present in the ADD set.\n * @param {boolean} [fork=false] - If true, returns a forked copy of this\n * pulse, and invokes reflow on that derived pulse.\n * @return {Pulse} - The reflowed pulse instance.\n */\n reflow(fork) {\n if (fork) return this.fork(ALL).reflow();\n const len = this.add.length,\n src = this.source && this.source.length;\n if (src && src !== len) {\n this.mod = this.source;\n if (len) this.filter(MOD, filter(this, ADD));\n }\n return this;\n },\n /**\n * Get/set metadata to pulse requesting garbage collection\n * to reclaim currently unused resources.\n */\n clean(value) {\n if (arguments.length) {\n this.cleans = !!value;\n return this;\n } else {\n return this.cleans;\n }\n },\n /**\n * Marks one or more data field names as modified to assist dependency\n * tracking and incremental processing by transform operators.\n * @param {string|Array} _ - The field(s) to mark as modified.\n * @return {Pulse} - This pulse instance.\n */\n modifies(_) {\n const hash = this.fields || (this.fields = {});\n if (isArray(_)) {\n _.forEach(f => hash[f] = true);\n } else {\n hash[_] = true;\n }\n return this;\n },\n /**\n * Checks if one or more data fields have been modified during this pulse\n * propagation timestamp.\n * @param {string|Array} _ - The field(s) to check for modified.\n * @param {boolean} nomod - If true, will check the modified flag even if\n * no mod tuples exist. If false (default), mod tuples must be present.\n * @return {boolean} - Returns true if any of the provided fields has been\n * marked as modified, false otherwise.\n */\n modified(_, nomod) {\n const fields = this.fields;\n return !((nomod || this.mod.length) && fields) ? false : !arguments.length ? !!fields : isArray(_) ? _.some(f => fields[f]) : fields[_];\n },\n /**\n * Adds a filter function to one more tuple sets. Filters are applied to\n * backing tuple arrays, to determine the actual set of tuples considered\n * added, removed or modified. They can be used to delay materialization of\n * a tuple set in order to avoid expensive array copies. In addition, the\n * filter functions can serve as value transformers: unlike standard predicate\n * function (which return boolean values), Pulse filters should return the\n * actual tuple value to process. If a tuple set is already filtered, the\n * new filter function will be appended into a conjuntive ('and') query.\n * @param {number} flags - Flags indicating the tuple set(s) to filter.\n * @param {function(*):object} filter - Filter function that will be applied\n * to the tuple set array, and should return a data tuple if the value\n * should be included in the tuple set, and falsy (or null) otherwise.\n * @return {Pulse} - Returns this pulse instance.\n */\n filter(flags, filter) {\n const p = this;\n if (flags & ADD) p.addF = addFilter(p.addF, filter);\n if (flags & REM) p.remF = addFilter(p.remF, filter);\n if (flags & MOD) p.modF = addFilter(p.modF, filter);\n if (flags & SOURCE) p.srcF = addFilter(p.srcF, filter);\n return p;\n },\n /**\n * Materialize one or more tuple sets in this pulse. If the tuple set(s) have\n * a registered filter function, it will be applied and the tuple set(s) will\n * be replaced with materialized tuple arrays.\n * @param {number} flags - Flags indicating the tuple set(s) to materialize.\n * @return {Pulse} - Returns this pulse instance.\n */\n materialize(flags) {\n flags = flags || ALL;\n const p = this;\n if (flags & ADD && p.addF) {\n p.add = materialize(p.add, p.addF);\n p.addF = null;\n }\n if (flags & REM && p.remF) {\n p.rem = materialize(p.rem, p.remF);\n p.remF = null;\n }\n if (flags & MOD && p.modF) {\n p.mod = materialize(p.mod, p.modF);\n p.modF = null;\n }\n if (flags & SOURCE && p.srcF) {\n p.source = p.source.filter(p.srcF);\n p.srcF = null;\n }\n return p;\n },\n /**\n * Visit one or more tuple sets in this pulse.\n * @param {number} flags - Flags indicating the tuple set(s) to visit.\n * Legal values are ADD, REM, MOD and SOURCE (if a backing data source\n * has been set).\n * @param {function(object):*} - Visitor function invoked per-tuple.\n * @return {Pulse} - Returns this pulse instance.\n */\n visit(flags, visitor) {\n const p = this,\n v = visitor;\n if (flags & SOURCE) {\n visitArray(p.source, p.srcF, v);\n return p;\n }\n if (flags & ADD) visitArray(p.add, p.addF, v);\n if (flags & REM) visitArray(p.rem, p.remF, v);\n if (flags & MOD) visitArray(p.mod, p.modF, v);\n const src = p.source;\n if (flags & REFLOW && src) {\n const sum = p.add.length + p.mod.length;\n if (sum === src.length) ; else if (sum) {\n visitArray(src, filter(p, ADD_MOD), v);\n } else {\n // if no add/rem/mod tuples, visit source\n visitArray(src, p.srcF, v);\n }\n }\n return p;\n }\n};\n\n/**\n * Represents a set of multiple pulses. Used as input for operators\n * that accept multiple pulses at a time. Contained pulses are\n * accessible via the public \"pulses\" array property. This pulse doe\n * not carry added, removed or modified tuples directly. However,\n * the visit method can be used to traverse all such tuples contained\n * in sub-pulses with a timestamp matching this parent multi-pulse.\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The timestamp.\n * @param {Array} pulses - The sub-pulses for this multi-pulse.\n */\nfunction MultiPulse(dataflow, stamp, pulses, encode) {\n const p = this;\n let c = 0;\n this.dataflow = dataflow;\n this.stamp = stamp;\n this.fields = null;\n this.encode = encode || null;\n this.pulses = pulses;\n for (const pulse of pulses) {\n if (pulse.stamp !== stamp) continue;\n if (pulse.fields) {\n const hash = p.fields || (p.fields = {});\n for (const f in pulse.fields) {\n hash[f] = 1;\n }\n }\n if (pulse.changed(p.ADD)) c |= p.ADD;\n if (pulse.changed(p.REM)) c |= p.REM;\n if (pulse.changed(p.MOD)) c |= p.MOD;\n }\n this.changes = c;\n}\ninherits(MultiPulse, Pulse, {\n /**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse}\n */\n fork(flags) {\n const p = new Pulse(this.dataflow).init(this, flags & this.NO_FIELDS);\n if (flags !== undefined) {\n if (flags & p.ADD) this.visit(p.ADD, t => p.add.push(t));\n if (flags & p.REM) this.visit(p.REM, t => p.rem.push(t));\n if (flags & p.MOD) this.visit(p.MOD, t => p.mod.push(t));\n }\n return p;\n },\n changed(flags) {\n return this.changes & flags;\n },\n modified(_) {\n const p = this,\n fields = p.fields;\n return !(fields && p.changes & p.MOD) ? 0 : isArray(_) ? _.some(f => fields[f]) : fields[_];\n },\n filter() {\n error('MultiPulse does not support filtering.');\n },\n materialize() {\n error('MultiPulse does not support materialization.');\n },\n visit(flags, visitor) {\n const p = this,\n pulses = p.pulses,\n n = pulses.length;\n let i = 0;\n if (flags & p.SOURCE) {\n for (; i < n; ++i) {\n pulses[i].visit(flags, visitor);\n }\n } else {\n for (; i < n; ++i) {\n if (pulses[i].stamp === p.stamp) {\n pulses[i].visit(flags, visitor);\n }\n }\n }\n return p;\n }\n});\n\n/* eslint-disable require-atomic-updates */\n\n/**\n * Evaluates the dataflow and returns a Promise that resolves when pulse\n * propagation completes. This method will increment the current timestamp\n * and process all updated, pulsed and touched operators. When invoked for\n * the first time, all registered operators will be processed. This method\n * should not be invoked by third-party clients, use {@link runAsync} or\n * {@link run} instead.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode package.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Promise} - A promise that resolves to this dataflow after\n * evaluation completes.\n */\nasync function evaluate(encode, prerun, postrun) {\n const df = this,\n async = [];\n\n // if the pulse value is set, this is a re-entrant call\n if (df._pulse) return reentrant(df);\n\n // wait for pending datasets to load\n if (df._pending) await df._pending;\n\n // invoke prerun function, if provided\n if (prerun) await asyncCallback(df, prerun);\n\n // exit early if there are no updates\n if (!df._touched.length) {\n df.debug('Dataflow invoked, but nothing to do.');\n return df;\n }\n\n // increment timestamp clock\n const stamp = ++df._clock;\n\n // set the current pulse\n df._pulse = new Pulse(df, stamp, encode);\n\n // initialize priority queue, reset touched operators\n df._touched.forEach(op => df._enqueue(op, true));\n df._touched = UniqueList(id);\n let count = 0,\n op,\n next,\n error;\n try {\n while (df._heap.size() > 0) {\n // dequeue operator with highest priority\n op = df._heap.pop();\n\n // re-queue if rank changed\n if (op.rank !== op.qrank) {\n df._enqueue(op, true);\n continue;\n }\n\n // otherwise, evaluate the operator\n next = op.run(df._getPulse(op, encode));\n if (next.then) {\n // await if operator returns a promise directly\n next = await next;\n } else if (next.async) {\n // queue parallel asynchronous execution\n async.push(next.async);\n next = StopPropagation;\n }\n\n // propagate evaluation, enqueue dependent operators\n if (next !== StopPropagation) {\n if (op._targets) op._targets.forEach(op => df._enqueue(op));\n }\n\n // increment visit counter\n ++count;\n }\n } catch (err) {\n df._heap.clear();\n error = err;\n }\n\n // reset pulse map\n df._input = {};\n df._pulse = null;\n df.debug(`Pulse ${stamp}: ${count} operators`);\n if (error) {\n df._postrun = [];\n df.error(error);\n }\n\n // invoke callbacks queued via runAfter\n if (df._postrun.length) {\n const pr = df._postrun.sort((a, b) => b.priority - a.priority);\n df._postrun = [];\n for (let i = 0; i < pr.length; ++i) {\n await asyncCallback(df, pr[i].callback);\n }\n }\n\n // invoke postrun function, if provided\n if (postrun) await asyncCallback(df, postrun);\n\n // handle non-blocking asynchronous callbacks\n if (async.length) {\n Promise.all(async).then(cb => df.runAsync(null, () => {\n cb.forEach(f => {\n try {\n f(df);\n } catch (err) {\n df.error(err);\n }\n });\n }));\n }\n return df;\n}\n\n/**\n * Queues dataflow evaluation to run once any other queued evaluations have\n * completed and returns a Promise that resolves when the queued pulse\n * propagation completes. If provided, a callback function will be invoked\n * immediately before evaluation commences. This method will ensure a\n * separate evaluation is invoked for each time it is called.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode package.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Promise} - A promise that resolves to this dataflow after\n * evaluation completes.\n */\nasync function runAsync(encode, prerun, postrun) {\n // await previously queued functions\n while (this._running) await this._running;\n\n // run dataflow, manage running promise\n const clear = () => this._running = null;\n (this._running = this.evaluate(encode, prerun, postrun)).then(clear, clear);\n return this._running;\n}\n\n/**\n * Requests dataflow evaluation and the immediately returns this dataflow\n * instance. If there are pending data loading or other asynchronous\n * operations, the dataflow will evaluate asynchronously after this method\n * has been invoked. To track when dataflow evaluation completes, use the\n * {@link runAsync} method instead. This method will raise an error if\n * invoked while the dataflow is already in the midst of evaluation.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode module.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Dataflow} - This dataflow instance.\n */\nfunction run(encode, prerun, postrun) {\n return this._pulse ? reentrant(this) : (this.evaluate(encode, prerun, postrun), this);\n}\n\n/**\n * Schedules a callback function to be invoked after the current pulse\n * propagation completes. If no propagation is currently occurring,\n * the function is invoked immediately. Callbacks scheduled via runAfter\n * are invoked immediately upon completion of the current cycle, before\n * any request queued via runAsync. This method is primarily intended for\n * internal use. Third-party callers using runAfter to schedule a callback\n * that invokes {@link run} or {@link runAsync} should not use this method,\n * but instead use {@link runAsync} with prerun or postrun arguments.\n * @param {function(Dataflow)} callback - The callback function to run.\n * The callback will be invoked with this Dataflow instance as its\n * sole argument.\n * @param {boolean} enqueue - A boolean flag indicating that the\n * callback should be queued up to run after the next propagation\n * cycle, suppressing immediate invocation when propagation is not\n * currently occurring.\n * @param {number} [priority] - A priority value used to sort registered\n * callbacks to determine execution order. This argument is intended\n * for internal Vega use only.\n */\nfunction runAfter(callback, enqueue, priority) {\n if (this._pulse || enqueue) {\n // pulse propagation is currently running, queue to run after\n this._postrun.push({\n priority: priority || 0,\n callback: callback\n });\n } else {\n // pulse propagation already complete, invoke immediately\n try {\n callback(this);\n } catch (err) {\n this.error(err);\n }\n }\n}\n\n/**\n * Raise an error for re-entrant dataflow evaluation.\n */\nfunction reentrant(df) {\n df.error('Dataflow already running. Use runAsync() to chain invocations.');\n return df;\n}\n\n/**\n * Enqueue an operator into the priority queue for evaluation. The operator\n * will be enqueued if it has no registered pulse for the current cycle, or if\n * the force argument is true. Upon enqueue, this method also sets the\n * operator's qrank to the current rank value.\n * @param {Operator} op - The operator to enqueue.\n * @param {boolean} [force] - A flag indicating if the operator should be\n * forceably added to the queue, even if it has already been previously\n * enqueued during the current pulse propagation. This is useful when the\n * dataflow graph is dynamically modified and the operator rank changes.\n */\nfunction enqueue(op, force) {\n const q = op.stamp < this._clock;\n if (q) op.stamp = this._clock;\n if (q || force) {\n op.qrank = op.rank;\n this._heap.push(op);\n }\n}\n\n/**\n * Provide a correct pulse for evaluating an operator. If the operator has an\n * explicit source operator, we will try to pull the pulse(s) from it.\n * If there is an array of source operators, we build a multi-pulse.\n * Otherwise, we return a current pulse with correct source data.\n * If the pulse is the pulse map has an explicit target set, we use that.\n * Else if the pulse on the upstream source operator is current, we use that.\n * Else we use the pulse from the pulse map, but copy the source tuple array.\n * @param {Operator} op - The operator for which to get an input pulse.\n * @param {string} [encode] - An (optional) encoding set name with which to\n * annotate the returned pulse. See {@link run} for more information.\n */\nfunction getPulse(op, encode) {\n const s = op.source,\n stamp = this._clock;\n return s && isArray(s) ? new MultiPulse(this, stamp, s.map(_ => _.pulse), encode) : this._input[op.id] || singlePulse(this._pulse, s && s.pulse);\n}\nfunction singlePulse(p, s) {\n if (s && s.stamp === p.stamp) {\n return s;\n }\n p = p.fork();\n if (s && s !== StopPropagation) {\n p.source = s.source;\n }\n return p;\n}\n\nconst NO_OPT = {\n skip: false,\n force: false\n};\n\n/**\n * Touches an operator, scheduling it to be evaluated. If invoked outside of\n * a pulse propagation, the operator will be evaluated the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the operator\n * will be queued for evaluation if and only if the operator has not yet been\n * evaluated on the current propagation timestamp.\n * @param {Operator} op - The operator to touch.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nfunction touch(op, options) {\n const opt = options || NO_OPT;\n if (this._pulse) {\n // if in midst of propagation, add to priority queue\n this._enqueue(op);\n } else {\n // otherwise, queue for next propagation\n this._touched.add(op);\n }\n if (opt.skip) op.skip(true);\n return this;\n}\n\n/**\n * Updates the value of the given operator.\n * @param {Operator} op - The operator to update.\n * @param {*} value - The value to set.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nfunction update(op, value, options) {\n const opt = options || NO_OPT;\n if (op.set(value) || opt.force) {\n this.touch(op, opt);\n }\n return this;\n}\n\n/**\n * Pulses an operator with a changeset of tuples. If invoked outside of\n * a pulse propagation, the pulse will be applied the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the pulse\n * will be added to the set of active pulses and will be applied if and\n * only if the target operator has not yet been evaluated on the current\n * propagation timestamp.\n * @param {Operator} op - The operator to pulse.\n * @param {ChangeSet} value - The tuple changeset to apply.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nfunction pulse(op, changeset, options) {\n this.touch(op, options || NO_OPT);\n const p = new Pulse(this, this._clock + (this._pulse ? 0 : 1)),\n t = op.pulse && op.pulse.source || [];\n p.target = op;\n this._input[op.id] = changeset.pulse(p, t);\n return this;\n}\n\nfunction Heap(cmp) {\n let nodes = [];\n return {\n clear: () => nodes = [],\n size: () => nodes.length,\n peek: () => nodes[0],\n push: x => {\n nodes.push(x);\n return siftdown(nodes, 0, nodes.length - 1, cmp);\n },\n pop: () => {\n const last = nodes.pop();\n let item;\n if (nodes.length) {\n item = nodes[0];\n nodes[0] = last;\n siftup(nodes, 0, cmp);\n } else {\n item = last;\n }\n return item;\n }\n };\n}\nfunction siftdown(array, start, idx, cmp) {\n let parent, pidx;\n const item = array[idx];\n while (idx > start) {\n pidx = idx - 1 >> 1;\n parent = array[pidx];\n if (cmp(item, parent) < 0) {\n array[idx] = parent;\n idx = pidx;\n continue;\n }\n break;\n }\n return array[idx] = item;\n}\nfunction siftup(array, idx, cmp) {\n const start = idx,\n end = array.length,\n item = array[idx];\n let cidx = (idx << 1) + 1,\n ridx;\n while (cidx < end) {\n ridx = cidx + 1;\n if (ridx < end && cmp(array[cidx], array[ridx]) >= 0) {\n cidx = ridx;\n }\n array[idx] = array[cidx];\n idx = cidx;\n cidx = (idx << 1) + 1;\n }\n array[idx] = item;\n return siftdown(array, start, idx, cmp);\n}\n\n/**\n * A dataflow graph for reactive processing of data streams.\n * @constructor\n */\nfunction Dataflow() {\n this.logger(logger());\n this.logLevel(Error);\n this._clock = 0;\n this._rank = 0;\n this._locale = defaultLocale();\n try {\n this._loader = loader();\n } catch (e) {\n // do nothing if loader module is unavailable\n }\n this._touched = UniqueList(id);\n this._input = {};\n this._pulse = null;\n this._heap = Heap((a, b) => a.qrank - b.qrank);\n this._postrun = [];\n}\nfunction logMethod(method) {\n return function () {\n return this._log[method].apply(this, arguments);\n };\n}\nDataflow.prototype = {\n /**\n * The current timestamp of this dataflow. This value reflects the\n * timestamp of the previous dataflow run. The dataflow is initialized\n * with a stamp value of 0. The initial run of the dataflow will have\n * a timestap of 1, and so on. This value will match the\n * {@link Pulse.stamp} property.\n * @return {number} - The current timestamp value.\n */\n stamp() {\n return this._clock;\n },\n /**\n * Gets or sets the loader instance to use for data file loading. A\n * loader object must provide a \"load\" method for loading files and a\n * \"sanitize\" method for checking URL/filename validity. Both methods\n * should accept a URI and options hash as arguments, and return a Promise\n * that resolves to the loaded file contents (load) or a hash containing\n * sanitized URI data with the sanitized url assigned to the \"href\" property\n * (sanitize).\n * @param {object} _ - The loader instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current loader instance. Otherwise returns this Dataflow instance.\n */\n loader(_) {\n if (arguments.length) {\n this._loader = _;\n return this;\n } else {\n return this._loader;\n }\n },\n /**\n * Gets or sets the locale instance to use for formatting and parsing\n * string values. The locale object should be provided by the\n * vega-format library, and include methods such as format, timeFormat,\n * utcFormat, timeParse, and utcParse.\n * @param {object} _ - The locale instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current locale instance. Otherwise returns this Dataflow instance.\n */\n locale(_) {\n if (arguments.length) {\n this._locale = _;\n return this;\n } else {\n return this._locale;\n }\n },\n /**\n * Get or set the logger instance used to log messages. If no arguments are\n * provided, returns the current logger instance. Otherwise, sets the logger\n * and return this Dataflow instance. Provided loggers must support the full\n * API of logger objects generated by the vega-util logger method. Note that\n * by default the log level of the new logger will be used; use the logLevel\n * method to adjust the log level as needed.\n */\n logger(logger) {\n if (arguments.length) {\n this._log = logger;\n return this;\n } else {\n return this._log;\n }\n },\n /**\n * Logs an error message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit error messages.\n */\n error: logMethod('error'),\n /**\n * Logs a warning message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit warning messages.\n */\n warn: logMethod('warn'),\n /**\n * Logs a information message. By default, logged messages are written to\n * console output. The message will only be logged if the current log level is\n * high enough to permit information messages.\n */\n info: logMethod('info'),\n /**\n * Logs a debug message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit debug messages.\n */\n debug: logMethod('debug'),\n /**\n * Get or set the current log level. If an argument is provided, it\n * will be used as the new log level.\n * @param {number} [level] - Should be one of None, Warn, Info\n * @return {number} - The current log level.\n */\n logLevel: logMethod('level'),\n /**\n * Empty entry threshold for garbage cleaning. Map data structures will\n * perform cleaning once the number of empty entries exceeds this value.\n */\n cleanThreshold: 1e4,\n // OPERATOR REGISTRATION\n add,\n connect,\n rank,\n rerank,\n // OPERATOR UPDATES\n pulse,\n touch,\n update,\n changeset,\n // DATA LOADING\n ingest,\n parse,\n preload,\n request,\n // EVENT HANDLING\n events,\n on,\n // PULSE PROPAGATION\n evaluate,\n run,\n runAsync,\n runAfter,\n _enqueue: enqueue,\n _getPulse: getPulse\n};\n\n/**\n * Abstract class for operators that process data tuples.\n * Subclasses must provide a {@link transform} method for operator processing.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {Operator} [source] - The operator from which to receive pulses.\n */\nfunction Transform(init, params) {\n Operator.call(this, init, null, params);\n}\ninherits(Transform, Operator, {\n /**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\n run(pulse) {\n if (pulse.stamp < this.stamp) return pulse.StopPropagation;\n let rv;\n if (this.skip()) {\n this.skip(false);\n } else {\n rv = this.evaluate(pulse);\n }\n rv = rv || pulse;\n if (rv.then) {\n rv = rv.then(_ => this.pulse = _);\n } else if (rv !== pulse.StopPropagation) {\n this.pulse = rv;\n }\n return rv;\n },\n /**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Marshalls parameter values and then invokes {@link transform}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n value (including undefined) will let the input pulse pass through.\n */\n evaluate(pulse) {\n const params = this.marshall(pulse.stamp),\n out = this.transform(params, pulse);\n params.clear();\n return out;\n },\n /**\n * Process incoming pulses.\n * Subclasses should override this method to implement transforms.\n * @param {Parameters} _ - The operator parameter values.\n * @param {Pulse} pulse - The current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n * value (including undefined) will let the input pulse pass through.\n */\n transform() {}\n});\n\nconst transforms = {};\nfunction definition(type) {\n const t = transform(type);\n return t && t.Definition || null;\n}\nfunction transform(type) {\n type = type && type.toLowerCase();\n return hasOwnProperty(transforms, type) ? transforms[type] : null;\n}\n\nexport { Dataflow, EventStream, MultiPulse, Operator, Parameters, Pulse, Transform, UniqueList, asyncCallback, changeset, definition, derive, ingest$1 as ingest, isChangeSet, isTuple, rederive, replace, stableCompare, transform, transforms, tupleid };\n","import { ascending, quantileSorted, deviation, quantile, median } from 'd3-array';\n\nfunction* numbers (values, valueof) {\n if (valueof == null) {\n for (let value of values) {\n if (value != null && value !== '' && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n value = valueof(value, ++index, values);\n if (value != null && value !== '' && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n\nfunction quantiles (array, p, f) {\n const values = Float64Array.from(numbers(array, f));\n\n // don't depend on return value from typed array sort call\n // protects against undefined sort results in Safari (vega/vega-lite#4964)\n values.sort(ascending);\n return p.map(_ => quantileSorted(values, _));\n}\n\nfunction quartiles (array, f) {\n return quantiles(array, [0.25, 0.50, 0.75], f);\n}\n\n// Scott, D. W. (1992) Multivariate Density Estimation:\n// Theory, Practice, and Visualization. Wiley.\nfunction estimateBandwidth (array, f) {\n const n = array.length,\n d = deviation(array, f),\n q = quartiles(array, f),\n h = (q[2] - q[0]) / 1.34,\n v = Math.min(d, h) || d || Math.abs(q[0]) || 1;\n return 1.06 * v * Math.pow(n, -0.2);\n}\n\nfunction bin (_) {\n // determine range\n const maxb = _.maxbins || 20,\n base = _.base || 10,\n logb = Math.log(base),\n div = _.divide || [5, 2];\n let min = _.extent[0],\n max = _.extent[1],\n step,\n level,\n minstep,\n v,\n i,\n n;\n const span = _.span || max - min || Math.abs(min) || 1;\n if (_.step) {\n // if step size is explicitly given, use that\n step = _.step;\n } else if (_.steps) {\n // if provided, limit choice to acceptable step sizes\n v = span / maxb;\n for (i = 0, n = _.steps.length; i < n && _.steps[i] < v; ++i);\n step = _.steps[Math.max(0, i - 1)];\n } else {\n // else use span to determine step size\n level = Math.ceil(Math.log(maxb) / logb);\n minstep = _.minstep || 0;\n step = Math.max(minstep, Math.pow(base, Math.round(Math.log(span) / logb) - level));\n\n // increase step size if too many bins\n while (Math.ceil(span / step) > maxb) {\n step *= base;\n }\n\n // decrease step size if allowed\n for (i = 0, n = div.length; i < n; ++i) {\n v = step / div[i];\n if (v >= minstep && span / v <= maxb) step = v;\n }\n }\n\n // update precision, min and max\n v = Math.log(step);\n const precision = v >= 0 ? 0 : ~~(-v / logb) + 1,\n eps = Math.pow(base, -precision - 1);\n if (_.nice || _.nice === undefined) {\n v = Math.floor(min / step + eps) * step;\n min = min < v ? v - step : v;\n max = Math.ceil(max / step) * step;\n }\n return {\n start: min,\n stop: max === min ? min + step : max,\n step: step\n };\n}\n\nvar random = Math.random;\nfunction setRandom(r) {\n random = r;\n}\n\nfunction bootstrapCI (array, samples, alpha, f) {\n if (!array.length) return [undefined, undefined];\n const values = Float64Array.from(numbers(array, f)),\n n = values.length,\n m = samples;\n let a, i, j, mu;\n for (j = 0, mu = Array(m); j < m; ++j) {\n for (a = 0, i = 0; i < n; ++i) {\n a += values[~~(random() * n)];\n }\n mu[j] = a / n;\n }\n mu.sort(ascending);\n return [quantile(mu, alpha / 2), quantile(mu, 1 - alpha / 2)];\n}\n\n// Dot density binning for dot plot construction.\n// Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n// https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\nfunction dotbin (array, step, smooth, f) {\n f = f || (_ => _);\n const n = array.length,\n v = new Float64Array(n);\n let i = 0,\n j = 1,\n a = f(array[0]),\n b = a,\n w = a + step,\n x;\n for (; j < n; ++j) {\n x = f(array[j]);\n if (x >= w) {\n b = (a + b) / 2;\n for (; i < j; ++i) v[i] = b;\n w = x + step;\n a = x;\n }\n b = x;\n }\n b = (a + b) / 2;\n for (; i < j; ++i) v[i] = b;\n return smooth ? smoothing(v, step + step / 4) : v;\n}\n\n// perform smoothing to reduce variance\n// swap points between \"adjacent\" stacks\n// Wilkinson defines adjacent as within step/4 units\nfunction smoothing(v, thresh) {\n const n = v.length;\n let a = 0,\n b = 1,\n c,\n d;\n\n // get left stack\n while (v[a] === v[b]) ++b;\n while (b < n) {\n // get right stack\n c = b + 1;\n while (v[b] === v[c]) ++c;\n\n // are stacks adjacent?\n // if so, compare sizes and swap as needed\n if (v[b] - v[b - 1] < thresh) {\n d = b + (a + c - b - b >> 1);\n while (d < b) v[d++] = v[b];\n while (d > b) v[d--] = v[a];\n }\n\n // update left stack indices\n a = b;\n b = c;\n }\n return v;\n}\n\nfunction lcg (seed) {\n // Random numbers using a Linear Congruential Generator with seed value\n // Uses glibc values from https://en.wikipedia.org/wiki/Linear_congruential_generator\n return function () {\n seed = (1103515245 * seed + 12345) % 2147483647;\n return seed / 2147483647;\n };\n}\n\nfunction integer (min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n let a, b, d;\n const dist = {\n min(_) {\n if (arguments.length) {\n a = _ || 0;\n d = b - a;\n return dist;\n } else {\n return a;\n }\n },\n max(_) {\n if (arguments.length) {\n b = _ || 0;\n d = b - a;\n return dist;\n } else {\n return b;\n }\n },\n sample() {\n return a + Math.floor(d * random());\n },\n pdf(x) {\n return x === Math.floor(x) && x >= a && x < b ? 1 / d : 0;\n },\n cdf(x) {\n const v = Math.floor(x);\n return v < a ? 0 : v >= b ? 1 : (v - a + 1) / d;\n },\n icdf(p) {\n return p >= 0 && p <= 1 ? a - 1 + Math.floor(p * d) : NaN;\n }\n };\n return dist.min(min).max(max);\n}\n\nconst SQRT2PI = Math.sqrt(2 * Math.PI);\nconst SQRT2 = Math.SQRT2;\n\nlet nextSample = NaN;\nfunction sampleNormal(mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n let x = 0,\n y = 0,\n rds,\n c;\n if (nextSample === nextSample) {\n x = nextSample;\n nextSample = NaN;\n } else {\n do {\n x = random() * 2 - 1;\n y = random() * 2 - 1;\n rds = x * x + y * y;\n } while (rds === 0 || rds > 1);\n c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform\n x *= c;\n nextSample = y * c;\n }\n return mean + x * stdev;\n}\nfunction densityNormal(value, mean, stdev) {\n stdev = stdev == null ? 1 : stdev;\n const z = (value - (mean || 0)) / stdev;\n return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI);\n}\n\n// Approximation from West (2009)\n// Better Approximations to Cumulative Normal Functions\nfunction cumulativeNormal(value, mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n const z = (value - mean) / stdev,\n Z = Math.abs(z);\n let cd;\n if (Z > 37) {\n cd = 0;\n } else {\n const exp = Math.exp(-Z * Z / 2);\n let sum;\n if (Z < 7.07106781186547) {\n sum = 3.52624965998911e-02 * Z + 0.700383064443688;\n sum = sum * Z + 6.37396220353165;\n sum = sum * Z + 33.912866078383;\n sum = sum * Z + 112.079291497871;\n sum = sum * Z + 221.213596169931;\n sum = sum * Z + 220.206867912376;\n cd = exp * sum;\n sum = 8.83883476483184e-02 * Z + 1.75566716318264;\n sum = sum * Z + 16.064177579207;\n sum = sum * Z + 86.7807322029461;\n sum = sum * Z + 296.564248779674;\n sum = sum * Z + 637.333633378831;\n sum = sum * Z + 793.826512519948;\n sum = sum * Z + 440.413735824752;\n cd = cd / sum;\n } else {\n sum = Z + 0.65;\n sum = Z + 4 / sum;\n sum = Z + 3 / sum;\n sum = Z + 2 / sum;\n sum = Z + 1 / sum;\n cd = exp / sum / 2.506628274631;\n }\n }\n return z > 0 ? 1 - cd : cd;\n}\n\n// Approximation of Probit function using inverse error function.\nfunction quantileNormal(p, mean, stdev) {\n if (p < 0 || p > 1) return NaN;\n return (mean || 0) + (stdev == null ? 1 : stdev) * SQRT2 * erfinv(2 * p - 1);\n}\n\n// Approximate inverse error function. Implementation from \"Approximating\n// the erfinv function\" by Mike Giles, GPU Computing Gems, volume 2, 2010.\n// Ported from Apache Commons Math, http://www.apache.org/licenses/LICENSE-2.0\nfunction erfinv(x) {\n // beware that the logarithm argument must be\n // commputed as (1.0 - x) * (1.0 + x),\n // it must NOT be simplified as 1.0 - x * x as this\n // would induce rounding errors near the boundaries +/-1\n let w = -Math.log((1 - x) * (1 + x)),\n p;\n if (w < 6.25) {\n w -= 3.125;\n p = -3.6444120640178196996e-21;\n p = -1.685059138182016589e-19 + p * w;\n p = 1.2858480715256400167e-18 + p * w;\n p = 1.115787767802518096e-17 + p * w;\n p = -1.333171662854620906e-16 + p * w;\n p = 2.0972767875968561637e-17 + p * w;\n p = 6.6376381343583238325e-15 + p * w;\n p = -4.0545662729752068639e-14 + p * w;\n p = -8.1519341976054721522e-14 + p * w;\n p = 2.6335093153082322977e-12 + p * w;\n p = -1.2975133253453532498e-11 + p * w;\n p = -5.4154120542946279317e-11 + p * w;\n p = 1.051212273321532285e-09 + p * w;\n p = -4.1126339803469836976e-09 + p * w;\n p = -2.9070369957882005086e-08 + p * w;\n p = 4.2347877827932403518e-07 + p * w;\n p = -1.3654692000834678645e-06 + p * w;\n p = -1.3882523362786468719e-05 + p * w;\n p = 0.0001867342080340571352 + p * w;\n p = -0.00074070253416626697512 + p * w;\n p = -0.0060336708714301490533 + p * w;\n p = 0.24015818242558961693 + p * w;\n p = 1.6536545626831027356 + p * w;\n } else if (w < 16.0) {\n w = Math.sqrt(w) - 3.25;\n p = 2.2137376921775787049e-09;\n p = 9.0756561938885390979e-08 + p * w;\n p = -2.7517406297064545428e-07 + p * w;\n p = 1.8239629214389227755e-08 + p * w;\n p = 1.5027403968909827627e-06 + p * w;\n p = -4.013867526981545969e-06 + p * w;\n p = 2.9234449089955446044e-06 + p * w;\n p = 1.2475304481671778723e-05 + p * w;\n p = -4.7318229009055733981e-05 + p * w;\n p = 6.8284851459573175448e-05 + p * w;\n p = 2.4031110387097893999e-05 + p * w;\n p = -0.0003550375203628474796 + p * w;\n p = 0.00095328937973738049703 + p * w;\n p = -0.0016882755560235047313 + p * w;\n p = 0.0024914420961078508066 + p * w;\n p = -0.0037512085075692412107 + p * w;\n p = 0.005370914553590063617 + p * w;\n p = 1.0052589676941592334 + p * w;\n p = 3.0838856104922207635 + p * w;\n } else if (Number.isFinite(w)) {\n w = Math.sqrt(w) - 5.0;\n p = -2.7109920616438573243e-11;\n p = -2.5556418169965252055e-10 + p * w;\n p = 1.5076572693500548083e-09 + p * w;\n p = -3.7894654401267369937e-09 + p * w;\n p = 7.6157012080783393804e-09 + p * w;\n p = -1.4960026627149240478e-08 + p * w;\n p = 2.9147953450901080826e-08 + p * w;\n p = -6.7711997758452339498e-08 + p * w;\n p = 2.2900482228026654717e-07 + p * w;\n p = -9.9298272942317002539e-07 + p * w;\n p = 4.5260625972231537039e-06 + p * w;\n p = -1.9681778105531670567e-05 + p * w;\n p = 7.5995277030017761139e-05 + p * w;\n p = -0.00021503011930044477347 + p * w;\n p = -0.00013871931833623122026 + p * w;\n p = 1.0103004648645343977 + p * w;\n p = 4.8499064014085844221 + p * w;\n } else {\n p = Infinity;\n }\n return p * x;\n}\nfunction gaussian (mean, stdev) {\n let mu, sigma;\n const dist = {\n mean(_) {\n if (arguments.length) {\n mu = _ || 0;\n return dist;\n } else {\n return mu;\n }\n },\n stdev(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n return dist;\n } else {\n return sigma;\n }\n },\n sample: () => sampleNormal(mu, sigma),\n pdf: value => densityNormal(value, mu, sigma),\n cdf: value => cumulativeNormal(value, mu, sigma),\n icdf: p => quantileNormal(p, mu, sigma)\n };\n return dist.mean(mean).stdev(stdev);\n}\n\nfunction kde (support, bandwidth) {\n const kernel = gaussian();\n let n = 0;\n const dist = {\n data(_) {\n if (arguments.length) {\n support = _;\n n = _ ? _.length : 0;\n return dist.bandwidth(bandwidth);\n } else {\n return support;\n }\n },\n bandwidth(_) {\n if (!arguments.length) return bandwidth;\n bandwidth = _;\n if (!bandwidth && support) bandwidth = estimateBandwidth(support);\n return dist;\n },\n sample() {\n return support[~~(random() * n)] + bandwidth * kernel.sample();\n },\n pdf(x) {\n let y = 0,\n i = 0;\n for (; i < n; ++i) {\n y += kernel.pdf((x - support[i]) / bandwidth);\n }\n return y / bandwidth / n;\n },\n cdf(x) {\n let y = 0,\n i = 0;\n for (; i < n; ++i) {\n y += kernel.cdf((x - support[i]) / bandwidth);\n }\n return y / n;\n },\n icdf() {\n throw Error('KDE icdf not supported.');\n }\n };\n return dist.data(support);\n}\n\nfunction sampleLogNormal(mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n return Math.exp(mean + sampleNormal() * stdev);\n}\nfunction densityLogNormal(value, mean, stdev) {\n if (value <= 0) return 0;\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n const z = (Math.log(value) - mean) / stdev;\n return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI * value);\n}\nfunction cumulativeLogNormal(value, mean, stdev) {\n return cumulativeNormal(Math.log(value), mean, stdev);\n}\nfunction quantileLogNormal(p, mean, stdev) {\n return Math.exp(quantileNormal(p, mean, stdev));\n}\nfunction lognormal (mean, stdev) {\n let mu, sigma;\n const dist = {\n mean(_) {\n if (arguments.length) {\n mu = _ || 0;\n return dist;\n } else {\n return mu;\n }\n },\n stdev(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n return dist;\n } else {\n return sigma;\n }\n },\n sample: () => sampleLogNormal(mu, sigma),\n pdf: value => densityLogNormal(value, mu, sigma),\n cdf: value => cumulativeLogNormal(value, mu, sigma),\n icdf: p => quantileLogNormal(p, mu, sigma)\n };\n return dist.mean(mean).stdev(stdev);\n}\n\nfunction mixture (dists, weights) {\n let m = 0,\n w;\n function normalize(x) {\n const w = [];\n let sum = 0,\n i;\n for (i = 0; i < m; ++i) {\n sum += w[i] = x[i] == null ? 1 : +x[i];\n }\n for (i = 0; i < m; ++i) {\n w[i] /= sum;\n }\n return w;\n }\n const dist = {\n weights(_) {\n if (arguments.length) {\n w = normalize(weights = _ || []);\n return dist;\n }\n return weights;\n },\n distributions(_) {\n if (arguments.length) {\n if (_) {\n m = _.length;\n dists = _;\n } else {\n m = 0;\n dists = [];\n }\n return dist.weights(weights);\n }\n return dists;\n },\n sample() {\n const r = random();\n let d = dists[m - 1],\n v = w[0],\n i = 0;\n\n // first select distribution\n for (; i < m - 1; v += w[++i]) {\n if (r < v) {\n d = dists[i];\n break;\n }\n }\n // then sample from it\n return d.sample();\n },\n pdf(x) {\n let p = 0,\n i = 0;\n for (; i < m; ++i) {\n p += w[i] * dists[i].pdf(x);\n }\n return p;\n },\n cdf(x) {\n let p = 0,\n i = 0;\n for (; i < m; ++i) {\n p += w[i] * dists[i].cdf(x);\n }\n return p;\n },\n icdf() {\n throw Error('Mixture icdf not supported.');\n }\n };\n return dist.distributions(dists).weights(weights);\n}\n\nfunction sampleUniform(min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return min + (max - min) * random();\n}\nfunction densityUniform(value, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return value >= min && value <= max ? 1 / (max - min) : 0;\n}\nfunction cumulativeUniform(value, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return value < min ? 0 : value > max ? 1 : (value - min) / (max - min);\n}\nfunction quantileUniform(p, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return p >= 0 && p <= 1 ? min + p * (max - min) : NaN;\n}\nfunction uniform (min, max) {\n let a, b;\n const dist = {\n min(_) {\n if (arguments.length) {\n a = _ || 0;\n return dist;\n } else {\n return a;\n }\n },\n max(_) {\n if (arguments.length) {\n b = _ == null ? 1 : _;\n return dist;\n } else {\n return b;\n }\n },\n sample: () => sampleUniform(a, b),\n pdf: value => densityUniform(value, a, b),\n cdf: value => cumulativeUniform(value, a, b),\n icdf: p => quantileUniform(p, a, b)\n };\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return dist.min(min).max(max);\n}\n\nfunction constant (data, x, y) {\n let mean = 0,\n n = 0;\n for (const d of data) {\n const val = y(d);\n if (x(d) == null || val == null || isNaN(val)) continue;\n mean += (val - mean) / ++n;\n }\n return {\n coef: [mean],\n predict: () => mean,\n rSquared: 0\n };\n}\n\n// Ordinary Least Squares\nfunction ols (uX, uY, uXY, uX2) {\n const delta = uX2 - uX * uX,\n slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta,\n intercept = uY - slope * uX;\n return [intercept, slope];\n}\n\nfunction points(data, x, y, sort) {\n data = data.filter(d => {\n let u = x(d),\n v = y(d);\n return u != null && (u = +u) >= u && v != null && (v = +v) >= v;\n });\n if (sort) {\n data.sort((a, b) => x(a) - x(b));\n }\n const n = data.length,\n X = new Float64Array(n),\n Y = new Float64Array(n);\n\n // extract values, calculate means\n let i = 0,\n ux = 0,\n uy = 0,\n xv,\n yv,\n d;\n for (d of data) {\n X[i] = xv = +x(d);\n Y[i] = yv = +y(d);\n ++i;\n ux += (xv - ux) / i;\n uy += (yv - uy) / i;\n }\n\n // mean center the data\n for (i = 0; i < n; ++i) {\n X[i] -= ux;\n Y[i] -= uy;\n }\n return [X, Y, ux, uy];\n}\nfunction visitPoints(data, x, y, callback) {\n let i = -1,\n u,\n v;\n for (const d of data) {\n u = x(d);\n v = y(d);\n if (u != null && (u = +u) >= u && v != null && (v = +v) >= v) {\n callback(u, v, ++i);\n }\n }\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction rSquared (data, x, y, uY, predict) {\n let SSE = 0,\n SST = 0;\n visitPoints(data, x, y, (dx, dy) => {\n const sse = dy - predict(dx),\n sst = dy - uY;\n SSE += sse * sse;\n SST += sst * sst;\n });\n return 1 - SSE / SST;\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction linear (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] + coef[1] * x;\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction log (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n dx = Math.log(dx);\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] + coef[1] * Math.log(x);\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n\nfunction exp (data, x, y) {\n // eslint-disable-next-line no-unused-vars\n const [xv, yv, ux, uy] = points(data, x, y);\n let YL = 0,\n XY = 0,\n XYL = 0,\n X2Y = 0,\n n = 0,\n dx,\n ly,\n xy;\n visitPoints(data, x, y, (_, dy) => {\n dx = xv[n++];\n ly = Math.log(dy);\n xy = dx * dy;\n YL += (dy * ly - YL) / n;\n XY += (xy - XY) / n;\n XYL += (xy * ly - XYL) / n;\n X2Y += (dx * xy - X2Y) / n;\n });\n const [c0, c1] = ols(XY / uy, YL / uy, XYL / uy, X2Y / uy),\n predict = x => Math.exp(c0 + c1 * (x - ux));\n return {\n coef: [Math.exp(c0 - c1 * ux), c1],\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction pow (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n YS = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n const lx = Math.log(dx),\n ly = Math.log(dy);\n ++n;\n X += (lx - X) / n;\n Y += (ly - Y) / n;\n XY += (lx * ly - XY) / n;\n X2 += (lx * lx - X2) / n;\n YS += (dy - YS) / n;\n });\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] * Math.pow(x, coef[1]);\n coef[0] = Math.exp(coef[0]);\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, YS, predict)\n };\n}\n\nfunction quad (data, x, y) {\n const [xv, yv, ux, uy] = points(data, x, y),\n n = xv.length;\n let X2 = 0,\n X3 = 0,\n X4 = 0,\n XY = 0,\n X2Y = 0,\n i,\n dx,\n dy,\n x2;\n for (i = 0; i < n;) {\n dx = xv[i];\n dy = yv[i++];\n x2 = dx * dx;\n X2 += (x2 - X2) / i;\n X3 += (x2 * dx - X3) / i;\n X4 += (x2 * x2 - X4) / i;\n XY += (dx * dy - XY) / i;\n X2Y += (x2 * dy - X2Y) / i;\n }\n const X2X2 = X4 - X2 * X2,\n d = X2 * X2X2 - X3 * X3,\n a = (X2Y * X2 - XY * X3) / d,\n b = (XY * X2X2 - X2Y * X3) / d,\n c = -a * X2,\n predict = x => {\n x = x - ux;\n return a * x * x + b * x + c + uy;\n };\n\n // transform coefficients back from mean-centered space\n return {\n coef: [c - b * ux + a * ux * ux + uy, b - 2 * a * ux, a],\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n// ... which was adapted from regression-js by Tom Alexander\n// Source: https://github.com/Tom-Alexander/regression-js/blob/master/src/regression.js#L246\n// License: https://github.com/Tom-Alexander/regression-js/blob/master/LICENSE\nfunction poly (data, x, y, order) {\n // use more efficient methods for lower orders\n if (order === 0) return constant(data, x, y);\n if (order === 1) return linear(data, x, y);\n if (order === 2) return quad(data, x, y);\n const [xv, yv, ux, uy] = points(data, x, y),\n n = xv.length,\n lhs = [],\n rhs = [],\n k = order + 1;\n let i, j, l, v, c;\n for (i = 0; i < k; ++i) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i) * yv[l];\n }\n lhs.push(v);\n c = new Float64Array(k);\n for (j = 0; j < k; ++j) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i + j);\n }\n c[j] = v;\n }\n rhs.push(c);\n }\n rhs.push(lhs);\n const coef = gaussianElimination(rhs),\n predict = x => {\n x -= ux;\n let y = uy + coef[0] + coef[1] * x + coef[2] * x * x;\n for (i = 3; i < k; ++i) y += coef[i] * Math.pow(x, i);\n return y;\n };\n return {\n coef: uncenter(k, coef, -ux, uy),\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\nfunction uncenter(k, a, x, y) {\n const z = Array(k);\n let i, j, v, c;\n\n // initialize to zero\n for (i = 0; i < k; ++i) z[i] = 0;\n\n // polynomial expansion\n for (i = k - 1; i >= 0; --i) {\n v = a[i];\n c = 1;\n z[i] += v;\n for (j = 1; j <= i; ++j) {\n c *= (i + 1 - j) / j; // binomial coefficent\n z[i - j] += v * Math.pow(x, j) * c;\n }\n }\n\n // bias term\n z[0] += y;\n return z;\n}\n\n// Given an array for a two-dimensional matrix and the polynomial order,\n// solve A * x = b using Gaussian elimination.\nfunction gaussianElimination(matrix) {\n const n = matrix.length - 1,\n coef = [];\n let i, j, k, r, t;\n for (i = 0; i < n; ++i) {\n r = i; // max row\n for (j = i + 1; j < n; ++j) {\n if (Math.abs(matrix[i][j]) > Math.abs(matrix[i][r])) {\n r = j;\n }\n }\n for (k = i; k < n + 1; ++k) {\n t = matrix[k][i];\n matrix[k][i] = matrix[k][r];\n matrix[k][r] = t;\n }\n for (j = i + 1; j < n; ++j) {\n for (k = n; k >= i; k--) {\n matrix[k][j] -= matrix[k][i] * matrix[i][j] / matrix[i][i];\n }\n }\n }\n for (j = n - 1; j >= 0; --j) {\n t = 0;\n for (k = j + 1; k < n; ++k) {\n t += matrix[k][j] * coef[k];\n }\n coef[j] = (matrix[n][j] - t) / matrix[j][j];\n }\n return coef;\n}\n\nconst maxiters = 2,\n epsilon = 1e-12;\n\n// Adapted from science.js by Jason Davies\n// Source: https://github.com/jasondavies/science.js/blob/master/src/stats/loess.js\n// License: https://github.com/jasondavies/science.js/blob/master/LICENSE\nfunction loess (data, x, y, bandwidth) {\n const [xv, yv, ux, uy] = points(data, x, y, true),\n n = xv.length,\n bw = Math.max(2, ~~(bandwidth * n)),\n // # nearest neighbors\n yhat = new Float64Array(n),\n residuals = new Float64Array(n),\n robustWeights = new Float64Array(n).fill(1);\n for (let iter = -1; ++iter <= maxiters;) {\n const interval = [0, bw - 1];\n for (let i = 0; i < n; ++i) {\n const dx = xv[i],\n i0 = interval[0],\n i1 = interval[1],\n edge = dx - xv[i0] > xv[i1] - dx ? i0 : i1;\n let W = 0,\n X = 0,\n Y = 0,\n XY = 0,\n X2 = 0;\n const denom = 1 / Math.abs(xv[edge] - dx || 1); // avoid singularity!\n\n for (let k = i0; k <= i1; ++k) {\n const xk = xv[k],\n yk = yv[k],\n w = tricube(Math.abs(dx - xk) * denom) * robustWeights[k],\n xkw = xk * w;\n W += w;\n X += xkw;\n Y += yk * w;\n XY += yk * xkw;\n X2 += xk * xkw;\n }\n\n // linear regression fit\n const [a, b] = ols(X / W, Y / W, XY / W, X2 / W);\n yhat[i] = a + b * dx;\n residuals[i] = Math.abs(yv[i] - yhat[i]);\n updateInterval(xv, i + 1, interval);\n }\n if (iter === maxiters) {\n break;\n }\n const medianResidual = median(residuals);\n if (Math.abs(medianResidual) < epsilon) break;\n for (let i = 0, arg, w; i < n; ++i) {\n arg = residuals[i] / (6 * medianResidual);\n // default to epsilon (rather than zero) for large deviations\n // keeping weights tiny but non-zero prevents singularites\n robustWeights[i] = arg >= 1 ? epsilon : (w = 1 - arg * arg) * w;\n }\n }\n return output(xv, yhat, ux, uy);\n}\n\n// weighting kernel for local regression\nfunction tricube(x) {\n return (x = 1 - x * x * x) * x * x;\n}\n\n// advance sliding window interval of nearest neighbors\nfunction updateInterval(xv, i, interval) {\n const val = xv[i];\n let left = interval[0],\n right = interval[1] + 1;\n if (right >= xv.length) return;\n\n // step right if distance to new right edge is <= distance to old left edge\n // step when distance is equal to ensure movement over duplicate x values\n while (i > left && xv[right] - val <= val - xv[left]) {\n interval[0] = ++left;\n interval[1] = right;\n ++right;\n }\n}\n\n// generate smoothed output points\n// average points with repeated x values\nfunction output(xv, yhat, ux, uy) {\n const n = xv.length,\n out = [];\n let i = 0,\n cnt = 0,\n prev = [],\n v;\n for (; i < n; ++i) {\n v = xv[i] + ux;\n if (prev[0] === v) {\n // average output values via online update\n prev[1] += (yhat[i] - prev[1]) / ++cnt;\n } else {\n // add new output point\n cnt = 0;\n prev[1] += uy;\n prev = [v, yhat[i]];\n out.push(prev);\n }\n }\n prev[1] += uy;\n return out;\n}\n\n// subdivide up to accuracy of 0.5 degrees\nconst MIN_RADIANS = 0.5 * Math.PI / 180;\n\n// Adaptively sample an interpolated function over a domain extent\nfunction sampleCurve (f, extent, minSteps, maxSteps) {\n minSteps = minSteps || 25;\n maxSteps = Math.max(minSteps, maxSteps || 200);\n const point = x => [x, f(x)],\n minX = extent[0],\n maxX = extent[1],\n span = maxX - minX,\n stop = span / maxSteps,\n prev = [point(minX)],\n next = [];\n if (minSteps === maxSteps) {\n // no adaptation, sample uniform grid directly and return\n for (let i = 1; i < maxSteps; ++i) {\n prev.push(point(minX + i / minSteps * span));\n }\n prev.push(point(maxX));\n return prev;\n } else {\n // sample minimum points on uniform grid\n // then move on to perform adaptive refinement\n next.push(point(maxX));\n for (let i = minSteps; --i > 0;) {\n next.push(point(minX + i / minSteps * span));\n }\n }\n let p0 = prev[0];\n let p1 = next[next.length - 1];\n const sx = 1 / span;\n const sy = scaleY(p0[1], next);\n while (p1) {\n // midpoint for potential curve subdivision\n const pm = point((p0[0] + p1[0]) / 2);\n const dx = pm[0] - p0[0] >= stop;\n if (dx && angleDelta(p0, pm, p1, sx, sy) > MIN_RADIANS) {\n // maximum resolution has not yet been met, and\n // subdivision midpoint is sufficiently different from endpoint\n // save subdivision, push midpoint onto the visitation stack\n next.push(pm);\n } else {\n // subdivision midpoint sufficiently similar to endpoint\n // skip subdivision, store endpoint, move to next point on the stack\n p0 = p1;\n prev.push(p1);\n next.pop();\n }\n p1 = next[next.length - 1];\n }\n return prev;\n}\nfunction scaleY(init, points) {\n let ymin = init;\n let ymax = init;\n const n = points.length;\n for (let i = 0; i < n; ++i) {\n const y = points[i][1];\n if (y < ymin) ymin = y;\n if (y > ymax) ymax = y;\n }\n return 1 / (ymax - ymin);\n}\nfunction angleDelta(p, q, r, sx, sy) {\n const a0 = Math.atan2(sy * (r[1] - p[1]), sx * (r[0] - p[0])),\n a1 = Math.atan2(sy * (q[1] - p[1]), sx * (q[0] - p[0]));\n return Math.abs(a0 - a1);\n}\n\nexport { estimateBandwidth as bandwidthNRD, bin, bootstrapCI, cumulativeLogNormal, cumulativeNormal, cumulativeUniform, densityLogNormal, densityNormal, densityUniform, dotbin, quantileLogNormal, quantileNormal, quantileUniform, quantiles, quartiles, random, integer as randomInteger, kde as randomKDE, lcg as randomLCG, lognormal as randomLogNormal, mixture as randomMixture, gaussian as randomNormal, uniform as randomUniform, constant as regressionConstant, exp as regressionExp, linear as regressionLinear, loess as regressionLoess, log as regressionLog, poly as regressionPoly, pow as regressionPow, quad as regressionQuad, sampleCurve, sampleLogNormal, sampleNormal, sampleUniform, setRandom };\n","import { extend, identity, field, hasOwnProperty, extentIndex, inherits, array, accessorName, error, accessorFields, accessor, toNumber, merge, compare, truthy, extent, span, fastmap, isArray, key, ascending, peek, zero, constant } from 'vega-util';\nimport { tupleid, Transform, replace, ingest, stableCompare, Operator, derive, rederive } from 'vega-dataflow';\nimport { quartiles, bootstrapCI, bin, randomKDE, randomMixture, randomNormal, randomLogNormal, randomUniform, sampleCurve, dotbin, quantiles, random } from 'vega-statistics';\nimport { median, mean, min, max, range, bisector } from 'd3-array';\nimport { TIME_UNITS, utcInterval, timeInterval, timeBin, timeUnits, utcFloor, timeFloor } from 'vega-time';\n\nfunction multikey(f) {\n return x => {\n const n = f.length;\n let i = 1,\n k = String(f[0](x));\n for (; i < n; ++i) {\n k += '|' + f[i](x);\n }\n return k;\n };\n}\nfunction groupkey(fields) {\n return !fields || !fields.length ? function () {\n return '';\n } : fields.length === 1 ? fields[0] : multikey(fields);\n}\n\nfunction measureName(op, field, as) {\n return as || op + (!field ? '' : '_' + field);\n}\nconst noop = () => {};\nconst base_op = {\n init: noop,\n add: noop,\n rem: noop,\n idx: 0\n};\nconst AggregateOps = {\n values: {\n init: m => m.cell.store = true,\n value: m => m.cell.data.values(),\n idx: -1\n },\n count: {\n value: m => m.cell.num\n },\n __count__: {\n value: m => m.missing + m.valid\n },\n missing: {\n value: m => m.missing\n },\n valid: {\n value: m => m.valid\n },\n sum: {\n init: m => m.sum = 0,\n value: m => m.sum,\n add: (m, v) => m.sum += +v,\n rem: (m, v) => m.sum -= v\n },\n product: {\n init: m => m.product = 1,\n value: m => m.valid ? m.product : undefined,\n add: (m, v) => m.product *= v,\n rem: (m, v) => m.product /= v\n },\n mean: {\n init: m => m.mean = 0,\n value: m => m.valid ? m.mean : undefined,\n add: (m, v) => (m.mean_d = v - m.mean, m.mean += m.mean_d / m.valid),\n rem: (m, v) => (m.mean_d = v - m.mean, m.mean -= m.valid ? m.mean_d / m.valid : m.mean)\n },\n average: {\n value: m => m.valid ? m.mean : undefined,\n req: ['mean'],\n idx: 1\n },\n variance: {\n init: m => m.dev = 0,\n value: m => m.valid > 1 ? m.dev / (m.valid - 1) : undefined,\n add: (m, v) => m.dev += m.mean_d * (v - m.mean),\n rem: (m, v) => m.dev -= m.mean_d * (v - m.mean),\n req: ['mean'],\n idx: 1\n },\n variancep: {\n value: m => m.valid > 1 ? m.dev / m.valid : undefined,\n req: ['variance'],\n idx: 2\n },\n stdev: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / (m.valid - 1)) : undefined,\n req: ['variance'],\n idx: 2\n },\n stdevp: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / m.valid) : undefined,\n req: ['variance'],\n idx: 2\n },\n stderr: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / (m.valid * (m.valid - 1))) : undefined,\n req: ['variance'],\n idx: 2\n },\n distinct: {\n value: m => m.cell.data.distinct(m.get),\n req: ['values'],\n idx: 3\n },\n ci0: {\n value: m => m.cell.data.ci0(m.get),\n req: ['values'],\n idx: 3\n },\n ci1: {\n value: m => m.cell.data.ci1(m.get),\n req: ['values'],\n idx: 3\n },\n median: {\n value: m => m.cell.data.q2(m.get),\n req: ['values'],\n idx: 3\n },\n q1: {\n value: m => m.cell.data.q1(m.get),\n req: ['values'],\n idx: 3\n },\n q3: {\n value: m => m.cell.data.q3(m.get),\n req: ['values'],\n idx: 3\n },\n min: {\n init: m => m.min = undefined,\n value: m => m.min = Number.isNaN(m.min) ? m.cell.data.min(m.get) : m.min,\n add: (m, v) => {\n if (v < m.min || m.min === undefined) m.min = v;\n },\n rem: (m, v) => {\n if (v <= m.min) m.min = NaN;\n },\n req: ['values'],\n idx: 4\n },\n max: {\n init: m => m.max = undefined,\n value: m => m.max = Number.isNaN(m.max) ? m.cell.data.max(m.get) : m.max,\n add: (m, v) => {\n if (v > m.max || m.max === undefined) m.max = v;\n },\n rem: (m, v) => {\n if (v >= m.max) m.max = NaN;\n },\n req: ['values'],\n idx: 4\n },\n argmin: {\n init: m => m.argmin = undefined,\n value: m => m.argmin || m.cell.data.argmin(m.get),\n add: (m, v, t) => {\n if (v < m.min) m.argmin = t;\n },\n rem: (m, v) => {\n if (v <= m.min) m.argmin = undefined;\n },\n req: ['min', 'values'],\n idx: 3\n },\n argmax: {\n init: m => m.argmax = undefined,\n value: m => m.argmax || m.cell.data.argmax(m.get),\n add: (m, v, t) => {\n if (v > m.max) m.argmax = t;\n },\n rem: (m, v) => {\n if (v >= m.max) m.argmax = undefined;\n },\n req: ['max', 'values'],\n idx: 3\n },\n exponential: {\n init: (m, r) => {\n m.exp = 0;\n m.exp_r = r;\n },\n value: m => m.valid ? m.exp * (1 - m.exp_r) / (1 - m.exp_r ** m.valid) : undefined,\n add: (m, v) => m.exp = m.exp_r * m.exp + v,\n rem: (m, v) => m.exp = (m.exp - v / m.exp_r ** (m.valid - 1)) / m.exp_r\n },\n exponentialb: {\n value: m => m.valid ? m.exp * (1 - m.exp_r) : undefined,\n req: ['exponential'],\n idx: 1\n }\n};\nconst ValidAggregateOps = Object.keys(AggregateOps).filter(d => d !== '__count__');\nfunction measure(key, value) {\n return (out, aggregate_param) => extend({\n name: key,\n aggregate_param: aggregate_param,\n out: out || key\n }, base_op, value);\n}\n[...ValidAggregateOps, '__count__'].forEach(key => {\n AggregateOps[key] = measure(key, AggregateOps[key]);\n});\nfunction createMeasure(op, param, name) {\n return AggregateOps[op](name, param);\n}\nfunction compareIndex(a, b) {\n return a.idx - b.idx;\n}\nfunction resolve(agg) {\n const map = {};\n agg.forEach(a => map[a.name] = a);\n const getreqs = a => {\n if (!a.req) return;\n a.req.forEach(key => {\n if (!map[key]) getreqs(map[key] = AggregateOps[key]());\n });\n };\n agg.forEach(getreqs);\n return Object.values(map).sort(compareIndex);\n}\nfunction init() {\n this.valid = 0;\n this.missing = 0;\n this._ops.forEach(op => op.aggregate_param == null ? op.init(this) : op.init(this, op.aggregate_param));\n}\nfunction add(v, t) {\n if (v == null || v === '') {\n ++this.missing;\n return;\n }\n if (v !== v) return;\n ++this.valid;\n this._ops.forEach(op => op.add(this, v, t));\n}\nfunction rem(v, t) {\n if (v == null || v === '') {\n --this.missing;\n return;\n }\n if (v !== v) return;\n --this.valid;\n this._ops.forEach(op => op.rem(this, v, t));\n}\nfunction set(t) {\n this._out.forEach(op => t[op.out] = op.value(this));\n return t;\n}\nfunction compileMeasures(agg, field) {\n const get = field || identity,\n ops = resolve(agg),\n out = agg.slice().sort(compareIndex);\n function ctr(cell) {\n this._ops = ops;\n this._out = out;\n this.cell = cell;\n this.init();\n }\n ctr.prototype.init = init;\n ctr.prototype.add = add;\n ctr.prototype.rem = rem;\n ctr.prototype.set = set;\n ctr.prototype.get = get;\n ctr.fields = agg.map(op => op.out);\n return ctr;\n}\n\nfunction TupleStore(key) {\n this._key = key ? field(key) : tupleid;\n this.reset();\n}\nconst prototype$1 = TupleStore.prototype;\nprototype$1.reset = function () {\n this._add = [];\n this._rem = [];\n this._ext = null;\n this._get = null;\n this._q = null;\n};\nprototype$1.add = function (v) {\n this._add.push(v);\n};\nprototype$1.rem = function (v) {\n this._rem.push(v);\n};\nprototype$1.values = function () {\n this._get = null;\n if (this._rem.length === 0) return this._add;\n const a = this._add,\n r = this._rem,\n k = this._key,\n n = a.length,\n m = r.length,\n x = Array(n - m),\n map = {};\n let i, j, v;\n\n // use unique key field to clear removed values\n for (i = 0; i < m; ++i) {\n map[k(r[i])] = 1;\n }\n for (i = 0, j = 0; i < n; ++i) {\n if (map[k(v = a[i])]) {\n map[k(v)] = 0;\n } else {\n x[j++] = v;\n }\n }\n this._rem = [];\n return this._add = x;\n};\n\n// memoizing statistics methods\n\nprototype$1.distinct = function (get) {\n const v = this.values(),\n map = {};\n let n = v.length,\n count = 0,\n s;\n while (--n >= 0) {\n s = get(v[n]) + '';\n if (!hasOwnProperty(map, s)) {\n map[s] = 1;\n ++count;\n }\n }\n return count;\n};\nprototype$1.extent = function (get) {\n if (this._get !== get || !this._ext) {\n const v = this.values(),\n i = extentIndex(v, get);\n this._ext = [v[i[0]], v[i[1]]];\n this._get = get;\n }\n return this._ext;\n};\nprototype$1.argmin = function (get) {\n return this.extent(get)[0] || {};\n};\nprototype$1.argmax = function (get) {\n return this.extent(get)[1] || {};\n};\nprototype$1.min = function (get) {\n const m = this.extent(get)[0];\n return m != null ? get(m) : undefined;\n};\nprototype$1.max = function (get) {\n const m = this.extent(get)[1];\n return m != null ? get(m) : undefined;\n};\nprototype$1.quartile = function (get) {\n if (this._get !== get || !this._q) {\n this._q = quartiles(this.values(), get);\n this._get = get;\n }\n return this._q;\n};\nprototype$1.q1 = function (get) {\n return this.quartile(get)[0];\n};\nprototype$1.q2 = function (get) {\n return this.quartile(get)[1];\n};\nprototype$1.q3 = function (get) {\n return this.quartile(get)[2];\n};\nprototype$1.ci = function (get) {\n if (this._get !== get || !this._ci) {\n this._ci = bootstrapCI(this.values(), 1000, 0.05, get);\n this._get = get;\n }\n return this._ci;\n};\nprototype$1.ci0 = function (get) {\n return this.ci(get)[0];\n};\nprototype$1.ci1 = function (get) {\n return this.ci(get)[1];\n};\n\n/**\n * Group-by aggregation operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {Array} [params.fields] - An array of accessors to aggregate.\n * @param {Array} [params.ops] - An array of strings indicating aggregation operations.\n * @param {Array} [params.aggregate_params=[null]] - An optional array of parameters for aggregation operations.\n * @param {Array} [params.as] - An array of output field names for aggregated values.\n * @param {boolean} [params.cross=false] - A flag indicating that the full\n * cross-product of groupby values should be generated, including empty cells.\n * If true, the drop parameter is ignored and empty cells are retained.\n * @param {boolean} [params.drop=true] - A flag indicating if empty cells should be removed.\n */\nfunction Aggregate(params) {\n Transform.call(this, null, params);\n this._adds = []; // array of added output tuples\n this._mods = []; // array of modified output tuples\n this._alen = 0; // number of active added tuples\n this._mlen = 0; // number of active modified tuples\n this._drop = true; // should empty aggregation cells be removed\n this._cross = false; // produce full cross-product of group-by values\n\n this._dims = []; // group-by dimension accessors\n this._dnames = []; // group-by dimension names\n\n this._measures = []; // collection of aggregation monoids\n this._countOnly = false; // flag indicating only count aggregation\n this._counts = null; // collection of count fields\n this._prev = null; // previous aggregation cells\n\n this._inputs = null; // array of dependent input tuple field names\n this._outputs = null; // array of output tuple field names\n}\n\nAggregate.Definition = {\n 'type': 'Aggregate',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidAggregateOps\n }, {\n 'name': 'aggregate_params',\n 'type': 'field',\n 'null': true,\n 'array': true,\n 'default': [null]\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'drop',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'cross',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(Aggregate, Transform, {\n transform(_, pulse) {\n const aggr = this,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n mod = _.modified();\n aggr.stamp = out.stamp;\n if (aggr.value && (mod || pulse.modified(aggr._inputs, true))) {\n aggr._prev = aggr.value;\n aggr.value = mod ? aggr.init(_) : Object.create(null);\n pulse.visit(pulse.SOURCE, t => aggr.add(t));\n } else {\n aggr.value = aggr.value || aggr.init(_);\n pulse.visit(pulse.REM, t => aggr.rem(t));\n pulse.visit(pulse.ADD, t => aggr.add(t));\n }\n\n // Indicate output fields and return aggregate tuples.\n out.modifies(aggr._outputs);\n\n // Should empty cells be dropped?\n aggr._drop = _.drop !== false;\n\n // If domain cross-product requested, generate empty cells as needed\n // and ensure that empty cells are not dropped\n if (_.cross && aggr._dims.length > 1) {\n aggr._drop = false;\n aggr.cross();\n }\n if (pulse.clean() && aggr._drop) {\n out.clean(true).runAfter(() => this.clean());\n }\n return aggr.changes(out);\n },\n cross() {\n const aggr = this,\n curr = aggr.value,\n dims = aggr._dnames,\n vals = dims.map(() => ({})),\n n = dims.length;\n\n // collect all group-by domain values\n function collect(cells) {\n let key, i, t, v;\n for (key in cells) {\n t = cells[key].tuple;\n for (i = 0; i < n; ++i) {\n vals[i][v = t[dims[i]]] = v;\n }\n }\n }\n collect(aggr._prev);\n collect(curr);\n\n // iterate over key cross-product, create cells as needed\n function generate(base, tuple, index) {\n const name = dims[index],\n v = vals[index++];\n for (const k in v) {\n const key = base ? base + '|' + k : k;\n tuple[name] = v[k];\n if (index < n) generate(key, tuple, index);else if (!curr[key]) aggr.cell(key, tuple);\n }\n }\n generate('', {}, 0);\n },\n init(_) {\n // initialize input and output fields\n const inputs = this._inputs = [],\n outputs = this._outputs = [],\n inputMap = {};\n function inputVisit(get) {\n const fields = array(accessorFields(get)),\n n = fields.length;\n let i = 0,\n f;\n for (; i < n; ++i) {\n if (!inputMap[f = fields[i]]) {\n inputMap[f] = 1;\n inputs.push(f);\n }\n }\n }\n\n // initialize group-by dimensions\n this._dims = array(_.groupby);\n this._dnames = this._dims.map(d => {\n const dname = accessorName(d);\n inputVisit(d);\n outputs.push(dname);\n return dname;\n });\n this.cellkey = _.key ? _.key : groupkey(this._dims);\n\n // initialize aggregate measures\n this._countOnly = true;\n this._counts = [];\n this._measures = [];\n const fields = _.fields || [null],\n ops = _.ops || ['count'],\n aggregate_params = _.aggregate_params || [null],\n as = _.as || [],\n n = fields.length,\n map = {};\n let field, op, aggregate_param, m, mname, outname, i;\n if (n !== ops.length) {\n error('Unmatched number of fields and aggregate ops.');\n }\n for (i = 0; i < n; ++i) {\n field = fields[i];\n op = ops[i];\n aggregate_param = aggregate_params[i] || null;\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n mname = accessorName(field);\n outname = measureName(op, mname, as[i]);\n outputs.push(outname);\n if (op === 'count') {\n this._counts.push(outname);\n continue;\n }\n m = map[mname];\n if (!m) {\n inputVisit(field);\n m = map[mname] = [];\n m.field = field;\n this._measures.push(m);\n }\n if (op !== 'count') this._countOnly = false;\n m.push(createMeasure(op, aggregate_param, outname));\n }\n this._measures = this._measures.map(m => compileMeasures(m, m.field));\n return Object.create(null); // aggregation cells (this.value)\n },\n\n // -- Cell Management -----\n\n cellkey: groupkey(),\n cell(key, t) {\n let cell = this.value[key];\n if (!cell) {\n cell = this.value[key] = this.newcell(key, t);\n this._adds[this._alen++] = cell;\n } else if (cell.num === 0 && this._drop && cell.stamp < this.stamp) {\n cell.stamp = this.stamp;\n this._adds[this._alen++] = cell;\n } else if (cell.stamp < this.stamp) {\n cell.stamp = this.stamp;\n this._mods[this._mlen++] = cell;\n }\n return cell;\n },\n newcell(key, t) {\n const cell = {\n key: key,\n num: 0,\n agg: null,\n tuple: this.newtuple(t, this._prev && this._prev[key]),\n stamp: this.stamp,\n store: false\n };\n if (!this._countOnly) {\n const measures = this._measures,\n n = measures.length;\n cell.agg = Array(n);\n for (let i = 0; i < n; ++i) {\n cell.agg[i] = new measures[i](cell);\n }\n }\n if (cell.store) {\n cell.data = new TupleStore();\n }\n return cell;\n },\n newtuple(t, p) {\n const names = this._dnames,\n dims = this._dims,\n n = dims.length,\n x = {};\n for (let i = 0; i < n; ++i) {\n x[names[i]] = dims[i](t);\n }\n return p ? replace(p.tuple, x) : ingest(x);\n },\n clean() {\n const cells = this.value;\n for (const key in cells) {\n if (cells[key].num === 0) {\n delete cells[key];\n }\n }\n },\n // -- Process Tuples -----\n\n add(t) {\n const key = this.cellkey(t),\n cell = this.cell(key, t);\n cell.num += 1;\n if (this._countOnly) return;\n if (cell.store) cell.data.add(t);\n const agg = cell.agg;\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].add(agg[i].get(t), t);\n }\n },\n rem(t) {\n const key = this.cellkey(t),\n cell = this.cell(key, t);\n cell.num -= 1;\n if (this._countOnly) return;\n if (cell.store) cell.data.rem(t);\n const agg = cell.agg;\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].rem(agg[i].get(t), t);\n }\n },\n celltuple(cell) {\n const tuple = cell.tuple,\n counts = this._counts;\n\n // consolidate stored values\n if (cell.store) {\n cell.data.values();\n }\n\n // update tuple properties\n for (let i = 0, n = counts.length; i < n; ++i) {\n tuple[counts[i]] = cell.num;\n }\n if (!this._countOnly) {\n const agg = cell.agg;\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].set(tuple);\n }\n }\n return tuple;\n },\n changes(out) {\n const adds = this._adds,\n mods = this._mods,\n prev = this._prev,\n drop = this._drop,\n add = out.add,\n rem = out.rem,\n mod = out.mod;\n let cell, key, i, n;\n if (prev) for (key in prev) {\n cell = prev[key];\n if (!drop || cell.num) rem.push(cell.tuple);\n }\n for (i = 0, n = this._alen; i < n; ++i) {\n add.push(this.celltuple(adds[i]));\n adds[i] = null; // for garbage collection\n }\n\n for (i = 0, n = this._mlen; i < n; ++i) {\n cell = mods[i];\n (cell.num === 0 && drop ? rem : mod).push(this.celltuple(cell));\n mods[i] = null; // for garbage collection\n }\n\n this._alen = this._mlen = 0; // reset list of active cells\n this._prev = null;\n return out;\n }\n});\n\n// epsilon bias to offset floating point error (#1737)\nconst EPSILON$1 = 1e-14;\n\n/**\n * Generates a binning function for discretizing data.\n * @constructor\n * @param {object} params - The parameters for this operator. The\n * provided values should be valid options for the {@link bin} function.\n * @param {function(object): *} params.field - The data field to bin.\n */\nfunction Bin(params) {\n Transform.call(this, null, params);\n}\nBin.Definition = {\n 'type': 'Bin',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'interval',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'anchor',\n 'type': 'number'\n }, {\n 'name': 'maxbins',\n 'type': 'number',\n 'default': 20\n }, {\n 'name': 'base',\n 'type': 'number',\n 'default': 10\n }, {\n 'name': 'divide',\n 'type': 'number',\n 'array': true,\n 'default': [5, 2]\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'span',\n 'type': 'number'\n }, {\n 'name': 'step',\n 'type': 'number'\n }, {\n 'name': 'steps',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'minstep',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'name',\n 'type': 'string'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['bin0', 'bin1']\n }]\n};\ninherits(Bin, Transform, {\n transform(_, pulse) {\n const band = _.interval !== false,\n bins = this._bins(_),\n start = bins.start,\n step = bins.step,\n as = _.as || ['bin0', 'bin1'],\n b0 = as[0],\n b1 = as[1];\n let flag;\n if (_.modified()) {\n pulse = pulse.reflow(true);\n flag = pulse.SOURCE;\n } else {\n flag = pulse.modified(accessorFields(_.field)) ? pulse.ADD_MOD : pulse.ADD;\n }\n pulse.visit(flag, band ? t => {\n const v = bins(t);\n // minimum bin value (inclusive)\n t[b0] = v;\n // maximum bin value (exclusive)\n // use convoluted math for better floating point agreement\n // see https://github.com/vega/vega/issues/830\n // infinite values propagate through this formula! #2227\n t[b1] = v == null ? null : start + step * (1 + (v - start) / step);\n } : t => t[b0] = bins(t));\n return pulse.modifies(band ? as : b0);\n },\n _bins(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n const field = _.field,\n bins = bin(_),\n step = bins.step;\n let start = bins.start,\n stop = start + Math.ceil((bins.stop - start) / step) * step,\n a,\n d;\n if ((a = _.anchor) != null) {\n d = a - (start + step * Math.floor((a - start) / step));\n start += d;\n stop += d;\n }\n const f = function (t) {\n let v = toNumber(field(t));\n return v == null ? null : v < start ? -Infinity : v > stop ? +Infinity : (v = Math.max(start, Math.min(v, stop - step)), start + step * Math.floor(EPSILON$1 + (v - start) / step));\n };\n f.start = start;\n f.stop = bins.stop;\n f.step = step;\n return this.value = accessor(f, accessorFields(field), _.name || 'bin_' + accessorName(field));\n }\n});\n\nfunction SortedList (idFunc, source, input) {\n const $ = idFunc;\n let data = source || [],\n add = input || [],\n rem = {},\n cnt = 0;\n return {\n add: t => add.push(t),\n remove: t => rem[$(t)] = ++cnt,\n size: () => data.length,\n data: (compare, resort) => {\n if (cnt) {\n data = data.filter(t => !rem[$(t)]);\n rem = {};\n cnt = 0;\n }\n if (resort && compare) {\n data.sort(compare);\n }\n if (add.length) {\n data = compare ? merge(compare, data, add.sort(compare)) : data.concat(add);\n add = [];\n }\n return data;\n }\n };\n}\n\n/**\n * Collects all data tuples that pass through this operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for additionally sorting the collected tuples.\n */\nfunction Collect(params) {\n Transform.call(this, [], params);\n}\nCollect.Definition = {\n 'type': 'Collect',\n 'metadata': {\n 'source': true\n },\n 'params': [{\n 'name': 'sort',\n 'type': 'compare'\n }]\n};\ninherits(Collect, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.ALL),\n list = SortedList(tupleid, this.value, out.materialize(out.ADD).add),\n sort = _.sort,\n mod = pulse.changed() || sort && (_.modified('sort') || pulse.modified(sort.fields));\n out.visit(out.REM, list.remove);\n this.modified(mod);\n this.value = out.source = list.data(stableCompare(sort), mod);\n\n // propagate tree root if defined\n if (pulse.source && pulse.source.root) {\n this.value.root = pulse.source.root;\n }\n return out;\n }\n});\n\n/**\n * Generates a comparator function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - The fields to compare.\n * @param {Array} [params.orders] - The sort orders.\n * Each entry should be one of \"ascending\" (default) or \"descending\".\n */\nfunction Compare(params) {\n Operator.call(this, null, update$5, params);\n}\ninherits(Compare, Operator);\nfunction update$5(_) {\n return this.value && !_.modified() ? this.value : compare(_.fields, _.orders);\n}\n\n/**\n * Count regexp-defined pattern occurrences in a text field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the text field.\n * @param {string} [params.pattern] - RegExp string defining the text pattern.\n * @param {string} [params.case] - One of 'lower', 'upper' or null (mixed) case.\n * @param {string} [params.stopwords] - RegExp string of words to ignore.\n */\nfunction CountPattern(params) {\n Transform.call(this, null, params);\n}\nCountPattern.Definition = {\n 'type': 'CountPattern',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'case',\n 'type': 'enum',\n 'values': ['upper', 'lower', 'mixed'],\n 'default': 'mixed'\n }, {\n 'name': 'pattern',\n 'type': 'string',\n 'default': '[\\\\w\"]+'\n }, {\n 'name': 'stopwords',\n 'type': 'string',\n 'default': ''\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['text', 'count']\n }]\n};\nfunction tokenize(text, tcase, match) {\n switch (tcase) {\n case 'upper':\n text = text.toUpperCase();\n break;\n case 'lower':\n text = text.toLowerCase();\n break;\n }\n return text.match(match);\n}\ninherits(CountPattern, Transform, {\n transform(_, pulse) {\n const process = update => tuple => {\n var tokens = tokenize(get(tuple), _.case, match) || [],\n t;\n for (var i = 0, n = tokens.length; i < n; ++i) {\n if (!stop.test(t = tokens[i])) update(t);\n }\n };\n const init = this._parameterCheck(_, pulse),\n counts = this._counts,\n match = this._match,\n stop = this._stop,\n get = _.field,\n as = _.as || ['text', 'count'],\n add = process(t => counts[t] = 1 + (counts[t] || 0)),\n rem = process(t => counts[t] -= 1);\n if (init) {\n pulse.visit(pulse.SOURCE, add);\n } else {\n pulse.visit(pulse.ADD, add);\n pulse.visit(pulse.REM, rem);\n }\n return this._finish(pulse, as); // generate output tuples\n },\n\n _parameterCheck(_, pulse) {\n let init = false;\n if (_.modified('stopwords') || !this._stop) {\n this._stop = new RegExp('^' + (_.stopwords || '') + '$', 'i');\n init = true;\n }\n if (_.modified('pattern') || !this._match) {\n this._match = new RegExp(_.pattern || '[\\\\w\\']+', 'g');\n init = true;\n }\n if (_.modified('field') || pulse.modified(_.field.fields)) {\n init = true;\n }\n if (init) this._counts = {};\n return init;\n },\n _finish(pulse, as) {\n const counts = this._counts,\n tuples = this._tuples || (this._tuples = {}),\n text = as[0],\n count = as[1],\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n let w, t, c;\n for (w in counts) {\n t = tuples[w];\n c = counts[w] || 0;\n if (!t && c) {\n tuples[w] = t = ingest({});\n t[text] = w;\n t[count] = c;\n out.add.push(t);\n } else if (c === 0) {\n if (t) out.rem.push(t);\n counts[w] = null;\n tuples[w] = null;\n } else if (t[count] !== c) {\n t[count] = c;\n out.mod.push(t);\n }\n }\n return out.modifies(as);\n }\n});\n\n/**\n * Perform a cross-product of a tuple stream with itself.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object):boolean} [params.filter] - An optional filter\n * function for selectively including tuples in the cross product.\n * @param {Array} [params.as] - The names of the output fields.\n */\nfunction Cross(params) {\n Transform.call(this, null, params);\n}\nCross.Definition = {\n 'type': 'Cross',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'filter',\n 'type': 'expr'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['a', 'b']\n }]\n};\ninherits(Cross, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n as = _.as || ['a', 'b'],\n a = as[0],\n b = as[1],\n reset = !this.value || pulse.changed(pulse.ADD_REM) || _.modified('as') || _.modified('filter');\n let data = this.value;\n if (reset) {\n if (data) out.rem = data;\n data = pulse.materialize(pulse.SOURCE).source;\n out.add = this.value = cross(data, a, b, _.filter || truthy);\n } else {\n out.mod = data;\n }\n out.source = this.value;\n return out.modifies(as);\n }\n});\nfunction cross(input, a, b, filter) {\n var data = [],\n t = {},\n n = input.length,\n i = 0,\n j,\n left;\n for (; i < n; ++i) {\n t[a] = left = input[i];\n for (j = 0; j < n; ++j) {\n t[b] = input[j];\n if (filter(t)) {\n data.push(ingest(t));\n t = {};\n t[a] = left;\n }\n }\n }\n return data;\n}\n\nconst Distributions = {\n kde: randomKDE,\n mixture: randomMixture,\n normal: randomNormal,\n lognormal: randomLogNormal,\n uniform: randomUniform\n};\nconst DISTRIBUTIONS = 'distributions',\n FUNCTION = 'function',\n FIELD = 'field';\n\n/**\n * Parse a parameter object for a probability distribution.\n * @param {object} def - The distribution parameter object.\n * @param {function():Array} - A method for requesting\n * source data. Used for distributions (such as KDE) that\n * require sample data points. This method will only be\n * invoked if the 'from' parameter for a target data source\n * is not provided. Typically this method returns backing\n * source data for a Pulse object.\n * @return {object} - The output distribution object.\n */\nfunction parse(def, data) {\n const func = def[FUNCTION];\n if (!hasOwnProperty(Distributions, func)) {\n error('Unknown distribution function: ' + func);\n }\n const d = Distributions[func]();\n for (const name in def) {\n // if data field, extract values\n if (name === FIELD) {\n d.data((def.from || data()).map(def[name]));\n }\n\n // if distribution mixture, recurse to parse each definition\n else if (name === DISTRIBUTIONS) {\n d[name](def[name].map(_ => parse(_, data)));\n }\n\n // otherwise, simply set the parameter\n else if (typeof d[name] === FUNCTION) {\n d[name](def[name]);\n }\n }\n return d;\n}\n\n/**\n * Grid sample points for a probability density. Given a distribution and\n * a sampling extent, will generate points suitable for plotting either\n * PDF (probability density function) or CDF (cumulative distribution\n * function) curves.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.distribution - The probability distribution. This\n * is an object parameter dependent on the distribution type.\n * @param {string} [params.method='pdf'] - The distribution method to sample.\n * One of 'pdf' or 'cdf'.\n * @param {Array} [params.extent] - The [min, max] extent over which\n * to sample the distribution. This argument is required in most cases, but\n * can be omitted if the distribution (e.g., 'kde') supports a 'data' method\n * that returns numerical sample points from which the extent can be deduced.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\nfunction Density(params) {\n Transform.call(this, null, params);\n}\nconst distributions = [{\n 'key': {\n 'function': 'normal'\n },\n 'params': [{\n 'name': 'mean',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'stdev',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'lognormal'\n },\n 'params': [{\n 'name': 'mean',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'stdev',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'uniform'\n },\n 'params': [{\n 'name': 'min',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'max',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'kde'\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'from',\n 'type': 'data'\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0\n }]\n}];\nconst mixture = {\n 'key': {\n 'function': 'mixture'\n },\n 'params': [{\n 'name': 'distributions',\n 'type': 'param',\n 'array': true,\n 'params': distributions\n }, {\n 'name': 'weights',\n 'type': 'number',\n 'array': true\n }]\n};\nDensity.Definition = {\n 'type': 'Density',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'steps',\n 'type': 'number'\n }, {\n 'name': 'minsteps',\n 'type': 'number',\n 'default': 25\n }, {\n 'name': 'maxsteps',\n 'type': 'number',\n 'default': 200\n }, {\n 'name': 'method',\n 'type': 'string',\n 'default': 'pdf',\n 'values': ['pdf', 'cdf']\n }, {\n 'name': 'distribution',\n 'type': 'param',\n 'params': distributions.concat(mixture)\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['value', 'density']\n }]\n};\ninherits(Density, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const dist = parse(_.distribution, source(pulse)),\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200;\n let method = _.method || 'pdf';\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n if (!_.extent && !dist.data) {\n error('Missing density extent parameter.');\n }\n method = dist[method];\n const as = _.as || ['value', 'density'],\n domain = _.extent || extent(dist.data()),\n values = sampleCurve(method, domain, minsteps, maxsteps).map(v => {\n const tuple = {};\n tuple[as[0]] = v[0];\n tuple[as[1]] = v[1];\n return ingest(tuple);\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\nfunction source(pulse) {\n return () => pulse.materialize(pulse.SOURCE).source;\n}\n\n// use either provided alias or accessor field name\nfunction fieldNames(fields, as) {\n if (!fields) return null;\n return fields.map((f, i) => as[i] || accessorName(f));\n}\nfunction partition$1(data, groupby, field) {\n const groups = [],\n get = f => f(t);\n let map, i, n, t, k, g;\n\n // partition data points into groups\n if (groupby == null) {\n groups.push(data.map(field));\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n g.push(field(t));\n }\n }\n return groups;\n}\n\nconst Output = 'bin';\n\n/**\n * Dot density binning for dot plot construction.\n * Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n * https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to bin.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {number} [params.step] - The step size (bin width) within which dots should be\n * stacked. Defaults to 1/30 of the extent of the data *field*.\n * @param {boolean} [params.smooth=false] - A boolean flag indicating if dot density\n * stacks should be smoothed to reduce variance.\n */\nfunction DotBin(params) {\n Transform.call(this, null, params);\n}\nDotBin.Definition = {\n 'type': 'DotBin',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number'\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': Output\n }]\n};\nconst autostep = (data, field) => span(extent(data, field)) / 30;\ninherits(DotBin, Transform, {\n transform(_, pulse) {\n if (this.value && !(_.modified() || pulse.changed())) {\n return pulse; // early exit\n }\n\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(pulse.source, _.groupby, identity),\n smooth = _.smooth || false,\n field = _.field,\n step = _.step || autostep(source, field),\n sort = stableCompare((a, b) => field(a) - field(b)),\n as = _.as || Output,\n n = groups.length;\n\n // compute dotplot bins per group\n let min = Infinity,\n max = -Infinity,\n i = 0,\n j;\n for (; i < n; ++i) {\n const g = groups[i].sort(sort);\n j = -1;\n for (const v of dotbin(g, step, smooth, field)) {\n if (v < min) min = v;\n if (v > max) max = v;\n g[++j][as] = v;\n }\n }\n this.value = {\n start: min,\n stop: max,\n step: step\n };\n return pulse.reflow(true).modifies(as);\n }\n});\n\n/**\n * Wraps an expression function with access to external parameters.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function} params.expr - The expression function. The\n * function should accept both a datum and a parameter object.\n * This operator's value will be a new function that wraps the\n * expression function with access to this operator's parameters.\n */\nfunction Expression(params) {\n Operator.call(this, null, update$4, params);\n this.modified(true);\n}\ninherits(Expression, Operator);\nfunction update$4(_) {\n const expr = _.expr;\n return this.value && !_.modified('expr') ? this.value : accessor(datum => expr(datum, _), accessorFields(expr), accessorName(expr));\n}\n\n/**\n * Computes extents (min/max) for a data field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field over which to compute extends.\n */\nfunction Extent(params) {\n Transform.call(this, [undefined, undefined], params);\n}\nExtent.Definition = {\n 'type': 'Extent',\n 'metadata': {},\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }]\n};\ninherits(Extent, Transform, {\n transform(_, pulse) {\n const extent = this.value,\n field = _.field,\n mod = pulse.changed() || pulse.modified(field.fields) || _.modified('field');\n let min = extent[0],\n max = extent[1];\n if (mod || min == null) {\n min = +Infinity;\n max = -Infinity;\n }\n pulse.visit(mod ? pulse.SOURCE : pulse.ADD, t => {\n const v = toNumber(field(t));\n if (v != null) {\n // NaNs will fail all comparisons!\n if (v < min) min = v;\n if (v > max) max = v;\n }\n });\n if (!Number.isFinite(min) || !Number.isFinite(max)) {\n let name = accessorName(field);\n if (name) name = ` for field \"${name}\"`;\n pulse.dataflow.warn(`Infinite extent${name}: [${min}, ${max}]`);\n min = max = undefined;\n }\n this.value = [min, max];\n }\n});\n\n/**\n * Provides a bridge between a parent transform and a target subflow that\n * consumes only a subset of the tuples that pass through the parent.\n * @constructor\n * @param {Pulse} pulse - A pulse to use as the value of this operator.\n * @param {Transform} parent - The parent transform (typically a Facet instance).\n */\nfunction Subflow(pulse, parent) {\n Operator.call(this, pulse);\n this.parent = parent;\n this.count = 0;\n}\ninherits(Subflow, Operator, {\n /**\n * Routes pulses from this subflow to a target transform.\n * @param {Transform} target - A transform that receives the subflow of tuples.\n */\n connect(target) {\n this.detachSubflow = target.detachSubflow;\n this.targets().add(target);\n return target.source = this;\n },\n /**\n * Add an 'add' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being added.\n */\n add(t) {\n this.count += 1;\n this.value.add.push(t);\n },\n /**\n * Add a 'rem' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being removed.\n */\n rem(t) {\n this.count -= 1;\n this.value.rem.push(t);\n },\n /**\n * Add a 'mod' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being modified.\n */\n mod(t) {\n this.value.mod.push(t);\n },\n /**\n * Re-initialize this operator's pulse value.\n * @param {Pulse} pulse - The pulse to copy from.\n * @see Pulse.init\n */\n init(pulse) {\n this.value.init(pulse, pulse.NO_SOURCE);\n },\n /**\n * Evaluate this operator. This method overrides the\n * default behavior to simply return the contained pulse value.\n * @return {Pulse}\n */\n evaluate() {\n // assert: this.value.stamp === pulse.stamp\n return this.value;\n }\n});\n\n/**\n * Facets a dataflow into a set of subflows based on a key.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): *} params.key - The key field to facet by.\n */\nfunction Facet(params) {\n Transform.call(this, {}, params);\n this._keys = fastmap(); // cache previously calculated key values\n\n // keep track of active subflows, use as targets array for listeners\n // this allows us to limit propagation to only updated subflows\n const a = this._targets = [];\n a.active = 0;\n a.forEach = f => {\n for (let i = 0, n = a.active; i < n; ++i) {\n f(a[i], i, a);\n }\n };\n}\ninherits(Facet, Transform, {\n activate(flow) {\n this._targets[this._targets.active++] = flow;\n },\n // parent argument provided by PreFacet subclass\n subflow(key, flow, pulse, parent) {\n const flows = this.value;\n let sf = hasOwnProperty(flows, key) && flows[key],\n df,\n p;\n if (!sf) {\n p = parent || (p = this._group[key]) && p.tuple;\n df = pulse.dataflow;\n sf = new Subflow(pulse.fork(pulse.NO_SOURCE), this);\n df.add(sf).connect(flow(df, key, p));\n flows[key] = sf;\n this.activate(sf);\n } else if (sf.value.stamp < pulse.stamp) {\n sf.init(pulse);\n this.activate(sf);\n }\n return sf;\n },\n clean() {\n const flows = this.value;\n let detached = 0;\n for (const key in flows) {\n if (flows[key].count === 0) {\n const detach = flows[key].detachSubflow;\n if (detach) detach();\n delete flows[key];\n ++detached;\n }\n }\n\n // remove inactive targets from the active targets array\n if (detached) {\n const active = this._targets.filter(sf => sf && sf.count > 0);\n this.initTargets(active);\n }\n },\n initTargets(act) {\n const a = this._targets,\n n = a.length,\n m = act ? act.length : 0;\n let i = 0;\n for (; i < m; ++i) {\n a[i] = act[i];\n }\n for (; i < n && a[i] != null; ++i) {\n a[i] = null; // ensure old flows can be garbage collected\n }\n\n a.active = m;\n },\n transform(_, pulse) {\n const df = pulse.dataflow,\n key = _.key,\n flow = _.subflow,\n cache = this._keys,\n rekey = _.modified('key'),\n subflow = key => this.subflow(key, flow, pulse);\n this._group = _.group || {};\n this.initTargets(); // reset list of active subflows\n\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t),\n k = cache.get(id);\n if (k !== undefined) {\n cache.delete(id);\n subflow(k).rem(t);\n }\n });\n pulse.visit(pulse.ADD, t => {\n const k = key(t);\n cache.set(tupleid(t), k);\n subflow(k).add(t);\n });\n if (rekey || pulse.modified(key.fields)) {\n pulse.visit(pulse.MOD, t => {\n const id = tupleid(t),\n k0 = cache.get(id),\n k1 = key(t);\n if (k0 === k1) {\n subflow(k1).mod(t);\n } else {\n cache.set(id, k1);\n subflow(k0).rem(t);\n subflow(k1).add(t);\n }\n });\n } else if (pulse.changed(pulse.MOD)) {\n pulse.visit(pulse.MOD, t => {\n subflow(cache.get(tupleid(t))).mod(t);\n });\n }\n if (rekey) {\n pulse.visit(pulse.REFLOW, t => {\n const id = tupleid(t),\n k0 = cache.get(id),\n k1 = key(t);\n if (k0 !== k1) {\n cache.set(id, k1);\n subflow(k0).rem(t);\n subflow(k1).add(t);\n }\n });\n }\n if (pulse.clean()) {\n df.runAfter(() => {\n this.clean();\n cache.clean();\n });\n } else if (cache.empty > df.cleanThreshold) {\n df.runAfter(cache.clean);\n }\n return pulse;\n }\n});\n\n/**\n * Generates one or more field accessor functions.\n * If the 'name' parameter is an array, an array of field accessors\n * will be created and the 'as' parameter will be ignored.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.name - The field name(s) to access.\n * @param {string} params.as - The accessor function name.\n */\nfunction Field(params) {\n Operator.call(this, null, update$3, params);\n}\ninherits(Field, Operator);\nfunction update$3(_) {\n return this.value && !_.modified() ? this.value : isArray(_.name) ? array(_.name).map(f => field(f)) : field(_.name, _.as);\n}\n\n/**\n * Filters data tuples according to a predicate function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The predicate expression function\n * that determines a tuple's filter status. Truthy values pass the filter.\n */\nfunction Filter(params) {\n Transform.call(this, fastmap(), params);\n}\nFilter.Definition = {\n 'type': 'Filter',\n 'metadata': {\n 'changes': true\n },\n 'params': [{\n 'name': 'expr',\n 'type': 'expr',\n 'required': true\n }]\n};\ninherits(Filter, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow,\n cache = this.value,\n // cache ids of filtered tuples\n output = pulse.fork(),\n add = output.add,\n rem = output.rem,\n mod = output.mod,\n test = _.expr;\n let isMod = true;\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n if (!cache.has(id)) rem.push(t);else cache.delete(id);\n });\n pulse.visit(pulse.ADD, t => {\n if (test(t, _)) add.push(t);else cache.set(tupleid(t), 1);\n });\n function revisit(t) {\n const id = tupleid(t),\n b = test(t, _),\n s = cache.get(id);\n if (b && s) {\n cache.delete(id);\n add.push(t);\n } else if (!b && !s) {\n cache.set(id, 1);\n rem.push(t);\n } else if (isMod && b && !s) {\n mod.push(t);\n }\n }\n pulse.visit(pulse.MOD, revisit);\n if (_.modified()) {\n isMod = false;\n pulse.visit(pulse.REFLOW, revisit);\n }\n if (cache.empty > df.cleanThreshold) df.runAfter(cache.clean);\n return output;\n }\n});\n\n/**\n * Flattens array-typed field values into new data objects.\n * If multiple fields are specified, they are treated as parallel arrays,\n * with output values included for each matching index (or null if missing).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of field\n * accessors for the tuple fields that should be flattened.\n * @param {string} [params.index] - Optional output field name for index\n * value. If unspecified, no index field is included in the output.\n * @param {Array} [params.as] - Output field names for flattened\n * array fields. Any unspecified fields will use the field name provided\n * by the fields accessors.\n */\nfunction Flatten(params) {\n Transform.call(this, [], params);\n}\nFlatten.Definition = {\n 'type': 'Flatten',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'index',\n 'type': 'string'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Flatten, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(fields, _.as || []),\n index = _.index || null,\n m = as.length;\n\n // remove any previous results\n out.rem = this.value;\n\n // generate flattened tuples\n pulse.visit(pulse.SOURCE, t => {\n const arrays = fields.map(f => f(t)),\n maxlen = arrays.reduce((l, a) => Math.max(l, a.length), 0);\n let i = 0,\n j,\n d,\n v;\n for (; i < maxlen; ++i) {\n d = derive(t);\n for (j = 0; j < m; ++j) {\n d[as[j]] = (v = arrays[j][i]) == null ? null : v;\n }\n if (index) {\n d[index] = i;\n }\n out.add.push(d);\n }\n });\n this.value = out.source = out.add;\n if (index) out.modifies(index);\n return out.modifies(as);\n }\n});\n\n/**\n * Folds one more tuple fields into multiple tuples in which the field\n * name and values are available under new 'key' and 'value' fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.fields - An array of field accessors\n * for the tuple fields that should be folded.\n * @param {Array} [params.as] - Output field names for folded key\n * and value fields, defaults to ['key', 'value'].\n */\nfunction Fold(params) {\n Transform.call(this, [], params);\n}\nFold.Definition = {\n 'type': 'Fold',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['key', 'value']\n }]\n};\ninherits(Fold, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n fnames = fields.map(accessorName),\n as = _.as || ['key', 'value'],\n k = as[0],\n v = as[1],\n n = fields.length;\n out.rem = this.value;\n pulse.visit(pulse.SOURCE, t => {\n for (let i = 0, d; i < n; ++i) {\n d = derive(t);\n d[k] = fnames[i];\n d[v] = fields[i](t);\n out.add.push(d);\n }\n });\n this.value = out.source = out.add;\n return out.modifies(as);\n }\n});\n\n/**\n * Invokes a function for each data tuple and saves the results as a new field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The formula function to invoke for each tuple.\n * @param {string} params.as - The field name under which to save the result.\n * @param {boolean} [params.initonly=false] - If true, the formula is applied to\n * added tuples only, and does not update in response to modifications.\n */\nfunction Formula(params) {\n Transform.call(this, null, params);\n}\nFormula.Definition = {\n 'type': 'Formula',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'expr',\n 'type': 'expr',\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'required': true\n }, {\n 'name': 'initonly',\n 'type': 'boolean'\n }]\n};\ninherits(Formula, Transform, {\n transform(_, pulse) {\n const func = _.expr,\n as = _.as,\n mod = _.modified(),\n flag = _.initonly ? pulse.ADD : mod ? pulse.SOURCE : pulse.modified(func.fields) || pulse.modified(as) ? pulse.ADD_MOD : pulse.ADD;\n if (mod) {\n // parameters updated, need to reflow\n pulse = pulse.materialize().reflow(true);\n }\n if (!_.initonly) {\n pulse.modifies(as);\n }\n return pulse.visit(flag, t => t[as] = func(t, _));\n }\n});\n\n/**\n * Generates data tuples using a provided generator function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Parameters): object} params.generator - A tuple generator\n * function. This function is given the operator parameters as input.\n * Changes to any additional parameters will not trigger re-calculation\n * of previously generated tuples. Only future tuples are affected.\n * @param {number} params.size - The number of tuples to produce.\n */\nfunction Generate(params) {\n Transform.call(this, [], params);\n}\ninherits(Generate, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.ALL),\n gen = _.generator;\n let data = this.value,\n num = _.size - data.length,\n add,\n rem,\n t;\n if (num > 0) {\n // need more tuples, generate and add\n for (add = []; --num >= 0;) {\n add.push(t = ingest(gen(_)));\n data.push(t);\n }\n out.add = out.add.length ? out.materialize(out.ADD).add.concat(add) : add;\n } else {\n // need fewer tuples, remove\n rem = data.slice(0, -num);\n out.rem = out.rem.length ? out.materialize(out.REM).rem.concat(rem) : rem;\n data = data.slice(-num);\n }\n out.source = this.value = data;\n return out;\n }\n});\n\nconst Methods = {\n value: 'value',\n median: median,\n mean: mean,\n min: min,\n max: max\n};\nconst Empty = [];\n\n/**\n * Impute missing values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to impute.\n * @param {Array} [params.groupby] - An array of\n * accessors to determine series within which to perform imputation.\n * @param {function(object): *} params.key - An accessor for a key value.\n * Each key value should be unique within a group. New tuples will be\n * imputed for any key values that are not found within a group.\n * @param {Array<*>} [params.keyvals] - Optional array of required key\n * values. New tuples will be imputed for any key values that are not\n * found within a group. In addition, these values will be automatically\n * augmented with the key values observed in the input data.\n * @param {string} [method='value'] - The imputation method to use. One of\n * 'value', 'mean', 'median', 'max', 'min'.\n * @param {*} [value=0] - The constant value to use for imputation\n * when using method 'value'.\n */\nfunction Impute(params) {\n Transform.call(this, [], params);\n}\nImpute.Definition = {\n 'type': 'Impute',\n 'metadata': {\n 'changes': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'keyvals',\n 'array': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'value',\n 'values': ['value', 'mean', 'median', 'max', 'min']\n }, {\n 'name': 'value',\n 'default': 0\n }]\n};\nfunction getValue(_) {\n var m = _.method || Methods.value,\n v;\n if (Methods[m] == null) {\n error('Unrecognized imputation method: ' + m);\n } else if (m === Methods.value) {\n v = _.value !== undefined ? _.value : 0;\n return () => v;\n } else {\n return Methods[m];\n }\n}\nfunction getField(_) {\n const f = _.field;\n return t => t ? f(t) : NaN;\n}\ninherits(Impute, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n impute = getValue(_),\n field = getField(_),\n fName = accessorName(_.field),\n kName = accessorName(_.key),\n gNames = (_.groupby || []).map(accessorName),\n groups = partition(pulse.source, _.groupby, _.key, _.keyvals),\n curr = [],\n prev = this.value,\n m = groups.domain.length,\n group,\n value,\n gVals,\n kVal,\n g,\n i,\n j,\n l,\n n,\n t;\n for (g = 0, l = groups.length; g < l; ++g) {\n group = groups[g];\n gVals = group.values;\n value = NaN;\n\n // add tuples for missing values\n for (j = 0; j < m; ++j) {\n if (group[j] != null) continue;\n kVal = groups.domain[j];\n t = {\n _impute: true\n };\n for (i = 0, n = gVals.length; i < n; ++i) t[gNames[i]] = gVals[i];\n t[kName] = kVal;\n t[fName] = Number.isNaN(value) ? value = impute(group, field) : value;\n curr.push(ingest(t));\n }\n }\n\n // update pulse with imputed tuples\n if (curr.length) out.add = out.materialize(out.ADD).add.concat(curr);\n if (prev.length) out.rem = out.materialize(out.REM).rem.concat(prev);\n this.value = curr;\n return out;\n }\n});\nfunction partition(data, groupby, key, keyvals) {\n var get = f => f(t),\n groups = [],\n domain = keyvals ? keyvals.slice() : [],\n kMap = {},\n gMap = {},\n gVals,\n gKey,\n group,\n i,\n j,\n k,\n n,\n t;\n domain.forEach((k, i) => kMap[k] = i + 1);\n for (i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = key(t);\n j = kMap[k] || (kMap[k] = domain.push(k));\n gKey = (gVals = groupby ? groupby.map(get) : Empty) + '';\n if (!(group = gMap[gKey])) {\n group = gMap[gKey] = [];\n groups.push(group);\n group.values = gVals;\n }\n group[j - 1] = t;\n }\n groups.domain = domain;\n return groups;\n}\n\n/**\n * Extend input tuples with aggregate values.\n * Calcuates aggregate values and joins them with the input stream.\n * @constructor\n */\nfunction JoinAggregate(params) {\n Aggregate.call(this, params);\n}\nJoinAggregate.Definition = {\n 'type': 'JoinAggregate',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidAggregateOps\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(JoinAggregate, Aggregate, {\n transform(_, pulse) {\n const aggr = this,\n mod = _.modified();\n let cells;\n\n // process all input tuples to calculate aggregates\n if (aggr.value && (mod || pulse.modified(aggr._inputs, true))) {\n cells = aggr.value = mod ? aggr.init(_) : {};\n pulse.visit(pulse.SOURCE, t => aggr.add(t));\n } else {\n cells = aggr.value = aggr.value || this.init(_);\n pulse.visit(pulse.REM, t => aggr.rem(t));\n pulse.visit(pulse.ADD, t => aggr.add(t));\n }\n\n // update aggregation cells\n aggr.changes();\n\n // write aggregate values to input tuples\n pulse.visit(pulse.SOURCE, t => {\n extend(t, cells[aggr.cellkey(t)].tuple);\n });\n return pulse.reflow(mod).modifies(this._outputs);\n },\n changes() {\n const adds = this._adds,\n mods = this._mods;\n let i, n;\n for (i = 0, n = this._alen; i < n; ++i) {\n this.celltuple(adds[i]);\n adds[i] = null; // for garbage collection\n }\n\n for (i = 0, n = this._mlen; i < n; ++i) {\n this.celltuple(mods[i]);\n mods[i] = null; // for garbage collection\n }\n\n this._alen = this._mlen = 0; // reset list of active cells\n }\n});\n\n/**\n * Compute kernel density estimates (KDE) for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {function(object): *} params.field - An accessor for the data field\n * to estimate.\n * @param {number} [params.bandwidth=0] - The KDE kernel bandwidth.\n * If zero or unspecified, the bandwidth is automatically determined.\n * @param {boolean} [params.counts=false] - A boolean flag indicating if the\n * output values should be probability estimates (false, default) or\n * smoothed counts (true).\n * @param {string} [params.cumulative=false] - A boolean flag indicating if a\n * density (false) or cumulative distribution (true) should be generated.\n * @param {Array} [params.extent] - The domain extent over which to\n * plot the density. If unspecified, the [min, max] data extent is used.\n * @param {string} [params.resolve='independent'] - Indicates how parameters for\n * multiple densities should be resolved. If \"independent\" (the default), each\n * density may have its own domain extent and dynamic number of curve sample\n * steps. If \"shared\", the KDE transform will ensure that all densities are\n * defined over a shared domain and curve steps, enabling stacking.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\nfunction KDE(params) {\n Transform.call(this, null, params);\n}\nKDE.Definition = {\n 'type': 'KDE',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'cumulative',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'counts',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'steps',\n 'type': 'number'\n }, {\n 'name': 'minsteps',\n 'type': 'number',\n 'default': 25\n }, {\n 'name': 'maxsteps',\n 'type': 'number',\n 'default': 200\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['value', 'density']\n }]\n};\ninherits(KDE, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(source, _.groupby, _.field),\n names = (_.groupby || []).map(accessorName),\n bandwidth = _.bandwidth,\n method = _.cumulative ? 'cdf' : 'pdf',\n as = _.as || ['value', 'density'],\n values = [];\n let domain = _.extent,\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200;\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n if (_.resolve === 'shared') {\n if (!domain) domain = extent(source, _.field);\n minsteps = maxsteps = _.steps || maxsteps;\n }\n groups.forEach(g => {\n const density = randomKDE(g, bandwidth)[method],\n scale = _.counts ? g.length : 1,\n local = domain || extent(g);\n sampleCurve(density, local, minsteps, maxsteps).forEach(v => {\n const t = {};\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = v[0];\n t[as[1]] = v[1] * scale;\n values.push(ingest(t));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\n\n/**\n * Generates a key function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - The field name(s) for the key function.\n * @param {boolean} params.flat - A boolean flag indicating if the field names\n * should be treated as flat property names, side-stepping nested field\n * lookups normally indicated by dot or bracket notation.\n */\nfunction Key(params) {\n Operator.call(this, null, update$2, params);\n}\ninherits(Key, Operator);\nfunction update$2(_) {\n return this.value && !_.modified() ? this.value : key(_.fields, _.flat);\n}\n\n/**\n * Load and parse data from an external source. Marshalls parameter\n * values and then invokes the Dataflow request method.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.url - The URL to load from.\n * @param {object} params.format - The data format options.\n */\nfunction Load(params) {\n Transform.call(this, [], params);\n this._pending = null;\n}\ninherits(Load, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow;\n if (this._pending) {\n // update state and return pulse\n return output(this, pulse, this._pending);\n }\n if (stop(_)) return pulse.StopPropagation;\n if (_.values) {\n // parse and ingest values, return output pulse\n return output(this, pulse, df.parse(_.values, _.format));\n } else if (_.async) {\n // return promise for non-blocking async loading\n const p = df.request(_.url, _.format).then(res => {\n this._pending = array(res.data);\n return df => df.touch(this);\n });\n return {\n async: p\n };\n } else {\n // return promise for synchronous loading\n return df.request(_.url, _.format).then(res => output(this, pulse, array(res.data)));\n }\n }\n});\nfunction stop(_) {\n return _.modified('async') && !(_.modified('values') || _.modified('url') || _.modified('format'));\n}\nfunction output(op, pulse, data) {\n data.forEach(ingest);\n const out = pulse.fork(pulse.NO_FIELDS & pulse.NO_SOURCE);\n out.rem = op.value;\n op.value = out.source = out.add = data;\n op._pending = null;\n if (out.rem.length) out.clean(true);\n return out;\n}\n\n/**\n * Extend tuples by joining them with values from a lookup table.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Map} params.index - The lookup table map.\n * @param {Array} params.as - Output field names for each lookup value.\n * @param {*} [params.default] - A default value to use if lookup fails.\n */\nfunction Lookup(params) {\n Transform.call(this, {}, params);\n}\nLookup.Definition = {\n 'type': 'Lookup',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'index',\n 'type': 'index',\n 'params': [{\n 'name': 'from',\n 'type': 'data',\n 'required': true\n }, {\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }]\n }, {\n 'name': 'values',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }, {\n 'name': 'default',\n 'default': null\n }]\n};\ninherits(Lookup, Transform, {\n transform(_, pulse) {\n const keys = _.fields,\n index = _.index,\n values = _.values,\n defaultValue = _.default == null ? null : _.default,\n reset = _.modified(),\n n = keys.length;\n let flag = reset ? pulse.SOURCE : pulse.ADD,\n out = pulse,\n as = _.as,\n set,\n m,\n mods;\n if (values) {\n m = values.length;\n if (n > 1 && !as) {\n error('Multi-field lookup requires explicit \"as\" parameter.');\n }\n if (as && as.length !== n * m) {\n error('The \"as\" parameter has too few output field names.');\n }\n as = as || values.map(accessorName);\n set = function (t) {\n for (var i = 0, k = 0, j, v; i < n; ++i) {\n v = index.get(keys[i](t));\n if (v == null) for (j = 0; j < m; ++j, ++k) t[as[k]] = defaultValue;else for (j = 0; j < m; ++j, ++k) t[as[k]] = values[j](v);\n }\n };\n } else {\n if (!as) {\n error('Missing output field names.');\n }\n set = function (t) {\n for (var i = 0, v; i < n; ++i) {\n v = index.get(keys[i](t));\n t[as[i]] = v == null ? defaultValue : v;\n }\n };\n }\n if (reset) {\n out = pulse.reflow(true);\n } else {\n mods = keys.some(k => pulse.modified(k.fields));\n flag |= mods ? pulse.MOD : 0;\n }\n pulse.visit(flag, set);\n return out.modifies(as);\n }\n});\n\n/**\n * Computes global min/max extents over a collection of extents.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array>} params.extents - The input extents.\n */\nfunction MultiExtent(params) {\n Operator.call(this, null, update$1, params);\n}\ninherits(MultiExtent, Operator);\nfunction update$1(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n const ext = _.extents,\n n = ext.length;\n let min = +Infinity,\n max = -Infinity,\n i,\n e;\n for (i = 0; i < n; ++i) {\n e = ext[i];\n if (e[0] < min) min = e[0];\n if (e[1] > max) max = e[1];\n }\n return [min, max];\n}\n\n/**\n * Merge a collection of value arrays.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array>} params.values - The input value arrrays.\n */\nfunction MultiValues(params) {\n Operator.call(this, null, update, params);\n}\ninherits(MultiValues, Operator);\nfunction update(_) {\n return this.value && !_.modified() ? this.value : _.values.reduce((data, _) => data.concat(_), []);\n}\n\n/**\n * Operator whose value is simply its parameter hash. This operator is\n * useful for enabling reactive updates to values of nested objects.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Params(params) {\n Transform.call(this, null, params);\n}\ninherits(Params, Transform, {\n transform(_, pulse) {\n this.modified(_.modified());\n this.value = _;\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); // do not pass tuples\n }\n});\n\n/**\n * Aggregate and pivot selected field values to become new fields.\n * This operator is useful to construction cross-tabulations.\n * @constructor\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby. These fields act just like groupby fields of an Aggregate transform.\n * @param {function(object): *} params.field - The field to pivot on. The unique\n * values of this field become new field names in the output stream.\n * @param {function(object): *} params.value - The field to populate pivoted fields.\n * The aggregate values of this field become the values of the new pivoted fields.\n * @param {string} [params.op] - The aggregation operation for the value field,\n * applied per cell in the output stream. The default is \"sum\".\n * @param {number} [params.limit] - An optional parameter indicating the maximum\n * number of pivoted fields to generate. The pivoted field names are sorted in\n * ascending order prior to enforcing the limit.\n */\nfunction Pivot(params) {\n Aggregate.call(this, params);\n}\nPivot.Definition = {\n 'type': 'Pivot',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'value',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'op',\n 'type': 'enum',\n 'values': ValidAggregateOps,\n 'default': 'sum'\n }, {\n 'name': 'limit',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(Pivot, Aggregate, {\n _transform: Aggregate.prototype.transform,\n transform(_, pulse) {\n return this._transform(aggregateParams(_, pulse), pulse);\n }\n});\n\n// Shoehorn a pivot transform into an aggregate transform!\n// First collect all unique pivot field values.\n// Then generate aggregate fields for each output pivot field.\nfunction aggregateParams(_, pulse) {\n const key = _.field,\n value = _.value,\n op = (_.op === 'count' ? '__count__' : _.op) || 'sum',\n fields = accessorFields(key).concat(accessorFields(value)),\n keys = pivotKeys(key, _.limit || 0, pulse);\n\n // if data stream content changes, pivot fields may change\n // flag parameter modification to ensure re-initialization\n if (pulse.changed()) _.set('__pivot__', null, null, true);\n return {\n key: _.key,\n groupby: _.groupby,\n ops: keys.map(() => op),\n fields: keys.map(k => get(k, key, value, fields)),\n as: keys.map(k => k + ''),\n modified: _.modified.bind(_)\n };\n}\n\n// Generate aggregate field accessor.\n// Output NaN for non-existent values; aggregator will ignore!\nfunction get(k, key, value, fields) {\n return accessor(d => key(d) === k ? value(d) : NaN, fields, k + '');\n}\n\n// Collect (and optionally limit) all unique pivot values.\nfunction pivotKeys(key, limit, pulse) {\n const map = {},\n list = [];\n pulse.visit(pulse.SOURCE, t => {\n const k = key(t);\n if (!map[k]) {\n map[k] = 1;\n list.push(k);\n }\n });\n list.sort(ascending);\n return limit ? list.slice(0, limit) : list;\n}\n\n/**\n * Partitions pre-faceted data into tuple subflows.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): Array} params.field - The field\n * accessor for an array of subflow tuple objects.\n */\nfunction PreFacet(params) {\n Facet.call(this, params);\n}\ninherits(PreFacet, Facet, {\n transform(_, pulse) {\n const flow = _.subflow,\n field = _.field,\n subflow = t => this.subflow(tupleid(t), flow, pulse, t);\n if (_.modified('field') || field && pulse.modified(accessorFields(field))) {\n error('PreFacet does not support field modification.');\n }\n this.initTargets(); // reset list of active subflows\n\n if (field) {\n pulse.visit(pulse.MOD, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.mod(_));\n });\n pulse.visit(pulse.ADD, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.add(ingest(_)));\n });\n pulse.visit(pulse.REM, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.rem(_));\n });\n } else {\n pulse.visit(pulse.MOD, t => subflow(t).mod(t));\n pulse.visit(pulse.ADD, t => subflow(t).add(t));\n pulse.visit(pulse.REM, t => subflow(t).rem(t));\n }\n if (pulse.clean()) {\n pulse.runAfter(() => this.clean());\n }\n return pulse;\n }\n});\n\n/**\n * Performs a relational projection, copying selected fields from source\n * tuples to a new set of derived tuples.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.as] - Output field names for each projected\n * field. Any unspecified fields will use the field name provided by\n * the field accessor.\n */\nfunction Project(params) {\n Transform.call(this, null, params);\n}\nProject.Definition = {\n 'type': 'Project',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }]\n};\ninherits(Project, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(_.fields, _.as || []),\n derive = fields ? (s, t) => project(s, t, fields, as) : rederive;\n let lut;\n if (this.value) {\n lut = this.value;\n } else {\n pulse = pulse.addAll();\n lut = this.value = {};\n }\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n pulse.visit(pulse.ADD, t => {\n const dt = derive(t, ingest({}));\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n pulse.visit(pulse.MOD, t => {\n out.mod.push(derive(t, lut[tupleid(t)]));\n });\n return out;\n }\n});\nfunction project(s, t, fields, as) {\n for (let i = 0, n = fields.length; i < n; ++i) {\n t[as[i]] = fields[i](s);\n }\n return t;\n}\n\n/**\n * Proxy the value of another operator as a pure signal value.\n * Ensures no tuples are propagated.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {*} params.value - The value to proxy, becomes the value of this operator.\n */\nfunction Proxy(params) {\n Transform.call(this, null, params);\n}\ninherits(Proxy, Transform, {\n transform(_, pulse) {\n this.value = _.value;\n return _.modified('value') ? pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS) : pulse.StopPropagation;\n }\n});\n\n/**\n * Generates sample quantile values from an input data stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the data field\n * over which to calculate quantile values.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {Array} [params.probs] - An array of probabilities in\n * the range (0, 1) for which to compute quantile values. If not specified,\n * the *step* parameter will be used.\n * @param {Array} [params.step=0.01] - A probability step size for\n * sampling quantile values. All values from one-half the step size up to\n * 1 (exclusive) will be sampled. This parameter is only used if the\n * *quantiles* parameter is not provided.\n */\nfunction Quantile(params) {\n Transform.call(this, null, params);\n}\nQuantile.Definition = {\n 'type': 'Quantile',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'probs',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 0.01\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['prob', 'value']\n }]\n};\nconst EPSILON = 1e-14;\ninherits(Quantile, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n as = _.as || ['prob', 'value'];\n if (this.value && !_.modified() && !pulse.changed()) {\n out.source = this.value;\n return out;\n }\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(source, _.groupby, _.field),\n names = (_.groupby || []).map(accessorName),\n values = [],\n step = _.step || 0.01,\n p = _.probs || range(step / 2, 1 - EPSILON, step),\n n = p.length;\n groups.forEach(g => {\n const q = quantiles(g, p);\n for (let i = 0; i < n; ++i) {\n const t = {};\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = p[i];\n t[as[1]] = q[i];\n values.push(ingest(t));\n }\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n return out;\n }\n});\n\n/**\n * Relays a data stream between data processing pipelines.\n * If the derive parameter is set, this transform will create derived\n * copies of observed tuples. This provides derived data streams in which\n * modifications to the tuples do not pollute an upstream data source.\n * @param {object} params - The parameters for this operator.\n * @param {number} [params.derive=false] - Boolean flag indicating if\n * the transform should make derived copies of incoming tuples.\n * @constructor\n */\nfunction Relay(params) {\n Transform.call(this, null, params);\n}\ninherits(Relay, Transform, {\n transform(_, pulse) {\n let out, lut;\n if (this.value) {\n lut = this.value;\n } else {\n out = pulse = pulse.addAll();\n lut = this.value = {};\n }\n if (_.derive) {\n out = pulse.fork(pulse.NO_SOURCE);\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n pulse.visit(pulse.ADD, t => {\n const dt = derive(t);\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n pulse.visit(pulse.MOD, t => {\n const dt = lut[tupleid(t)];\n for (const k in t) {\n dt[k] = t[k];\n // down stream writes may overwrite re-derived tuples\n // conservatively mark all source fields as modified\n out.modifies(k);\n }\n out.mod.push(dt);\n });\n }\n return out;\n }\n});\n\n/**\n * Samples tuples passing through this operator.\n * Uses reservoir sampling to maintain a representative sample.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {number} [params.size=1000] - The maximum number of samples.\n */\nfunction Sample(params) {\n Transform.call(this, [], params);\n this.count = 0;\n}\nSample.Definition = {\n 'type': 'Sample',\n 'metadata': {},\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'default': 1000\n }]\n};\ninherits(Sample, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n mod = _.modified('size'),\n num = _.size,\n map = this.value.reduce((m, t) => (m[tupleid(t)] = 1, m), {});\n let res = this.value,\n cnt = this.count,\n cap = 0;\n\n // sample reservoir update function\n function update(t) {\n let p, idx;\n if (res.length < num) {\n res.push(t);\n } else {\n idx = ~~((cnt + 1) * random());\n if (idx < res.length && idx >= cap) {\n p = res[idx];\n if (map[tupleid(p)]) out.rem.push(p); // eviction\n res[idx] = t;\n }\n }\n ++cnt;\n }\n if (pulse.rem.length) {\n // find all tuples that should be removed, add to output\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n if (map[id]) {\n map[id] = -1;\n out.rem.push(t);\n }\n --cnt;\n });\n\n // filter removed tuples out of the sample reservoir\n res = res.filter(t => map[tupleid(t)] !== -1);\n }\n if ((pulse.rem.length || mod) && res.length < num && pulse.source) {\n // replenish sample if backing data source is available\n cap = cnt = res.length;\n pulse.visit(pulse.SOURCE, t => {\n // update, but skip previously sampled tuples\n if (!map[tupleid(t)]) update(t);\n });\n cap = -1;\n }\n if (mod && res.length > num) {\n const n = res.length - num;\n for (let i = 0; i < n; ++i) {\n map[tupleid(res[i])] = -1;\n out.rem.push(res[i]);\n }\n res = res.slice(n);\n }\n if (pulse.mod.length) {\n // propagate modified tuples in the sample reservoir\n pulse.visit(pulse.MOD, t => {\n if (map[tupleid(t)]) out.mod.push(t);\n });\n }\n if (pulse.add.length) {\n // update sample reservoir\n pulse.visit(pulse.ADD, update);\n }\n if (pulse.add.length || cap < 0) {\n // output newly added tuples\n out.add = res.filter(t => !map[tupleid(t)]);\n }\n this.count = cnt;\n this.value = out.source = res;\n return out;\n }\n});\n\n/**\n * Generates data tuples for a specified sequence range of numbers.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {number} params.start - The first number in the sequence.\n * @param {number} params.stop - The last number (exclusive) in the sequence.\n * @param {number} [params.step=1] - The step size between numbers in the sequence.\n */\nfunction Sequence(params) {\n Transform.call(this, null, params);\n}\nSequence.Definition = {\n 'type': 'Sequence',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'start',\n 'type': 'number',\n 'required': true\n }, {\n 'name': 'stop',\n 'type': 'number',\n 'required': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'data'\n }]\n};\ninherits(Sequence, Transform, {\n transform(_, pulse) {\n if (this.value && !_.modified()) return;\n const out = pulse.materialize().fork(pulse.MOD),\n as = _.as || 'data';\n out.rem = this.value ? pulse.rem.concat(this.value) : pulse.rem;\n this.value = range(_.start, _.stop, _.step || 1).map(v => {\n const t = {};\n t[as] = v;\n return ingest(t);\n });\n out.add = pulse.add.concat(this.value);\n return out;\n }\n});\n\n/**\n * Propagates a new pulse without any tuples so long as the input\n * pulse contains some added, removed or modified tuples.\n * @param {object} params - The parameters for this operator.\n * @constructor\n */\nfunction Sieve(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\n\ninherits(Sieve, Transform, {\n transform(_, pulse) {\n this.value = pulse.source;\n return pulse.changed() ? pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS) : pulse.StopPropagation;\n }\n});\n\n/**\n * Discretize dates to specific time units.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The data field containing date/time values.\n */\nfunction TimeUnit(params) {\n Transform.call(this, null, params);\n}\nconst OUTPUT = ['unit0', 'unit1'];\nTimeUnit.Definition = {\n 'type': 'TimeUnit',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'interval',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'units',\n 'type': 'enum',\n 'values': TIME_UNITS,\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'maxbins',\n 'type': 'number',\n 'default': 40\n }, {\n 'name': 'extent',\n 'type': 'date',\n 'array': true\n }, {\n 'name': 'timezone',\n 'type': 'enum',\n 'default': 'local',\n 'values': ['local', 'utc']\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': OUTPUT\n }]\n};\ninherits(TimeUnit, Transform, {\n transform(_, pulse) {\n const field = _.field,\n band = _.interval !== false,\n utc = _.timezone === 'utc',\n floor = this._floor(_, pulse),\n offset = (utc ? utcInterval : timeInterval)(floor.unit).offset,\n as = _.as || OUTPUT,\n u0 = as[0],\n u1 = as[1],\n step = floor.step;\n let min = floor.start || Infinity,\n max = floor.stop || -Infinity,\n flag = pulse.ADD;\n if (_.modified() || pulse.changed(pulse.REM) || pulse.modified(accessorFields(field))) {\n pulse = pulse.reflow(true);\n flag = pulse.SOURCE;\n min = Infinity;\n max = -Infinity;\n }\n pulse.visit(flag, t => {\n const v = field(t);\n let a, b;\n if (v == null) {\n t[u0] = null;\n if (band) t[u1] = null;\n } else {\n t[u0] = a = b = floor(v);\n if (band) t[u1] = b = offset(a, step);\n if (a < min) min = a;\n if (b > max) max = b;\n }\n });\n floor.start = min;\n floor.stop = max;\n return pulse.modifies(band ? as : u0);\n },\n _floor(_, pulse) {\n const utc = _.timezone === 'utc';\n\n // get parameters\n const {\n units,\n step\n } = _.units ? {\n units: _.units,\n step: _.step || 1\n } : timeBin({\n extent: _.extent || extent(pulse.materialize(pulse.SOURCE).source, _.field),\n maxbins: _.maxbins\n });\n\n // check / standardize time units\n const tunits = timeUnits(units),\n prev = this.value || {},\n floor = (utc ? utcFloor : timeFloor)(tunits, step);\n floor.unit = peek(tunits);\n floor.units = tunits;\n floor.step = step;\n floor.start = prev.start;\n floor.stop = prev.stop;\n return this.value = floor;\n }\n});\n\n/**\n * An index that maps from unique, string-coerced, field values to tuples.\n * Assumes that the field serves as a unique key with no duplicate values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field accessor to index.\n */\nfunction TupleIndex(params) {\n Transform.call(this, fastmap(), params);\n}\ninherits(TupleIndex, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow,\n field = _.field,\n index = this.value,\n set = t => index.set(field(t), t);\n let mod = true;\n if (_.modified('field') || pulse.modified(field.fields)) {\n index.clear();\n pulse.visit(pulse.SOURCE, set);\n } else if (pulse.changed()) {\n pulse.visit(pulse.REM, t => index.delete(field(t)));\n pulse.visit(pulse.ADD, set);\n } else {\n mod = false;\n }\n this.modified(mod);\n if (index.empty > df.cleanThreshold) df.runAfter(index.clean);\n return pulse.fork();\n }\n});\n\n/**\n * Extracts an array of values. Assumes the source data has already been\n * reduced as needed (e.g., by an upstream Aggregate transform).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The domain field to extract.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting the values. The comparator will be\n * applied to backing tuples prior to value extraction.\n */\nfunction Values(params) {\n Transform.call(this, null, params);\n}\ninherits(Values, Transform, {\n transform(_, pulse) {\n const run = !this.value || _.modified('field') || _.modified('sort') || pulse.changed() || _.sort && pulse.modified(_.sort.fields);\n if (run) {\n this.value = (_.sort ? pulse.source.slice().sort(stableCompare(_.sort)) : pulse.source).map(_.field);\n }\n }\n});\n\nfunction WindowOp(op, field, param, as) {\n const fn = WindowOps[op](field, param);\n return {\n init: fn.init || zero,\n update: function (w, t) {\n t[as] = fn.next(w);\n }\n };\n}\nconst WindowOps = {\n row_number: function () {\n return {\n next: w => w.index + 1\n };\n },\n rank: function () {\n let rank;\n return {\n init: () => rank = 1,\n next: w => {\n const i = w.index,\n data = w.data;\n return i && w.compare(data[i - 1], data[i]) ? rank = i + 1 : rank;\n }\n };\n },\n dense_rank: function () {\n let drank;\n return {\n init: () => drank = 1,\n next: w => {\n const i = w.index,\n d = w.data;\n return i && w.compare(d[i - 1], d[i]) ? ++drank : drank;\n }\n };\n },\n percent_rank: function () {\n const rank = WindowOps.rank(),\n next = rank.next;\n return {\n init: rank.init,\n next: w => (next(w) - 1) / (w.data.length - 1)\n };\n },\n cume_dist: function () {\n let cume;\n return {\n init: () => cume = 0,\n next: w => {\n const d = w.data,\n c = w.compare;\n let i = w.index;\n if (cume < i) {\n while (i + 1 < d.length && !c(d[i], d[i + 1])) ++i;\n cume = i;\n }\n return (1 + cume) / d.length;\n }\n };\n },\n ntile: function (field, num) {\n num = +num;\n if (!(num > 0)) error('ntile num must be greater than zero.');\n const cume = WindowOps.cume_dist(),\n next = cume.next;\n return {\n init: cume.init,\n next: w => Math.ceil(num * next(w))\n };\n },\n lag: function (field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n const i = w.index - offset;\n return i >= 0 ? field(w.data[i]) : null;\n }\n };\n },\n lead: function (field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n const i = w.index + offset,\n d = w.data;\n return i < d.length ? field(d[i]) : null;\n }\n };\n },\n first_value: function (field) {\n return {\n next: w => field(w.data[w.i0])\n };\n },\n last_value: function (field) {\n return {\n next: w => field(w.data[w.i1 - 1])\n };\n },\n nth_value: function (field, nth) {\n nth = +nth;\n if (!(nth > 0)) error('nth_value nth must be greater than zero.');\n return {\n next: w => {\n const i = w.i0 + (nth - 1);\n return i < w.i1 ? field(w.data[i]) : null;\n }\n };\n },\n prev_value: function (field) {\n let prev;\n return {\n init: () => prev = null,\n next: w => {\n const v = field(w.data[w.index]);\n return v != null ? prev = v : prev;\n }\n };\n },\n next_value: function (field) {\n let v, i;\n return {\n init: () => (v = null, i = -1),\n next: w => {\n const d = w.data;\n return w.index <= i ? v : (i = find(field, d, w.index)) < 0 ? (i = d.length, v = null) : v = field(d[i]);\n }\n };\n }\n};\nfunction find(field, data, index) {\n for (let n = data.length; index < n; ++index) {\n const v = field(data[index]);\n if (v != null) return index;\n }\n return -1;\n}\nconst ValidWindowOps = Object.keys(WindowOps);\n\nfunction WindowState(_) {\n const ops = array(_.ops),\n fields = array(_.fields),\n params = array(_.params),\n aggregate_params = array(_.aggregate_params),\n as = array(_.as),\n outputs = this.outputs = [],\n windows = this.windows = [],\n inputs = {},\n map = {},\n counts = [],\n measures = [];\n let countOnly = true;\n function visitInputs(f) {\n array(accessorFields(f)).forEach(_ => inputs[_] = 1);\n }\n visitInputs(_.sort);\n ops.forEach((op, i) => {\n const field = fields[i],\n param = params[i],\n aggregate_param = aggregate_params[i] || null,\n mname = accessorName(field),\n name = measureName(op, mname, as[i]);\n visitInputs(field);\n outputs.push(name);\n\n // Window operation\n if (hasOwnProperty(WindowOps, op)) {\n windows.push(WindowOp(op, field, param, name));\n }\n\n // Aggregate operation\n else {\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n if (op === 'count') {\n counts.push(name);\n return;\n }\n countOnly = false;\n let m = map[mname];\n if (!m) {\n m = map[mname] = [];\n m.field = field;\n measures.push(m);\n }\n m.push(createMeasure(op, aggregate_param, name));\n }\n });\n if (counts.length || measures.length) {\n this.cell = cell(measures, counts, countOnly);\n }\n this.inputs = Object.keys(inputs);\n}\nconst prototype = WindowState.prototype;\nprototype.init = function () {\n this.windows.forEach(_ => _.init());\n if (this.cell) this.cell.init();\n};\nprototype.update = function (w, t) {\n const cell = this.cell,\n wind = this.windows,\n data = w.data,\n m = wind && wind.length;\n let j;\n if (cell) {\n for (j = w.p0; j < w.i0; ++j) cell.rem(data[j]);\n for (j = w.p1; j < w.i1; ++j) cell.add(data[j]);\n cell.set(t);\n }\n for (j = 0; j < m; ++j) wind[j].update(w, t);\n};\nfunction cell(measures, counts, countOnly) {\n measures = measures.map(m => compileMeasures(m, m.field));\n const cell = {\n num: 0,\n agg: null,\n store: false,\n count: counts\n };\n if (!countOnly) {\n var n = measures.length,\n a = cell.agg = Array(n),\n i = 0;\n for (; i < n; ++i) a[i] = new measures[i](cell);\n }\n if (cell.store) {\n var store = cell.data = new TupleStore();\n }\n cell.add = function (t) {\n cell.num += 1;\n if (countOnly) return;\n if (store) store.add(t);\n for (let i = 0; i < n; ++i) {\n a[i].add(a[i].get(t), t);\n }\n };\n cell.rem = function (t) {\n cell.num -= 1;\n if (countOnly) return;\n if (store) store.rem(t);\n for (let i = 0; i < n; ++i) {\n a[i].rem(a[i].get(t), t);\n }\n };\n cell.set = function (t) {\n let i, n;\n\n // consolidate stored values\n if (store) store.values();\n\n // update tuple properties\n for (i = 0, n = counts.length; i < n; ++i) t[counts[i]] = cell.num;\n if (!countOnly) for (i = 0, n = a.length; i < n; ++i) a[i].set(t);\n };\n cell.init = function () {\n cell.num = 0;\n if (store) store.reset();\n for (let i = 0; i < n; ++i) a[i].init();\n };\n return cell;\n}\n\n/**\n * Perform window calculations and write results to the input stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator function for sorting tuples within a window.\n * @param {Array} [params.groupby] - An array of accessors by which to partition tuples into separate windows.\n * @param {Array} params.ops - An array of strings indicating window operations to perform.\n * @param {Array} [params.fields] - An array of accessors\n * for data fields to use as inputs to window operations.\n * @param {Array<*>} [params.params] - An array of parameter values for window operations.\n * @param {Array} [params.aggregate_params] - An optional array of parameter values for aggregation operations.\n * @param {Array} [params.as] - An array of output field names for window operations.\n * @param {Array} [params.frame] - Window frame definition as two-element array.\n * @param {boolean} [params.ignorePeers=false] - If true, base window frame boundaries on row\n * number alone, ignoring peers with identical sort values. If false (default),\n * the window boundaries will be adjusted to include peer values.\n */\nfunction Window(params) {\n Transform.call(this, {}, params);\n this._mlen = 0;\n this._mods = [];\n}\nWindow.Definition = {\n 'type': 'Window',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidWindowOps.concat(ValidAggregateOps)\n }, {\n 'name': 'params',\n 'type': 'number',\n 'null': true,\n 'array': true\n }, {\n 'name': 'aggregate_params',\n 'type': 'field',\n 'null': true,\n 'array': true,\n 'default': [null]\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'frame',\n 'type': 'number',\n 'null': true,\n 'array': true,\n 'length': 2,\n 'default': [null, 0]\n }, {\n 'name': 'ignorePeers',\n 'type': 'boolean',\n 'default': false\n }]\n};\ninherits(Window, Transform, {\n transform(_, pulse) {\n this.stamp = pulse.stamp;\n const mod = _.modified(),\n cmp = stableCompare(_.sort),\n key = groupkey(_.groupby),\n group = t => this.group(key(t));\n\n // initialize window state\n let state = this.state;\n if (!state || mod) {\n state = this.state = new WindowState(_);\n }\n\n // partition input tuples\n if (mod || pulse.modified(state.inputs)) {\n this.value = {};\n pulse.visit(pulse.SOURCE, t => group(t).add(t));\n } else {\n pulse.visit(pulse.REM, t => group(t).remove(t));\n pulse.visit(pulse.ADD, t => group(t).add(t));\n }\n\n // perform window calculations for each modified partition\n for (let i = 0, n = this._mlen; i < n; ++i) {\n processPartition(this._mods[i], state, cmp, _);\n }\n this._mlen = 0;\n this._mods = [];\n\n // TODO don't reflow everything?\n return pulse.reflow(mod).modifies(state.outputs);\n },\n group(key) {\n let group = this.value[key];\n if (!group) {\n group = this.value[key] = SortedList(tupleid);\n group.stamp = -1;\n }\n if (group.stamp < this.stamp) {\n group.stamp = this.stamp;\n this._mods[this._mlen++] = group;\n }\n return group;\n }\n});\nfunction processPartition(list, state, cmp, _) {\n const sort = _.sort,\n range = sort && !_.ignorePeers,\n frame = _.frame || [null, 0],\n data = list.data(cmp),\n // use cmp for stable sort\n n = data.length,\n b = range ? bisector(sort) : null,\n w = {\n i0: 0,\n i1: 0,\n p0: 0,\n p1: 0,\n index: 0,\n data: data,\n compare: sort || constant(-1)\n };\n state.init();\n for (let i = 0; i < n; ++i) {\n setWindow(w, frame, i, n);\n if (range) adjustRange(w, b);\n state.update(w, data[i]);\n }\n}\nfunction setWindow(w, f, i, n) {\n w.p0 = w.i0;\n w.p1 = w.i1;\n w.i0 = f[0] == null ? 0 : Math.max(0, i - Math.abs(f[0]));\n w.i1 = f[1] == null ? n : Math.min(n, i + Math.abs(f[1]) + 1);\n w.index = i;\n}\n\n// if frame type is 'range', adjust window for peer values\nfunction adjustRange(w, bisect) {\n const r0 = w.i0,\n r1 = w.i1 - 1,\n c = w.compare,\n d = w.data,\n n = d.length - 1;\n if (r0 > 0 && !c(d[r0], d[r0 - 1])) w.i0 = bisect.left(d, d[r0]);\n if (r1 < n && !c(d[r1], d[r1 + 1])) w.i1 = bisect.right(d, d[r1]);\n}\n\nexport { Aggregate as aggregate, Bin as bin, Collect as collect, Compare as compare, CountPattern as countpattern, Cross as cross, Density as density, DotBin as dotbin, Expression as expression, Extent as extent, Facet as facet, Field as field, Filter as filter, Flatten as flatten, Fold as fold, Formula as formula, Generate as generate, Impute as impute, JoinAggregate as joinaggregate, KDE as kde, Key as key, Load as load, Lookup as lookup, MultiExtent as multiextent, MultiValues as multivalues, Params as params, Pivot as pivot, PreFacet as prefacet, Project as project, Proxy as proxy, Quantile as quantile, Relay as relay, Sample as sample, Sequence as sequence, Sieve as sieve, Subflow as subflow, TimeUnit as timeunit, TupleIndex as tupleindex, Values as values, Window as window };\n","function domCanvas(w, h) {\n if (typeof document !== 'undefined' && document.createElement) {\n const c = document.createElement('canvas');\n if (c && c.getContext) {\n c.width = w;\n c.height = h;\n return c;\n }\n }\n return null;\n}\nconst domImage = () => typeof Image !== 'undefined' ? Image : null;\n\nexport { domCanvas as canvas, domCanvas, domImage as image };\n","import { toNumber, peek, toSet, array, constant, isNumber, span, isObject, isString, error, isArray } from 'vega-util';\nimport { bisectRight, range, bisect } from 'd3-array';\nimport * as $ from 'd3-scale';\nimport { scaleOrdinal, tickFormat as tickFormat$1 } from 'd3-scale';\nexport { scaleImplicit } from 'd3-scale';\nimport * as $$1 from 'd3-interpolate';\nimport { timeInterval, utcInterval } from 'vega-time';\n\nfunction bandSpace (count, paddingInner, paddingOuter) {\n const space = count - paddingInner + paddingOuter * 2;\n return count ? space > 0 ? space : 1 : 0;\n}\n\nconst Identity = 'identity';\nconst Linear = 'linear';\nconst Log = 'log';\nconst Pow = 'pow';\nconst Sqrt = 'sqrt';\nconst Symlog = 'symlog';\nconst Time = 'time';\nconst UTC = 'utc';\nconst Sequential = 'sequential';\nconst Diverging = 'diverging';\nconst Quantile = 'quantile';\nconst Quantize = 'quantize';\nconst Threshold = 'threshold';\nconst Ordinal = 'ordinal';\nconst Point = 'point';\nconst Band = 'band';\nconst BinOrdinal = 'bin-ordinal';\n\n// categories\nconst Continuous = 'continuous';\nconst Discrete = 'discrete';\nconst Discretizing = 'discretizing';\nconst Interpolating = 'interpolating';\nconst Temporal = 'temporal';\n\nfunction invertRange (scale) {\n return function (_) {\n let lo = _[0],\n hi = _[1],\n t;\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n return [scale.invert(lo), scale.invert(hi)];\n };\n}\n\nfunction invertRangeExtent (scale) {\n return function (_) {\n const range = scale.range();\n let lo = _[0],\n hi = _[1],\n min = -1,\n max,\n t,\n i,\n n;\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n for (i = 0, n = range.length; i < n; ++i) {\n if (range[i] >= lo && range[i] <= hi) {\n if (min < 0) min = i;\n max = i;\n }\n }\n if (min < 0) return undefined;\n lo = scale.invertExtent(range[min]);\n hi = scale.invertExtent(range[max]);\n return [lo[0] === undefined ? lo[1] : lo[0], hi[1] === undefined ? hi[0] : hi[1]];\n };\n}\n\nfunction band() {\n const scale = scaleOrdinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range;\n let range$1 = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n delete scale.unknown;\n function rescale() {\n const n = domain().length,\n reverse = range$1[1] < range$1[0],\n stop = range$1[1 - reverse],\n space = bandSpace(n, paddingInner, paddingOuter);\n let start = range$1[reverse - 0];\n step = (stop - start) / (space || 1);\n if (round) {\n step = Math.floor(step);\n }\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) {\n start = Math.round(start);\n bandwidth = Math.round(bandwidth);\n }\n const values = range(n).map(i => start + step * i);\n return ordinalRange(reverse ? values.reverse() : values);\n }\n scale.domain = function (_) {\n if (arguments.length) {\n domain(_);\n return rescale();\n } else {\n return domain();\n }\n };\n scale.range = function (_) {\n if (arguments.length) {\n range$1 = [+_[0], +_[1]];\n return rescale();\n } else {\n return range$1.slice();\n }\n };\n scale.rangeRound = function (_) {\n range$1 = [+_[0], +_[1]];\n round = true;\n return rescale();\n };\n scale.bandwidth = function () {\n return bandwidth;\n };\n scale.step = function () {\n return step;\n };\n scale.round = function (_) {\n if (arguments.length) {\n round = !!_;\n return rescale();\n } else {\n return round;\n }\n };\n scale.padding = function (_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n paddingInner = paddingOuter;\n return rescale();\n } else {\n return paddingInner;\n }\n };\n scale.paddingInner = function (_) {\n if (arguments.length) {\n paddingInner = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingInner;\n }\n };\n scale.paddingOuter = function (_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingOuter;\n }\n };\n scale.align = function (_) {\n if (arguments.length) {\n align = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return align;\n }\n };\n scale.invertRange = function (_) {\n // bail if range has null or undefined values\n if (_[0] == null || _[1] == null) return;\n const reverse = range$1[1] < range$1[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1;\n let lo = +_[0],\n hi = +_[1],\n a,\n b,\n t;\n\n // bail if either range endpoint is invalid\n if (lo !== lo || hi !== hi) return;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n if (hi < values[0] || lo > range$1[1 - reverse]) return;\n\n // binary search to index into scale range\n a = Math.max(0, bisectRight(values, lo) - 1);\n b = lo === hi ? a : bisectRight(values, hi) - 1;\n\n // increment index a if lo is within padding gap\n if (lo - values[a] > bandwidth + 1e-10) ++a;\n if (reverse) {\n // map + swap\n t = a;\n a = n - b;\n b = n - t;\n }\n return a > b ? undefined : domain().slice(a, b + 1);\n };\n scale.invert = function (_) {\n const value = scale.invertRange([_, _]);\n return value ? value[0] : value;\n };\n scale.copy = function () {\n return band().domain(domain()).range(range$1).round(round).paddingInner(paddingInner).paddingOuter(paddingOuter).align(align);\n };\n return rescale();\n}\nfunction pointish(scale) {\n const copy = scale.copy;\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n scale.copy = function () {\n return pointish(copy());\n };\n return scale;\n}\nfunction point() {\n return pointish(band().paddingInner(1));\n}\n\nvar map = Array.prototype.map;\nfunction numbers(_) {\n return map.call(_, toNumber);\n}\n\nconst slice = Array.prototype.slice;\n\nfunction scaleBinOrdinal() {\n let domain = [],\n range = [];\n function scale(x) {\n return x == null || x !== x ? undefined : range[(bisect(domain, x) - 1) % range.length];\n }\n scale.domain = function (_) {\n if (arguments.length) {\n domain = numbers(_);\n return scale;\n } else {\n return domain.slice();\n }\n };\n scale.range = function (_) {\n if (arguments.length) {\n range = slice.call(_);\n return scale;\n } else {\n return range.slice();\n }\n };\n scale.tickFormat = function (count, specifier) {\n return tickFormat$1(domain[0], peek(domain), count == null ? 10 : count, specifier);\n };\n scale.copy = function () {\n return scaleBinOrdinal().domain(scale.domain()).range(scale.range());\n };\n return scale;\n}\n\n/** Private scale registry: should not be exported */\nconst scales = new Map();\nconst VEGA_SCALE = Symbol('vega_scale');\nfunction registerScale(scale) {\n scale[VEGA_SCALE] = true;\n return scale;\n}\n\n/**\n * Return true if object was created by a constructor from the vega-scale `scale` function.\n */\nfunction isRegisteredScale(scale) {\n return scale && scale[VEGA_SCALE] === true;\n}\n\n/**\n * Augment scales with their type and needed inverse methods.\n */\nfunction create(type, constructor, metadata) {\n const ctr = function scale() {\n const s = constructor();\n if (!s.invertRange) {\n s.invertRange = s.invert ? invertRange(s) : s.invertExtent ? invertRangeExtent(s) : undefined;\n }\n s.type = type;\n return registerScale(s);\n };\n ctr.metadata = toSet(array(metadata));\n return ctr;\n}\n\n/**\n * Registry function for adding and accessing scale constructor functions.\n * The *type* argument is a String indicating the name of the scale type.\n *\n * If the *scale* argument is not specified, this method returns the matching scale constructor in the registry, or `null` if not found.\n * If the *scale* argument is provided, it must be a scale constructor function to add to the registry under the given *type* name.\n * The *metadata* argument provides additional information to guide appropriate use of scales within Vega.\n *\n * *metadata* can be either a string or string array. The valid string values are:\n * - `\"continuous\"` - the scale is defined over a continuous-valued domain.\n * - `\"discrete\"` - the scale is defined over a discrete domain and range.\n * - `\"discretizing\"` - the scale discretizes a continuous domain to a discrete range.\n * - `\"interpolating\"` - the scale range is defined using a color interpolator.\n * - `\"log\"` - the scale performs a logarithmic transform of the continuous domain.\n * - `\"temporal\"` - the scale domain is defined over date-time values.\n */\nfunction scale(type, scale, metadata) {\n if (arguments.length > 1) {\n scales.set(type, create(type, scale, metadata));\n return this;\n } else {\n return isValidScaleType(type) ? scales.get(type) : undefined;\n }\n}\n\n// identity scale\nscale(Identity, $.scaleIdentity);\n\n// continuous scales\nscale(Linear, $.scaleLinear, Continuous);\nscale(Log, $.scaleLog, [Continuous, Log]);\nscale(Pow, $.scalePow, Continuous);\nscale(Sqrt, $.scaleSqrt, Continuous);\nscale(Symlog, $.scaleSymlog, Continuous);\nscale(Time, $.scaleTime, [Continuous, Temporal]);\nscale(UTC, $.scaleUtc, [Continuous, Temporal]);\n\n// sequential scales\nscale(Sequential, $.scaleSequential, [Continuous, Interpolating]); // backwards compat\nscale(`${Sequential}-${Linear}`, $.scaleSequential, [Continuous, Interpolating]);\nscale(`${Sequential}-${Log}`, $.scaleSequentialLog, [Continuous, Interpolating, Log]);\nscale(`${Sequential}-${Pow}`, $.scaleSequentialPow, [Continuous, Interpolating]);\nscale(`${Sequential}-${Sqrt}`, $.scaleSequentialSqrt, [Continuous, Interpolating]);\nscale(`${Sequential}-${Symlog}`, $.scaleSequentialSymlog, [Continuous, Interpolating]);\n\n// diverging scales\nscale(`${Diverging}-${Linear}`, $.scaleDiverging, [Continuous, Interpolating]);\nscale(`${Diverging}-${Log}`, $.scaleDivergingLog, [Continuous, Interpolating, Log]);\nscale(`${Diverging}-${Pow}`, $.scaleDivergingPow, [Continuous, Interpolating]);\nscale(`${Diverging}-${Sqrt}`, $.scaleDivergingSqrt, [Continuous, Interpolating]);\nscale(`${Diverging}-${Symlog}`, $.scaleDivergingSymlog, [Continuous, Interpolating]);\n\n// discretizing scales\nscale(Quantile, $.scaleQuantile, [Discretizing, Quantile]);\nscale(Quantize, $.scaleQuantize, Discretizing);\nscale(Threshold, $.scaleThreshold, Discretizing);\n\n// discrete scales\nscale(BinOrdinal, scaleBinOrdinal, [Discrete, Discretizing]);\nscale(Ordinal, $.scaleOrdinal, Discrete);\nscale(Band, band, Discrete);\nscale(Point, point, Discrete);\nfunction isValidScaleType(type) {\n return scales.has(type);\n}\nfunction hasType(key, type) {\n const s = scales.get(key);\n return s && s.metadata[type];\n}\nfunction isContinuous(key) {\n return hasType(key, Continuous);\n}\nfunction isDiscrete(key) {\n return hasType(key, Discrete);\n}\nfunction isDiscretizing(key) {\n return hasType(key, Discretizing);\n}\nfunction isLogarithmic(key) {\n return hasType(key, Log);\n}\nfunction isTemporal(key) {\n return hasType(key, Temporal);\n}\nfunction isInterpolating(key) {\n return hasType(key, Interpolating);\n}\nfunction isQuantile(key) {\n return hasType(key, Quantile);\n}\n\nconst scaleProps = ['clamp', 'base', 'constant', 'exponent'];\nfunction interpolateRange(interpolator, range) {\n const start = range[0],\n span = peek(range) - start;\n return function (i) {\n return interpolator(start + i * span);\n };\n}\nfunction interpolateColors(colors, type, gamma) {\n return $$1.piecewise(interpolate(type || 'rgb', gamma), colors);\n}\nfunction quantizeInterpolator(interpolator, count) {\n const samples = new Array(count),\n n = count + 1;\n for (let i = 0; i < count;) samples[i] = interpolator(++i / n);\n return samples;\n}\nfunction scaleCopy(scale) {\n const t = scale.type,\n s = scale.copy();\n s.type = t;\n return s;\n}\nfunction scaleFraction(scale$1, min, max) {\n const delta = max - min;\n let i, t, s;\n if (!delta || !Number.isFinite(delta)) {\n return constant(0.5);\n } else {\n i = (t = scale$1.type).indexOf('-');\n t = i < 0 ? t : t.slice(i + 1);\n s = scale(t)().domain([min, max]).range([0, 1]);\n scaleProps.forEach(m => scale$1[m] ? s[m](scale$1[m]()) : 0);\n return s;\n }\n}\nfunction interpolate(type, gamma) {\n const interp = $$1[method(type)];\n return gamma != null && interp && interp.gamma ? interp.gamma(gamma) : interp;\n}\nfunction method(type) {\n return 'interpolate' + type.toLowerCase().split('-').map(s => s[0].toUpperCase() + s.slice(1)).join('');\n}\n\nconst continuous = {\n blues: 'cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90',\n greens: 'd3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429',\n greys: 'e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e',\n oranges: 'fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303',\n purples: 'e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c',\n reds: 'fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13',\n blueGreen: 'd5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429',\n bluePurple: 'ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71',\n greenBlue: 'd3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1',\n orangeRed: 'fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403',\n purpleBlue: 'dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281',\n purpleBlueGreen: 'dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353',\n purpleRed: 'dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a',\n redPurple: 'fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174',\n yellowGreen: 'e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034',\n yellowOrangeBrown: 'feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204',\n yellowOrangeRed: 'fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225',\n blueOrange: '134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07',\n brownBlueGreen: '704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147',\n purpleGreen: '5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29',\n purpleOrange: '4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07',\n redBlue: '8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85',\n redGrey: '8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434',\n yellowGreenBlue: 'eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185',\n redYellowBlue: 'a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695',\n redYellowGreen: 'a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837',\n pinkYellowGreen: '8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419',\n spectral: '9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2',\n viridis: '440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725',\n magma: '0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf',\n inferno: '0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4',\n plasma: '0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921',\n cividis: '00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647',\n rainbow: '6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa',\n sinebow: 'ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040',\n turbo: '23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00',\n browns: 'eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632',\n tealBlues: 'bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985',\n teals: 'bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667',\n warmGreys: 'dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e',\n goldGreen: 'f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36',\n goldOrange: 'f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26',\n goldRed: 'f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e',\n lightGreyRed: 'efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b',\n lightGreyTeal: 'e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc',\n lightMulti: 'e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c',\n lightOrange: 'f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b',\n lightTealBlue: 'e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988',\n darkBlue: '3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff',\n darkGold: '3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff',\n darkGreen: '3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa',\n darkMulti: '3737371f5287197d8c29a86995ce3fffe800ffffff',\n darkRed: '3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c'\n};\nconst discrete = {\n category10: '1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf',\n category20: '1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5',\n category20b: '393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6',\n category20c: '3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9',\n tableau10: '4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac',\n tableau20: '4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5',\n accent: '7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666',\n dark2: '1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666',\n paired: 'a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928',\n pastel1: 'fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2',\n pastel2: 'b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc',\n set1: 'e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999',\n set2: '66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3',\n set3: '8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f'\n};\n\nfunction colors(palette) {\n const n = palette.length / 6 | 0,\n c = new Array(n);\n for (let i = 0; i < n;) {\n c[i] = '#' + palette.slice(i * 6, ++i * 6);\n }\n return c;\n}\nfunction apply(_, f) {\n for (const k in _) scheme(k, f(_[k]));\n}\nconst schemes = {};\napply(discrete, colors);\napply(continuous, _ => interpolateColors(colors(_)));\nfunction scheme(name, scheme) {\n name = name && name.toLowerCase();\n if (arguments.length > 1) {\n schemes[name] = scheme;\n return this;\n } else {\n return schemes[name];\n }\n}\n\nconst SymbolLegend = 'symbol';\nconst DiscreteLegend = 'discrete';\nconst GradientLegend = 'gradient';\n\nconst defaultFormatter = value => isArray(value) ? value.map(v => String(v)) : String(value);\nconst ascending = (a, b) => a[1] - b[1];\nconst descending = (a, b) => b[1] - a[1];\n\n/**\n * Determine the tick count or interval function.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} count - The desired tick count or interval specifier.\n * @param {number} minStep - The desired minimum step between tick values.\n * @return {*} - The tick count or interval function.\n */\nfunction tickCount(scale, count, minStep) {\n let step;\n if (isNumber(count)) {\n if (scale.bins) {\n count = Math.max(count, scale.bins.length);\n }\n if (minStep != null) {\n count = Math.min(count, Math.floor(span(scale.domain()) / minStep || 1) + 1);\n }\n }\n if (isObject(count)) {\n step = count.step;\n count = count.interval;\n }\n if (isString(count)) {\n count = scale.type === Time ? timeInterval(count) : scale.type == UTC ? utcInterval(count) : error('Only time and utc scales accept interval strings.');\n if (step) count = count.every(step);\n }\n return count;\n}\n\n/**\n * Filter a set of candidate tick values, ensuring that only tick values\n * that lie within the scale range are included.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {Array<*>} ticks - The candidate tick values.\n * @param {*} count - The tick count or interval function.\n * @return {Array<*>} - The filtered tick values.\n */\nfunction validTicks(scale, ticks, count) {\n let range = scale.range(),\n lo = range[0],\n hi = peek(range),\n cmp = ascending;\n if (lo > hi) {\n range = hi;\n hi = lo;\n lo = range;\n cmp = descending;\n }\n lo = Math.floor(lo);\n hi = Math.ceil(hi);\n\n // filter ticks to valid values within the range\n // additionally sort ticks in range order (#2579)\n ticks = ticks.map(v => [v, scale(v)]).filter(_ => lo <= _[1] && _[1] <= hi).sort(cmp).map(_ => _[0]);\n if (count > 0 && ticks.length > 1) {\n const endpoints = [ticks[0], peek(ticks)];\n while (ticks.length > count && ticks.length >= 3) {\n ticks = ticks.filter((_, i) => !(i % 2));\n }\n if (ticks.length < 3) {\n ticks = endpoints;\n }\n }\n return ticks;\n}\n\n/**\n * Generate tick values for the given scale and approximate tick count or\n * interval value. If the scale has a 'ticks' method, it will be used to\n * generate the ticks, with the count argument passed as a parameter. If the\n * scale lacks a 'ticks' method, the full scale domain will be returned.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} [count] - The approximate number of desired ticks.\n * @return {Array<*>} - The generated tick values.\n */\nfunction tickValues(scale, count) {\n return scale.bins ? validTicks(scale, scale.bins) : scale.ticks ? scale.ticks(count) : scale.domain();\n}\n\n/**\n * Generate a label format function for a scale. If the scale has a\n * 'tickFormat' method, it will be used to generate the formatter, with the\n * count and specifier arguments passed as parameters. If the scale lacks a\n * 'tickFormat' method, the returned formatter performs simple string coercion.\n * If the input scale is a logarithmic scale and the format specifier does not\n * indicate a desired decimal precision, a special variable precision formatter\n * that automatically trims trailing zeroes will be generated.\n * @param {Scale} scale - The scale for which to generate the label formatter.\n * @param {*} [count] - The approximate number of desired ticks.\n * @param {string} [specifier] - The format specifier. Must be a legal d3\n * specifier string (see https://github.com/d3/d3-format#formatSpecifier) or\n * time multi-format specifier object.\n * @return {function(*):string} - The generated label formatter.\n */\nfunction tickFormat(locale, scale, count, specifier, formatType, noSkip) {\n const type = scale.type;\n let format = defaultFormatter;\n if (type === Time || formatType === Time) {\n format = locale.timeFormat(specifier);\n } else if (type === UTC || formatType === UTC) {\n format = locale.utcFormat(specifier);\n } else if (isLogarithmic(type)) {\n const varfmt = locale.formatFloat(specifier);\n if (noSkip || scale.bins) {\n format = varfmt;\n } else {\n const test = tickLog(scale, count, false);\n format = _ => test(_) ? varfmt(_) : '';\n }\n } else if (scale.tickFormat) {\n // if d3 scale has tickFormat, it must be continuous\n const d = scale.domain();\n format = locale.formatSpan(d[0], d[d.length - 1], count, specifier);\n } else if (specifier) {\n format = locale.format(specifier);\n }\n return format;\n}\nfunction tickLog(scale, count, values) {\n const ticks = tickValues(scale, count),\n base = scale.base(),\n logb = Math.log(base),\n k = Math.max(1, base * count / ticks.length);\n\n // apply d3-scale's log format filter criteria\n const test = d => {\n let i = d / Math.pow(base, Math.round(Math.log(d) / logb));\n if (i * base < base - 0.5) i *= base;\n return i <= k;\n };\n return values ? ticks.filter(test) : test;\n}\n\nconst symbols = {\n [Quantile]: 'quantiles',\n [Quantize]: 'thresholds',\n [Threshold]: 'domain'\n};\nconst formats = {\n [Quantile]: 'quantiles',\n [Quantize]: 'domain'\n};\nfunction labelValues(scale, count) {\n return scale.bins ? binValues(scale.bins) : scale.type === Log ? tickLog(scale, count, true) : symbols[scale.type] ? thresholdValues(scale[symbols[scale.type]]()) : tickValues(scale, count);\n}\nfunction thresholdFormat(locale, scale, specifier) {\n const _ = scale[formats[scale.type]](),\n n = _.length;\n let d = n > 1 ? _[1] - _[0] : _[0],\n i;\n for (i = 1; i < n; ++i) {\n d = Math.min(d, _[i] - _[i - 1]);\n }\n\n // tickCount = 3 ticks times 10 for increased resolution\n return locale.formatSpan(0, d, 3 * 10, specifier);\n}\nfunction thresholdValues(thresholds) {\n const values = [-Infinity].concat(thresholds);\n values.max = +Infinity;\n return values;\n}\nfunction binValues(bins) {\n const values = bins.slice(0, -1);\n values.max = peek(bins);\n return values;\n}\nconst isDiscreteRange = scale => symbols[scale.type] || scale.bins;\nfunction labelFormat(locale, scale, count, type, specifier, formatType, noSkip) {\n const format = formats[scale.type] && formatType !== Time && formatType !== UTC ? thresholdFormat(locale, scale, specifier) : tickFormat(locale, scale, count, specifier, formatType, noSkip);\n return type === SymbolLegend && isDiscreteRange(scale) ? formatRange(format) : type === DiscreteLegend ? formatDiscrete(format) : formatPoint(format);\n}\nconst formatRange = format => (value, index, array) => {\n const limit = get(array[index + 1], get(array.max, +Infinity)),\n lo = formatValue(value, format),\n hi = formatValue(limit, format);\n return lo && hi ? lo + ' \\u2013 ' + hi : hi ? '< ' + hi : '\\u2265 ' + lo;\n};\nconst get = (value, dflt) => value != null ? value : dflt;\nconst formatDiscrete = format => (value, index) => index ? format(value) : null;\nconst formatPoint = format => value => format(value);\nconst formatValue = (value, format) => Number.isFinite(value) ? format(value) : null;\nfunction labelFraction(scale) {\n const domain = scale.domain(),\n count = domain.length - 1;\n let lo = +domain[0],\n hi = +peek(domain),\n span = hi - lo;\n if (scale.type === Threshold) {\n const adjust = count ? span / count : 0.1;\n lo -= adjust;\n hi += adjust;\n span = hi - lo;\n }\n return value => (value - lo) / span;\n}\n\nfunction format(locale, scale, specifier, formatType) {\n const type = formatType || scale.type;\n\n // replace abbreviated time specifiers to improve screen reader experience\n if (isString(specifier) && isTemporal(type)) {\n specifier = specifier.replace(/%a/g, '%A').replace(/%b/g, '%B');\n }\n return !specifier && type === Time ? locale.timeFormat('%A, %d %B %Y, %X') : !specifier && type === UTC ? locale.utcFormat('%A, %d %B %Y, %X UTC') : labelFormat(locale, scale, 5, null, specifier, formatType, true);\n}\nfunction domainCaption(locale, scale, opt) {\n opt = opt || {};\n const max = Math.max(3, opt.maxlen || 7),\n fmt = format(locale, scale, opt.format, opt.formatType);\n\n // if scale breaks domain into bins, describe boundaries\n if (isDiscretizing(scale.type)) {\n const v = labelValues(scale).slice(1).map(fmt),\n n = v.length;\n return `${n} boundar${n === 1 ? 'y' : 'ies'}: ${v.join(', ')}`;\n }\n\n // if scale domain is discrete, list values\n else if (isDiscrete(scale.type)) {\n const d = scale.domain(),\n n = d.length,\n v = n > max ? d.slice(0, max - 2).map(fmt).join(', ') + ', ending with ' + d.slice(-1).map(fmt) : d.map(fmt).join(', ');\n return `${n} value${n === 1 ? '' : 's'}: ${v}`;\n }\n\n // if scale domain is continuous, describe value range\n else {\n const d = scale.domain();\n return `values from ${fmt(d[0])} to ${fmt(peek(d))}`;\n }\n}\n\nexport { Band, BinOrdinal, DiscreteLegend, Diverging, GradientLegend, Identity, Linear, Log, Ordinal, Point, Pow, Quantile, Quantize, Sequential, Sqrt, SymbolLegend, Symlog, Threshold, Time, UTC, bandSpace, domainCaption, interpolate, interpolateColors, interpolateRange, isContinuous, isDiscrete, isDiscretizing, isInterpolating, isLogarithmic, isQuantile, isRegisteredScale, isTemporal, isValidScaleType, labelFormat, labelFraction, labelValues, quantizeInterpolator, registerScale, scale, scaleCopy, scaleFraction, scheme, tickCount, tickFormat, tickValues, validTicks };\n","import { hasOwnProperty, isFunction, inherits, truthy, lruCache, isArray, error, toSet, array, peek, extend, isNumber, isObject } from 'vega-util';\nimport { curveBasis, curveBasisClosed, curveBasisOpen, curveBundle, curveCardinal, curveCardinalOpen, curveCardinalClosed, curveCatmullRom, curveCatmullRomClosed, curveCatmullRomOpen, curveLinear, curveLinearClosed, curveMonotoneY, curveMonotoneX, curveNatural, curveStep, curveStepAfter, curveStepBefore, arc as arc$2, area as area$2, line as line$2, symbol as symbol$2 } from 'd3-shape';\nimport { path as path$3 } from 'd3-path';\nexport { path } from 'd3-path';\nimport { image as image$1, canvas } from 'vega-canvas';\nimport { loader } from 'vega-loader';\nimport { isDiscrete, domainCaption } from 'vega-scale';\n\nlet gradient_id = 0;\nfunction resetSVGGradientId() {\n gradient_id = 0;\n}\nconst patternPrefix = 'p_';\nfunction isGradient(value) {\n return value && value.gradient;\n}\nfunction gradientRef(g, defs, base) {\n const type = g.gradient;\n let id = g.id,\n prefix = type === 'radial' ? patternPrefix : '';\n\n // check id, assign default values as needed\n if (!id) {\n id = g.id = 'gradient_' + gradient_id++;\n if (type === 'radial') {\n g.x1 = get(g.x1, 0.5);\n g.y1 = get(g.y1, 0.5);\n g.r1 = get(g.r1, 0);\n g.x2 = get(g.x2, 0.5);\n g.y2 = get(g.y2, 0.5);\n g.r2 = get(g.r2, 0.5);\n prefix = patternPrefix;\n } else {\n g.x1 = get(g.x1, 0);\n g.y1 = get(g.y1, 0);\n g.x2 = get(g.x2, 1);\n g.y2 = get(g.y2, 0);\n }\n }\n\n // register definition\n defs[id] = g;\n\n // return url reference\n return 'url(' + (base || '') + '#' + prefix + id + ')';\n}\nfunction get(val, def) {\n return val != null ? val : def;\n}\nfunction Gradient (p0, p1) {\n var stops = [],\n gradient;\n return gradient = {\n gradient: 'linear',\n x1: p0 ? p0[0] : 0,\n y1: p0 ? p0[1] : 0,\n x2: p1 ? p1[0] : 1,\n y2: p1 ? p1[1] : 0,\n stops: stops,\n stop: function (offset, color) {\n stops.push({\n offset: offset,\n color: color\n });\n return gradient;\n }\n };\n}\n\nconst lookup = {\n 'basis': {\n curve: curveBasis\n },\n 'basis-closed': {\n curve: curveBasisClosed\n },\n 'basis-open': {\n curve: curveBasisOpen\n },\n 'bundle': {\n curve: curveBundle,\n tension: 'beta',\n value: 0.85\n },\n 'cardinal': {\n curve: curveCardinal,\n tension: 'tension',\n value: 0\n },\n 'cardinal-open': {\n curve: curveCardinalOpen,\n tension: 'tension',\n value: 0\n },\n 'cardinal-closed': {\n curve: curveCardinalClosed,\n tension: 'tension',\n value: 0\n },\n 'catmull-rom': {\n curve: curveCatmullRom,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-closed': {\n curve: curveCatmullRomClosed,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-open': {\n curve: curveCatmullRomOpen,\n tension: 'alpha',\n value: 0.5\n },\n 'linear': {\n curve: curveLinear\n },\n 'linear-closed': {\n curve: curveLinearClosed\n },\n 'monotone': {\n horizontal: curveMonotoneY,\n vertical: curveMonotoneX\n },\n 'natural': {\n curve: curveNatural\n },\n 'step': {\n curve: curveStep\n },\n 'step-after': {\n curve: curveStepAfter\n },\n 'step-before': {\n curve: curveStepBefore\n }\n};\nfunction curves(type, orientation, tension) {\n var entry = hasOwnProperty(lookup, type) && lookup[type],\n curve = null;\n if (entry) {\n curve = entry.curve || entry[orientation || 'vertical'];\n if (entry.tension && tension != null) {\n curve = curve[entry.tension](tension);\n }\n }\n return curve;\n}\n\nconst paramCounts = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n z: 0,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7\n};\nconst commandPattern = /[mlhvzcsqta]([^mlhvzcsqta]+|$)/gi;\nconst numberPattern = /^[+-]?(([0-9]*\\.[0-9]+)|([0-9]+\\.)|([0-9]+))([eE][+-]?[0-9]+)?/;\nconst spacePattern = /^((\\s+,?\\s*)|(,\\s*))/;\nconst flagPattern = /^[01]/;\nfunction parse(path) {\n const commands = [];\n const matches = path.match(commandPattern) || [];\n matches.forEach(str => {\n let cmd = str[0];\n const type = cmd.toLowerCase();\n\n // parse parameters\n const paramCount = paramCounts[type];\n const params = parseParams(type, paramCount, str.slice(1).trim());\n const count = params.length;\n\n // error checking based on parameter count\n if (count < paramCount || count && count % paramCount !== 0) {\n throw Error('Invalid SVG path, incorrect parameter count');\n }\n\n // register the command\n commands.push([cmd, ...params.slice(0, paramCount)]);\n\n // exit now if we're done, also handles zero-param 'z'\n if (count === paramCount) {\n return;\n }\n\n // handle implicit line-to\n if (type === 'm') {\n cmd = cmd === 'M' ? 'L' : 'l';\n }\n\n // repeat command when given extended param list\n for (let i = paramCount; i < count; i += paramCount) {\n commands.push([cmd, ...params.slice(i, i + paramCount)]);\n }\n });\n return commands;\n}\nfunction parseParams(type, paramCount, segment) {\n const params = [];\n for (let index = 0; paramCount && index < segment.length;) {\n for (let i = 0; i < paramCount; ++i) {\n const pattern = type === 'a' && (i === 3 || i === 4) ? flagPattern : numberPattern;\n const match = segment.slice(index).match(pattern);\n if (match === null) {\n throw Error('Invalid SVG path, incorrect parameter type');\n }\n index += match[0].length;\n params.push(+match[0]);\n const ws = segment.slice(index).match(spacePattern);\n if (ws !== null) {\n index += ws[0].length;\n }\n }\n }\n return params;\n}\n\nconst DegToRad = Math.PI / 180;\nconst Epsilon = 1e-14;\nconst HalfPi = Math.PI / 2;\nconst Tau = Math.PI * 2;\nconst HalfSqrt3 = Math.sqrt(3) / 2;\n\nvar segmentCache = {};\nvar bezierCache = {};\nvar join = [].join;\n\n// Copied from Inkscape svgtopdf, thanks!\nfunction segments(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\n const key = join.call(arguments);\n if (segmentCache[key]) {\n return segmentCache[key];\n }\n const th = rotateX * DegToRad;\n const sin_th = Math.sin(th);\n const cos_th = Math.cos(th);\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n const px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\n const py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\n let pl = px * px / (rx * rx) + py * py / (ry * ry);\n if (pl > 1) {\n pl = Math.sqrt(pl);\n rx *= pl;\n ry *= pl;\n }\n const a00 = cos_th / rx;\n const a01 = sin_th / rx;\n const a10 = -sin_th / ry;\n const a11 = cos_th / ry;\n const x0 = a00 * ox + a01 * oy;\n const y0 = a10 * ox + a11 * oy;\n const x1 = a00 * x + a01 * y;\n const y1 = a10 * x + a11 * y;\n const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\n let sfactor_sq = 1 / d - 0.25;\n if (sfactor_sq < 0) sfactor_sq = 0;\n let sfactor = Math.sqrt(sfactor_sq);\n if (sweep == large) sfactor = -sfactor;\n const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\n const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\n const th0 = Math.atan2(y0 - yc, x0 - xc);\n const th1 = Math.atan2(y1 - yc, x1 - xc);\n let th_arc = th1 - th0;\n if (th_arc < 0 && sweep === 1) {\n th_arc += Tau;\n } else if (th_arc > 0 && sweep === 0) {\n th_arc -= Tau;\n }\n const segs = Math.ceil(Math.abs(th_arc / (HalfPi + 0.001)));\n const result = [];\n for (let i = 0; i < segs; ++i) {\n const th2 = th0 + i * th_arc / segs;\n const th3 = th0 + (i + 1) * th_arc / segs;\n result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\n }\n return segmentCache[key] = result;\n}\nfunction bezier(params) {\n const key = join.call(params);\n if (bezierCache[key]) {\n return bezierCache[key];\n }\n var cx = params[0],\n cy = params[1],\n th0 = params[2],\n th1 = params[3],\n rx = params[4],\n ry = params[5],\n sin_th = params[6],\n cos_th = params[7];\n const a00 = cos_th * rx;\n const a01 = -sin_th * ry;\n const a10 = sin_th * rx;\n const a11 = cos_th * ry;\n const cos_th0 = Math.cos(th0);\n const sin_th0 = Math.sin(th0);\n const cos_th1 = Math.cos(th1);\n const sin_th1 = Math.sin(th1);\n const th_half = 0.5 * (th1 - th0);\n const sin_th_h2 = Math.sin(th_half * 0.5);\n const t = 8 / 3 * sin_th_h2 * sin_th_h2 / Math.sin(th_half);\n const x1 = cx + cos_th0 - t * sin_th0;\n const y1 = cy + sin_th0 + t * cos_th0;\n const x3 = cx + cos_th1;\n const y3 = cy + sin_th1;\n const x2 = x3 + t * sin_th1;\n const y2 = y3 - t * cos_th1;\n return bezierCache[key] = [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3];\n}\n\nconst temp = ['l', 0, 0, 0, 0, 0, 0, 0];\nfunction scale$1(current, sX, sY) {\n const c = temp[0] = current[0];\n if (c === 'a' || c === 'A') {\n temp[1] = sX * current[1];\n temp[2] = sY * current[2];\n temp[3] = current[3];\n temp[4] = current[4];\n temp[5] = current[5];\n temp[6] = sX * current[6];\n temp[7] = sY * current[7];\n } else if (c === 'h' || c === 'H') {\n temp[1] = sX * current[1];\n } else if (c === 'v' || c === 'V') {\n temp[1] = sY * current[1];\n } else {\n for (var i = 1, n = current.length; i < n; ++i) {\n temp[i] = (i % 2 == 1 ? sX : sY) * current[i];\n }\n }\n return temp;\n}\nfunction pathRender (context, path, l, t, sX, sY) {\n var current,\n // current instruction\n previous = null,\n x = 0,\n // current x\n y = 0,\n // current y\n controlX = 0,\n // current control point x\n controlY = 0,\n // current control point y\n tempX,\n tempY,\n tempControlX,\n tempControlY,\n anchorX = 0,\n anchorY = 0;\n if (l == null) l = 0;\n if (t == null) t = 0;\n if (sX == null) sX = 1;\n if (sY == null) sY = sX;\n if (context.beginPath) context.beginPath();\n for (var i = 0, len = path.length; i < len; ++i) {\n current = path[i];\n if (sX !== 1 || sY !== 1) {\n current = scale$1(current, sX, sY);\n }\n switch (current[0]) {\n // first letter\n\n case 'l':\n // lineto, relative\n x += current[1];\n y += current[2];\n context.lineTo(x + l, y + t);\n break;\n case 'L':\n // lineto, absolute\n x = current[1];\n y = current[2];\n context.lineTo(x + l, y + t);\n break;\n case 'h':\n // horizontal lineto, relative\n x += current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'H':\n // horizontal lineto, absolute\n x = current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'v':\n // vertical lineto, relative\n y += current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'V':\n // verical lineto, absolute\n y = current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'm':\n // moveTo, relative\n x += current[1];\n y += current[2];\n anchorX = x;\n anchorY = y;\n context.moveTo(x + l, y + t);\n break;\n case 'M':\n // moveTo, absolute\n x = current[1];\n y = current[2];\n anchorX = x;\n anchorY = y;\n context.moveTo(x + l, y + t);\n break;\n case 'c':\n // bezierCurveTo, relative\n tempX = x + current[5];\n tempY = y + current[6];\n controlX = x + current[3];\n controlY = y + current[4];\n context.bezierCurveTo(x + current[1] + l,\n // x1\n y + current[2] + t,\n // y1\n controlX + l,\n // x2\n controlY + t,\n // y2\n tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n case 'C':\n // bezierCurveTo, absolute\n x = current[5];\n y = current[6];\n controlX = current[3];\n controlY = current[4];\n context.bezierCurveTo(current[1] + l, current[2] + t, controlX + l, controlY + t, x + l, y + t);\n break;\n case 's':\n // shorthand cubic bezierCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.bezierCurveTo(controlX + l, controlY + t, x + current[1] + l, y + current[2] + t, tempX + l, tempY + t);\n\n // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n controlX = x + current[1];\n controlY = y + current[2];\n x = tempX;\n y = tempY;\n break;\n case 'S':\n // shorthand cubic bezierCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.bezierCurveTo(controlX + l, controlY + t, current[1] + l, current[2] + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n controlX = current[1];\n controlY = current[2];\n break;\n case 'q':\n // quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n controlX = x + current[1];\n controlY = y + current[2];\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n case 'Q':\n // quadraticCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n context.quadraticCurveTo(current[1] + l, current[2] + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = current[1];\n controlY = current[2];\n break;\n case 't':\n // shorthand quadraticCurveTo, relative\n\n // transform to absolute x,y\n tempX = x + current[1];\n tempY = y + current[2];\n if (previous[0].match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else if (previous[0] === 't') {\n // calculate reflection of previous control points for t\n controlX = 2 * x - tempControlX;\n controlY = 2 * y - tempControlY;\n } else if (previous[0] === 'q') {\n // calculate reflection of previous control points for q\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n tempControlX = controlX;\n tempControlY = controlY;\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = x + current[1];\n controlY = y + current[2];\n break;\n case 'T':\n tempX = current[1];\n tempY = current[2];\n\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n case 'a':\n drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + x + l, current[7] + y + t]);\n x += current[6];\n y += current[7];\n break;\n case 'A':\n drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + l, current[7] + t]);\n x = current[6];\n y = current[7];\n break;\n case 'z':\n case 'Z':\n x = anchorX;\n y = anchorY;\n context.closePath();\n break;\n }\n previous = current;\n }\n}\nfunction drawArc(context, x, y, coords) {\n const seg = segments(coords[5],\n // end x\n coords[6],\n // end y\n coords[0],\n // radius x\n coords[1],\n // radius y\n coords[3],\n // large flag\n coords[4],\n // sweep flag\n coords[2],\n // rotation\n x, y);\n for (let i = 0; i < seg.length; ++i) {\n const bez = bezier(seg[i]);\n context.bezierCurveTo(bez[0], bez[1], bez[2], bez[3], bez[4], bez[5]);\n }\n}\n\nconst Tan30 = 0.5773502691896257;\nconst builtins = {\n 'circle': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, Tau);\n }\n },\n 'cross': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n s = r / 2.5;\n context.moveTo(-r, -s);\n context.lineTo(-r, s);\n context.lineTo(-s, s);\n context.lineTo(-s, r);\n context.lineTo(s, r);\n context.lineTo(s, s);\n context.lineTo(r, s);\n context.lineTo(r, -s);\n context.lineTo(s, -s);\n context.lineTo(s, -r);\n context.lineTo(-s, -r);\n context.lineTo(-s, -s);\n context.closePath();\n }\n },\n 'diamond': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(-r, 0);\n context.lineTo(0, -r);\n context.lineTo(r, 0);\n context.lineTo(0, r);\n context.closePath();\n }\n },\n 'square': {\n draw: function (context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n },\n 'arrow': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n s = r / 7,\n t = r / 2.5,\n v = r / 8;\n context.moveTo(-s, r);\n context.lineTo(s, r);\n context.lineTo(s, -v);\n context.lineTo(t, -v);\n context.lineTo(0, -r);\n context.lineTo(-t, -v);\n context.lineTo(-s, -v);\n context.closePath();\n }\n },\n 'wedge': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r,\n o = h - r * Tan30,\n b = r / 4;\n context.moveTo(0, -h - o);\n context.lineTo(-b, h - o);\n context.lineTo(b, h - o);\n context.closePath();\n }\n },\n 'triangle': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r,\n o = h - r * Tan30;\n context.moveTo(0, -h - o);\n context.lineTo(-r, h - o);\n context.lineTo(r, h - o);\n context.closePath();\n }\n },\n 'triangle-up': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(0, -h);\n context.lineTo(-r, h);\n context.lineTo(r, h);\n context.closePath();\n }\n },\n 'triangle-down': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(0, h);\n context.lineTo(-r, -h);\n context.lineTo(r, -h);\n context.closePath();\n }\n },\n 'triangle-right': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(h, 0);\n context.lineTo(-h, -r);\n context.lineTo(-h, r);\n context.closePath();\n }\n },\n 'triangle-left': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(-h, 0);\n context.lineTo(h, -r);\n context.lineTo(h, r);\n context.closePath();\n }\n },\n 'stroke': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(-r, 0);\n context.lineTo(r, 0);\n }\n }\n};\nfunction symbols(_) {\n return hasOwnProperty(builtins, _) ? builtins[_] : customSymbol(_);\n}\nvar custom = {};\nfunction customSymbol(path) {\n if (!hasOwnProperty(custom, path)) {\n const parsed = parse(path);\n custom[path] = {\n draw: function (context, size) {\n pathRender(context, parsed, 0, 0, Math.sqrt(size) / 2);\n }\n };\n }\n return custom[path];\n}\n\n// See http://spencermortensen.com/articles/bezier-circle/\nconst C = 0.448084975506; // C = 1 - c\n\nfunction rectangleX(d) {\n return d.x;\n}\nfunction rectangleY(d) {\n return d.y;\n}\nfunction rectangleWidth(d) {\n return d.width;\n}\nfunction rectangleHeight(d) {\n return d.height;\n}\nfunction number(_) {\n return typeof _ === 'function' ? _ : () => +_;\n}\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(value, max));\n}\nfunction vg_rect () {\n var x = rectangleX,\n y = rectangleY,\n width = rectangleWidth,\n height = rectangleHeight,\n crTL = number(0),\n crTR = crTL,\n crBL = crTL,\n crBR = crTL,\n context = null;\n function rectangle(_, x0, y0) {\n var buffer,\n x1 = x0 != null ? x0 : +x.call(this, _),\n y1 = y0 != null ? y0 : +y.call(this, _),\n w = +width.call(this, _),\n h = +height.call(this, _),\n s = Math.min(w, h) / 2,\n tl = clamp(+crTL.call(this, _), 0, s),\n tr = clamp(+crTR.call(this, _), 0, s),\n bl = clamp(+crBL.call(this, _), 0, s),\n br = clamp(+crBR.call(this, _), 0, s);\n if (!context) context = buffer = path$3();\n if (tl <= 0 && tr <= 0 && bl <= 0 && br <= 0) {\n context.rect(x1, y1, w, h);\n } else {\n var x2 = x1 + w,\n y2 = y1 + h;\n context.moveTo(x1 + tl, y1);\n context.lineTo(x2 - tr, y1);\n context.bezierCurveTo(x2 - C * tr, y1, x2, y1 + C * tr, x2, y1 + tr);\n context.lineTo(x2, y2 - br);\n context.bezierCurveTo(x2, y2 - C * br, x2 - C * br, y2, x2 - br, y2);\n context.lineTo(x1 + bl, y2);\n context.bezierCurveTo(x1 + C * bl, y2, x1, y2 - C * bl, x1, y2 - bl);\n context.lineTo(x1, y1 + tl);\n context.bezierCurveTo(x1, y1 + C * tl, x1 + C * tl, y1, x1 + tl, y1);\n context.closePath();\n }\n if (buffer) {\n context = null;\n return buffer + '' || null;\n }\n }\n rectangle.x = function (_) {\n if (arguments.length) {\n x = number(_);\n return rectangle;\n } else {\n return x;\n }\n };\n rectangle.y = function (_) {\n if (arguments.length) {\n y = number(_);\n return rectangle;\n } else {\n return y;\n }\n };\n rectangle.width = function (_) {\n if (arguments.length) {\n width = number(_);\n return rectangle;\n } else {\n return width;\n }\n };\n rectangle.height = function (_) {\n if (arguments.length) {\n height = number(_);\n return rectangle;\n } else {\n return height;\n }\n };\n rectangle.cornerRadius = function (tl, tr, br, bl) {\n if (arguments.length) {\n crTL = number(tl);\n crTR = tr != null ? number(tr) : crTL;\n crBR = br != null ? number(br) : crTL;\n crBL = bl != null ? number(bl) : crTR;\n return rectangle;\n } else {\n return crTL;\n }\n };\n rectangle.context = function (_) {\n if (arguments.length) {\n context = _ == null ? null : _;\n return rectangle;\n } else {\n return context;\n }\n };\n return rectangle;\n}\n\nfunction vg_trail () {\n var x,\n y,\n size,\n defined,\n context = null,\n ready,\n x1,\n y1,\n r1;\n function point(x2, y2, w2) {\n const r2 = w2 / 2;\n if (ready) {\n var ux = y1 - y2,\n uy = x2 - x1;\n if (ux || uy) {\n // get normal vector\n var ud = Math.hypot(ux, uy),\n rx = (ux /= ud) * r1,\n ry = (uy /= ud) * r1,\n t = Math.atan2(uy, ux);\n\n // draw segment\n context.moveTo(x1 - rx, y1 - ry);\n context.lineTo(x2 - ux * r2, y2 - uy * r2);\n context.arc(x2, y2, r2, t - Math.PI, t);\n context.lineTo(x1 + rx, y1 + ry);\n context.arc(x1, y1, r1, t, t + Math.PI);\n } else {\n context.arc(x2, y2, r2, 0, Tau);\n }\n context.closePath();\n } else {\n ready = 1;\n }\n x1 = x2;\n y1 = y2;\n r1 = r2;\n }\n function trail(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n if (context == null) context = buffer = path$3();\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) ready = 0;\n }\n if (defined0) point(+x(d, i, data), +y(d, i, data), +size(d, i, data));\n }\n if (buffer) {\n context = null;\n return buffer + '' || null;\n }\n }\n trail.x = function (_) {\n if (arguments.length) {\n x = _;\n return trail;\n } else {\n return x;\n }\n };\n trail.y = function (_) {\n if (arguments.length) {\n y = _;\n return trail;\n } else {\n return y;\n }\n };\n trail.size = function (_) {\n if (arguments.length) {\n size = _;\n return trail;\n } else {\n return size;\n }\n };\n trail.defined = function (_) {\n if (arguments.length) {\n defined = _;\n return trail;\n } else {\n return defined;\n }\n };\n trail.context = function (_) {\n if (arguments.length) {\n if (_ == null) {\n context = null;\n } else {\n context = _;\n }\n return trail;\n } else {\n return context;\n }\n };\n return trail;\n}\n\nfunction value$1(a, b) {\n return a != null ? a : b;\n}\nconst x = item => item.x || 0,\n y = item => item.y || 0,\n w = item => item.width || 0,\n h = item => item.height || 0,\n xw = item => (item.x || 0) + (item.width || 0),\n yh = item => (item.y || 0) + (item.height || 0),\n sa = item => item.startAngle || 0,\n ea = item => item.endAngle || 0,\n pa = item => item.padAngle || 0,\n ir = item => item.innerRadius || 0,\n or = item => item.outerRadius || 0,\n cr = item => item.cornerRadius || 0,\n tl = item => value$1(item.cornerRadiusTopLeft, item.cornerRadius) || 0,\n tr = item => value$1(item.cornerRadiusTopRight, item.cornerRadius) || 0,\n br = item => value$1(item.cornerRadiusBottomRight, item.cornerRadius) || 0,\n bl = item => value$1(item.cornerRadiusBottomLeft, item.cornerRadius) || 0,\n sz = item => value$1(item.size, 64),\n ts = item => item.size || 1,\n def = item => !(item.defined === false),\n type = item => symbols(item.shape || 'circle');\nconst arcShape = arc$2().startAngle(sa).endAngle(ea).padAngle(pa).innerRadius(ir).outerRadius(or).cornerRadius(cr),\n areavShape = area$2().x(x).y1(y).y0(yh).defined(def),\n areahShape = area$2().y(y).x1(x).x0(xw).defined(def),\n lineShape = line$2().x(x).y(y).defined(def),\n rectShape = vg_rect().x(x).y(y).width(w).height(h).cornerRadius(tl, tr, br, bl),\n symbolShape = symbol$2().type(type).size(sz),\n trailShape = vg_trail().x(x).y(y).defined(def).size(ts);\nfunction hasCornerRadius(item) {\n return item.cornerRadius || item.cornerRadiusTopLeft || item.cornerRadiusTopRight || item.cornerRadiusBottomRight || item.cornerRadiusBottomLeft;\n}\nfunction arc$1(context, item) {\n return arcShape.context(context)(item);\n}\nfunction area$1(context, items) {\n const item = items[0],\n interp = item.interpolate || 'linear';\n return (item.orient === 'horizontal' ? areahShape : areavShape).curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction line$1(context, items) {\n const item = items[0],\n interp = item.interpolate || 'linear';\n return lineShape.curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction rectangle(context, item, x, y) {\n return rectShape.context(context)(item, x, y);\n}\nfunction shape$1(context, item) {\n return (item.mark.shape || item.shape).context(context)(item);\n}\nfunction symbol$1(context, item) {\n return symbolShape.context(context)(item);\n}\nfunction trail$1(context, items) {\n return trailShape.context(context)(items);\n}\n\nvar clip_id = 1;\nfunction resetSVGClipId() {\n clip_id = 1;\n}\nfunction clip$1 (renderer, item, size) {\n var clip = item.clip,\n defs = renderer._defs,\n id = item.clip_id || (item.clip_id = 'clip' + clip_id++),\n c = defs.clipping[id] || (defs.clipping[id] = {\n id: id\n });\n if (isFunction(clip)) {\n c.path = clip(null);\n } else if (hasCornerRadius(size)) {\n c.path = rectangle(null, size, 0, 0);\n } else {\n c.width = size.width || 0;\n c.height = size.height || 0;\n }\n return 'url(#' + id + ')';\n}\n\nfunction Bounds(b) {\n this.clear();\n if (b) this.union(b);\n}\nBounds.prototype = {\n clone() {\n return new Bounds(this);\n },\n clear() {\n this.x1 = +Number.MAX_VALUE;\n this.y1 = +Number.MAX_VALUE;\n this.x2 = -Number.MAX_VALUE;\n this.y2 = -Number.MAX_VALUE;\n return this;\n },\n empty() {\n return this.x1 === +Number.MAX_VALUE && this.y1 === +Number.MAX_VALUE && this.x2 === -Number.MAX_VALUE && this.y2 === -Number.MAX_VALUE;\n },\n equals(b) {\n return this.x1 === b.x1 && this.y1 === b.y1 && this.x2 === b.x2 && this.y2 === b.y2;\n },\n set(x1, y1, x2, y2) {\n if (x2 < x1) {\n this.x2 = x1;\n this.x1 = x2;\n } else {\n this.x1 = x1;\n this.x2 = x2;\n }\n if (y2 < y1) {\n this.y2 = y1;\n this.y1 = y2;\n } else {\n this.y1 = y1;\n this.y2 = y2;\n }\n return this;\n },\n add(x, y) {\n if (x < this.x1) this.x1 = x;\n if (y < this.y1) this.y1 = y;\n if (x > this.x2) this.x2 = x;\n if (y > this.y2) this.y2 = y;\n return this;\n },\n expand(d) {\n this.x1 -= d;\n this.y1 -= d;\n this.x2 += d;\n this.y2 += d;\n return this;\n },\n round() {\n this.x1 = Math.floor(this.x1);\n this.y1 = Math.floor(this.y1);\n this.x2 = Math.ceil(this.x2);\n this.y2 = Math.ceil(this.y2);\n return this;\n },\n scale(s) {\n this.x1 *= s;\n this.y1 *= s;\n this.x2 *= s;\n this.y2 *= s;\n return this;\n },\n translate(dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n },\n rotate(angle, x, y) {\n const p = this.rotatedPoints(angle, x, y);\n return this.clear().add(p[0], p[1]).add(p[2], p[3]).add(p[4], p[5]).add(p[6], p[7]);\n },\n rotatedPoints(angle, x, y) {\n var {\n x1,\n y1,\n x2,\n y2\n } = this,\n cos = Math.cos(angle),\n sin = Math.sin(angle),\n cx = x - x * cos + y * sin,\n cy = y - x * sin - y * cos;\n return [cos * x1 - sin * y1 + cx, sin * x1 + cos * y1 + cy, cos * x1 - sin * y2 + cx, sin * x1 + cos * y2 + cy, cos * x2 - sin * y1 + cx, sin * x2 + cos * y1 + cy, cos * x2 - sin * y2 + cx, sin * x2 + cos * y2 + cy];\n },\n union(b) {\n if (b.x1 < this.x1) this.x1 = b.x1;\n if (b.y1 < this.y1) this.y1 = b.y1;\n if (b.x2 > this.x2) this.x2 = b.x2;\n if (b.y2 > this.y2) this.y2 = b.y2;\n return this;\n },\n intersect(b) {\n if (b.x1 > this.x1) this.x1 = b.x1;\n if (b.y1 > this.y1) this.y1 = b.y1;\n if (b.x2 < this.x2) this.x2 = b.x2;\n if (b.y2 < this.y2) this.y2 = b.y2;\n return this;\n },\n encloses(b) {\n return b && this.x1 <= b.x1 && this.x2 >= b.x2 && this.y1 <= b.y1 && this.y2 >= b.y2;\n },\n alignsWith(b) {\n return b && (this.x1 == b.x1 || this.x2 == b.x2 || this.y1 == b.y1 || this.y2 == b.y2);\n },\n intersects(b) {\n return b && !(this.x2 < b.x1 || this.x1 > b.x2 || this.y2 < b.y1 || this.y1 > b.y2);\n },\n contains(x, y) {\n return !(x < this.x1 || x > this.x2 || y < this.y1 || y > this.y2);\n },\n width() {\n return this.x2 - this.x1;\n },\n height() {\n return this.y2 - this.y1;\n }\n};\n\nfunction Item(mark) {\n this.mark = mark;\n this.bounds = this.bounds || new Bounds();\n}\n\nfunction GroupItem(mark) {\n Item.call(this, mark);\n this.items = this.items || [];\n}\ninherits(GroupItem, Item);\n\nfunction ResourceLoader(customLoader) {\n this._pending = 0;\n this._loader = customLoader || loader();\n}\nfunction increment(loader) {\n loader._pending += 1;\n}\nfunction decrement(loader) {\n loader._pending -= 1;\n}\nResourceLoader.prototype = {\n pending() {\n return this._pending;\n },\n sanitizeURL(uri) {\n const loader = this;\n increment(loader);\n return loader._loader.sanitize(uri, {\n context: 'href'\n }).then(opt => {\n decrement(loader);\n return opt;\n }).catch(() => {\n decrement(loader);\n return null;\n });\n },\n loadImage(uri) {\n const loader = this,\n Image = image$1();\n increment(loader);\n return loader._loader.sanitize(uri, {\n context: 'image'\n }).then(opt => {\n const url = opt.href;\n if (!url || !Image) throw {\n url: url\n };\n const img = new Image();\n\n // set crossOrigin only if cors is defined; empty string sets anonymous mode\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/crossOrigin\n const cors = hasOwnProperty(opt, 'crossOrigin') ? opt.crossOrigin : 'anonymous';\n if (cors != null) img.crossOrigin = cors;\n\n // attempt to load image resource\n img.onload = () => decrement(loader);\n img.onerror = () => decrement(loader);\n img.src = url;\n return img;\n }).catch(e => {\n decrement(loader);\n return {\n complete: false,\n width: 0,\n height: 0,\n src: e && e.url || ''\n };\n });\n },\n ready() {\n const loader = this;\n return new Promise(accept => {\n function poll(value) {\n if (!loader.pending()) accept(value);else setTimeout(() => {\n poll(true);\n }, 10);\n }\n poll(false);\n });\n }\n};\n\nfunction boundStroke (bounds, item, miter) {\n if (item.stroke && item.opacity !== 0 && item.strokeOpacity !== 0) {\n const sw = item.strokeWidth != null ? +item.strokeWidth : 1;\n bounds.expand(sw + (miter ? miterAdjustment(item, sw) : 0));\n }\n return bounds;\n}\nfunction miterAdjustment(item, strokeWidth) {\n // TODO: more sophisticated adjustment? Or miter support in boundContext?\n return item.strokeJoin && item.strokeJoin !== 'miter' ? 0 : strokeWidth;\n}\n\nconst circleThreshold = Tau - 1e-8;\nlet bounds, lx, ly, rot, ma, mb, mc, md;\nconst add = (x, y) => bounds.add(x, y);\nconst addL = (x, y) => add(lx = x, ly = y);\nconst addX = x => add(x, bounds.y1);\nconst addY = y => add(bounds.x1, y);\nconst px = (x, y) => ma * x + mc * y;\nconst py = (x, y) => mb * x + md * y;\nconst addp = (x, y) => add(px(x, y), py(x, y));\nconst addpL = (x, y) => addL(px(x, y), py(x, y));\nfunction boundContext (_, deg) {\n bounds = _;\n if (deg) {\n rot = deg * DegToRad;\n ma = md = Math.cos(rot);\n mb = Math.sin(rot);\n mc = -mb;\n } else {\n ma = md = 1;\n rot = mb = mc = 0;\n }\n return context$1;\n}\nconst context$1 = {\n beginPath() {},\n closePath() {},\n moveTo: addpL,\n lineTo: addpL,\n rect(x, y, w, h) {\n if (rot) {\n addp(x + w, y);\n addp(x + w, y + h);\n addp(x, y + h);\n addpL(x, y);\n } else {\n add(x + w, y + h);\n addL(x, y);\n }\n },\n quadraticCurveTo(x1, y1, x2, y2) {\n const px1 = px(x1, y1),\n py1 = py(x1, y1),\n px2 = px(x2, y2),\n py2 = py(x2, y2);\n quadExtrema(lx, px1, px2, addX);\n quadExtrema(ly, py1, py2, addY);\n addL(px2, py2);\n },\n bezierCurveTo(x1, y1, x2, y2, x3, y3) {\n const px1 = px(x1, y1),\n py1 = py(x1, y1),\n px2 = px(x2, y2),\n py2 = py(x2, y2),\n px3 = px(x3, y3),\n py3 = py(x3, y3);\n cubicExtrema(lx, px1, px2, px3, addX);\n cubicExtrema(ly, py1, py2, py3, addY);\n addL(px3, py3);\n },\n arc(cx, cy, r, sa, ea, ccw) {\n sa += rot;\n ea += rot;\n\n // store last point on path\n lx = r * Math.cos(ea) + cx;\n ly = r * Math.sin(ea) + cy;\n if (Math.abs(ea - sa) > circleThreshold) {\n // treat as full circle\n add(cx - r, cy - r);\n add(cx + r, cy + r);\n } else {\n const update = a => add(r * Math.cos(a) + cx, r * Math.sin(a) + cy);\n let s, i;\n\n // sample end points\n update(sa);\n update(ea);\n\n // sample interior points aligned with 90 degrees\n if (ea !== sa) {\n sa = sa % Tau;\n if (sa < 0) sa += Tau;\n ea = ea % Tau;\n if (ea < 0) ea += Tau;\n if (ea < sa) {\n ccw = !ccw; // flip direction\n s = sa;\n sa = ea;\n ea = s; // swap end-points\n }\n\n if (ccw) {\n ea -= Tau;\n s = sa - sa % HalfPi;\n for (i = 0; i < 4 && s > ea; ++i, s -= HalfPi) update(s);\n } else {\n s = sa - sa % HalfPi + HalfPi;\n for (i = 0; i < 4 && s < ea; ++i, s = s + HalfPi) update(s);\n }\n }\n }\n }\n};\nfunction quadExtrema(x0, x1, x2, cb) {\n const t = (x0 - x1) / (x0 + x2 - 2 * x1);\n if (0 < t && t < 1) cb(x0 + (x1 - x0) * t);\n}\nfunction cubicExtrema(x0, x1, x2, x3, cb) {\n const a = x3 - x0 + 3 * x1 - 3 * x2,\n b = x0 + x2 - 2 * x1,\n c = x0 - x1;\n let t0 = 0,\n t1 = 0,\n r;\n\n // solve for parameter t\n if (Math.abs(a) > Epsilon) {\n // quadratic equation\n r = b * b + c * a;\n if (r >= 0) {\n r = Math.sqrt(r);\n t0 = (-b + r) / a;\n t1 = (-b - r) / a;\n }\n } else {\n // linear equation\n t0 = 0.5 * c / b;\n }\n\n // calculate position\n if (0 < t0 && t0 < 1) cb(cubic(t0, x0, x1, x2, x3));\n if (0 < t1 && t1 < 1) cb(cubic(t1, x0, x1, x2, x3));\n}\nfunction cubic(t, x0, x1, x2, x3) {\n const s = 1 - t,\n s2 = s * s,\n t2 = t * t;\n return s2 * s * x0 + 3 * s2 * t * x1 + 3 * s * t2 * x2 + t2 * t * x3;\n}\n\nvar context = (context = canvas(1, 1)) ? context.getContext('2d') : null;\n\nconst b = new Bounds();\nfunction intersectPath(draw) {\n return function (item, brush) {\n // rely on (inaccurate) bounds intersection if no context\n if (!context) return true;\n\n // add path to offscreen graphics context\n draw(context, item);\n\n // get bounds intersection region\n b.clear().union(item.bounds).intersect(brush).round();\n const {\n x1,\n y1,\n x2,\n y2\n } = b;\n\n // iterate over intersection region\n // perform fine grained inclusion test\n for (let y = y1; y <= y2; ++y) {\n for (let x = x1; x <= x2; ++x) {\n if (context.isPointInPath(x, y)) {\n return true;\n }\n }\n }\n\n // false if no hits in intersection region\n return false;\n };\n}\nfunction intersectPoint(item, box) {\n return box.contains(item.x || 0, item.y || 0);\n}\nfunction intersectRect(item, box) {\n const x = item.x || 0,\n y = item.y || 0,\n w = item.width || 0,\n h = item.height || 0;\n return box.intersects(b.set(x, y, x + w, y + h));\n}\nfunction intersectRule(item, box) {\n const x = item.x || 0,\n y = item.y || 0,\n x2 = item.x2 != null ? item.x2 : x,\n y2 = item.y2 != null ? item.y2 : y;\n return intersectBoxLine(box, x, y, x2, y2);\n}\nfunction intersectBoxLine(box, x, y, u, v) {\n const {\n x1,\n y1,\n x2,\n y2\n } = box,\n dx = u - x,\n dy = v - y;\n let t0 = 0,\n t1 = 1,\n p,\n q,\n r,\n e;\n for (e = 0; e < 4; ++e) {\n if (e === 0) {\n p = -dx;\n q = -(x1 - x);\n }\n if (e === 1) {\n p = dx;\n q = x2 - x;\n }\n if (e === 2) {\n p = -dy;\n q = -(y1 - y);\n }\n if (e === 3) {\n p = dy;\n q = y2 - y;\n }\n if (Math.abs(p) < 1e-10 && q < 0) return false;\n r = q / p;\n if (p < 0) {\n if (r > t1) return false;else if (r > t0) t0 = r;\n } else if (p > 0) {\n if (r < t0) return false;else if (r < t1) t1 = r;\n }\n }\n return true;\n}\n\nfunction blend (context, item) {\n context.globalCompositeOperation = item.blend || 'source-over';\n}\n\nfunction value (value, dflt) {\n return value == null ? dflt : value;\n}\n\nfunction addStops(gradient, stops) {\n const n = stops.length;\n for (let i = 0; i < n; ++i) {\n gradient.addColorStop(stops[i].offset, stops[i].color);\n }\n return gradient;\n}\nfunction gradient (context, spec, bounds) {\n const w = bounds.width(),\n h = bounds.height();\n let gradient;\n if (spec.gradient === 'radial') {\n gradient = context.createRadialGradient(bounds.x1 + value(spec.x1, 0.5) * w, bounds.y1 + value(spec.y1, 0.5) * h, Math.max(w, h) * value(spec.r1, 0), bounds.x1 + value(spec.x2, 0.5) * w, bounds.y1 + value(spec.y2, 0.5) * h, Math.max(w, h) * value(spec.r2, 0.5));\n } else {\n // linear gradient\n const x1 = value(spec.x1, 0),\n y1 = value(spec.y1, 0),\n x2 = value(spec.x2, 1),\n y2 = value(spec.y2, 0);\n if (x1 === x2 || y1 === y2 || w === h) {\n // axis aligned: use normal gradient\n gradient = context.createLinearGradient(bounds.x1 + x1 * w, bounds.y1 + y1 * h, bounds.x1 + x2 * w, bounds.y1 + y2 * h);\n } else {\n // not axis aligned: render gradient into a pattern (#2365)\n // this allows us to use normalized bounding box coordinates\n const image = canvas(Math.ceil(w), Math.ceil(h)),\n ictx = image.getContext('2d');\n ictx.scale(w, h);\n ictx.fillStyle = addStops(ictx.createLinearGradient(x1, y1, x2, y2), spec.stops);\n ictx.fillRect(0, 0, w, h);\n return context.createPattern(image, 'no-repeat');\n }\n }\n return addStops(gradient, spec.stops);\n}\n\nfunction color (context, item, value) {\n return isGradient(value) ? gradient(context, value, item.bounds) : value;\n}\n\nfunction fill (context, item, opacity) {\n opacity *= item.fillOpacity == null ? 1 : item.fillOpacity;\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.fillStyle = color(context, item, item.fill);\n return true;\n } else {\n return false;\n }\n}\n\nvar Empty = [];\nfunction stroke (context, item, opacity) {\n var lw = (lw = item.strokeWidth) != null ? lw : 1;\n if (lw <= 0) return false;\n opacity *= item.strokeOpacity == null ? 1 : item.strokeOpacity;\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.strokeStyle = color(context, item, item.stroke);\n context.lineWidth = lw;\n context.lineCap = item.strokeCap || 'butt';\n context.lineJoin = item.strokeJoin || 'miter';\n context.miterLimit = item.strokeMiterLimit || 10;\n if (context.setLineDash) {\n context.setLineDash(item.strokeDash || Empty);\n context.lineDashOffset = item.strokeDashOffset || 0;\n }\n return true;\n } else {\n return false;\n }\n}\n\nfunction compare(a, b) {\n return a.zindex - b.zindex || a.index - b.index;\n}\nfunction zorder(scene) {\n if (!scene.zdirty) return scene.zitems;\n var items = scene.items,\n output = [],\n item,\n i,\n n;\n for (i = 0, n = items.length; i < n; ++i) {\n item = items[i];\n item.index = i;\n if (item.zindex) output.push(item);\n }\n scene.zdirty = false;\n return scene.zitems = output.sort(compare);\n}\nfunction visit(scene, visitor) {\n var items = scene.items,\n i,\n n;\n if (!items || !items.length) return;\n const zitems = zorder(scene);\n if (zitems && zitems.length) {\n for (i = 0, n = items.length; i < n; ++i) {\n if (!items[i].zindex) visitor(items[i]);\n }\n items = zitems;\n }\n for (i = 0, n = items.length; i < n; ++i) {\n visitor(items[i]);\n }\n}\nfunction pickVisit(scene, visitor) {\n var items = scene.items,\n hit,\n i;\n if (!items || !items.length) return null;\n const zitems = zorder(scene);\n if (zitems && zitems.length) items = zitems;\n for (i = items.length; --i >= 0;) {\n if (hit = visitor(items[i])) return hit;\n }\n if (items === zitems) {\n for (items = scene.items, i = items.length; --i >= 0;) {\n if (!items[i].zindex) {\n if (hit = visitor(items[i])) return hit;\n }\n }\n }\n return null;\n}\n\nfunction drawAll(path) {\n return function (context, scene, bounds) {\n visit(scene, item => {\n if (!bounds || bounds.intersects(item.bounds)) {\n drawPath(path, context, item, item);\n }\n });\n };\n}\nfunction drawOne(path) {\n return function (context, scene, bounds) {\n if (scene.items.length && (!bounds || bounds.intersects(scene.bounds))) {\n drawPath(path, context, scene.items[0], scene.items);\n }\n };\n}\nfunction drawPath(path, context, item, items) {\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity === 0) return;\n if (path(context, items)) return;\n blend(context, item);\n if (item.fill && fill(context, item, opacity)) {\n context.fill();\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.stroke();\n }\n}\n\nfunction pick$1(test) {\n test = test || truthy;\n return function (context, scene, x, y, gx, gy) {\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return pickVisit(scene, item => {\n const b = item.bounds;\n // first hit test against bounding box\n if (b && !b.contains(gx, gy) || !b) return;\n // if in bounding box, perform more careful test\n if (test(context, item, x, y, gx, gy)) return item;\n });\n };\n}\nfunction hitPath(path, filled) {\n return function (context, o, x, y) {\n var item = Array.isArray(o) ? o[0] : o,\n fill = filled == null ? item.fill : filled,\n stroke = item.stroke && context.isPointInStroke,\n lw,\n lc;\n if (stroke) {\n lw = item.strokeWidth;\n lc = item.strokeCap;\n context.lineWidth = lw != null ? lw : 1;\n context.lineCap = lc != null ? lc : 'butt';\n }\n return path(context, o) ? false : fill && context.isPointInPath(x, y) || stroke && context.isPointInStroke(x, y);\n };\n}\nfunction pickPath(path) {\n return pick$1(hitPath(path));\n}\n\nfunction translate(x, y) {\n return 'translate(' + x + ',' + y + ')';\n}\nfunction rotate(a) {\n return 'rotate(' + a + ')';\n}\nfunction scale(scaleX, scaleY) {\n return 'scale(' + scaleX + ',' + scaleY + ')';\n}\nfunction translateItem(item) {\n return translate(item.x || 0, item.y || 0);\n}\nfunction rotateItem(item) {\n return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '');\n}\nfunction transformItem(item) {\n return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '') + (item.scaleX || item.scaleY ? ' ' + scale(item.scaleX || 1, item.scaleY || 1) : '');\n}\n\nfunction markItemPath (type, shape, isect) {\n function attr(emit, item) {\n emit('transform', rotateItem(item));\n emit('d', shape(null, item));\n }\n function bound(bounds, item) {\n shape(boundContext(bounds, item.angle), item);\n return boundStroke(bounds, item).translate(item.x || 0, item.y || 0);\n }\n function draw(context, item) {\n var x = item.x || 0,\n y = item.y || 0,\n a = item.angle || 0;\n context.translate(x, y);\n if (a) context.rotate(a *= DegToRad);\n context.beginPath();\n shape(context, item);\n if (a) context.rotate(-a);\n context.translate(-x, -y);\n }\n return {\n type: type,\n tag: 'path',\n nested: false,\n attr: attr,\n bound: bound,\n draw: drawAll(draw),\n pick: pickPath(draw),\n isect: isect || intersectPath(draw)\n };\n}\n\nvar arc = markItemPath('arc', arc$1);\n\nfunction pickArea(a, p) {\n var v = a[0].orient === 'horizontal' ? p[1] : p[0],\n z = a[0].orient === 'horizontal' ? 'y' : 'x',\n i = a.length,\n min = +Infinity,\n hit,\n d;\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n d = Math.abs(a[i][z] - v);\n if (d < min) {\n min = d;\n hit = a[i];\n }\n }\n return hit;\n}\nfunction pickLine(a, p) {\n var t = Math.pow(a[0].strokeWidth || 1, 2),\n i = a.length,\n dx,\n dy,\n dd;\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n if (dd < t) return a[i];\n }\n return null;\n}\nfunction pickTrail(a, p) {\n var i = a.length,\n dx,\n dy,\n dd;\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n dx = a[i].size || 1;\n if (dd < dx * dx) return a[i];\n }\n return null;\n}\n\nfunction markMultiItemPath (type, shape, tip) {\n function attr(emit, item) {\n var items = item.mark.items;\n if (items.length) emit('d', shape(null, items));\n }\n function bound(bounds, mark) {\n var items = mark.items;\n if (items.length === 0) {\n return bounds;\n } else {\n shape(boundContext(bounds), items);\n return boundStroke(bounds, items[0]);\n }\n }\n function draw(context, items) {\n context.beginPath();\n shape(context, items);\n }\n const hit = hitPath(draw);\n function pick(context, scene, x, y, gx, gy) {\n var items = scene.items,\n b = scene.bounds;\n if (!items || !items.length || b && !b.contains(gx, gy)) {\n return null;\n }\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return hit(context, items, x, y) ? items[0] : null;\n }\n return {\n type: type,\n tag: 'path',\n nested: true,\n attr: attr,\n bound: bound,\n draw: drawOne(draw),\n pick: pick,\n isect: intersectPoint,\n tip: tip\n };\n}\n\nvar area = markMultiItemPath('area', area$1, pickArea);\n\nfunction clip (context, scene) {\n var clip = scene.clip;\n context.save();\n if (isFunction(clip)) {\n context.beginPath();\n clip(context);\n context.clip();\n } else {\n clipGroup(context, scene.group);\n }\n}\nfunction clipGroup(context, group) {\n context.beginPath();\n hasCornerRadius(group) ? rectangle(context, group, 0, 0) : context.rect(0, 0, group.width || 0, group.height || 0);\n context.clip();\n}\n\nfunction offset$1(item) {\n const sw = value(item.strokeWidth, 1);\n return item.strokeOffset != null ? item.strokeOffset : item.stroke && sw > 0.5 && sw < 1.5 ? 0.5 - Math.abs(sw - 1) : 0;\n}\nfunction attr$5(emit, item) {\n emit('transform', translateItem(item));\n}\nfunction emitRectangle(emit, item) {\n const off = offset$1(item);\n emit('d', rectangle(null, item, off, off));\n}\nfunction background(emit, item) {\n emit('class', 'background');\n emit('aria-hidden', true);\n emitRectangle(emit, item);\n}\nfunction foreground(emit, item) {\n emit('class', 'foreground');\n emit('aria-hidden', true);\n if (item.strokeForeground) {\n emitRectangle(emit, item);\n } else {\n emit('d', '');\n }\n}\nfunction content(emit, item, renderer) {\n const url = item.clip ? clip$1(renderer, item, item) : null;\n emit('clip-path', url);\n}\nfunction bound$5(bounds, group) {\n if (!group.clip && group.items) {\n const items = group.items,\n m = items.length;\n for (let j = 0; j < m; ++j) {\n bounds.union(items[j].bounds);\n }\n }\n if ((group.clip || group.width || group.height) && !group.noBound) {\n bounds.add(0, 0).add(group.width || 0, group.height || 0);\n }\n boundStroke(bounds, group);\n return bounds.translate(group.x || 0, group.y || 0);\n}\nfunction rectanglePath(context, group, x, y) {\n const off = offset$1(group);\n context.beginPath();\n rectangle(context, group, (x || 0) + off, (y || 0) + off);\n}\nconst hitBackground = hitPath(rectanglePath);\nconst hitForeground = hitPath(rectanglePath, false);\nconst hitCorner = hitPath(rectanglePath, true);\nfunction draw$4(context, scene, bounds, markTypes) {\n visit(scene, group => {\n const gx = group.x || 0,\n gy = group.y || 0,\n fore = group.strokeForeground,\n opacity = group.opacity == null ? 1 : group.opacity;\n\n // draw group background\n if ((group.stroke || group.fill) && opacity) {\n rectanglePath(context, group, gx, gy);\n blend(context, group);\n if (group.fill && fill(context, group, opacity)) {\n context.fill();\n }\n if (group.stroke && !fore && stroke(context, group, opacity)) {\n context.stroke();\n }\n }\n\n // setup graphics context, set clip and bounds\n context.save();\n context.translate(gx, gy);\n if (group.clip) clipGroup(context, group);\n if (bounds) bounds.translate(-gx, -gy);\n\n // draw group contents\n visit(group, item => {\n if (item.marktype === 'group' || markTypes == null || markTypes.includes(item.marktype)) {\n this.draw(context, item, bounds, markTypes);\n }\n });\n\n // restore graphics context\n if (bounds) bounds.translate(gx, gy);\n context.restore();\n\n // draw group foreground\n if (fore && group.stroke && opacity) {\n rectanglePath(context, group, gx, gy);\n blend(context, group);\n if (stroke(context, group, opacity)) {\n context.stroke();\n }\n }\n });\n}\nfunction pick(context, scene, x, y, gx, gy) {\n if (scene.bounds && !scene.bounds.contains(gx, gy) || !scene.items) {\n return null;\n }\n const cx = x * context.pixelRatio,\n cy = y * context.pixelRatio;\n return pickVisit(scene, group => {\n let hit, dx, dy;\n\n // first hit test bounding box\n const b = group.bounds;\n if (b && !b.contains(gx, gy)) return;\n\n // passed bounds check, test rectangular clip\n dx = group.x || 0;\n dy = group.y || 0;\n const dw = dx + (group.width || 0),\n dh = dy + (group.height || 0),\n c = group.clip;\n if (c && (gx < dx || gx > dw || gy < dy || gy > dh)) return;\n\n // adjust coordinate system\n context.save();\n context.translate(dx, dy);\n dx = gx - dx;\n dy = gy - dy;\n\n // test background for rounded corner clip\n if (c && hasCornerRadius(group) && !hitCorner(context, group, cx, cy)) {\n context.restore();\n return null;\n }\n const fore = group.strokeForeground,\n ix = scene.interactive !== false;\n\n // hit test against group foreground\n if (ix && fore && group.stroke && hitForeground(context, group, cx, cy)) {\n context.restore();\n return group;\n }\n\n // hit test against contained marks\n hit = pickVisit(group, mark => pickMark(mark, dx, dy) ? this.pick(mark, x, y, dx, dy) : null);\n\n // hit test against group background\n if (!hit && ix && (group.fill || !fore && group.stroke) && hitBackground(context, group, cx, cy)) {\n hit = group;\n }\n\n // restore state and return\n context.restore();\n return hit || null;\n });\n}\nfunction pickMark(mark, x, y) {\n return (mark.interactive !== false || mark.marktype === 'group') && mark.bounds && mark.bounds.contains(x, y);\n}\nvar group = {\n type: 'group',\n tag: 'g',\n nested: false,\n attr: attr$5,\n bound: bound$5,\n draw: draw$4,\n pick: pick,\n isect: intersectRect,\n content: content,\n background: background,\n foreground: foreground\n};\n\nvar metadata = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'version': '1.1'\n};\n\nfunction getImage(item, renderer) {\n var image = item.image;\n if (!image || item.url && item.url !== image.url) {\n image = {\n complete: false,\n width: 0,\n height: 0\n };\n renderer.loadImage(item.url).then(image => {\n item.image = image;\n item.image.url = item.url;\n });\n }\n return image;\n}\nfunction imageWidth(item, image) {\n return item.width != null ? item.width : !image || !image.width ? 0 : item.aspect !== false && item.height ? item.height * image.width / image.height : image.width;\n}\nfunction imageHeight(item, image) {\n return item.height != null ? item.height : !image || !image.height ? 0 : item.aspect !== false && item.width ? item.width * image.height / image.width : image.height;\n}\nfunction imageXOffset(align, w) {\n return align === 'center' ? w / 2 : align === 'right' ? w : 0;\n}\nfunction imageYOffset(baseline, h) {\n return baseline === 'middle' ? h / 2 : baseline === 'bottom' ? h : 0;\n}\nfunction attr$4(emit, item, renderer) {\n const img = getImage(item, renderer),\n w = imageWidth(item, img),\n h = imageHeight(item, img),\n x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h),\n i = !img.src && img.toDataURL ? img.toDataURL() : img.src || '';\n emit('href', i, metadata['xmlns:xlink'], 'xlink:href');\n emit('transform', translate(x, y));\n emit('width', w);\n emit('height', h);\n emit('preserveAspectRatio', item.aspect === false ? 'none' : 'xMidYMid');\n}\nfunction bound$4(bounds, item) {\n const img = item.image,\n w = imageWidth(item, img),\n h = imageHeight(item, img),\n x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h);\n return bounds.set(x, y, x + w, y + h);\n}\nfunction draw$3(context, scene, bounds) {\n visit(scene, item => {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n const img = getImage(item, this);\n let w = imageWidth(item, img);\n let h = imageHeight(item, img);\n if (w === 0 || h === 0) return; // early exit\n\n let x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h),\n opacity,\n ar0,\n ar1,\n t;\n if (item.aspect !== false) {\n ar0 = img.width / img.height;\n ar1 = item.width / item.height;\n if (ar0 === ar0 && ar1 === ar1 && ar0 !== ar1) {\n if (ar1 < ar0) {\n t = w / ar0;\n y += (h - t) / 2;\n h = t;\n } else {\n t = h * ar0;\n x += (w - t) / 2;\n w = t;\n }\n }\n }\n if (img.complete || img.toDataURL) {\n blend(context, item);\n context.globalAlpha = (opacity = item.opacity) != null ? opacity : 1;\n context.imageSmoothingEnabled = item.smooth !== false;\n context.drawImage(img, x, y, w, h);\n }\n });\n}\nvar image = {\n type: 'image',\n tag: 'image',\n nested: false,\n attr: attr$4,\n bound: bound$4,\n draw: draw$3,\n pick: pick$1(),\n isect: truthy,\n // bounds check is sufficient\n get: getImage,\n xOffset: imageXOffset,\n yOffset: imageYOffset\n};\n\nvar line = markMultiItemPath('line', line$1, pickLine);\n\nfunction attr$3(emit, item) {\n var sx = item.scaleX || 1,\n sy = item.scaleY || 1;\n if (sx !== 1 || sy !== 1) {\n emit('vector-effect', 'non-scaling-stroke');\n }\n emit('transform', transformItem(item));\n emit('d', item.path);\n}\nfunction path$1(context, item) {\n var path = item.path;\n if (path == null) return true;\n var x = item.x || 0,\n y = item.y || 0,\n sx = item.scaleX || 1,\n sy = item.scaleY || 1,\n a = (item.angle || 0) * DegToRad,\n cache = item.pathCache;\n if (!cache || cache.path !== path) {\n (item.pathCache = cache = parse(path)).path = path;\n }\n if (a && context.rotate && context.translate) {\n context.translate(x, y);\n context.rotate(a);\n pathRender(context, cache, 0, 0, sx, sy);\n context.rotate(-a);\n context.translate(-x, -y);\n } else {\n pathRender(context, cache, x, y, sx, sy);\n }\n}\nfunction bound$3(bounds, item) {\n return path$1(boundContext(bounds, item.angle), item) ? bounds.set(0, 0, 0, 0) : boundStroke(bounds, item, true);\n}\nvar path$2 = {\n type: 'path',\n tag: 'path',\n nested: false,\n attr: attr$3,\n bound: bound$3,\n draw: drawAll(path$1),\n pick: pickPath(path$1),\n isect: intersectPath(path$1)\n};\n\nfunction attr$2(emit, item) {\n emit('d', rectangle(null, item));\n}\nfunction bound$2(bounds, item) {\n var x, y;\n return boundStroke(bounds.set(x = item.x || 0, y = item.y || 0, x + item.width || 0, y + item.height || 0), item);\n}\nfunction draw$2(context, item) {\n context.beginPath();\n rectangle(context, item);\n}\nvar rect = {\n type: 'rect',\n tag: 'path',\n nested: false,\n attr: attr$2,\n bound: bound$2,\n draw: drawAll(draw$2),\n pick: pickPath(draw$2),\n isect: intersectRect\n};\n\nfunction attr$1(emit, item) {\n emit('transform', translateItem(item));\n emit('x2', item.x2 != null ? item.x2 - (item.x || 0) : 0);\n emit('y2', item.y2 != null ? item.y2 - (item.y || 0) : 0);\n}\nfunction bound$1(bounds, item) {\n var x1, y1;\n return boundStroke(bounds.set(x1 = item.x || 0, y1 = item.y || 0, item.x2 != null ? item.x2 : x1, item.y2 != null ? item.y2 : y1), item);\n}\nfunction path(context, item, opacity) {\n var x1, y1, x2, y2;\n if (item.stroke && stroke(context, item, opacity)) {\n x1 = item.x || 0;\n y1 = item.y || 0;\n x2 = item.x2 != null ? item.x2 : x1;\n y2 = item.y2 != null ? item.y2 : y1;\n context.beginPath();\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n return true;\n }\n return false;\n}\nfunction draw$1(context, scene, bounds) {\n visit(scene, item => {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity && path(context, item, opacity)) {\n blend(context, item);\n context.stroke();\n }\n });\n}\nfunction hit$1(context, item, x, y) {\n if (!context.isPointInStroke) return false;\n return path(context, item, 1) && context.isPointInStroke(x, y);\n}\nvar rule = {\n type: 'rule',\n tag: 'line',\n nested: false,\n attr: attr$1,\n bound: bound$1,\n draw: draw$1,\n pick: pick$1(hit$1),\n isect: intersectRule\n};\n\nvar shape = markItemPath('shape', shape$1);\n\nvar symbol = markItemPath('symbol', symbol$1, intersectPoint);\n\n// memoize text width measurement\nconst widthCache = lruCache();\nvar textMetrics = {\n height: fontSize,\n measureWidth: measureWidth,\n estimateWidth: estimateWidth,\n width: estimateWidth,\n canvas: useCanvas\n};\nuseCanvas(true);\nfunction useCanvas(use) {\n textMetrics.width = use && context ? measureWidth : estimateWidth;\n}\n\n// make simple estimate if no canvas is available\nfunction estimateWidth(item, text) {\n return _estimateWidth(textValue(item, text), fontSize(item));\n}\nfunction _estimateWidth(text, currentFontHeight) {\n return ~~(0.8 * text.length * currentFontHeight);\n}\n\n// measure text width if canvas is available\nfunction measureWidth(item, text) {\n return fontSize(item) <= 0 || !(text = textValue(item, text)) ? 0 : _measureWidth(text, font(item));\n}\nfunction _measureWidth(text, currentFont) {\n const key = `(${currentFont}) ${text}`;\n let width = widthCache.get(key);\n if (width === undefined) {\n context.font = currentFont;\n width = context.measureText(text).width;\n widthCache.set(key, width);\n }\n return width;\n}\nfunction fontSize(item) {\n return item.fontSize != null ? +item.fontSize || 0 : 11;\n}\nfunction lineHeight(item) {\n return item.lineHeight != null ? item.lineHeight : fontSize(item) + 2;\n}\nfunction lineArray(_) {\n return isArray(_) ? _.length > 1 ? _ : _[0] : _;\n}\nfunction textLines(item) {\n return lineArray(item.lineBreak && item.text && !isArray(item.text) ? item.text.split(item.lineBreak) : item.text);\n}\nfunction multiLineOffset(item) {\n const tl = textLines(item);\n return (isArray(tl) ? tl.length - 1 : 0) * lineHeight(item);\n}\nfunction textValue(item, line) {\n const text = line == null ? '' : (line + '').trim();\n return item.limit > 0 && text.length ? truncate(item, text) : text;\n}\nfunction widthGetter(item) {\n if (textMetrics.width === measureWidth) {\n // we are using canvas\n const currentFont = font(item);\n return text => _measureWidth(text, currentFont);\n } else if (textMetrics.width === estimateWidth) {\n // we are relying on estimates\n const currentFontHeight = fontSize(item);\n return text => _estimateWidth(text, currentFontHeight);\n } else {\n // User defined textMetrics.width function in use (e.g. vl-convert)\n return text => textMetrics.width(item, text);\n }\n}\nfunction truncate(item, text) {\n var limit = +item.limit,\n width = widthGetter(item);\n if (width(text) < limit) return text;\n var ellipsis = item.ellipsis || '\\u2026',\n rtl = item.dir === 'rtl',\n lo = 0,\n hi = text.length,\n mid;\n limit -= width(ellipsis);\n if (rtl) {\n while (lo < hi) {\n mid = lo + hi >>> 1;\n if (width(text.slice(mid)) > limit) lo = mid + 1;else hi = mid;\n }\n return ellipsis + text.slice(lo);\n } else {\n while (lo < hi) {\n mid = 1 + (lo + hi >>> 1);\n if (width(text.slice(0, mid)) < limit) lo = mid;else hi = mid - 1;\n }\n return text.slice(0, lo) + ellipsis;\n }\n}\nfunction fontFamily(item, quote) {\n var font = item.font;\n return (quote && font ? String(font).replace(/\"/g, '\\'') : font) || 'sans-serif';\n}\nfunction font(item, quote) {\n return '' + (item.fontStyle ? item.fontStyle + ' ' : '') + (item.fontVariant ? item.fontVariant + ' ' : '') + (item.fontWeight ? item.fontWeight + ' ' : '') + fontSize(item) + 'px ' + fontFamily(item, quote);\n}\nfunction offset(item) {\n // perform our own font baseline calculation\n // why? not all browsers support SVG 1.1 'alignment-baseline' :(\n // this also ensures consistent layout across renderers\n var baseline = item.baseline,\n h = fontSize(item);\n return Math.round(baseline === 'top' ? 0.79 * h : baseline === 'middle' ? 0.30 * h : baseline === 'bottom' ? -0.21 * h : baseline === 'line-top' ? 0.29 * h + 0.5 * lineHeight(item) : baseline === 'line-bottom' ? 0.29 * h - 0.5 * lineHeight(item) : 0);\n}\n\nconst textAlign = {\n 'left': 'start',\n 'center': 'middle',\n 'right': 'end'\n};\nconst tempBounds = new Bounds();\nfunction anchorPoint(item) {\n var x = item.x || 0,\n y = item.y || 0,\n r = item.radius || 0,\n t;\n if (r) {\n t = (item.theta || 0) - HalfPi;\n x += r * Math.cos(t);\n y += r * Math.sin(t);\n }\n tempBounds.x1 = x;\n tempBounds.y1 = y;\n return tempBounds;\n}\nfunction attr(emit, item) {\n var dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item),\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n a = item.angle || 0,\n t;\n emit('text-anchor', textAlign[item.align] || 'start');\n if (a) {\n t = translate(x, y) + ' ' + rotate(a);\n if (dx || dy) t += ' ' + translate(dx, dy);\n } else {\n t = translate(x + dx, y + dy);\n }\n emit('transform', t);\n}\nfunction bound(bounds, item, mode) {\n var h = textMetrics.height(item),\n a = item.align,\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item) - Math.round(0.8 * h),\n // use 4/5 offset\n tl = textLines(item),\n w;\n\n // get dimensions\n if (isArray(tl)) {\n // multi-line text\n h += lineHeight(item) * (tl.length - 1);\n w = tl.reduce((w, t) => Math.max(w, textMetrics.width(item, t)), 0);\n } else {\n // single-line text\n w = textMetrics.width(item, tl);\n }\n\n // horizontal alignment\n if (a === 'center') {\n dx -= w / 2;\n } else if (a === 'right') {\n dx -= w;\n } else ;\n bounds.set(dx += x, dy += y, dx + w, dy + h);\n if (item.angle && !mode) {\n bounds.rotate(item.angle * DegToRad, x, y);\n } else if (mode === 2) {\n return bounds.rotatedPoints(item.angle * DegToRad, x, y);\n }\n return bounds;\n}\nfunction draw(context, scene, bounds) {\n visit(scene, item => {\n var opacity = item.opacity == null ? 1 : item.opacity,\n p,\n x,\n y,\n i,\n lh,\n tl,\n str;\n if (bounds && !bounds.intersects(item.bounds) ||\n // bounds check\n opacity === 0 || item.fontSize <= 0 || item.text == null || item.text.length === 0) return;\n context.font = font(item);\n context.textAlign = item.align || 'left';\n p = anchorPoint(item);\n x = p.x1, y = p.y1;\n if (item.angle) {\n context.save();\n context.translate(x, y);\n context.rotate(item.angle * DegToRad);\n x = y = 0; // reset x, y\n }\n\n x += item.dx || 0;\n y += (item.dy || 0) + offset(item);\n tl = textLines(item);\n blend(context, item);\n if (isArray(tl)) {\n lh = lineHeight(item);\n for (i = 0; i < tl.length; ++i) {\n str = textValue(item, tl[i]);\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n y += lh;\n }\n } else {\n str = textValue(item, tl);\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n }\n if (item.angle) context.restore();\n });\n}\nfunction hit(context, item, x, y, gx, gy) {\n if (item.fontSize <= 0) return false;\n if (!item.angle) return true; // bounds sufficient if no rotation\n\n // project point into space of unrotated bounds\n var p = anchorPoint(item),\n ax = p.x1,\n ay = p.y1,\n b = bound(tempBounds, item, 1),\n a = -item.angle * DegToRad,\n cos = Math.cos(a),\n sin = Math.sin(a),\n px = cos * gx - sin * gy + (ax - cos * ax + sin * ay),\n py = sin * gx + cos * gy + (ay - sin * ax - cos * ay);\n return b.contains(px, py);\n}\nfunction intersectText(item, box) {\n const p = bound(tempBounds, item, 2);\n return intersectBoxLine(box, p[0], p[1], p[2], p[3]) || intersectBoxLine(box, p[0], p[1], p[4], p[5]) || intersectBoxLine(box, p[4], p[5], p[6], p[7]) || intersectBoxLine(box, p[2], p[3], p[6], p[7]);\n}\nvar text = {\n type: 'text',\n tag: 'text',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick$1(hit),\n isect: intersectText\n};\n\nvar trail = markMultiItemPath('trail', trail$1, pickTrail);\n\nvar Marks = {\n arc: arc,\n area: area,\n group: group,\n image: image,\n line: line,\n path: path$2,\n rect: rect,\n rule: rule,\n shape: shape,\n symbol: symbol,\n text: text,\n trail: trail\n};\n\nfunction boundItem (item, func, opt) {\n var type = Marks[item.mark.marktype],\n bound = func || type.bound;\n if (type.nested) item = item.mark;\n return bound(item.bounds || (item.bounds = new Bounds()), item, opt);\n}\n\nvar DUMMY = {\n mark: null\n};\nfunction boundMark (mark, bounds, opt) {\n var type = Marks[mark.marktype],\n bound = type.bound,\n items = mark.items,\n hasItems = items && items.length,\n i,\n n,\n item,\n b;\n if (type.nested) {\n if (hasItems) {\n item = items[0];\n } else {\n // no items, fake it\n DUMMY.mark = mark;\n item = DUMMY;\n }\n b = boundItem(item, bound, opt);\n bounds = bounds && bounds.union(b) || b;\n return bounds;\n }\n bounds = bounds || mark.bounds && mark.bounds.clear() || new Bounds();\n if (hasItems) {\n for (i = 0, n = items.length; i < n; ++i) {\n bounds.union(boundItem(items[i], bound, opt));\n }\n }\n return mark.bounds = bounds;\n}\n\nconst keys = ['marktype', 'name', 'role', 'interactive', 'clip', 'items', 'zindex', 'x', 'y', 'width', 'height', 'align', 'baseline',\n// layout\n'fill', 'fillOpacity', 'opacity', 'blend',\n// fill\n'stroke', 'strokeOpacity', 'strokeWidth', 'strokeCap',\n// stroke\n'strokeDash', 'strokeDashOffset',\n// stroke dash\n'strokeForeground', 'strokeOffset',\n// group\n'startAngle', 'endAngle', 'innerRadius', 'outerRadius',\n// arc\n'cornerRadius', 'padAngle',\n// arc, rect\n'cornerRadiusTopLeft', 'cornerRadiusTopRight',\n// rect, group\n'cornerRadiusBottomLeft', 'cornerRadiusBottomRight', 'interpolate', 'tension', 'orient', 'defined',\n// area, line\n'url', 'aspect', 'smooth',\n// image\n'path', 'scaleX', 'scaleY',\n// path\n'x2', 'y2',\n// rule\n'size', 'shape',\n// symbol\n'text', 'angle', 'theta', 'radius', 'dir', 'dx', 'dy',\n// text\n'ellipsis', 'limit', 'lineBreak', 'lineHeight', 'font', 'fontSize', 'fontWeight', 'fontStyle', 'fontVariant',\n// font\n'description', 'aria', 'ariaRole', 'ariaRoleDescription' // aria\n];\n\nfunction sceneToJSON(scene, indent) {\n return JSON.stringify(scene, keys, indent);\n}\nfunction sceneFromJSON(json) {\n const scene = typeof json === 'string' ? JSON.parse(json) : json;\n return initialize(scene);\n}\nfunction initialize(scene) {\n var type = scene.marktype,\n items = scene.items,\n parent,\n i,\n n;\n if (items) {\n for (i = 0, n = items.length; i < n; ++i) {\n parent = type ? 'mark' : 'group';\n items[i][parent] = scene;\n if (items[i].zindex) items[i][parent].zdirty = true;\n if ('group' === (type || parent)) initialize(items[i]);\n }\n }\n if (type) boundMark(scene);\n return scene;\n}\n\nfunction Scenegraph(scene) {\n if (arguments.length) {\n this.root = sceneFromJSON(scene);\n } else {\n this.root = createMark({\n marktype: 'group',\n name: 'root',\n role: 'frame'\n });\n this.root.items = [new GroupItem(this.root)];\n }\n}\nScenegraph.prototype = {\n toJSON(indent) {\n return sceneToJSON(this.root, indent || 0);\n },\n mark(markdef, group, index) {\n group = group || this.root.items[0];\n const mark = createMark(markdef, group);\n group.items[index] = mark;\n if (mark.zindex) mark.group.zdirty = true;\n return mark;\n }\n};\nfunction createMark(def, group) {\n const mark = {\n bounds: new Bounds(),\n clip: !!def.clip,\n group: group,\n interactive: def.interactive === false ? false : true,\n items: [],\n marktype: def.marktype,\n name: def.name || undefined,\n role: def.role || undefined,\n zindex: def.zindex || 0\n };\n\n // add accessibility properties if defined\n if (def.aria != null) {\n mark.aria = def.aria;\n }\n if (def.description) {\n mark.description = def.description;\n }\n return mark;\n}\n\n// create a new DOM element\nfunction domCreate(doc, tag, ns) {\n if (!doc && typeof document !== 'undefined' && document.createElement) {\n doc = document;\n }\n return doc ? ns ? doc.createElementNS(ns, tag) : doc.createElement(tag) : null;\n}\n\n// find first child element with matching tag\nfunction domFind(el, tag) {\n tag = tag.toLowerCase();\n var nodes = el.childNodes,\n i = 0,\n n = nodes.length;\n for (; i < n; ++i) if (nodes[i].tagName.toLowerCase() === tag) {\n return nodes[i];\n }\n}\n\n// retrieve child element at given index\n// create & insert if doesn't exist or if tags do not match\nfunction domChild(el, index, tag, ns) {\n var a = el.childNodes[index],\n b;\n if (!a || a.tagName.toLowerCase() !== tag.toLowerCase()) {\n b = a || null;\n a = domCreate(el.ownerDocument, tag, ns);\n el.insertBefore(a, b);\n }\n return a;\n}\n\n// remove all child elements at or above the given index\nfunction domClear(el, index) {\n var nodes = el.childNodes,\n curr = nodes.length;\n while (curr > index) el.removeChild(nodes[--curr]);\n return el;\n}\n\n// generate css class name for mark\nfunction cssClass(mark) {\n return 'mark-' + mark.marktype + (mark.role ? ' role-' + mark.role : '') + (mark.name ? ' ' + mark.name : '');\n}\n\nfunction point (event, el) {\n const rect = el.getBoundingClientRect();\n return [event.clientX - rect.left - (el.clientLeft || 0), event.clientY - rect.top - (el.clientTop || 0)];\n}\n\nfunction resolveItem (item, event, el, origin) {\n var mark = item && item.mark,\n mdef,\n p;\n if (mark && (mdef = Marks[mark.marktype]).tip) {\n p = point(event, el);\n p[0] -= origin[0];\n p[1] -= origin[1];\n while (item = item.mark.group) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n }\n item = mdef.tip(mark.items, p);\n }\n return item;\n}\n\n/**\n * Create a new Handler instance.\n * @param {object} [customLoader] - Optional loader instance for\n * href URL sanitization. If not specified, a standard loader\n * instance will be generated.\n * @param {function} [customTooltip] - Optional tooltip handler\n * function for custom tooltip display.\n * @constructor\n */\nfunction Handler(customLoader, customTooltip) {\n this._active = null;\n this._handlers = {};\n this._loader = customLoader || loader();\n this._tooltip = customTooltip || defaultTooltip;\n}\n\n// The default tooltip display handler.\n// Sets the HTML title attribute on the visualization container.\nfunction defaultTooltip(handler, event, item, value) {\n handler.element().setAttribute('title', value || '');\n}\nHandler.prototype = {\n /**\n * Initialize a new Handler instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {object} [obj] - Optional context object that should serve as\n * the \"this\" context for event callbacks.\n * @return {Handler} - This handler instance.\n */\n initialize(el, origin, obj) {\n this._el = el;\n this._obj = obj || null;\n return this.origin(origin);\n },\n /**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\n element() {\n return this._el;\n },\n /**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\n canvas() {\n return this._el && this._el.firstChild;\n },\n /**\n * Get / set the origin coordinates of the visualization.\n */\n origin(origin) {\n if (arguments.length) {\n this._origin = origin || [0, 0];\n return this;\n } else {\n return this._origin.slice();\n }\n },\n /**\n * Get / set the scenegraph root.\n */\n scene(scene) {\n if (!arguments.length) return this._scene;\n this._scene = scene;\n return this;\n },\n /**\n * Add an event handler. Subclasses should override this method.\n */\n on( /*type, handler*/) {},\n /**\n * Remove an event handler. Subclasses should override this method.\n */\n off( /*type, handler*/) {},\n /**\n * Utility method for finding the array index of an event handler.\n * @param {Array} h - An array of registered event handlers.\n * @param {string} type - The event type.\n * @param {function} handler - The event handler instance to find.\n * @return {number} - The handler's array index or -1 if not registered.\n */\n _handlerIndex(h, type, handler) {\n for (let i = h ? h.length : 0; --i >= 0;) {\n if (h[i].type === type && (!handler || h[i].handler === handler)) {\n return i;\n }\n }\n return -1;\n },\n /**\n * Returns an array with registered event handlers.\n * @param {string} [type] - The event type to query. Any annotations\n * are ignored; for example, for the argument \"click.foo\", \".foo\" will\n * be ignored and the method returns all \"click\" handlers. If type is\n * null or unspecified, this method returns handlers for all types.\n * @return {Array} - A new array containing all registered event handlers.\n */\n handlers(type) {\n const h = this._handlers,\n a = [];\n if (type) {\n a.push(...h[this.eventName(type)]);\n } else {\n for (const k in h) {\n a.push(...h[k]);\n }\n }\n return a;\n },\n /**\n * Parses an event name string to return the specific event type.\n * For example, given \"click.foo\" returns \"click\"\n * @param {string} name - The input event type string.\n * @return {string} - A string with the event type only.\n */\n eventName(name) {\n const i = name.indexOf('.');\n return i < 0 ? name : name.slice(0, i);\n },\n /**\n * Handle hyperlink navigation in response to an item.href value.\n * @param {Event} event - The event triggering hyperlink navigation.\n * @param {Item} item - The scenegraph item.\n * @param {string} href - The URL to navigate to.\n */\n handleHref(event, item, href) {\n this._loader.sanitize(href, {\n context: 'href'\n }).then(opt => {\n const e = new MouseEvent(event.type, event),\n a = domCreate(null, 'a');\n for (const name in opt) a.setAttribute(name, opt[name]);\n a.dispatchEvent(e);\n }).catch(() => {/* do nothing */});\n },\n /**\n * Handle tooltip display in response to an item.tooltip value.\n * @param {Event} event - The event triggering tooltip display.\n * @param {Item} item - The scenegraph item.\n * @param {boolean} show - A boolean flag indicating whether\n * to show or hide a tooltip for the given item.\n */\n handleTooltip(event, item, show) {\n if (item && item.tooltip != null) {\n item = resolveItem(item, event, this.canvas(), this._origin);\n const value = show && item && item.tooltip || null;\n this._tooltip.call(this._obj, this, event, item, value);\n }\n },\n /**\n * Returns the size of a scenegraph item and its position relative\n * to the viewport.\n * @param {Item} item - The scenegraph item.\n * @return {object} - A bounding box object (compatible with the\n * DOMRect type) consisting of x, y, width, heigh, top, left,\n * right, and bottom properties.\n */\n getItemBoundingClientRect(item) {\n const el = this.canvas();\n if (!el) return;\n const rect = el.getBoundingClientRect(),\n origin = this._origin,\n bounds = item.bounds,\n width = bounds.width(),\n height = bounds.height();\n let x = bounds.x1 + origin[0] + rect.left,\n y = bounds.y1 + origin[1] + rect.top;\n\n // translate coordinate for each parent group\n while (item.mark && (item = item.mark.group)) {\n x += item.x || 0;\n y += item.y || 0;\n }\n\n // return DOMRect-compatible bounding box\n return {\n x,\n y,\n width,\n height,\n left: x,\n top: y,\n right: x + width,\n bottom: y + height\n };\n }\n};\n\n/**\n * Create a new Renderer instance.\n * @param {object} [loader] - Optional loader instance for\n * image and href URL sanitization. If not specified, a\n * standard loader instance will be generated.\n * @constructor\n */\nfunction Renderer(loader) {\n this._el = null;\n this._bgcolor = null;\n this._loader = new ResourceLoader(loader);\n}\nRenderer.prototype = {\n /**\n * Initialize a new Renderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n this._el = el;\n return this.resize(width, height, origin, scaleFactor);\n },\n /**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\n element() {\n return this._el;\n },\n /**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\n canvas() {\n return this._el && this._el.firstChild;\n },\n /**\n * Get / set the background color.\n */\n background(bgcolor) {\n if (arguments.length === 0) return this._bgcolor;\n this._bgcolor = bgcolor;\n return this;\n },\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n this._width = width;\n this._height = height;\n this._origin = origin || [0, 0];\n this._scale = scaleFactor || 1;\n return this;\n },\n /**\n * Report a dirty item whose bounds should be redrawn.\n * This base class method does nothing. Subclasses that perform\n * incremental should implement this method.\n * @param {Item} item - The dirty item whose bounds should be redrawn.\n */\n dirty( /*item*/) {},\n /**\n * Render an input scenegraph, potentially with a set of dirty items.\n * This method will perform an immediate rendering with available resources.\n * The renderer may also need to perform image loading to perform a complete\n * render. This process can lead to asynchronous re-rendering of the scene\n * after this method returns. To receive notification when rendering is\n * complete, use the renderAsync method instead.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @param {Array} markTypes - Array of the mark types to render.\n * If undefined, render all mark types\n * @return {Renderer} - This renderer instance.\n */\n render(scene, markTypes) {\n const r = this;\n\n // bind arguments into a render call, and cache it\n // this function may be subsequently called for async redraw\n r._call = function () {\n r._render(scene, markTypes);\n };\n\n // invoke the renderer\n r._call();\n\n // clear the cached call for garbage collection\n // async redraws will stash their own copy\n r._call = null;\n return r;\n },\n /**\n * Internal rendering method. Renderer subclasses should override this\n * method to actually perform rendering.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @param {Array} markTypes - Array of the mark types to render.\n * If undefined, render all mark types\n */\n _render( /*scene, markTypes*/\n ) {\n // subclasses to override\n },\n /**\n * Asynchronous rendering method. Similar to render, but returns a Promise\n * that resolves when all rendering is completed. Sometimes a renderer must\n * perform image loading to get a complete rendering. The returned\n * Promise will not resolve until this process completes.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @param {Array} markTypes - Array of the mark types to render.\n * If undefined, render all mark types\n * @return {Promise} - A Promise that resolves when rendering is complete.\n */\n renderAsync(scene, markTypes) {\n const r = this.render(scene, markTypes);\n return this._ready ? this._ready.then(() => r) : Promise.resolve(r);\n },\n /**\n * Internal method for asynchronous resource loading.\n * Proxies method calls to the ImageLoader, and tracks loading\n * progress to invoke a re-render once complete.\n * @param {string} method - The method name to invoke on the ImageLoader.\n * @param {string} uri - The URI for the requested resource.\n * @return {Promise} - A Promise that resolves to the requested resource.\n */\n _load(method, uri) {\n var r = this,\n p = r._loader[method](uri);\n if (!r._ready) {\n // re-render the scene when loading completes\n const call = r._call;\n r._ready = r._loader.ready().then(redraw => {\n if (redraw) call();\n r._ready = null;\n });\n }\n return p;\n },\n /**\n * Sanitize a URL to include as a hyperlink in the rendered scene.\n * This method proxies a call to ImageLoader.sanitizeURL, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string to sanitize.\n * @return {Promise} - A Promise that resolves to the sanitized URL.\n */\n sanitizeURL(uri) {\n return this._load('sanitizeURL', uri);\n },\n /**\n * Requests an image to include in the rendered scene.\n * This method proxies a call to ImageLoader.loadImage, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string of the image.\n * @return {Promise} - A Promise that resolves to the loaded Image.\n */\n loadImage(uri) {\n return this._load('loadImage', uri);\n }\n};\n\nconst KeyDownEvent = 'keydown';\nconst KeyPressEvent = 'keypress';\nconst KeyUpEvent = 'keyup';\nconst DragEnterEvent = 'dragenter';\nconst DragLeaveEvent = 'dragleave';\nconst DragOverEvent = 'dragover';\nconst PointerDownEvent = 'pointerdown';\nconst PointerUpEvent = 'pointerup';\nconst PointerMoveEvent = 'pointermove';\nconst PointerOutEvent = 'pointerout';\nconst PointerOverEvent = 'pointerover';\nconst ClickEvent = 'click';\nconst DoubleClickEvent = 'dblclick';\nconst WheelEvent = 'wheel';\nconst MouseWheelEvent = 'mousewheel';\nconst TouchStartEvent = 'touchstart';\nconst TouchMoveEvent = 'touchmove';\nconst TouchEndEvent = 'touchend';\nconst Events = [KeyDownEvent, KeyPressEvent, KeyUpEvent, DragEnterEvent, DragLeaveEvent, DragOverEvent, PointerDownEvent, PointerUpEvent, PointerMoveEvent, PointerOutEvent, PointerOverEvent, ClickEvent, DoubleClickEvent, WheelEvent, MouseWheelEvent, TouchStartEvent, TouchMoveEvent, TouchEndEvent];\nconst TooltipShowEvent = PointerMoveEvent;\nconst TooltipHideEvent = PointerOutEvent;\nconst HrefEvent = ClickEvent;\n\nfunction CanvasHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n this._down = null;\n this._touch = null;\n this._first = true;\n this._events = {};\n}\nconst eventBundle = type => type === TouchStartEvent || type === TouchMoveEvent || type === TouchEndEvent ? [TouchStartEvent, TouchMoveEvent, TouchEndEvent] : [type];\n\n// lazily add listeners to the canvas as needed\nfunction eventListenerCheck(handler, type) {\n eventBundle(type).forEach(_ => addEventListener(handler, _));\n}\nfunction addEventListener(handler, type) {\n const canvas = handler.canvas();\n if (canvas && !handler._events[type]) {\n handler._events[type] = 1;\n canvas.addEventListener(type, handler[type] ? evt => handler[type](evt) : evt => handler.fire(type, evt));\n }\n}\nfunction move(moveEvent, overEvent, outEvent) {\n return function (evt) {\n const a = this._active,\n p = this.pickEvent(evt);\n if (p === a) {\n // active item and picked item are the same\n this.fire(moveEvent, evt); // fire move\n } else {\n // active item and picked item are different\n if (!a || !a.exit) {\n // fire out for prior active item\n // suppress if active item was removed from scene\n this.fire(outEvent, evt);\n }\n this._active = p; // set new active item\n this.fire(overEvent, evt); // fire over for new active item\n this.fire(moveEvent, evt); // fire move for new active item\n }\n };\n}\n\nfunction inactive(type) {\n return function (evt) {\n this.fire(type, evt);\n this._active = null;\n };\n}\ninherits(CanvasHandler, Handler, {\n initialize(el, origin, obj) {\n this._canvas = el && domFind(el, 'canvas');\n\n // add minimal events required for proper state management\n [ClickEvent, PointerDownEvent, PointerMoveEvent, PointerOutEvent, DragLeaveEvent].forEach(type => eventListenerCheck(this, type));\n return Handler.prototype.initialize.call(this, el, origin, obj);\n },\n // return the backing canvas instance\n canvas() {\n return this._canvas;\n },\n // retrieve the current canvas context\n context() {\n return this._canvas.getContext('2d');\n },\n // supported events\n events: Events,\n // to keep old versions of firefox happy\n DOMMouseScroll(evt) {\n this.fire(MouseWheelEvent, evt);\n },\n pointermove: move(PointerMoveEvent, PointerOverEvent, PointerOutEvent),\n dragover: move(DragOverEvent, DragEnterEvent, DragLeaveEvent),\n pointerout: inactive(PointerOutEvent),\n dragleave: inactive(DragLeaveEvent),\n pointerdown(evt) {\n this._down = this._active;\n this.fire(PointerDownEvent, evt);\n },\n click(evt) {\n if (this._down === this._active) {\n this.fire(ClickEvent, evt);\n this._down = null;\n }\n },\n touchstart(evt) {\n this._touch = this.pickEvent(evt.changedTouches[0]);\n if (this._first) {\n this._active = this._touch;\n this._first = false;\n }\n this.fire(TouchStartEvent, evt, true);\n },\n touchmove(evt) {\n this.fire(TouchMoveEvent, evt, true);\n },\n touchend(evt) {\n this.fire(TouchEndEvent, evt, true);\n this._touch = null;\n },\n // fire an event\n fire(type, evt, touch) {\n const a = touch ? this._touch : this._active,\n h = this._handlers[type];\n\n // set event type relative to scenegraph items\n evt.vegaType = type;\n\n // handle hyperlinks and tooltips first\n if (type === HrefEvent && a && a.href) {\n this.handleHref(evt, a, a.href);\n } else if (type === TooltipShowEvent || type === TooltipHideEvent) {\n this.handleTooltip(evt, a, type !== TooltipHideEvent);\n }\n\n // invoke all registered handlers\n if (h) {\n for (let i = 0, len = h.length; i < len; ++i) {\n h[i].handler.call(this._obj, evt, a);\n }\n }\n },\n // add an event handler\n on(type, handler) {\n const name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n if (i < 0) {\n eventListenerCheck(this, type);\n (h[name] || (h[name] = [])).push({\n type: type,\n handler: handler\n });\n }\n return this;\n },\n // remove an event handler\n off(type, handler) {\n const name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n if (i >= 0) {\n h.splice(i, 1);\n }\n return this;\n },\n pickEvent(evt) {\n const p = point(evt, this._canvas),\n o = this._origin;\n return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]);\n },\n // find the scenegraph item at the current pointer position\n // x, y -- the absolute x, y pointer coordinates on the canvas element\n // gx, gy -- the relative coordinates within the current group\n pick(scene, x, y, gx, gy) {\n const g = this.context(),\n mark = Marks[scene.marktype];\n return mark.pick.call(this, g, scene, x, y, gx, gy);\n }\n});\n\nfunction devicePixelRatio() {\n return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n}\nvar pixelRatio = devicePixelRatio();\nfunction resize (canvas, width, height, origin, scaleFactor, opt) {\n const inDOM = typeof HTMLElement !== 'undefined' && canvas instanceof HTMLElement && canvas.parentNode != null,\n context = canvas.getContext('2d'),\n ratio = inDOM ? pixelRatio : scaleFactor;\n canvas.width = width * ratio;\n canvas.height = height * ratio;\n for (const key in opt) {\n context[key] = opt[key];\n }\n if (inDOM && ratio !== 1) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n context.pixelRatio = ratio;\n context.setTransform(ratio, 0, 0, ratio, ratio * origin[0], ratio * origin[1]);\n return canvas;\n}\n\nfunction CanvasRenderer(loader) {\n Renderer.call(this, loader);\n this._options = {};\n this._redraw = false;\n this._dirty = new Bounds();\n this._tempb = new Bounds();\n}\nconst base$2 = Renderer.prototype;\nconst viewBounds = (origin, width, height) => new Bounds().set(0, 0, width, height).translate(-origin[0], -origin[1]);\nfunction clipToBounds(g, b, origin) {\n // expand bounds by 1 pixel, then round to pixel boundaries\n b.expand(1).round();\n\n // align to base pixel grid in case of non-integer scaling (#2425)\n if (g.pixelRatio % 1) {\n b.scale(g.pixelRatio).round().scale(1 / g.pixelRatio);\n }\n\n // to avoid artifacts translate if origin has fractional pixels\n b.translate(-(origin[0] % 1), -(origin[1] % 1));\n\n // set clip path\n g.beginPath();\n g.rect(b.x1, b.y1, b.width(), b.height());\n g.clip();\n return b;\n}\ninherits(CanvasRenderer, Renderer, {\n initialize(el, width, height, origin, scaleFactor, options) {\n this._options = options || {};\n this._canvas = this._options.externalContext ? null : canvas(1, 1, this._options.type); // instantiate a small canvas\n\n if (el && this._canvas) {\n domClear(el, 0).appendChild(this._canvas);\n this._canvas.setAttribute('class', 'marks');\n }\n\n // this method will invoke resize to size the canvas appropriately\n return base$2.initialize.call(this, el, width, height, origin, scaleFactor);\n },\n resize(width, height, origin, scaleFactor) {\n base$2.resize.call(this, width, height, origin, scaleFactor);\n if (this._canvas) {\n // configure canvas size and transform\n resize(this._canvas, this._width, this._height, this._origin, this._scale, this._options.context);\n } else {\n // external context needs to be scaled and positioned to origin\n const ctx = this._options.externalContext;\n if (!ctx) error('CanvasRenderer is missing a valid canvas or context');\n ctx.scale(this._scale, this._scale);\n ctx.translate(this._origin[0], this._origin[1]);\n }\n this._redraw = true;\n return this;\n },\n canvas() {\n return this._canvas;\n },\n context() {\n return this._options.externalContext || (this._canvas ? this._canvas.getContext('2d') : null);\n },\n dirty(item) {\n const b = this._tempb.clear().union(item.bounds);\n let g = item.mark.group;\n while (g) {\n b.translate(g.x || 0, g.y || 0);\n g = g.mark.group;\n }\n this._dirty.union(b);\n },\n _render(scene, markTypes) {\n const g = this.context(),\n o = this._origin,\n w = this._width,\n h = this._height,\n db = this._dirty,\n vb = viewBounds(o, w, h);\n\n // setup\n g.save();\n const b = this._redraw || db.empty() ? (this._redraw = false, vb.expand(1)) : clipToBounds(g, vb.intersect(db), o);\n this.clear(-o[0], -o[1], w, h);\n\n // render\n this.draw(g, scene, b, markTypes);\n\n // takedown\n g.restore();\n db.clear();\n return this;\n },\n draw(ctx, scene, bounds, markTypes) {\n if (scene.marktype !== 'group' && markTypes != null && !markTypes.includes(scene.marktype)) {\n return;\n }\n const mark = Marks[scene.marktype];\n if (scene.clip) clip(ctx, scene);\n mark.draw.call(this, ctx, scene, bounds, markTypes);\n if (scene.clip) ctx.restore();\n },\n clear(x, y, w, h) {\n const opt = this._options,\n g = this.context();\n if (opt.type !== 'pdf' && !opt.externalContext) {\n // calling clear rect voids vector output in pdf mode\n // and could remove external context content (#2615)\n g.clearRect(x, y, w, h);\n }\n if (this._bgcolor != null) {\n g.fillStyle = this._bgcolor;\n g.fillRect(x, y, w, h);\n }\n }\n});\n\nfunction SVGHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n const h = this;\n h._hrefHandler = listener(h, (evt, item) => {\n if (item && item.href) h.handleHref(evt, item, item.href);\n });\n h._tooltipHandler = listener(h, (evt, item) => {\n h.handleTooltip(evt, item, evt.type !== TooltipHideEvent);\n });\n}\n\n// wrap an event listener for the SVG DOM\nconst listener = (context, handler) => evt => {\n let item = evt.target.__data__;\n item = Array.isArray(item) ? item[0] : item;\n evt.vegaType = evt.type;\n handler.call(context._obj, evt, item);\n};\ninherits(SVGHandler, Handler, {\n initialize(el, origin, obj) {\n let svg = this._svg;\n if (svg) {\n svg.removeEventListener(HrefEvent, this._hrefHandler);\n svg.removeEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.removeEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n this._svg = svg = el && domFind(el, 'svg');\n if (svg) {\n svg.addEventListener(HrefEvent, this._hrefHandler);\n svg.addEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.addEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n return Handler.prototype.initialize.call(this, el, origin, obj);\n },\n canvas() {\n return this._svg;\n },\n // add an event handler\n on(type, handler) {\n const name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n if (i < 0) {\n const x = {\n type,\n handler,\n listener: listener(this, handler)\n };\n (h[name] || (h[name] = [])).push(x);\n if (this._svg) {\n this._svg.addEventListener(name, x.listener);\n }\n }\n return this;\n },\n // remove an event handler\n off(type, handler) {\n const name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n if (i >= 0) {\n if (this._svg) {\n this._svg.removeEventListener(name, h[i].listener);\n }\n h.splice(i, 1);\n }\n return this;\n }\n});\n\nconst ARIA_HIDDEN = 'aria-hidden';\nconst ARIA_LABEL = 'aria-label';\nconst ARIA_ROLE = 'role';\nconst ARIA_ROLEDESCRIPTION = 'aria-roledescription';\nconst GRAPHICS_OBJECT = 'graphics-object';\nconst GRAPHICS_SYMBOL = 'graphics-symbol';\nconst bundle = (role, roledesc, label) => ({\n [ARIA_ROLE]: role,\n [ARIA_ROLEDESCRIPTION]: roledesc,\n [ARIA_LABEL]: label || undefined\n});\n\n// these roles are covered by related roles\n// we can ignore them, no need to generate attributes\nconst AriaIgnore = toSet(['axis-domain', 'axis-grid', 'axis-label', 'axis-tick', 'axis-title', 'legend-band', 'legend-entry', 'legend-gradient', 'legend-label', 'legend-title', 'legend-symbol', 'title']);\n\n// aria attribute generators for guide roles\nconst AriaGuides = {\n 'axis': {\n desc: 'axis',\n caption: axisCaption\n },\n 'legend': {\n desc: 'legend',\n caption: legendCaption\n },\n 'title-text': {\n desc: 'title',\n caption: item => `Title text '${titleCaption(item)}'`\n },\n 'title-subtitle': {\n desc: 'subtitle',\n caption: item => `Subtitle text '${titleCaption(item)}'`\n }\n};\n\n// aria properties generated for mark item encoding channels\nconst AriaEncode = {\n ariaRole: ARIA_ROLE,\n ariaRoleDescription: ARIA_ROLEDESCRIPTION,\n description: ARIA_LABEL\n};\nfunction ariaItemAttributes(emit, item) {\n const hide = item.aria === false;\n emit(ARIA_HIDDEN, hide || undefined);\n if (hide || item.description == null) {\n for (const prop in AriaEncode) {\n emit(AriaEncode[prop], undefined);\n }\n } else {\n const type = item.mark.marktype;\n emit(ARIA_LABEL, item.description);\n emit(ARIA_ROLE, item.ariaRole || (type === 'group' ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL));\n emit(ARIA_ROLEDESCRIPTION, item.ariaRoleDescription || `${type} mark`);\n }\n}\nfunction ariaMarkAttributes(mark) {\n return mark.aria === false ? {\n [ARIA_HIDDEN]: true\n } : AriaIgnore[mark.role] ? null : AriaGuides[mark.role] ? ariaGuide(mark, AriaGuides[mark.role]) : ariaMark(mark);\n}\nfunction ariaMark(mark) {\n const type = mark.marktype;\n const recurse = type === 'group' || type === 'text' || mark.items.some(_ => _.description != null && _.aria !== false);\n return bundle(recurse ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL, `${type} mark container`, mark.description);\n}\nfunction ariaGuide(mark, opt) {\n try {\n const item = mark.items[0],\n caption = opt.caption || (() => '');\n return bundle(opt.role || GRAPHICS_SYMBOL, opt.desc, item.description || caption(item));\n } catch (err) {\n return null;\n }\n}\nfunction titleCaption(item) {\n return array(item.text).join(' ');\n}\nfunction axisCaption(item) {\n const datum = item.datum,\n orient = item.orient,\n title = datum.title ? extractTitle(item) : null,\n ctx = item.context,\n scale = ctx.scales[datum.scale].value,\n locale = ctx.dataflow.locale(),\n type = scale.type,\n xy = orient === 'left' || orient === 'right' ? 'Y' : 'X';\n return `${xy}-axis` + (title ? ` titled '${title}'` : '') + ` for a ${isDiscrete(type) ? 'discrete' : type} scale` + ` with ${domainCaption(locale, scale, item)}`;\n}\nfunction legendCaption(item) {\n const datum = item.datum,\n title = datum.title ? extractTitle(item) : null,\n type = `${datum.type || ''} legend`.trim(),\n scales = datum.scales,\n props = Object.keys(scales),\n ctx = item.context,\n scale = ctx.scales[scales[props[0]]].value,\n locale = ctx.dataflow.locale();\n return capitalize(type) + (title ? ` titled '${title}'` : '') + ` for ${channelCaption(props)}` + ` with ${domainCaption(locale, scale, item)}`;\n}\nfunction extractTitle(item) {\n try {\n return array(peek(item.items).items[0].text).join(' ');\n } catch (err) {\n return null;\n }\n}\nfunction channelCaption(props) {\n props = props.map(p => p + (p === 'fill' || p === 'stroke' ? ' color' : ''));\n return props.length < 2 ? props[0] : props.slice(0, -1).join(', ') + ' and ' + peek(props);\n}\nfunction capitalize(s) {\n return s.length ? s[0].toUpperCase() + s.slice(1) : s;\n}\n\nconst innerText = val => (val + '').replace(/&/g, '&').replace(//g, '>');\nconst attrText = val => innerText(val).replace(/\"/g, '"').replace(/\\t/g, ' ').replace(/\\n/g, ' ').replace(/\\r/g, ' ');\nfunction markup() {\n let buf = '',\n outer = '',\n inner = '';\n const stack = [],\n clear = () => outer = inner = '',\n push = tag => {\n if (outer) {\n buf += `${outer}>${inner}`;\n clear();\n }\n stack.push(tag);\n },\n attr = (name, value) => {\n if (value != null) outer += ` ${name}=\"${attrText(value)}\"`;\n return m;\n },\n m = {\n open(tag) {\n push(tag);\n outer = '<' + tag;\n for (var _len = arguments.length, attrs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n attrs[_key - 1] = arguments[_key];\n }\n for (const set of attrs) {\n for (const key in set) attr(key, set[key]);\n }\n return m;\n },\n close() {\n const tag = stack.pop();\n if (outer) {\n buf += outer + (inner ? `>${inner}` : '/>');\n } else {\n buf += ``;\n }\n clear();\n return m;\n },\n attr,\n text: t => (inner += innerText(t), m),\n toString: () => buf\n };\n return m;\n}\nconst serializeXML = node => _serialize(markup(), node) + '';\nfunction _serialize(m, node) {\n m.open(node.tagName);\n if (node.hasAttributes()) {\n const attrs = node.attributes,\n n = attrs.length;\n for (let i = 0; i < n; ++i) {\n m.attr(attrs[i].name, attrs[i].value);\n }\n }\n if (node.hasChildNodes()) {\n const children = node.childNodes;\n for (const child of children) {\n child.nodeType === 3 // text node\n ? m.text(child.nodeValue) : _serialize(m, child);\n }\n }\n return m.close();\n}\n\nconst stylesAttr = {\n fill: 'fill',\n fillOpacity: 'fill-opacity',\n stroke: 'stroke',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n strokeCap: 'stroke-linecap',\n strokeJoin: 'stroke-linejoin',\n strokeDash: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeMiterLimit: 'stroke-miterlimit',\n opacity: 'opacity'\n};\nconst stylesCss = {\n blend: 'mix-blend-mode'\n};\n\n// ensure miter limit default is consistent with canvas (#2498)\nconst rootAttributes = {\n 'fill': 'none',\n 'stroke-miterlimit': 10\n};\n\nconst RootIndex = 0,\n xmlns = 'http://www.w3.org/2000/xmlns/',\n svgns = metadata.xmlns;\nfunction SVGRenderer(loader) {\n Renderer.call(this, loader);\n this._dirtyID = 0;\n this._dirty = [];\n this._svg = null;\n this._root = null;\n this._defs = null;\n}\nconst base$1 = Renderer.prototype;\ninherits(SVGRenderer, Renderer, {\n /**\n * Initialize a new SVGRenderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n // create the svg definitions cache\n this._defs = {};\n this._clearDefs();\n if (el) {\n this._svg = domChild(el, 0, 'svg', svgns);\n this._svg.setAttributeNS(xmlns, 'xmlns', svgns);\n this._svg.setAttributeNS(xmlns, 'xmlns:xlink', metadata['xmlns:xlink']);\n this._svg.setAttribute('version', metadata['version']);\n this._svg.setAttribute('class', 'marks');\n domClear(el, 1);\n\n // set the svg root group\n this._root = domChild(this._svg, RootIndex, 'g', svgns);\n setAttributes(this._root, rootAttributes);\n\n // ensure no additional child elements\n domClear(this._svg, RootIndex + 1);\n }\n\n // set background color if defined\n this.background(this._bgcolor);\n return base$1.initialize.call(this, el, width, height, origin, scaleFactor);\n },\n /**\n * Get / set the background color.\n */\n background(bgcolor) {\n if (arguments.length && this._svg) {\n this._svg.style.setProperty('background-color', bgcolor);\n }\n return base$1.background.apply(this, arguments);\n },\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n base$1.resize.call(this, width, height, origin, scaleFactor);\n if (this._svg) {\n setAttributes(this._svg, {\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: `0 0 ${this._width} ${this._height}`\n });\n this._root.setAttribute('transform', `translate(${this._origin})`);\n }\n this._dirty = [];\n return this;\n },\n /**\n * Returns the SVG element of the visualization.\n * @return {DOMElement} - The SVG element.\n */\n canvas() {\n return this._svg;\n },\n /**\n * Returns an SVG text string for the rendered content,\n * or null if this renderer is currently headless.\n */\n svg() {\n const svg = this._svg,\n bg = this._bgcolor;\n if (!svg) return null;\n let node;\n if (bg) {\n svg.removeAttribute('style');\n node = domChild(svg, RootIndex, 'rect', svgns);\n setAttributes(node, {\n width: this._width,\n height: this._height,\n fill: bg\n });\n }\n const text = serializeXML(svg);\n if (bg) {\n svg.removeChild(node);\n this._svg.style.setProperty('background-color', bg);\n }\n return text;\n },\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @param {Array} markTypes - Array of the mark types to render.\n * If undefined, render all mark types\n */\n _render(scene, markTypes) {\n // perform spot updates and re-render markup\n if (this._dirtyCheck()) {\n if (this._dirtyAll) this._clearDefs();\n this.mark(this._root, scene, undefined, markTypes);\n domClear(this._root, 1);\n }\n this.defs();\n this._dirty = [];\n ++this._dirtyID;\n return this;\n },\n // -- Manage rendering of items marked as dirty --\n\n /**\n * Flag a mark item as dirty.\n * @param {Item} item - The mark item.\n */\n dirty(item) {\n if (item.dirty !== this._dirtyID) {\n item.dirty = this._dirtyID;\n this._dirty.push(item);\n }\n },\n /**\n * Check if a mark item is considered dirty.\n * @param {Item} item - The mark item.\n */\n isDirty(item) {\n return this._dirtyAll || !item._svg || !item._svg.ownerSVGElement || item.dirty === this._dirtyID;\n },\n /**\n * Internal method to check dirty status and, if possible,\n * make targetted updates without a full rendering pass.\n */\n _dirtyCheck() {\n this._dirtyAll = true;\n const items = this._dirty;\n if (!items.length || !this._dirtyID) return true;\n const id = ++this._dirtyID;\n let item, mark, type, mdef, i, n, o;\n for (i = 0, n = items.length; i < n; ++i) {\n item = items[i];\n mark = item.mark;\n if (mark.marktype !== type) {\n // memoize mark instance lookup\n type = mark.marktype;\n mdef = Marks[type];\n }\n if (mark.zdirty && mark.dirty !== id) {\n this._dirtyAll = false;\n dirtyParents(item, id);\n mark.items.forEach(i => {\n i.dirty = id;\n });\n }\n if (mark.zdirty) continue; // handle in standard drawing pass\n\n if (item.exit) {\n // EXIT\n if (mdef.nested && mark.items.length) {\n // if nested mark with remaining points, update instead\n o = mark.items[0];\n if (o._svg) this._update(mdef, o._svg, o);\n } else if (item._svg) {\n // otherwise remove from DOM\n o = item._svg.parentNode;\n if (o) o.removeChild(item._svg);\n }\n item._svg = null;\n continue;\n }\n item = mdef.nested ? mark.items[0] : item;\n if (item._update === id) continue; // already visited\n\n if (!item._svg || !item._svg.ownerSVGElement) {\n // ENTER\n this._dirtyAll = false;\n dirtyParents(item, id);\n } else {\n // IN-PLACE UPDATE\n this._update(mdef, item._svg, item);\n }\n item._update = id;\n }\n return !this._dirtyAll;\n },\n // -- Construct & maintain scenegraph to SVG mapping ---\n\n /**\n * Render a set of mark items.\n * @param {SVGElement} el - The parent element in the SVG tree.\n * @param {object} scene - The mark parent to render.\n * @param {SVGElement} prev - The previous sibling in the SVG tree.\n * @param {Array} markTypes - Array of the mark types to render.\n * If undefined, render all mark types\n */\n mark(el, scene, prev, markTypes) {\n if (!this.isDirty(scene)) {\n return scene._svg;\n }\n const svg = this._svg,\n markType = scene.marktype,\n mdef = Marks[markType],\n events = scene.interactive === false ? 'none' : null,\n isGroup = mdef.tag === 'g';\n const parent = bind(scene, el, prev, 'g', svg);\n if (markType !== 'group' && markTypes != null && !markTypes.includes(markType)) {\n domClear(parent, 0);\n return scene._svg;\n }\n parent.setAttribute('class', cssClass(scene));\n\n // apply aria attributes to parent container element\n const aria = ariaMarkAttributes(scene);\n for (const key in aria) setAttribute(parent, key, aria[key]);\n if (!isGroup) {\n setAttribute(parent, 'pointer-events', events);\n }\n setAttribute(parent, 'clip-path', scene.clip ? clip$1(this, scene, scene.group) : null);\n let sibling = null,\n i = 0;\n const process = item => {\n const dirty = this.isDirty(item),\n node = bind(item, parent, sibling, mdef.tag, svg);\n if (dirty) {\n this._update(mdef, node, item);\n if (isGroup) recurse(this, node, item, markTypes);\n }\n sibling = node;\n ++i;\n };\n if (mdef.nested) {\n if (scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n }\n domClear(parent, i);\n return parent;\n },\n /**\n * Update the attributes of an SVG element for a mark item.\n * @param {object} mdef - The mark definition object\n * @param {SVGElement} el - The SVG element.\n * @param {Item} item - The mark item.\n */\n _update(mdef, el, item) {\n // set dom element and values cache\n // provides access to emit method\n element = el;\n values = el.__values__;\n\n // apply aria-specific properties\n ariaItemAttributes(emit, item);\n\n // apply svg attributes\n mdef.attr(emit, item, this);\n\n // some marks need special treatment\n const extra = mark_extras[mdef.type];\n if (extra) extra.call(this, mdef, el, item);\n\n // apply svg style attributes\n // note: element state may have been modified by 'extra' method\n if (element) this.style(element, item);\n },\n /**\n * Update the presentation attributes of an SVG element for a mark item.\n * @param {SVGElement} el - The SVG element.\n * @param {Item} item - The mark item.\n */\n style(el, item) {\n if (item == null) return;\n for (const prop in stylesAttr) {\n let value = prop === 'font' ? fontFamily(item) : item[prop];\n if (value === values[prop]) continue;\n const name = stylesAttr[prop];\n if (value == null) {\n el.removeAttribute(name);\n } else {\n if (isGradient(value)) {\n value = gradientRef(value, this._defs.gradient, href());\n }\n el.setAttribute(name, value + '');\n }\n values[prop] = value;\n }\n for (const prop in stylesCss) {\n setStyle(el, stylesCss[prop], item[prop]);\n }\n },\n /**\n * Render SVG defs, as needed.\n * Must be called *after* marks have been processed to ensure the\n * collected state is current and accurate.\n */\n defs() {\n const svg = this._svg,\n defs = this._defs;\n let el = defs.el,\n index = 0;\n for (const id in defs.gradient) {\n if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', svgns);\n index = updateGradient(el, defs.gradient[id], index);\n }\n for (const id in defs.clipping) {\n if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', svgns);\n index = updateClipping(el, defs.clipping[id], index);\n }\n\n // clean-up\n if (el) {\n index === 0 ? (svg.removeChild(el), defs.el = null) : domClear(el, index);\n }\n },\n /**\n * Clear defs caches.\n */\n _clearDefs() {\n const def = this._defs;\n def.gradient = {};\n def.clipping = {};\n }\n});\n\n// mark ancestor chain with a dirty id\nfunction dirtyParents(item, id) {\n for (; item && item.dirty !== id; item = item.mark.group) {\n item.dirty = id;\n if (item.mark && item.mark.dirty !== id) {\n item.mark.dirty = id;\n } else return;\n }\n}\n\n// update gradient definitions\nfunction updateGradient(el, grad, index) {\n let i, n, stop;\n if (grad.gradient === 'radial') {\n // SVG radial gradients automatically transform to normalized bbox\n // coordinates, in a way that is cumbersome to replicate in canvas.\n // We wrap the radial gradient in a pattern element, allowing us to\n // maintain a circular gradient that matches what canvas provides.\n let pt = domChild(el, index++, 'pattern', svgns);\n setAttributes(pt, {\n id: patternPrefix + grad.id,\n viewBox: '0,0,1,1',\n width: '100%',\n height: '100%',\n preserveAspectRatio: 'xMidYMid slice'\n });\n pt = domChild(pt, 0, 'rect', svgns);\n setAttributes(pt, {\n width: 1,\n height: 1,\n fill: `url(${href()}#${grad.id})`\n });\n el = domChild(el, index++, 'radialGradient', svgns);\n setAttributes(el, {\n id: grad.id,\n fx: grad.x1,\n fy: grad.y1,\n fr: grad.r1,\n cx: grad.x2,\n cy: grad.y2,\n r: grad.r2\n });\n } else {\n el = domChild(el, index++, 'linearGradient', svgns);\n setAttributes(el, {\n id: grad.id,\n x1: grad.x1,\n x2: grad.x2,\n y1: grad.y1,\n y2: grad.y2\n });\n }\n for (i = 0, n = grad.stops.length; i < n; ++i) {\n stop = domChild(el, i, 'stop', svgns);\n stop.setAttribute('offset', grad.stops[i].offset);\n stop.setAttribute('stop-color', grad.stops[i].color);\n }\n domClear(el, i);\n return index;\n}\n\n// update clipping path definitions\nfunction updateClipping(el, clip, index) {\n let mask;\n el = domChild(el, index, 'clipPath', svgns);\n el.setAttribute('id', clip.id);\n if (clip.path) {\n mask = domChild(el, 0, 'path', svgns);\n mask.setAttribute('d', clip.path);\n } else {\n mask = domChild(el, 0, 'rect', svgns);\n setAttributes(mask, {\n x: 0,\n y: 0,\n width: clip.width,\n height: clip.height\n });\n }\n domClear(el, 1);\n return index + 1;\n}\n\n// Recursively process group contents.\nfunction recurse(renderer, el, group, markTypes) {\n // child 'g' element is second to last among children (path, g, path)\n // other children here are foreground and background path elements\n el = el.lastChild.previousSibling;\n let prev,\n idx = 0;\n visit(group, item => {\n prev = renderer.mark(el, item, prev, markTypes);\n ++idx;\n });\n\n // remove any extraneous DOM elements\n domClear(el, 1 + idx);\n}\n\n// Bind a scenegraph item to an SVG DOM element.\n// Create new SVG elements as needed.\nfunction bind(item, el, sibling, tag, svg) {\n let node = item._svg,\n doc;\n\n // create a new dom node if needed\n if (!node) {\n doc = el.ownerDocument;\n node = domCreate(doc, tag, svgns);\n item._svg = node;\n if (item.mark) {\n node.__data__ = item;\n node.__values__ = {\n fill: 'default'\n };\n\n // if group, create background, content, and foreground elements\n if (tag === 'g') {\n const bg = domCreate(doc, 'path', svgns);\n node.appendChild(bg);\n bg.__data__ = item;\n const cg = domCreate(doc, 'g', svgns);\n node.appendChild(cg);\n cg.__data__ = item;\n const fg = domCreate(doc, 'path', svgns);\n node.appendChild(fg);\n fg.__data__ = item;\n fg.__values__ = {\n fill: 'default'\n };\n }\n }\n }\n\n // (re-)insert if (a) not contained in SVG or (b) sibling order has changed\n if (node.ownerSVGElement !== svg || siblingCheck(node, sibling)) {\n el.insertBefore(node, sibling ? sibling.nextSibling : el.firstChild);\n }\n return node;\n}\n\n// check if two nodes are ordered siblings\nfunction siblingCheck(node, sibling) {\n return node.parentNode && node.parentNode.childNodes.length > 1 && node.previousSibling != sibling; // treat null/undefined the same\n}\n\n// -- Set attributes & styles on SVG elements ---\n\nlet element = null,\n // temp var for current SVG element\n values = null; // temp var for current values hash\n\n// Extra configuration for certain mark types\nconst mark_extras = {\n group(mdef, el, item) {\n const fg = element = el.childNodes[2];\n values = fg.__values__;\n mdef.foreground(emit, item, this);\n values = el.__values__; // use parent's values hash\n element = el.childNodes[1];\n mdef.content(emit, item, this);\n const bg = element = el.childNodes[0];\n mdef.background(emit, item, this);\n const value = item.mark.interactive === false ? 'none' : null;\n if (value !== values.events) {\n setAttribute(fg, 'pointer-events', value);\n setAttribute(bg, 'pointer-events', value);\n values.events = value;\n }\n if (item.strokeForeground && item.stroke) {\n const fill = item.fill;\n setAttribute(fg, 'display', null);\n\n // set style of background\n this.style(bg, item);\n setAttribute(bg, 'stroke', null);\n\n // set style of foreground\n if (fill) item.fill = null;\n values = fg.__values__;\n this.style(fg, item);\n if (fill) item.fill = fill;\n\n // leave element null to prevent downstream styling\n element = null;\n } else {\n // ensure foreground is ignored\n setAttribute(fg, 'display', 'none');\n }\n },\n image(mdef, el, item) {\n if (item.smooth === false) {\n setStyle(el, 'image-rendering', 'optimizeSpeed');\n setStyle(el, 'image-rendering', 'pixelated');\n } else {\n setStyle(el, 'image-rendering', null);\n }\n },\n text(mdef, el, item) {\n const tl = textLines(item);\n let key, value, doc, lh;\n if (isArray(tl)) {\n // multi-line text\n value = tl.map(_ => textValue(item, _));\n key = value.join('\\n'); // content cache key\n\n if (key !== values.text) {\n domClear(el, 0);\n doc = el.ownerDocument;\n lh = lineHeight(item);\n value.forEach((t, i) => {\n const ts = domCreate(doc, 'tspan', svgns);\n ts.__data__ = item; // data binding\n ts.textContent = t;\n if (i) {\n ts.setAttribute('x', 0);\n ts.setAttribute('dy', lh);\n }\n el.appendChild(ts);\n });\n values.text = key;\n }\n } else {\n // single-line text\n value = textValue(item, tl);\n if (value !== values.text) {\n el.textContent = value;\n values.text = value;\n }\n }\n setAttribute(el, 'font-family', fontFamily(item));\n setAttribute(el, 'font-size', fontSize(item) + 'px');\n setAttribute(el, 'font-style', item.fontStyle);\n setAttribute(el, 'font-variant', item.fontVariant);\n setAttribute(el, 'font-weight', item.fontWeight);\n }\n};\nfunction emit(name, value, ns) {\n // early exit if value is unchanged\n if (value === values[name]) return;\n\n // use appropriate method given namespace (ns)\n if (ns) {\n setAttributeNS(element, name, value, ns);\n } else {\n setAttribute(element, name, value);\n }\n\n // note current value for future comparison\n values[name] = value;\n}\nfunction setStyle(el, name, value) {\n if (value !== values[name]) {\n if (value == null) {\n el.style.removeProperty(name);\n } else {\n el.style.setProperty(name, value + '');\n }\n values[name] = value;\n }\n}\nfunction setAttributes(el, attrs) {\n for (const key in attrs) {\n setAttribute(el, key, attrs[key]);\n }\n}\nfunction setAttribute(el, name, value) {\n if (value != null) {\n // if value is provided, update DOM attribute\n el.setAttribute(name, value);\n } else {\n // else remove DOM attribute\n el.removeAttribute(name);\n }\n}\nfunction setAttributeNS(el, name, value, ns) {\n if (value != null) {\n // if value is provided, update DOM attribute\n el.setAttributeNS(ns, name, value);\n } else {\n // else remove DOM attribute\n el.removeAttributeNS(ns, name);\n }\n}\nfunction href() {\n let loc;\n return typeof window === 'undefined' ? '' : (loc = window.location).hash ? loc.href.slice(0, -loc.hash.length) : loc.href;\n}\n\nfunction SVGStringRenderer(loader) {\n Renderer.call(this, loader);\n this._text = null;\n this._defs = {\n gradient: {},\n clipping: {}\n };\n}\ninherits(SVGStringRenderer, Renderer, {\n /**\n * Returns the rendered SVG text string,\n * or null if rendering has not yet occurred.\n */\n svg() {\n return this._text;\n },\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\n _render(scene) {\n const m = markup();\n\n // svg tag\n m.open('svg', extend({}, metadata, {\n class: 'marks',\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: `0 0 ${this._width} ${this._height}`\n }));\n\n // background, if defined\n const bg = this._bgcolor;\n if (bg && bg !== 'transparent' && bg !== 'none') {\n m.open('rect', {\n width: this._width,\n height: this._height,\n fill: bg\n }).close();\n }\n\n // root content group\n m.open('g', rootAttributes, {\n transform: 'translate(' + this._origin + ')'\n });\n this.mark(m, scene);\n m.close(); // \n\n // defs\n this.defs(m);\n\n // get SVG text string\n this._text = m.close() + '';\n return this;\n },\n /**\n * Render a set of mark items.\n * @param {object} m - The markup context.\n * @param {object} scene - The mark parent to render.\n */\n mark(m, scene) {\n const mdef = Marks[scene.marktype],\n tag = mdef.tag,\n attrList = [ariaItemAttributes, mdef.attr];\n\n // render opening group tag\n m.open('g', {\n 'class': cssClass(scene),\n 'clip-path': scene.clip ? clip$1(this, scene, scene.group) : null\n }, ariaMarkAttributes(scene), {\n 'pointer-events': tag !== 'g' && scene.interactive === false ? 'none' : null\n });\n\n // render contained elements\n const process = item => {\n const href = this.href(item);\n if (href) m.open('a', href);\n m.open(tag, this.attr(scene, item, attrList, tag !== 'g' ? tag : null));\n if (tag === 'text') {\n const tl = textLines(item);\n if (isArray(tl)) {\n // multi-line text\n const attrs = {\n x: 0,\n dy: lineHeight(item)\n };\n for (let i = 0; i < tl.length; ++i) {\n m.open('tspan', i ? attrs : null).text(textValue(item, tl[i])).close();\n }\n } else {\n // single-line text\n m.text(textValue(item, tl));\n }\n } else if (tag === 'g') {\n const fore = item.strokeForeground,\n fill = item.fill,\n stroke = item.stroke;\n if (fore && stroke) {\n item.stroke = null;\n }\n m.open('path', this.attr(scene, item, mdef.background, 'bgrect')).close();\n\n // recurse for group content\n m.open('g', this.attr(scene, item, mdef.content));\n visit(item, scene => this.mark(m, scene));\n m.close();\n if (fore && stroke) {\n if (fill) item.fill = null;\n item.stroke = stroke;\n m.open('path', this.attr(scene, item, mdef.foreground, 'bgrect')).close();\n if (fill) item.fill = fill;\n } else {\n m.open('path', this.attr(scene, item, mdef.foreground, 'bgfore')).close();\n }\n }\n m.close(); // \n if (href) m.close(); // \n };\n\n if (mdef.nested) {\n if (scene.items && scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n }\n\n // render closing group tag\n return m.close(); // \n },\n\n /**\n * Get href attributes for a hyperlinked mark item.\n * @param {Item} item - The mark item.\n */\n href(item) {\n const href = item.href;\n let attr;\n if (href) {\n if (attr = this._hrefs && this._hrefs[href]) {\n return attr;\n } else {\n this.sanitizeURL(href).then(attr => {\n // rewrite to use xlink namespace\n attr['xlink:href'] = attr.href;\n attr.href = null;\n (this._hrefs || (this._hrefs = {}))[href] = attr;\n });\n }\n }\n return null;\n },\n /**\n * Get an object of SVG attributes for a mark item.\n * @param {object} scene - The mark parent.\n * @param {Item} item - The mark item.\n * @param {array|function} attrs - One or more attribute emitters.\n * @param {string} tag - The tag being rendered.\n */\n attr(scene, item, attrs, tag) {\n const object = {},\n emit = (name, value, ns, prefixed) => {\n object[prefixed || name] = value;\n };\n\n // apply mark specific attributes\n if (Array.isArray(attrs)) {\n attrs.forEach(fn => fn(emit, item, this));\n } else {\n attrs(emit, item, this);\n }\n\n // apply style attributes\n if (tag) {\n style(object, item, scene, tag, this._defs);\n }\n return object;\n },\n /**\n * Render SVG defs, as needed.\n * Must be called *after* marks have been processed to ensure the\n * collected state is current and accurate.\n * @param {object} m - The markup context.\n */\n defs(m) {\n const gradient = this._defs.gradient,\n clipping = this._defs.clipping,\n count = Object.keys(gradient).length + Object.keys(clipping).length;\n if (count === 0) return; // nothing to do\n\n m.open('defs');\n for (const id in gradient) {\n const def = gradient[id],\n stops = def.stops;\n if (def.gradient === 'radial') {\n // SVG radial gradients automatically transform to normalized bbox\n // coordinates, in a way that is cumbersome to replicate in canvas.\n // We wrap the radial gradient in a pattern element, allowing us to\n // maintain a circular gradient that matches what canvas provides.\n\n m.open('pattern', {\n id: patternPrefix + id,\n viewBox: '0,0,1,1',\n width: '100%',\n height: '100%',\n preserveAspectRatio: 'xMidYMid slice'\n });\n m.open('rect', {\n width: '1',\n height: '1',\n fill: 'url(#' + id + ')'\n }).close();\n m.close(); // \n\n m.open('radialGradient', {\n id: id,\n fx: def.x1,\n fy: def.y1,\n fr: def.r1,\n cx: def.x2,\n cy: def.y2,\n r: def.r2\n });\n } else {\n m.open('linearGradient', {\n id: id,\n x1: def.x1,\n x2: def.x2,\n y1: def.y1,\n y2: def.y2\n });\n }\n for (let i = 0; i < stops.length; ++i) {\n m.open('stop', {\n offset: stops[i].offset,\n 'stop-color': stops[i].color\n }).close();\n }\n m.close();\n }\n for (const id in clipping) {\n const def = clipping[id];\n m.open('clipPath', {\n id: id\n });\n if (def.path) {\n m.open('path', {\n d: def.path\n }).close();\n } else {\n m.open('rect', {\n x: 0,\n y: 0,\n width: def.width,\n height: def.height\n }).close();\n }\n m.close();\n }\n m.close();\n }\n});\n\n// Helper function for attr for style presentation attributes\nfunction style(s, item, scene, tag, defs) {\n let styleList;\n if (item == null) return s;\n if (tag === 'bgrect' && scene.interactive === false) {\n s['pointer-events'] = 'none';\n }\n if (tag === 'bgfore') {\n if (scene.interactive === false) {\n s['pointer-events'] = 'none';\n }\n s.display = 'none';\n if (item.fill !== null) return s;\n }\n if (tag === 'image' && item.smooth === false) {\n styleList = ['image-rendering: optimizeSpeed;', 'image-rendering: pixelated;'];\n }\n if (tag === 'text') {\n s['font-family'] = fontFamily(item);\n s['font-size'] = fontSize(item) + 'px';\n s['font-style'] = item.fontStyle;\n s['font-variant'] = item.fontVariant;\n s['font-weight'] = item.fontWeight;\n }\n for (const prop in stylesAttr) {\n let value = item[prop];\n const name = stylesAttr[prop];\n if (value === 'transparent' && (name === 'fill' || name === 'stroke')) ; else if (value != null) {\n if (isGradient(value)) {\n value = gradientRef(value, defs.gradient, '');\n }\n s[name] = value;\n }\n }\n for (const prop in stylesCss) {\n const value = item[prop];\n if (value != null) {\n styleList = styleList || [];\n styleList.push(`${stylesCss[prop]}: ${value};`);\n }\n }\n if (styleList) {\n s.style = styleList.join(' ');\n }\n return s;\n}\n\n/**\n * @typedef {Object} HybridRendererOptions\n *\n * @property {string[]} [svgMarkTypes=['text']] - An array of SVG mark types to render\n * in the SVG layer. All other mark types\n * will be rendered in the Canvas layer.\n * @property {boolean} [svgOnTop=true] - Flag to determine if SVG should be rendered on top.\n * @property {boolean} [debug=false] - Flag to enable or disable debugging mode. When true,\n * the top layer will be stacked below the bottom layer\n * rather than overlaid on top.\n */\n\n/** @type {HybridRendererOptions} */\nconst OPTS = {\n svgMarkTypes: ['text'],\n svgOnTop: true,\n debug: false\n};\n\n/**\n * Configure the HybridRenderer\n *\n * @param {HybridRendererOptions} options - HybridRenderer configuration options.\n */\nfunction setHybridRendererOptions(options) {\n OPTS['svgMarkTypes'] = options.svgMarkTypes ?? ['text'];\n OPTS['svgOnTop'] = options.svgOnTop ?? true;\n OPTS['debug'] = options.debug ?? false;\n}\nfunction HybridRenderer(loader) {\n Renderer.call(this, loader);\n this._svgRenderer = new SVGRenderer(loader);\n this._canvasRenderer = new CanvasRenderer(loader);\n}\nconst base = Renderer.prototype;\ninherits(HybridRenderer, Renderer, {\n /**\n * Initialize a new HybridRenderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {HybridRenderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n this._root_el = domChild(el, 0, 'div');\n const bottomEl = domChild(this._root_el, 0, 'div');\n const topEl = domChild(this._root_el, 1, 'div');\n this._root_el.style.position = 'relative';\n\n // Set position absolute to overlay svg on top of canvas\n if (!OPTS.debug) {\n bottomEl.style.height = '100%';\n topEl.style.position = 'absolute';\n topEl.style.top = '0';\n topEl.style.left = '0';\n topEl.style.height = '100%';\n topEl.style.width = '100%';\n }\n this._svgEl = OPTS.svgOnTop ? topEl : bottomEl;\n this._canvasEl = OPTS.svgOnTop ? bottomEl : topEl;\n\n // pointer-events to none on SVG layer so that canvas gets all events\n this._svgEl.style.pointerEvents = 'none';\n this._canvasRenderer.initialize(this._canvasEl, width, height, origin, scaleFactor);\n this._svgRenderer.initialize(this._svgEl, width, height, origin, scaleFactor);\n return base.initialize.call(this, el, width, height, origin, scaleFactor);\n },\n /**\n * Flag a mark item as dirty.\n * @param {Item} item - The mark item.\n */\n dirty(item) {\n if (OPTS.svgMarkTypes.includes(item.mark.marktype)) {\n this._svgRenderer.dirty(item);\n } else {\n this._canvasRenderer.dirty(item);\n }\n return this;\n },\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @param {Array} markTypes - Array of the mark types to render.\n * If undefined, render all mark types\n */\n _render(scene, markTypes) {\n const allMarkTypes = markTypes ?? ['arc', 'area', 'image', 'line', 'path', 'rect', 'rule', 'shape', 'symbol', 'text', 'trail'];\n const canvasMarkTypes = allMarkTypes.filter(m => !OPTS.svgMarkTypes.includes(m));\n this._svgRenderer.render(scene, OPTS.svgMarkTypes);\n this._canvasRenderer.render(scene, canvasMarkTypes);\n },\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n base.resize.call(this, width, height, origin, scaleFactor);\n this._svgRenderer.resize(width, height, origin, scaleFactor);\n this._canvasRenderer.resize(width, height, origin, scaleFactor);\n return this;\n },\n background(bgcolor) {\n // Propagate background color to lower canvas renderer\n if (OPTS.svgOnTop) {\n this._canvasRenderer.background(bgcolor);\n } else {\n this._svgRenderer.background(bgcolor);\n }\n return this;\n }\n});\n\nfunction HybridHandler(loader, tooltip) {\n CanvasHandler.call(this, loader, tooltip);\n}\ninherits(HybridHandler, CanvasHandler, {\n initialize(el, origin, obj) {\n const canvas = domChild(domChild(el, 0, 'div'), OPTS.svgOnTop ? 0 : 1, 'div');\n return CanvasHandler.prototype.initialize.call(this, canvas, origin, obj);\n }\n});\n\nconst Canvas = 'canvas';\nconst Hybrid = 'hybrid';\nconst PNG = 'png';\nconst SVG = 'svg';\nconst None = 'none';\nconst RenderType = {\n Canvas: Canvas,\n PNG: PNG,\n SVG: SVG,\n Hybrid: Hybrid,\n None: None\n};\nconst modules = {};\nmodules[Canvas] = modules[PNG] = {\n renderer: CanvasRenderer,\n headless: CanvasRenderer,\n handler: CanvasHandler\n};\nmodules[SVG] = {\n renderer: SVGRenderer,\n headless: SVGStringRenderer,\n handler: SVGHandler\n};\nmodules[Hybrid] = {\n renderer: HybridRenderer,\n headless: HybridRenderer,\n handler: HybridHandler\n};\nmodules[None] = {};\nfunction renderModule(name, _) {\n name = String(name || '').toLowerCase();\n if (arguments.length > 1) {\n modules[name] = _;\n return this;\n } else {\n return modules[name];\n }\n}\n\nfunction intersect(scene, bounds, filter) {\n const hits = [],\n // intersection results\n box = new Bounds().union(bounds),\n // defensive copy\n type = scene.marktype;\n return type ? intersectMark(scene, box, filter, hits) : type === 'group' ? intersectGroup(scene, box, filter, hits) : error('Intersect scene must be mark node or group item.');\n}\nfunction intersectMark(mark, box, filter, hits) {\n if (visitMark(mark, box, filter)) {\n const items = mark.items,\n type = mark.marktype,\n n = items.length;\n let i = 0;\n if (type === 'group') {\n for (; i < n; ++i) {\n intersectGroup(items[i], box, filter, hits);\n }\n } else {\n for (const test = Marks[type].isect; i < n; ++i) {\n const item = items[i];\n if (intersectItem(item, box, test)) hits.push(item);\n }\n }\n }\n return hits;\n}\nfunction visitMark(mark, box, filter) {\n // process if bounds intersect and if\n // (1) mark is a group mark (so we must recurse), or\n // (2) mark is interactive and passes filter\n return mark.bounds && box.intersects(mark.bounds) && (mark.marktype === 'group' || mark.interactive !== false && (!filter || filter(mark)));\n}\nfunction intersectGroup(group, box, filter, hits) {\n // test intersect against group\n // skip groups by default unless filter says otherwise\n if (filter && filter(group.mark) && intersectItem(group, box, Marks.group.isect)) {\n hits.push(group);\n }\n\n // recursively test children marks\n // translate box to group coordinate space\n const marks = group.items,\n n = marks && marks.length;\n if (n) {\n const x = group.x || 0,\n y = group.y || 0;\n box.translate(-x, -y);\n for (let i = 0; i < n; ++i) {\n intersectMark(marks[i], box, filter, hits);\n }\n box.translate(x, y);\n }\n return hits;\n}\nfunction intersectItem(item, box, test) {\n // test bounds enclosure, bounds intersection, then detailed test\n const bounds = item.bounds;\n return box.encloses(bounds) || box.intersects(bounds) && test(item, box);\n}\n\nconst clipBounds = new Bounds();\nfunction boundClip (mark) {\n const clip = mark.clip;\n if (isFunction(clip)) {\n clip(boundContext(clipBounds.clear()));\n } else if (clip) {\n clipBounds.set(0, 0, mark.group.width, mark.group.height);\n } else return;\n mark.bounds.intersect(clipBounds);\n}\n\nconst TOLERANCE = 1e-9;\nfunction sceneEqual(a, b, key) {\n return a === b ? true : key === 'path' ? pathEqual(a, b) : a instanceof Date && b instanceof Date ? +a === +b : isNumber(a) && isNumber(b) ? Math.abs(a - b) <= TOLERANCE : !a || !b || !isObject(a) && !isObject(b) ? a == b : objectEqual(a, b);\n}\nfunction pathEqual(a, b) {\n return sceneEqual(parse(a), parse(b));\n}\nfunction objectEqual(a, b) {\n var ka = Object.keys(a),\n kb = Object.keys(b),\n key,\n i;\n if (ka.length !== kb.length) return false;\n ka.sort();\n kb.sort();\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) return false;\n }\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!sceneEqual(a[key], b[key], key)) return false;\n }\n return typeof a === typeof b;\n}\n\nfunction resetSVGDefIds() {\n resetSVGClipId();\n resetSVGGradientId();\n}\n\nexport { Bounds, CanvasHandler, CanvasRenderer, Gradient, GroupItem, Handler, HybridHandler, HybridRenderer, Item, Marks, RenderType, Renderer, ResourceLoader, SVGHandler, SVGRenderer, SVGStringRenderer, Scenegraph, boundClip, boundContext, boundItem, boundMark, boundStroke, domChild, domClear, domCreate, domFind, font, fontFamily, fontSize, intersect, intersectBoxLine, intersectPath, intersectPoint, intersectRule, lineHeight, markup, multiLineOffset, curves as pathCurves, pathEqual, parse as pathParse, vg_rect as pathRectangle, pathRender, symbols as pathSymbols, vg_trail as pathTrail, point, renderModule, resetSVGClipId, resetSVGDefIds, sceneEqual, sceneFromJSON, pickVisit as scenePickVisit, sceneToJSON, visit as sceneVisit, zorder as sceneZOrder, serializeXML, setHybridRendererOptions, textMetrics };\n","import { Transform } from 'vega-dataflow';\nimport { Marks, boundClip, GroupItem, Item, Bounds, multiLineOffset, boundStroke } from 'vega-scenegraph';\nimport { inherits, peek, isObject } from 'vega-util';\n\nconst Top = 'top';\nconst Left = 'left';\nconst Right = 'right';\nconst Bottom = 'bottom';\nconst TopLeft = 'top-left';\nconst TopRight = 'top-right';\nconst BottomLeft = 'bottom-left';\nconst BottomRight = 'bottom-right';\nconst Start = 'start';\nconst Middle = 'middle';\nconst End = 'end';\nconst X = 'x';\nconst Y = 'y';\nconst Group = 'group';\nconst AxisRole = 'axis';\nconst TitleRole = 'title';\nconst FrameRole = 'frame';\nconst ScopeRole = 'scope';\nconst LegendRole = 'legend';\nconst RowHeader = 'row-header';\nconst RowFooter = 'row-footer';\nconst RowTitle = 'row-title';\nconst ColHeader = 'column-header';\nconst ColFooter = 'column-footer';\nconst ColTitle = 'column-title';\nconst Padding = 'padding';\nconst Symbols = 'symbol';\nconst Fit = 'fit';\nconst FitX = 'fit-x';\nconst FitY = 'fit-y';\nconst Pad = 'pad';\nconst None = 'none';\nconst All = 'all';\nconst Each = 'each';\nconst Flush = 'flush';\nconst Column = 'column';\nconst Row = 'row';\n\n/**\n * Calculate bounding boxes for scenegraph items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - The scenegraph mark instance to bound.\n */\nfunction Bound(params) {\n Transform.call(this, null, params);\n}\ninherits(Bound, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow,\n mark = _.mark,\n type = mark.marktype,\n entry = Marks[type],\n bound = entry.bound;\n let markBounds = mark.bounds,\n rebound;\n if (entry.nested) {\n // multi-item marks have a single bounds instance\n if (mark.items.length) view.dirty(mark.items[0]);\n markBounds = boundItem(mark, bound);\n mark.items.forEach(item => {\n item.bounds.clear().union(markBounds);\n });\n } else if (type === Group || _.modified()) {\n // operator parameters modified -> re-bound all items\n // updates group bounds in response to modified group content\n pulse.visit(pulse.MOD, item => view.dirty(item));\n markBounds.clear();\n mark.items.forEach(item => markBounds.union(boundItem(item, bound)));\n\n // force reflow for axes/legends/titles to propagate any layout changes\n switch (mark.role) {\n case AxisRole:\n case LegendRole:\n case TitleRole:\n pulse.reflow();\n }\n } else {\n // incrementally update bounds, re-bound mark as needed\n rebound = pulse.changed(pulse.REM);\n pulse.visit(pulse.ADD, item => {\n markBounds.union(boundItem(item, bound));\n });\n pulse.visit(pulse.MOD, item => {\n rebound = rebound || markBounds.alignsWith(item.bounds);\n view.dirty(item);\n markBounds.union(boundItem(item, bound));\n });\n if (rebound) {\n markBounds.clear();\n mark.items.forEach(item => markBounds.union(item.bounds));\n }\n }\n\n // ensure mark bounds do not exceed any clipping region\n boundClip(mark);\n return pulse.modifies('bounds');\n }\n});\nfunction boundItem(item, bound, opt) {\n return bound(item.bounds.clear(), item, opt);\n}\n\nconst COUNTER_NAME = ':vega_identifier:';\n\n/**\n * Adds a unique identifier to all added tuples.\n * This transform creates a new signal that serves as an id counter.\n * As a result, the id counter is shared across all instances of this\n * transform, generating unique ids across multiple data streams. In\n * addition, this signal value can be included in a snapshot of the\n * dataflow state, enabling correct resumption of id allocation.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.as - The field name for the generated identifier.\n */\nfunction Identifier(params) {\n Transform.call(this, 0, params);\n}\nIdentifier.Definition = {\n 'type': 'Identifier',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'as',\n 'type': 'string',\n 'required': true\n }]\n};\ninherits(Identifier, Transform, {\n transform(_, pulse) {\n const counter = getCounter(pulse.dataflow),\n as = _.as;\n let id = counter.value;\n pulse.visit(pulse.ADD, t => t[as] = t[as] || ++id);\n counter.set(this.value = id);\n return pulse;\n }\n});\nfunction getCounter(view) {\n return view._signals[COUNTER_NAME] || (view._signals[COUNTER_NAME] = view.add(0));\n}\n\n/**\n * Bind scenegraph items to a scenegraph mark instance.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.markdef - The mark definition for creating the mark.\n * This is an object of legal scenegraph mark properties which *must* include\n * the 'marktype' property.\n */\nfunction Mark(params) {\n Transform.call(this, null, params);\n}\ninherits(Mark, Transform, {\n transform(_, pulse) {\n let mark = this.value;\n\n // acquire mark on first invocation, bind context and group\n if (!mark) {\n mark = pulse.dataflow.scenegraph().mark(_.markdef, lookup$1(_), _.index);\n mark.group.context = _.context;\n if (!_.context.group) _.context.group = mark.group;\n mark.source = this.source; // point to upstream collector\n mark.clip = _.clip;\n mark.interactive = _.interactive;\n this.value = mark;\n }\n\n // initialize entering items\n const Init = mark.marktype === Group ? GroupItem : Item;\n pulse.visit(pulse.ADD, item => Init.call(item, mark));\n\n // update clipping and/or interactive status\n if (_.modified('clip') || _.modified('interactive')) {\n mark.clip = _.clip;\n mark.interactive = !!_.interactive;\n mark.zdirty = true; // force scenegraph re-eval\n pulse.reflow();\n }\n\n // bind items array to scenegraph mark\n mark.items = pulse.source;\n return pulse;\n }\n});\nfunction lookup$1(_) {\n const g = _.groups,\n p = _.parent;\n return g && g.size === 1 ? g.get(Object.keys(g.object)[0]) : g && p ? g.lookup(p) : null;\n}\n\n/**\n * Analyze items for overlap, changing opacity to hide items with\n * overlapping bounding boxes. This transform will preserve at least\n * two items (e.g., first and last) even if overlap persists.\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting items.\n * @param {object} [params.method] - The overlap removal method to apply.\n * One of 'parity' (default, hide every other item until there is no\n * more overlap) or 'greedy' (sequentially scan and hide and items that\n * overlap with the last visible item).\n * @param {object} [params.boundScale] - A scale whose range should be used\n * to bound the items. Items exceeding the bounds of the scale range\n * will be treated as overlapping. If null or undefined, no bounds check\n * will be applied.\n * @param {object} [params.boundOrient] - The orientation of the scale\n * (top, bottom, left, or right) used to bound items. This parameter is\n * ignored if boundScale is null or undefined.\n * @param {object} [params.boundTolerance] - The tolerance in pixels for\n * bound inclusion testing (default 1). This specifies by how many pixels\n * an item's bounds may exceed the scale range bounds and not be culled.\n * @constructor\n */\nfunction Overlap(params) {\n Transform.call(this, null, params);\n}\nconst methods = {\n parity: items => items.filter((item, i) => i % 2 ? item.opacity = 0 : 1),\n greedy: (items, sep) => {\n let a;\n return items.filter((b, i) => !i || !intersect(a.bounds, b.bounds, sep) ? (a = b, 1) : b.opacity = 0);\n }\n};\n\n// compute bounding box intersection\n// including padding pixels of separation\nconst intersect = (a, b, sep) => sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\nconst hasOverlap = (items, pad) => {\n for (var i = 1, n = items.length, a = items[0].bounds, b; i < n; a = b, ++i) {\n if (intersect(a, b = items[i].bounds, pad)) return true;\n }\n};\nconst hasBounds = item => {\n const b = item.bounds;\n return b.width() > 1 && b.height() > 1;\n};\nconst boundTest = (scale, orient, tolerance) => {\n var range = scale.range(),\n b = new Bounds();\n if (orient === Top || orient === Bottom) {\n b.set(range[0], -Infinity, range[1], +Infinity);\n } else {\n b.set(-Infinity, range[0], +Infinity, range[1]);\n }\n b.expand(tolerance || 1);\n return item => b.encloses(item.bounds);\n};\n\n// reset all items to be fully opaque\nconst reset = source => {\n source.forEach(item => item.opacity = 1);\n return source;\n};\n\n// add all tuples to mod, fork pulse if parameters were modified\n// fork prevents cross-stream tuple pollution (e.g., pulse from scale)\nconst reflow = (pulse, _) => pulse.reflow(_.modified()).modifies('opacity');\ninherits(Overlap, Transform, {\n transform(_, pulse) {\n const reduce = methods[_.method] || methods.parity,\n sep = _.separation || 0;\n let source = pulse.materialize(pulse.SOURCE).source,\n items,\n test;\n if (!source || !source.length) return;\n if (!_.method) {\n // early exit if method is falsy\n if (_.modified('method')) {\n reset(source);\n pulse = reflow(pulse, _);\n }\n return pulse;\n }\n\n // skip labels with no content\n source = source.filter(hasBounds);\n\n // early exit, nothing to do\n if (!source.length) return;\n if (_.sort) {\n source = source.slice().sort(_.sort);\n }\n items = reset(source);\n pulse = reflow(pulse, _);\n if (items.length >= 3 && hasOverlap(items, sep)) {\n do {\n items = reduce(items, sep);\n } while (items.length >= 3 && hasOverlap(items, sep));\n if (items.length < 3 && !peek(source).opacity) {\n if (items.length > 1) peek(items).opacity = 0;\n peek(source).opacity = 1;\n }\n }\n if (_.boundScale && _.boundTolerance >= 0) {\n test = boundTest(_.boundScale, _.boundOrient, +_.boundTolerance);\n source.forEach(item => {\n if (!test(item)) item.opacity = 0;\n });\n }\n\n // re-calculate mark bounds\n const bounds = items[0].mark.bounds.clear();\n source.forEach(item => {\n if (item.opacity) bounds.union(item.bounds);\n });\n return pulse;\n }\n});\n\n/**\n * Queue modified scenegraph items for rendering.\n * @constructor\n */\nfunction Render(params) {\n Transform.call(this, null, params);\n}\ninherits(Render, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow;\n pulse.visit(pulse.ALL, item => view.dirty(item));\n\n // set z-index dirty flag as needed\n if (pulse.fields && pulse.fields['zindex']) {\n const item = pulse.source && pulse.source[0];\n if (item) item.mark.zdirty = true;\n }\n }\n});\n\nconst tempBounds = new Bounds();\nfunction set(item, property, value) {\n return item[property] === value ? 0 : (item[property] = value, 1);\n}\n\nfunction isYAxis(mark) {\n var orient = mark.items[0].orient;\n return orient === Left || orient === Right;\n}\nfunction axisIndices(datum) {\n let index = +datum.grid;\n return [datum.ticks ? index++ : -1,\n // ticks index\n datum.labels ? index++ : -1,\n // labels index\n index + +datum.domain // title index\n ];\n}\n\nfunction axisLayout(view, axis, width, height) {\n var item = axis.items[0],\n datum = item.datum,\n delta = item.translate != null ? item.translate : 0.5,\n orient = item.orient,\n indices = axisIndices(datum),\n range = item.range,\n offset = item.offset,\n position = item.position,\n minExtent = item.minExtent,\n maxExtent = item.maxExtent,\n title = datum.title && item.items[indices[2]].items[0],\n titlePadding = item.titlePadding,\n bounds = item.bounds,\n dl = title && multiLineOffset(title),\n x = 0,\n y = 0,\n i,\n s;\n tempBounds.clear().union(bounds);\n bounds.clear();\n if ((i = indices[0]) > -1) bounds.union(item.items[i].bounds);\n if ((i = indices[1]) > -1) bounds.union(item.items[i].bounds);\n\n // position axis group and title\n switch (orient) {\n case Top:\n x = position || 0;\n y = -offset;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.y1));\n bounds.add(0, -s).add(range, 0);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 0, -1, bounds);\n break;\n case Left:\n x = -offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.x1));\n bounds.add(-s, 0).add(0, range);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 1, -1, bounds);\n break;\n case Right:\n x = width + offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.x2));\n bounds.add(0, 0).add(s, range);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 1, 1, bounds);\n break;\n case Bottom:\n x = position || 0;\n y = height + offset;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.y2));\n bounds.add(0, 0).add(range, s);\n if (title) axisTitleLayout(view, title, s, titlePadding, 0, 0, 1, bounds);\n break;\n default:\n x = item.x;\n y = item.y;\n }\n\n // update bounds\n boundStroke(bounds.translate(x, y), item);\n if (set(item, 'x', x + delta) | set(item, 'y', y + delta)) {\n item.bounds = tempBounds;\n view.dirty(item);\n item.bounds = bounds;\n view.dirty(item);\n }\n return item.mark.bounds.clear().union(bounds);\n}\nfunction axisTitleLayout(view, title, offset, pad, dl, isYAxis, sign, bounds) {\n const b = title.bounds;\n if (title.auto) {\n const v = sign * (offset + dl + pad);\n let dx = 0,\n dy = 0;\n view.dirty(title);\n isYAxis ? dx = (title.x || 0) - (title.x = v) : dy = (title.y || 0) - (title.y = v);\n title.mark.bounds.clear().union(b.translate(-dx, -dy));\n view.dirty(title);\n }\n bounds.union(b);\n}\n\n// aggregation functions for grid margin determination\nconst min = (a, b) => Math.floor(Math.min(a, b));\nconst max = (a, b) => Math.ceil(Math.max(a, b));\nfunction gridLayoutGroups(group) {\n var groups = group.items,\n n = groups.length,\n i = 0,\n mark,\n items;\n const views = {\n marks: [],\n rowheaders: [],\n rowfooters: [],\n colheaders: [],\n colfooters: [],\n rowtitle: null,\n coltitle: null\n };\n\n // layout axes, gather legends, collect bounds\n for (; i < n; ++i) {\n mark = groups[i];\n items = mark.items;\n if (mark.marktype === Group) {\n switch (mark.role) {\n case AxisRole:\n case LegendRole:\n case TitleRole:\n break;\n case RowHeader:\n views.rowheaders.push(...items);\n break;\n case RowFooter:\n views.rowfooters.push(...items);\n break;\n case ColHeader:\n views.colheaders.push(...items);\n break;\n case ColFooter:\n views.colfooters.push(...items);\n break;\n case RowTitle:\n views.rowtitle = items[0];\n break;\n case ColTitle:\n views.coltitle = items[0];\n break;\n default:\n views.marks.push(...items);\n }\n }\n }\n return views;\n}\nfunction bboxFlush(item) {\n return new Bounds().set(0, 0, item.width || 0, item.height || 0);\n}\nfunction bboxFull(item) {\n const b = item.bounds.clone();\n return b.empty() ? b.set(0, 0, 0, 0) : b.translate(-(item.x || 0), -(item.y || 0));\n}\nfunction get(opt, key, d) {\n const v = isObject(opt) ? opt[key] : opt;\n return v != null ? v : d !== undefined ? d : 0;\n}\nfunction offsetValue(v) {\n return v < 0 ? Math.ceil(-v) : 0;\n}\nfunction gridLayout(view, groups, opt) {\n var dirty = !opt.nodirty,\n bbox = opt.bounds === Flush ? bboxFlush : bboxFull,\n bounds = tempBounds.set(0, 0, 0, 0),\n alignCol = get(opt.align, Column),\n alignRow = get(opt.align, Row),\n padCol = get(opt.padding, Column),\n padRow = get(opt.padding, Row),\n ncols = opt.columns || groups.length,\n nrows = ncols <= 0 ? 1 : Math.ceil(groups.length / ncols),\n n = groups.length,\n xOffset = Array(n),\n xExtent = Array(ncols),\n xMax = 0,\n yOffset = Array(n),\n yExtent = Array(nrows),\n yMax = 0,\n dx = Array(n),\n dy = Array(n),\n boxes = Array(n),\n m,\n i,\n c,\n r,\n b,\n g,\n px,\n py,\n x,\n y,\n offset;\n for (i = 0; i < ncols; ++i) xExtent[i] = 0;\n for (i = 0; i < nrows; ++i) yExtent[i] = 0;\n\n // determine offsets for each group\n for (i = 0; i < n; ++i) {\n g = groups[i];\n b = boxes[i] = bbox(g);\n g.x = g.x || 0;\n dx[i] = 0;\n g.y = g.y || 0;\n dy[i] = 0;\n c = i % ncols;\n r = ~~(i / ncols);\n xMax = Math.max(xMax, px = Math.ceil(b.x2));\n yMax = Math.max(yMax, py = Math.ceil(b.y2));\n xExtent[c] = Math.max(xExtent[c], px);\n yExtent[r] = Math.max(yExtent[r], py);\n xOffset[i] = padCol + offsetValue(b.x1);\n yOffset[i] = padRow + offsetValue(b.y1);\n if (dirty) view.dirty(groups[i]);\n }\n\n // set initial alignment offsets\n for (i = 0; i < n; ++i) {\n if (i % ncols === 0) xOffset[i] = 0;\n if (i < ncols) yOffset[i] = 0;\n }\n\n // enforce column alignment constraints\n if (alignCol === Each) {\n for (c = 1; c < ncols; ++c) {\n for (offset = 0, i = c; i < n; i += ncols) {\n if (offset < xOffset[i]) offset = xOffset[i];\n }\n for (i = c; i < n; i += ncols) {\n xOffset[i] = offset + xExtent[c - 1];\n }\n }\n } else if (alignCol === All) {\n for (offset = 0, i = 0; i < n; ++i) {\n if (i % ncols && offset < xOffset[i]) offset = xOffset[i];\n }\n for (i = 0; i < n; ++i) {\n if (i % ncols) xOffset[i] = offset + xMax;\n }\n } else {\n for (alignCol = false, c = 1; c < ncols; ++c) {\n for (i = c; i < n; i += ncols) {\n xOffset[i] += xExtent[c - 1];\n }\n }\n }\n\n // enforce row alignment constraints\n if (alignRow === Each) {\n for (r = 1; r < nrows; ++r) {\n for (offset = 0, i = r * ncols, m = i + ncols; i < m; ++i) {\n if (offset < yOffset[i]) offset = yOffset[i];\n }\n for (i = r * ncols; i < m; ++i) {\n yOffset[i] = offset + yExtent[r - 1];\n }\n }\n } else if (alignRow === All) {\n for (offset = 0, i = ncols; i < n; ++i) {\n if (offset < yOffset[i]) offset = yOffset[i];\n }\n for (i = ncols; i < n; ++i) {\n yOffset[i] = offset + yMax;\n }\n } else {\n for (alignRow = false, r = 1; r < nrows; ++r) {\n for (i = r * ncols, m = i + ncols; i < m; ++i) {\n yOffset[i] += yExtent[r - 1];\n }\n }\n }\n\n // perform horizontal grid layout\n for (x = 0, i = 0; i < n; ++i) {\n x = xOffset[i] + (i % ncols ? x : 0);\n dx[i] += x - groups[i].x;\n }\n\n // perform vertical grid layout\n for (c = 0; c < ncols; ++c) {\n for (y = 0, i = c; i < n; i += ncols) {\n y += yOffset[i];\n dy[i] += y - groups[i].y;\n }\n }\n\n // perform horizontal centering\n if (alignCol && get(opt.center, Column) && nrows > 1) {\n for (i = 0; i < n; ++i) {\n b = alignCol === All ? xMax : xExtent[i % ncols];\n x = b - boxes[i].x2 - groups[i].x - dx[i];\n if (x > 0) dx[i] += x / 2;\n }\n }\n\n // perform vertical centering\n if (alignRow && get(opt.center, Row) && ncols !== 1) {\n for (i = 0; i < n; ++i) {\n b = alignRow === All ? yMax : yExtent[~~(i / ncols)];\n y = b - boxes[i].y2 - groups[i].y - dy[i];\n if (y > 0) dy[i] += y / 2;\n }\n }\n\n // position grid relative to anchor\n for (i = 0; i < n; ++i) {\n bounds.union(boxes[i].translate(dx[i], dy[i]));\n }\n x = get(opt.anchor, X);\n y = get(opt.anchor, Y);\n switch (get(opt.anchor, Column)) {\n case End:\n x -= bounds.width();\n break;\n case Middle:\n x -= bounds.width() / 2;\n }\n switch (get(opt.anchor, Row)) {\n case End:\n y -= bounds.height();\n break;\n case Middle:\n y -= bounds.height() / 2;\n }\n x = Math.round(x);\n y = Math.round(y);\n\n // update mark positions, bounds, dirty\n bounds.clear();\n for (i = 0; i < n; ++i) {\n groups[i].mark.bounds.clear();\n }\n for (i = 0; i < n; ++i) {\n g = groups[i];\n g.x += dx[i] += x;\n g.y += dy[i] += y;\n bounds.union(g.mark.bounds.union(g.bounds.translate(dx[i], dy[i])));\n if (dirty) view.dirty(g);\n }\n return bounds;\n}\nfunction trellisLayout(view, group, opt) {\n var views = gridLayoutGroups(group),\n groups = views.marks,\n bbox = opt.bounds === Flush ? boundFlush : boundFull,\n off = opt.offset,\n ncols = opt.columns || groups.length,\n nrows = ncols <= 0 ? 1 : Math.ceil(groups.length / ncols),\n cells = nrows * ncols,\n x,\n y,\n x2,\n y2,\n anchor,\n band,\n offset;\n\n // -- initial grid layout\n const bounds = gridLayout(view, groups, opt);\n if (bounds.empty()) bounds.set(0, 0, 0, 0); // empty grid\n\n // -- layout grid headers and footers --\n\n // perform row header layout\n if (views.rowheaders) {\n band = get(opt.headerBand, Row, null);\n x = layoutHeaders(view, views.rowheaders, groups, ncols, nrows, -get(off, 'rowHeader'), min, 0, bbox, 'x1', 0, ncols, 1, band);\n }\n\n // perform column header layout\n if (views.colheaders) {\n band = get(opt.headerBand, Column, null);\n y = layoutHeaders(view, views.colheaders, groups, ncols, ncols, -get(off, 'columnHeader'), min, 1, bbox, 'y1', 0, 1, ncols, band);\n }\n\n // perform row footer layout\n if (views.rowfooters) {\n band = get(opt.footerBand, Row, null);\n x2 = layoutHeaders(view, views.rowfooters, groups, ncols, nrows, get(off, 'rowFooter'), max, 0, bbox, 'x2', ncols - 1, ncols, 1, band);\n }\n\n // perform column footer layout\n if (views.colfooters) {\n band = get(opt.footerBand, Column, null);\n y2 = layoutHeaders(view, views.colfooters, groups, ncols, ncols, get(off, 'columnFooter'), max, 1, bbox, 'y2', cells - ncols, 1, ncols, band);\n }\n\n // perform row title layout\n if (views.rowtitle) {\n anchor = get(opt.titleAnchor, Row);\n offset = get(off, 'rowTitle');\n offset = anchor === End ? x2 + offset : x - offset;\n band = get(opt.titleBand, Row, 0.5);\n layoutTitle(view, views.rowtitle, offset, 0, bounds, band);\n }\n\n // perform column title layout\n if (views.coltitle) {\n anchor = get(opt.titleAnchor, Column);\n offset = get(off, 'columnTitle');\n offset = anchor === End ? y2 + offset : y - offset;\n band = get(opt.titleBand, Column, 0.5);\n layoutTitle(view, views.coltitle, offset, 1, bounds, band);\n }\n}\nfunction boundFlush(item, field) {\n return field === 'x1' ? item.x || 0 : field === 'y1' ? item.y || 0 : field === 'x2' ? (item.x || 0) + (item.width || 0) : field === 'y2' ? (item.y || 0) + (item.height || 0) : undefined;\n}\nfunction boundFull(item, field) {\n return item.bounds[field];\n}\nfunction layoutHeaders(view, headers, groups, ncols, limit, offset, agg, isX, bound, bf, start, stride, back, band) {\n var n = groups.length,\n init = 0,\n edge = 0,\n i,\n j,\n k,\n m,\n b,\n h,\n g,\n x,\n y;\n\n // if no groups, early exit and return 0\n if (!n) return init;\n\n // compute margin\n for (i = start; i < n; i += stride) {\n if (groups[i]) init = agg(init, bound(groups[i], bf));\n }\n\n // if no headers, return margin calculation\n if (!headers.length) return init;\n\n // check if number of headers exceeds number of rows or columns\n if (headers.length > limit) {\n view.warn('Grid headers exceed limit: ' + limit);\n headers = headers.slice(0, limit);\n }\n\n // apply offset\n init += offset;\n\n // clear mark bounds for all headers\n for (j = 0, m = headers.length; j < m; ++j) {\n view.dirty(headers[j]);\n headers[j].mark.bounds.clear();\n }\n\n // layout each header\n for (i = start, j = 0, m = headers.length; j < m; ++j, i += stride) {\n h = headers[j];\n b = h.mark.bounds;\n\n // search for nearest group to align to\n // necessary if table has empty cells\n for (k = i; k >= 0 && (g = groups[k]) == null; k -= back);\n\n // assign coordinates and update bounds\n if (isX) {\n x = band == null ? g.x : Math.round(g.bounds.x1 + band * g.bounds.width());\n y = init;\n } else {\n x = init;\n y = band == null ? g.y : Math.round(g.bounds.y1 + band * g.bounds.height());\n }\n b.union(h.bounds.translate(x - (h.x || 0), y - (h.y || 0)));\n h.x = x;\n h.y = y;\n view.dirty(h);\n\n // update current edge of layout bounds\n edge = agg(edge, b[bf]);\n }\n return edge;\n}\nfunction layoutTitle(view, g, offset, isX, bounds, band) {\n if (!g) return;\n view.dirty(g);\n\n // compute title coordinates\n var x = offset,\n y = offset;\n isX ? x = Math.round(bounds.x1 + band * bounds.width()) : y = Math.round(bounds.y1 + band * bounds.height());\n\n // assign coordinates and update bounds\n g.bounds.translate(x - (g.x || 0), y - (g.y || 0));\n g.mark.bounds.clear().union(g.bounds);\n g.x = x;\n g.y = y;\n\n // queue title for redraw\n view.dirty(g);\n}\n\n// utility for looking up legend layout configuration\nfunction lookup(config, orient) {\n const opt = config[orient] || {};\n return (key, d) => opt[key] != null ? opt[key] : config[key] != null ? config[key] : d;\n}\n\n// if legends specify offset directly, use the maximum specified value\nfunction offsets(legends, value) {\n let max = -Infinity;\n legends.forEach(item => {\n if (item.offset != null) max = Math.max(max, item.offset);\n });\n return max > -Infinity ? max : value;\n}\nfunction legendParams(g, orient, config, xb, yb, w, h) {\n const _ = lookup(config, orient),\n offset = offsets(g, _('offset', 0)),\n anchor = _('anchor', Start),\n mult = anchor === End ? 1 : anchor === Middle ? 0.5 : 0;\n const p = {\n align: Each,\n bounds: _('bounds', Flush),\n columns: _('direction') === 'vertical' ? 1 : g.length,\n padding: _('margin', 8),\n center: _('center'),\n nodirty: true\n };\n switch (orient) {\n case Left:\n p.anchor = {\n x: Math.floor(xb.x1) - offset,\n column: End,\n y: mult * (h || xb.height() + 2 * xb.y1),\n row: anchor\n };\n break;\n case Right:\n p.anchor = {\n x: Math.ceil(xb.x2) + offset,\n y: mult * (h || xb.height() + 2 * xb.y1),\n row: anchor\n };\n break;\n case Top:\n p.anchor = {\n y: Math.floor(yb.y1) - offset,\n row: End,\n x: mult * (w || yb.width() + 2 * yb.x1),\n column: anchor\n };\n break;\n case Bottom:\n p.anchor = {\n y: Math.ceil(yb.y2) + offset,\n x: mult * (w || yb.width() + 2 * yb.x1),\n column: anchor\n };\n break;\n case TopLeft:\n p.anchor = {\n x: offset,\n y: offset\n };\n break;\n case TopRight:\n p.anchor = {\n x: w - offset,\n y: offset,\n column: End\n };\n break;\n case BottomLeft:\n p.anchor = {\n x: offset,\n y: h - offset,\n row: End\n };\n break;\n case BottomRight:\n p.anchor = {\n x: w - offset,\n y: h - offset,\n column: End,\n row: End\n };\n break;\n }\n return p;\n}\nfunction legendLayout(view, legend) {\n var item = legend.items[0],\n datum = item.datum,\n orient = item.orient,\n bounds = item.bounds,\n x = item.x,\n y = item.y,\n w,\n h;\n\n // cache current bounds for later comparison\n item._bounds ? item._bounds.clear().union(bounds) : item._bounds = bounds.clone();\n bounds.clear();\n\n // adjust legend to accommodate padding and title\n legendGroupLayout(view, item, item.items[0].items[0]);\n\n // aggregate bounds to determine size, and include origin\n bounds = legendBounds(item, bounds);\n w = 2 * item.padding;\n h = 2 * item.padding;\n if (!bounds.empty()) {\n w = Math.ceil(bounds.width() + w);\n h = Math.ceil(bounds.height() + h);\n }\n if (datum.type === Symbols) {\n legendEntryLayout(item.items[0].items[0].items[0].items);\n }\n if (orient !== None) {\n item.x = x = 0;\n item.y = y = 0;\n }\n item.width = w;\n item.height = h;\n boundStroke(bounds.set(x, y, x + w, y + h), item);\n item.mark.bounds.clear().union(bounds);\n return item;\n}\nfunction legendBounds(item, b) {\n // aggregate item bounds\n item.items.forEach(_ => b.union(_.bounds));\n\n // anchor to legend origin\n b.x1 = item.padding;\n b.y1 = item.padding;\n return b;\n}\nfunction legendGroupLayout(view, item, entry) {\n var pad = item.padding,\n ex = pad - entry.x,\n ey = pad - entry.y;\n if (!item.datum.title) {\n if (ex || ey) translate(view, entry, ex, ey);\n } else {\n var title = item.items[1].items[0],\n anchor = title.anchor,\n tpad = item.titlePadding || 0,\n tx = pad - title.x,\n ty = pad - title.y;\n switch (title.orient) {\n case Left:\n ex += Math.ceil(title.bounds.width()) + tpad;\n break;\n case Right:\n case Bottom:\n break;\n default:\n ey += title.bounds.height() + tpad;\n }\n if (ex || ey) translate(view, entry, ex, ey);\n switch (title.orient) {\n case Left:\n ty += legendTitleOffset(item, entry, title, anchor, 1, 1);\n break;\n case Right:\n tx += legendTitleOffset(item, entry, title, End, 0, 0) + tpad;\n ty += legendTitleOffset(item, entry, title, anchor, 1, 1);\n break;\n case Bottom:\n tx += legendTitleOffset(item, entry, title, anchor, 0, 0);\n ty += legendTitleOffset(item, entry, title, End, -1, 0, 1) + tpad;\n break;\n default:\n tx += legendTitleOffset(item, entry, title, anchor, 0, 0);\n }\n if (tx || ty) translate(view, title, tx, ty);\n\n // translate legend if title pushes into negative coordinates\n if ((tx = Math.round(title.bounds.x1 - pad)) < 0) {\n translate(view, entry, -tx, 0);\n translate(view, title, -tx, 0);\n }\n }\n}\nfunction legendTitleOffset(item, entry, title, anchor, y, lr, noBar) {\n const grad = item.datum.type !== 'symbol',\n vgrad = title.datum.vgrad,\n e = grad && (lr || !vgrad) && !noBar ? entry.items[0] : entry,\n s = e.bounds[y ? 'y2' : 'x2'] - item.padding,\n u = vgrad && lr ? s : 0,\n v = vgrad && lr ? 0 : s,\n o = y <= 0 ? 0 : multiLineOffset(title);\n return Math.round(anchor === Start ? u : anchor === End ? v - o : 0.5 * (s - o));\n}\nfunction translate(view, item, dx, dy) {\n item.x += dx;\n item.y += dy;\n item.bounds.translate(dx, dy);\n item.mark.bounds.translate(dx, dy);\n view.dirty(item);\n}\nfunction legendEntryLayout(entries) {\n // get max widths for each column\n const widths = entries.reduce((w, g) => {\n w[g.column] = Math.max(g.bounds.x2 - g.x, w[g.column] || 0);\n return w;\n }, {});\n\n // set dimensions of legend entry groups\n entries.forEach(g => {\n g.width = widths[g.column];\n g.height = g.bounds.y2 - g.y;\n });\n}\n\nfunction titleLayout(view, mark, width, height, viewBounds) {\n var group = mark.items[0],\n frame = group.frame,\n orient = group.orient,\n anchor = group.anchor,\n offset = group.offset,\n padding = group.padding,\n title = group.items[0].items[0],\n subtitle = group.items[1] && group.items[1].items[0],\n end = orient === Left || orient === Right ? height : width,\n start = 0,\n x = 0,\n y = 0,\n sx = 0,\n sy = 0,\n pos;\n if (frame !== Group) {\n orient === Left ? (start = viewBounds.y2, end = viewBounds.y1) : orient === Right ? (start = viewBounds.y1, end = viewBounds.y2) : (start = viewBounds.x1, end = viewBounds.x2);\n } else if (orient === Left) {\n start = height, end = 0;\n }\n pos = anchor === Start ? start : anchor === End ? end : (start + end) / 2;\n if (subtitle && subtitle.text) {\n // position subtitle\n switch (orient) {\n case Top:\n case Bottom:\n sy = title.bounds.height() + padding;\n break;\n case Left:\n sx = title.bounds.width() + padding;\n break;\n case Right:\n sx = -title.bounds.width() - padding;\n break;\n }\n tempBounds.clear().union(subtitle.bounds);\n tempBounds.translate(sx - (subtitle.x || 0), sy - (subtitle.y || 0));\n if (set(subtitle, 'x', sx) | set(subtitle, 'y', sy)) {\n view.dirty(subtitle);\n subtitle.bounds.clear().union(tempBounds);\n subtitle.mark.bounds.clear().union(tempBounds);\n view.dirty(subtitle);\n }\n tempBounds.clear().union(subtitle.bounds);\n } else {\n tempBounds.clear();\n }\n tempBounds.union(title.bounds);\n\n // position title group\n switch (orient) {\n case Top:\n x = pos;\n y = viewBounds.y1 - tempBounds.height() - offset;\n break;\n case Left:\n x = viewBounds.x1 - tempBounds.width() - offset;\n y = pos;\n break;\n case Right:\n x = viewBounds.x2 + tempBounds.width() + offset;\n y = pos;\n break;\n case Bottom:\n x = pos;\n y = viewBounds.y2 + offset;\n break;\n default:\n x = group.x;\n y = group.y;\n }\n if (set(group, 'x', x) | set(group, 'y', y)) {\n tempBounds.translate(x, y);\n view.dirty(group);\n group.bounds.clear().union(tempBounds);\n mark.bounds.clear().union(tempBounds);\n view.dirty(group);\n }\n return group.bounds;\n}\n\n/**\n * Layout view elements such as axes and legends.\n * Also performs size adjustments.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - Scenegraph mark of groups to layout.\n */\nfunction ViewLayout(params) {\n Transform.call(this, null, params);\n}\ninherits(ViewLayout, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow;\n _.mark.items.forEach(group => {\n if (_.layout) trellisLayout(view, group, _.layout);\n layoutGroup(view, group, _);\n });\n return shouldReflow(_.mark.group) ? pulse.reflow() : pulse;\n }\n});\nfunction shouldReflow(group) {\n // We typically should reflow if layout is invoked (#2568), as child items\n // may have resized and reflow ensures group bounds are re-calculated.\n // However, legend entries have a special exception to avoid instability.\n // For example, if a selected legend symbol gains a stroke on hover,\n // we don't want to re-position subsequent elements in the legend.\n return group && group.mark.role !== 'legend-entry';\n}\nfunction layoutGroup(view, group, _) {\n var items = group.items,\n width = Math.max(0, group.width || 0),\n height = Math.max(0, group.height || 0),\n viewBounds = new Bounds().set(0, 0, width, height),\n xBounds = viewBounds.clone(),\n yBounds = viewBounds.clone(),\n legends = [],\n title,\n mark,\n orient,\n b,\n i,\n n;\n\n // layout axes, gather legends, collect bounds\n for (i = 0, n = items.length; i < n; ++i) {\n mark = items[i];\n switch (mark.role) {\n case AxisRole:\n b = isYAxis(mark) ? xBounds : yBounds;\n b.union(axisLayout(view, mark, width, height));\n break;\n case TitleRole:\n title = mark;\n break;\n case LegendRole:\n legends.push(legendLayout(view, mark));\n break;\n case FrameRole:\n case ScopeRole:\n case RowHeader:\n case RowFooter:\n case RowTitle:\n case ColHeader:\n case ColFooter:\n case ColTitle:\n xBounds.union(mark.bounds);\n yBounds.union(mark.bounds);\n break;\n default:\n viewBounds.union(mark.bounds);\n }\n }\n\n // layout legends, adjust viewBounds\n if (legends.length) {\n // group legends by orient\n const l = {};\n legends.forEach(item => {\n orient = item.orient || Right;\n if (orient !== None) (l[orient] || (l[orient] = [])).push(item);\n });\n\n // perform grid layout for each orient group\n for (const orient in l) {\n const g = l[orient];\n gridLayout(view, g, legendParams(g, orient, _.legends, xBounds, yBounds, width, height));\n }\n\n // update view bounds\n legends.forEach(item => {\n const b = item.bounds;\n if (!b.equals(item._bounds)) {\n item.bounds = item._bounds;\n view.dirty(item); // dirty previous location\n item.bounds = b;\n view.dirty(item);\n }\n if (_.autosize && (_.autosize.type === Fit || _.autosize.type === FitX || _.autosize.type === FitY)) {\n // For autosize fit, incorporate the orthogonal dimension only.\n // Legends that overrun the chart area will then be clipped;\n // otherwise the chart area gets reduced to nothing!\n switch (item.orient) {\n case Left:\n case Right:\n viewBounds.add(b.x1, 0).add(b.x2, 0);\n break;\n case Top:\n case Bottom:\n viewBounds.add(0, b.y1).add(0, b.y2);\n }\n } else {\n viewBounds.union(b);\n }\n });\n }\n\n // combine bounding boxes\n viewBounds.union(xBounds).union(yBounds);\n\n // layout title, adjust bounds\n if (title) {\n viewBounds.union(titleLayout(view, title, width, height, viewBounds));\n }\n\n // override aggregated view bounds if content is clipped\n if (group.clip) {\n viewBounds.set(0, 0, group.width || 0, group.height || 0);\n }\n\n // perform size adjustment\n viewSizeLayout(view, group, viewBounds, _);\n}\nfunction viewSizeLayout(view, group, viewBounds, _) {\n const auto = _.autosize || {},\n type = auto.type;\n if (view._autosize < 1 || !type) return;\n let viewWidth = view._width,\n viewHeight = view._height,\n width = Math.max(0, group.width || 0),\n left = Math.max(0, Math.ceil(-viewBounds.x1)),\n height = Math.max(0, group.height || 0),\n top = Math.max(0, Math.ceil(-viewBounds.y1));\n const right = Math.max(0, Math.ceil(viewBounds.x2 - width)),\n bottom = Math.max(0, Math.ceil(viewBounds.y2 - height));\n if (auto.contains === Padding) {\n const padding = view.padding();\n viewWidth -= padding.left + padding.right;\n viewHeight -= padding.top + padding.bottom;\n }\n if (type === None) {\n left = 0;\n top = 0;\n width = viewWidth;\n height = viewHeight;\n } else if (type === Fit) {\n width = Math.max(0, viewWidth - left - right);\n height = Math.max(0, viewHeight - top - bottom);\n } else if (type === FitX) {\n width = Math.max(0, viewWidth - left - right);\n viewHeight = height + top + bottom;\n } else if (type === FitY) {\n viewWidth = width + left + right;\n height = Math.max(0, viewHeight - top - bottom);\n } else if (type === Pad) {\n viewWidth = width + left + right;\n viewHeight = height + top + bottom;\n }\n view._resizeView(viewWidth, viewHeight, width, height, [left, top], auto.resize);\n}\n\nexport { Bound as bound, Identifier as identifier, Mark as mark, Overlap as overlap, Render as render, ViewLayout as viewlayout };\n","import { Transform, ingest, tupleid, stableCompare } from 'vega-dataflow';\nimport { tickCount, tickFormat, validTicks, tickValues, SymbolLegend, labelFormat, labelValues, GradientLegend, scaleFraction, labelFraction, scale, Sequential, Linear, isContinuous, Time, UTC, Ordinal, scaleImplicit, Log, Sqrt, Pow, Symlog, isLogarithmic, BinOrdinal, isInterpolating, interpolateColors, interpolate, Band, Point, bandSpace, scheme, Threshold, Quantile, Quantize, quantizeInterpolator, interpolateRange, Diverging } from 'vega-scale';\nimport { inherits, isArray, error, fastmap, falsy, isFunction, constant, peek, one, toSet, isString, zoomLog, zoomPow, zoomSymlog, zoomLinear, stringValue } from 'vega-util';\nimport { sum, range } from 'd3-array';\nimport { interpolateRound, interpolate as interpolate$1 } from 'd3-interpolate';\n\n/**\n * Generates axis ticks for visualizing a spatial scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate ticks for.\n * @param {*} [params.count=10] - The approximate number of ticks, or\n * desired tick interval, to use.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {function(*):string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid d3 4.0 format specifier.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\nfunction AxisTicks(params) {\n Transform.call(this, null, params);\n}\ninherits(AxisTicks, Transform, {\n transform(_, pulse) {\n if (this.value && !_.modified()) {\n return pulse.StopPropagation;\n }\n var locale = pulse.dataflow.locale(),\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n ticks = this.value,\n scale = _.scale,\n tally = _.count == null ? _.values ? _.values.length : 10 : _.count,\n count = tickCount(scale, tally, _.minstep),\n format = _.format || tickFormat(locale, scale, count, _.formatSpecifier, _.formatType, !!_.values),\n values = _.values ? validTicks(scale, _.values, count) : tickValues(scale, count);\n if (ticks) out.rem = ticks;\n ticks = values.map((value, i) => ingest({\n index: i / (values.length - 1 || 1),\n value: value,\n label: format(value)\n }));\n if (_.extra && ticks.length) {\n // add an extra tick pegged to the initial domain value\n // this is used to generate axes with 'binned' domains\n ticks.push(ingest({\n index: -1,\n extra: {\n value: ticks[0].value\n },\n label: ''\n }));\n }\n out.source = ticks;\n out.add = ticks;\n this.value = ticks;\n return out;\n }\n});\n\n/**\n * Joins a set of data elements against a set of visual items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): object} [params.item] - An item generator function.\n * @param {function(object): *} [params.key] - The key field associating data and visual items.\n */\nfunction DataJoin(params) {\n Transform.call(this, null, params);\n}\nfunction defaultItemCreate() {\n return ingest({});\n}\nfunction newMap(key) {\n const map = fastmap().test(t => t.exit);\n map.lookup = t => map.get(key(t));\n return map;\n}\ninherits(DataJoin, Transform, {\n transform(_, pulse) {\n var df = pulse.dataflow,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n item = _.item || defaultItemCreate,\n key = _.key || tupleid,\n map = this.value;\n\n // prevent transient (e.g., hover) requests from\n // cascading across marks derived from marks\n if (isArray(out.encode)) {\n out.encode = null;\n }\n if (map && (_.modified('key') || pulse.modified(key))) {\n error('DataJoin does not support modified key function or fields.');\n }\n if (!map) {\n pulse = pulse.addAll();\n this.value = map = newMap(key);\n }\n pulse.visit(pulse.ADD, t => {\n const k = key(t);\n let x = map.get(k);\n if (x) {\n if (x.exit) {\n map.empty--;\n out.add.push(x);\n } else {\n out.mod.push(x);\n }\n } else {\n x = item(t);\n map.set(k, x);\n out.add.push(x);\n }\n x.datum = t;\n x.exit = false;\n });\n pulse.visit(pulse.MOD, t => {\n const k = key(t),\n x = map.get(k);\n if (x) {\n x.datum = t;\n out.mod.push(x);\n }\n });\n pulse.visit(pulse.REM, t => {\n const k = key(t),\n x = map.get(k);\n if (t === x.datum && !x.exit) {\n out.rem.push(x);\n x.exit = true;\n ++map.empty;\n }\n });\n if (pulse.changed(pulse.ADD_MOD)) out.modifies('datum');\n if (pulse.clean() || _.clean && map.empty > df.cleanThreshold) {\n df.runAfter(map.clean);\n }\n return out;\n }\n});\n\n/**\n * Invokes encoding functions for visual items.\n * @constructor\n * @param {object} params - The parameters to the encoding functions. This\n * parameter object will be passed through to all invoked encoding functions.\n * @param {object} [params.mod=false] - Flag indicating if tuples in the input\n * mod set that are unmodified by encoders should be included in the output.\n * @param {object} param.encoders - The encoding functions\n * @param {function(object, object): boolean} [param.encoders.update] - Update encoding set\n * @param {function(object, object): boolean} [param.encoders.enter] - Enter encoding set\n * @param {function(object, object): boolean} [param.encoders.exit] - Exit encoding set\n */\nfunction Encode(params) {\n Transform.call(this, null, params);\n}\ninherits(Encode, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ADD_REM),\n fmod = _.mod || false,\n encoders = _.encoders,\n encode = pulse.encode;\n\n // if an array, the encode directive includes additional sets\n // that must be defined in order for the primary set to be invoked\n // e.g., only run the update set if the hover set is defined\n if (isArray(encode)) {\n if (out.changed() || encode.every(e => encoders[e])) {\n encode = encode[0];\n out.encode = null; // consume targeted encode directive\n } else {\n return pulse.StopPropagation;\n }\n }\n\n // marshall encoder functions\n var reenter = encode === 'enter',\n update = encoders.update || falsy,\n enter = encoders.enter || falsy,\n exit = encoders.exit || falsy,\n set = (encode && !reenter ? encoders[encode] : update) || falsy;\n if (pulse.changed(pulse.ADD)) {\n pulse.visit(pulse.ADD, t => {\n enter(t, _);\n update(t, _);\n });\n out.modifies(enter.output);\n out.modifies(update.output);\n if (set !== falsy && set !== update) {\n pulse.visit(pulse.ADD, t => {\n set(t, _);\n });\n out.modifies(set.output);\n }\n }\n if (pulse.changed(pulse.REM) && exit !== falsy) {\n pulse.visit(pulse.REM, t => {\n exit(t, _);\n });\n out.modifies(exit.output);\n }\n if (reenter || set !== falsy) {\n const flag = pulse.MOD | (_.modified() ? pulse.REFLOW : 0);\n if (reenter) {\n pulse.visit(flag, t => {\n const mod = enter(t, _) || fmod;\n if (set(t, _) || mod) out.mod.push(t);\n });\n if (out.mod.length) out.modifies(enter.output);\n } else {\n pulse.visit(flag, t => {\n if (set(t, _) || fmod) out.mod.push(t);\n });\n }\n if (out.mod.length) out.modifies(set.output);\n }\n return out.changed() ? out : pulse.StopPropagation;\n }\n});\n\n/**\n * Generates legend entries for visualizing a scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate items for.\n * @param {*} [params.count=5] - The approximate number of items, or\n * desired tick interval, to use.\n * @param {*} [params.limit] - The maximum number of entries to\n * include in a symbol legend.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid D3 format specifier string.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\nfunction LegendEntries(params) {\n Transform.call(this, [], params);\n}\ninherits(LegendEntries, Transform, {\n transform(_, pulse) {\n if (this.value != null && !_.modified()) {\n return pulse.StopPropagation;\n }\n var locale = pulse.dataflow.locale(),\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n items = this.value,\n type = _.type || SymbolLegend,\n scale = _.scale,\n limit = +_.limit,\n count = tickCount(scale, _.count == null ? 5 : _.count, _.minstep),\n lskip = !!_.values || type === SymbolLegend,\n format = _.format || labelFormat(locale, scale, count, type, _.formatSpecifier, _.formatType, lskip),\n values = _.values || labelValues(scale, count),\n domain,\n fraction,\n size,\n offset,\n ellipsis;\n if (items) out.rem = items;\n if (type === SymbolLegend) {\n if (limit && values.length > limit) {\n pulse.dataflow.warn('Symbol legend count exceeds limit, filtering items.');\n items = values.slice(0, limit - 1);\n ellipsis = true;\n } else {\n items = values;\n }\n if (isFunction(size = _.size)) {\n // if first value maps to size zero, remove from list (vega#717)\n if (!_.values && scale(items[0]) === 0) {\n items = items.slice(1);\n }\n // compute size offset for legend entries\n offset = items.reduce((max, value) => Math.max(max, size(value, _)), 0);\n } else {\n size = constant(offset = size || 8);\n }\n items = items.map((value, index) => ingest({\n index: index,\n label: format(value, index, items),\n value: value,\n offset: offset,\n size: size(value, _)\n }));\n if (ellipsis) {\n ellipsis = values[items.length];\n items.push(ingest({\n index: items.length,\n label: `\\u2026${values.length - items.length} entries`,\n value: ellipsis,\n offset: offset,\n size: size(ellipsis, _)\n }));\n }\n } else if (type === GradientLegend) {\n domain = scale.domain(), fraction = scaleFraction(scale, domain[0], peek(domain));\n\n // if automatic label generation produces 2 or fewer values,\n // use the domain end points instead (fixes vega/vega#1364)\n if (values.length < 3 && !_.values && domain[0] !== peek(domain)) {\n values = [domain[0], peek(domain)];\n }\n items = values.map((value, index) => ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: fraction(value)\n }));\n } else {\n size = values.length - 1;\n fraction = labelFraction(scale);\n items = values.map((value, index) => ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: index ? fraction(value) : 0,\n perc2: index === size ? 1 : fraction(values[index + 1])\n }));\n }\n out.source = items;\n out.add = items;\n this.value = items;\n return out;\n }\n});\n\nconst sourceX = t => t.source.x;\nconst sourceY = t => t.source.y;\nconst targetX = t => t.target.x;\nconst targetY = t => t.target.y;\n\n/**\n * Layout paths linking source and target elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction LinkPath(params) {\n Transform.call(this, {}, params);\n}\nLinkPath.Definition = {\n 'type': 'LinkPath',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'sourceX',\n 'type': 'field',\n 'default': 'source.x'\n }, {\n 'name': 'sourceY',\n 'type': 'field',\n 'default': 'source.y'\n }, {\n 'name': 'targetX',\n 'type': 'field',\n 'default': 'target.x'\n }, {\n 'name': 'targetY',\n 'type': 'field',\n 'default': 'target.y'\n }, {\n 'name': 'orient',\n 'type': 'enum',\n 'default': 'vertical',\n 'values': ['horizontal', 'vertical', 'radial']\n }, {\n 'name': 'shape',\n 'type': 'enum',\n 'default': 'line',\n 'values': ['line', 'arc', 'curve', 'diagonal', 'orthogonal']\n }, {\n 'name': 'require',\n 'type': 'signal'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\ninherits(LinkPath, Transform, {\n transform(_, pulse) {\n var sx = _.sourceX || sourceX,\n sy = _.sourceY || sourceY,\n tx = _.targetX || targetX,\n ty = _.targetY || targetY,\n as = _.as || 'path',\n orient = _.orient || 'vertical',\n shape = _.shape || 'line',\n path = Paths.get(shape + '-' + orient) || Paths.get(shape);\n if (!path) {\n error('LinkPath unsupported type: ' + _.shape + (_.orient ? '-' + _.orient : ''));\n }\n pulse.visit(pulse.SOURCE, t => {\n t[as] = path(sx(t), sy(t), tx(t), ty(t));\n });\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\nconst line = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'L' + tx + ',' + ty;\nconst lineR = (sa, sr, ta, tr) => line(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\nconst arc = (sx, sy, tx, ty) => {\n var dx = tx - sx,\n dy = ty - sy,\n rr = Math.hypot(dx, dy) / 2,\n ra = 180 * Math.atan2(dy, dx) / Math.PI;\n return 'M' + sx + ',' + sy + 'A' + rr + ',' + rr + ' ' + ra + ' 0 1' + ' ' + tx + ',' + ty;\n};\nconst arcR = (sa, sr, ta, tr) => arc(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\nconst curve = (sx, sy, tx, ty) => {\n const dx = tx - sx,\n dy = ty - sy,\n ix = 0.2 * (dx + dy),\n iy = 0.2 * (dy - dx);\n return 'M' + sx + ',' + sy + 'C' + (sx + ix) + ',' + (sy + iy) + ' ' + (tx + iy) + ',' + (ty - ix) + ' ' + tx + ',' + ty;\n};\nconst curveR = (sa, sr, ta, tr) => curve(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\nconst orthoX = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'V' + ty + 'H' + tx;\nconst orthoY = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'H' + tx + 'V' + ty;\nconst orthoR = (sa, sr, ta, tr) => {\n const sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n sf = Math.abs(ta - sa) > Math.PI ? ta <= sa : ta > sa;\n return 'M' + sr * sc + ',' + sr * ss + 'A' + sr + ',' + sr + ' 0 0,' + (sf ? 1 : 0) + ' ' + sr * tc + ',' + sr * ts + 'L' + tr * tc + ',' + tr * ts;\n};\nconst diagonalX = (sx, sy, tx, ty) => {\n const m = (sx + tx) / 2;\n return 'M' + sx + ',' + sy + 'C' + m + ',' + sy + ' ' + m + ',' + ty + ' ' + tx + ',' + ty;\n};\nconst diagonalY = (sx, sy, tx, ty) => {\n const m = (sy + ty) / 2;\n return 'M' + sx + ',' + sy + 'C' + sx + ',' + m + ' ' + tx + ',' + m + ' ' + tx + ',' + ty;\n};\nconst diagonalR = (sa, sr, ta, tr) => {\n const sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n mr = (sr + tr) / 2;\n return 'M' + sr * sc + ',' + sr * ss + 'C' + mr * sc + ',' + mr * ss + ' ' + mr * tc + ',' + mr * ts + ' ' + tr * tc + ',' + tr * ts;\n};\nconst Paths = fastmap({\n 'line': line,\n 'line-radial': lineR,\n 'arc': arc,\n 'arc-radial': arcR,\n 'curve': curve,\n 'curve-radial': curveR,\n 'orthogonal-horizontal': orthoX,\n 'orthogonal-vertical': orthoY,\n 'orthogonal-radial': orthoR,\n 'diagonal-horizontal': diagonalX,\n 'diagonal-vertical': diagonalY,\n 'diagonal-radial': diagonalR\n});\n\n/**\n * Pie and donut chart layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size pie segments.\n * @param {number} [params.startAngle=0] - The start angle (in radians) of the layout.\n * @param {number} [params.endAngle=2π] - The end angle (in radians) of the layout.\n * @param {boolean} [params.sort] - Boolean flag for sorting sectors by value.\n */\nfunction Pie(params) {\n Transform.call(this, null, params);\n}\nPie.Definition = {\n 'type': 'Pie',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'startAngle',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'endAngle',\n 'type': 'number',\n 'default': 6.283185307179586\n }, {\n 'name': 'sort',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['startAngle', 'endAngle']\n }]\n};\ninherits(Pie, Transform, {\n transform(_, pulse) {\n var as = _.as || ['startAngle', 'endAngle'],\n startAngle = as[0],\n endAngle = as[1],\n field = _.field || one,\n start = _.startAngle || 0,\n stop = _.endAngle != null ? _.endAngle : 2 * Math.PI,\n data = pulse.source,\n values = data.map(field),\n n = values.length,\n a = start,\n k = (stop - start) / sum(values),\n index = range(n),\n i,\n t,\n v;\n if (_.sort) {\n index.sort((a, b) => values[a] - values[b]);\n }\n for (i = 0; i < n; ++i) {\n v = values[index[i]];\n t = data[index[i]];\n t[startAngle] = a;\n t[endAngle] = a += v * k;\n }\n this.value = values;\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\n\nconst DEFAULT_COUNT = 5;\nfunction includeZero(scale) {\n const type = scale.type;\n return !scale.bins && (type === Linear || type === Pow || type === Sqrt);\n}\nfunction includePad(type) {\n return isContinuous(type) && type !== Sequential;\n}\nconst SKIP = toSet(['set', 'modified', 'clear', 'type', 'scheme', 'schemeExtent', 'schemeCount', 'domain', 'domainMin', 'domainMid', 'domainMax', 'domainRaw', 'domainImplicit', 'nice', 'zero', 'bins', 'range', 'rangeStep', 'round', 'reverse', 'interpolate', 'interpolateGamma']);\n\n/**\n * Maintains a scale function mapping data values to visual channels.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Scale(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\n\ninherits(Scale, Transform, {\n transform(_, pulse) {\n var df = pulse.dataflow,\n scale$1 = this.value,\n key = scaleKey(_);\n if (!scale$1 || key !== scale$1.type) {\n this.value = scale$1 = scale(key)();\n }\n for (key in _) if (!SKIP[key]) {\n // padding is a scale property for band/point but not others\n if (key === 'padding' && includePad(scale$1.type)) continue;\n // invoke scale property setter, raise warning if not found\n isFunction(scale$1[key]) ? scale$1[key](_[key]) : df.warn('Unsupported scale property: ' + key);\n }\n configureRange(scale$1, _, configureBins(scale$1, _, configureDomain(scale$1, _, df)));\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n }\n});\nfunction scaleKey(_) {\n var t = _.type,\n d = '',\n n;\n\n // backwards compatibility pre Vega 5.\n if (t === Sequential) return Sequential + '-' + Linear;\n if (isContinuousColor(_)) {\n n = _.rawDomain ? _.rawDomain.length : _.domain ? _.domain.length + +(_.domainMid != null) : 0;\n d = n === 2 ? Sequential + '-' : n === 3 ? Diverging + '-' : '';\n }\n return (d + t || Linear).toLowerCase();\n}\nfunction isContinuousColor(_) {\n const t = _.type;\n return isContinuous(t) && t !== Time && t !== UTC && (_.scheme || _.range && _.range.length && _.range.every(isString));\n}\nfunction configureDomain(scale, _, df) {\n // check raw domain, if provided use that and exit early\n const raw = rawDomain(scale, _.domainRaw, df);\n if (raw > -1) return raw;\n var domain = _.domain,\n type = scale.type,\n zero = _.zero || _.zero === undefined && includeZero(scale),\n n,\n mid;\n if (!domain) return 0;\n\n // adjust continuous domain for minimum pixel padding\n if (includePad(type) && _.padding && domain[0] !== peek(domain)) {\n domain = padDomain(type, domain, _.range, _.padding, _.exponent, _.constant);\n }\n\n // adjust domain based on zero, min, max settings\n if (zero || _.domainMin != null || _.domainMax != null || _.domainMid != null) {\n n = (domain = domain.slice()).length - 1 || 1;\n if (zero) {\n if (domain[0] > 0) domain[0] = 0;\n if (domain[n] < 0) domain[n] = 0;\n }\n if (_.domainMin != null) domain[0] = _.domainMin;\n if (_.domainMax != null) domain[n] = _.domainMax;\n if (_.domainMid != null) {\n mid = _.domainMid;\n const i = mid > domain[n] ? n + 1 : mid < domain[0] ? 0 : n;\n if (i !== n) df.warn('Scale domainMid exceeds domain min or max.', mid);\n domain.splice(i, 0, mid);\n }\n }\n\n // set the scale domain\n scale.domain(domainCheck(type, domain, df));\n\n // if ordinal scale domain is defined, prevent implicit\n // domain construction as side-effect of scale lookup\n if (type === Ordinal) {\n scale.unknown(_.domainImplicit ? scaleImplicit : undefined);\n }\n\n // perform 'nice' adjustment as requested\n if (_.nice && scale.nice) {\n scale.nice(_.nice !== true && tickCount(scale, _.nice) || null);\n }\n\n // return the cardinality of the domain\n return domain.length;\n}\nfunction rawDomain(scale, raw, df) {\n if (raw) {\n scale.domain(domainCheck(scale.type, raw, df));\n return raw.length;\n } else {\n return -1;\n }\n}\nfunction padDomain(type, domain, range, pad, exponent, constant) {\n var span = Math.abs(peek(range) - range[0]),\n frac = span / (span - 2 * pad),\n d = type === Log ? zoomLog(domain, null, frac) : type === Sqrt ? zoomPow(domain, null, frac, 0.5) : type === Pow ? zoomPow(domain, null, frac, exponent || 1) : type === Symlog ? zoomSymlog(domain, null, frac, constant || 1) : zoomLinear(domain, null, frac);\n domain = domain.slice();\n domain[0] = d[0];\n domain[domain.length - 1] = d[1];\n return domain;\n}\nfunction domainCheck(type, domain, df) {\n if (isLogarithmic(type)) {\n // sum signs of domain values\n // if all pos or all neg, abs(sum) === domain.length\n var s = Math.abs(domain.reduce((s, v) => s + (v < 0 ? -1 : v > 0 ? 1 : 0), 0));\n if (s !== domain.length) {\n df.warn('Log scale domain includes zero: ' + stringValue(domain));\n }\n }\n return domain;\n}\nfunction configureBins(scale, _, count) {\n let bins = _.bins;\n if (bins && !isArray(bins)) {\n // generate bin boundary array\n const domain = scale.domain(),\n lo = domain[0],\n hi = peek(domain),\n step = bins.step;\n let start = bins.start == null ? lo : bins.start,\n stop = bins.stop == null ? hi : bins.stop;\n if (!step) error('Scale bins parameter missing step property.');\n if (start < lo) start = step * Math.ceil(lo / step);\n if (stop > hi) stop = step * Math.floor(hi / step);\n bins = range(start, stop + step / 2, step);\n }\n if (bins) {\n // assign bin boundaries to scale instance\n scale.bins = bins;\n } else if (scale.bins) {\n // no current bins, remove bins if previously set\n delete scale.bins;\n }\n\n // special handling for bin-ordinal scales\n if (scale.type === BinOrdinal) {\n if (!bins) {\n // the domain specifies the bins\n scale.bins = scale.domain();\n } else if (!_.domain && !_.domainRaw) {\n // the bins specify the domain\n scale.domain(bins);\n count = bins.length;\n }\n }\n\n // return domain cardinality\n return count;\n}\nfunction configureRange(scale, _, count) {\n var type = scale.type,\n round = _.round || false,\n range = _.range;\n\n // if range step specified, calculate full range extent\n if (_.rangeStep != null) {\n range = configureRangeStep(type, _, count);\n }\n\n // else if a range scheme is defined, use that\n else if (_.scheme) {\n range = configureScheme(type, _, count);\n if (isFunction(range)) {\n if (scale.interpolator) {\n return scale.interpolator(range);\n } else {\n error(`Scale type ${type} does not support interpolating color schemes.`);\n }\n }\n }\n\n // given a range array for an interpolating scale, convert to interpolator\n if (range && isInterpolating(type)) {\n return scale.interpolator(interpolateColors(flip(range, _.reverse), _.interpolate, _.interpolateGamma));\n }\n\n // configure rounding / interpolation\n if (range && _.interpolate && scale.interpolate) {\n scale.interpolate(interpolate(_.interpolate, _.interpolateGamma));\n } else if (isFunction(scale.round)) {\n scale.round(round);\n } else if (isFunction(scale.rangeRound)) {\n scale.interpolate(round ? interpolateRound : interpolate$1);\n }\n if (range) scale.range(flip(range, _.reverse));\n}\nfunction configureRangeStep(type, _, count) {\n if (type !== Band && type !== Point) {\n error('Only band and point scales support rangeStep.');\n }\n\n // calculate full range based on requested step size and padding\n var outer = (_.paddingOuter != null ? _.paddingOuter : _.padding) || 0,\n inner = type === Point ? 1 : (_.paddingInner != null ? _.paddingInner : _.padding) || 0;\n return [0, _.rangeStep * bandSpace(count, inner, outer)];\n}\nfunction configureScheme(type, _, count) {\n var extent = _.schemeExtent,\n name,\n scheme$1;\n if (isArray(_.scheme)) {\n scheme$1 = interpolateColors(_.scheme, _.interpolate, _.interpolateGamma);\n } else {\n name = _.scheme.toLowerCase();\n scheme$1 = scheme(name);\n if (!scheme$1) error(`Unrecognized scheme name: ${_.scheme}`);\n }\n\n // determine size for potential discrete range\n count = type === Threshold ? count + 1 : type === BinOrdinal ? count - 1 : type === Quantile || type === Quantize ? +_.schemeCount || DEFAULT_COUNT : count;\n\n // adjust and/or quantize scheme as appropriate\n return isInterpolating(type) ? adjustScheme(scheme$1, extent, _.reverse) : isFunction(scheme$1) ? quantizeInterpolator(adjustScheme(scheme$1, extent), count) : type === Ordinal ? scheme$1 : scheme$1.slice(0, count);\n}\nfunction adjustScheme(scheme, extent, reverse) {\n return isFunction(scheme) && (extent || reverse) ? interpolateRange(scheme, flip(extent || [0, 1], reverse)) : scheme;\n}\nfunction flip(array, reverse) {\n return reverse ? array.slice().reverse() : array;\n}\n\n/**\n * Sorts scenegraph items in the pulse source array.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting tuples.\n */\nfunction SortItems(params) {\n Transform.call(this, null, params);\n}\ninherits(SortItems, Transform, {\n transform(_, pulse) {\n const mod = _.modified('sort') || pulse.changed(pulse.ADD) || pulse.modified(_.sort.fields) || pulse.modified('datum');\n if (mod) pulse.source.sort(stableCompare(_.sort));\n this.modified(mod);\n return pulse;\n }\n});\n\nconst Zero = 'zero',\n Center = 'center',\n Normalize = 'normalize',\n DefOutput = ['y0', 'y1'];\n\n/**\n * Stack layout for visualization elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to stack.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {function(object,object): number} [params.sort] - A comparator for stack sorting.\n * @param {string} [offset='zero'] - Stack baseline offset. One of 'zero', 'center', 'normalize'.\n */\nfunction Stack(params) {\n Transform.call(this, null, params);\n}\nStack.Definition = {\n 'type': 'Stack',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'offset',\n 'type': 'enum',\n 'default': Zero,\n 'values': [Zero, Center, Normalize]\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': DefOutput\n }]\n};\ninherits(Stack, Transform, {\n transform(_, pulse) {\n var as = _.as || DefOutput,\n y0 = as[0],\n y1 = as[1],\n sort = stableCompare(_.sort),\n field = _.field || one,\n stack = _.offset === Center ? stackCenter : _.offset === Normalize ? stackNormalize : stackZero,\n groups,\n i,\n n,\n max;\n\n // partition, sum, and sort the stack groups\n groups = partition(pulse.source, _.groupby, sort, field);\n\n // compute stack layouts per group\n for (i = 0, n = groups.length, max = groups.max; i < n; ++i) {\n stack(groups[i], max, field, y0, y1);\n }\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\nfunction stackCenter(group, max, field, y0, y1) {\n var last = (max - group.sum) / 2,\n m = group.length,\n j = 0,\n t;\n for (; j < m; ++j) {\n t = group[j];\n t[y0] = last;\n t[y1] = last += Math.abs(field(t));\n }\n}\nfunction stackNormalize(group, max, field, y0, y1) {\n var scale = 1 / group.sum,\n last = 0,\n m = group.length,\n j = 0,\n v = 0,\n t;\n for (; j < m; ++j) {\n t = group[j];\n t[y0] = last;\n t[y1] = last = scale * (v += Math.abs(field(t)));\n }\n}\nfunction stackZero(group, max, field, y0, y1) {\n var lastPos = 0,\n lastNeg = 0,\n m = group.length,\n j = 0,\n v,\n t;\n for (; j < m; ++j) {\n t = group[j];\n v = +field(t);\n if (v < 0) {\n t[y0] = lastNeg;\n t[y1] = lastNeg += v;\n } else {\n t[y0] = lastPos;\n t[y1] = lastPos += v;\n }\n }\n}\nfunction partition(data, groupby, sort, field) {\n var groups = [],\n get = f => f(t),\n map,\n i,\n n,\n m,\n t,\n k,\n g,\n s,\n max;\n\n // partition data points into stack groups\n if (groupby == null) {\n groups.push(data.slice());\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n groups.push(g);\n }\n g.push(t);\n }\n }\n\n // compute sums of groups, sort groups as needed\n for (k = 0, max = 0, m = groups.length; k < m; ++k) {\n g = groups[k];\n for (i = 0, s = 0, n = g.length; i < n; ++i) {\n s += Math.abs(field(g[i]));\n }\n g.sum = s;\n if (s > max) max = s;\n if (sort) g.sort(sort);\n }\n groups.max = max;\n return groups;\n}\n\nexport { AxisTicks as axisticks, DataJoin as datajoin, Encode as encode, LegendEntries as legendentries, LinkPath as linkpath, Pie as pie, Scale as scale, SortItems as sortitems, Stack as stack };\n","export var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var ceil = Math.ceil;\nexport var cos = Math.cos;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var pow = Math.pow;\nexport var round = Math.round;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sin = Math.sin;\nexport var tan = Math.tan;\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var sqrt1_2 = Math.SQRT1_2;\nexport var sqrt2 = sqrt(2);\nexport var sqrtPi = sqrt(pi);\nexport var tau = pi * 2;\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport function sinci(x) {\n return x ? x / Math.sin(x) : 1;\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function sqrt(x) {\n return x > 0 ? Math.sqrt(x) : 0;\n}\n\nexport function tanh(x) {\n x = exp(2 * x);\n return (x - 1) / (x + 1);\n}\n\nexport function sinh(x) {\n return (exp(x) - exp(-x)) / 2;\n}\n\nexport function cosh(x) {\n return (exp(x) + exp(-x)) / 2;\n}\n\nexport function arsinh(x) {\n return log(x + sqrt(x * x + 1));\n}\n\nexport function arcosh(x) {\n return log(x + sqrt(x * x - 1));\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, cos, epsilon, halfPi, pi, sin, sqrt2} from \"./math.js\";\n\nexport function mollweideBromleyTheta(cp, phi) {\n var cpsinPhi = cp * sin(phi), i = 30, delta;\n do phi -= delta = (phi + sin(phi) - cpsinPhi) / (1 + cos(phi));\n while (abs(delta) > epsilon && --i > 0);\n return phi / 2;\n}\n\nexport function mollweideBromleyRaw(cx, cy, cp) {\n\n function forward(lambda, phi) {\n return [cx * lambda * cos(phi = mollweideBromleyTheta(cp, phi)), cy * sin(phi)];\n }\n\n forward.invert = function(x, y) {\n return y = asin(y / cy), [x / (cx * cos(y)), asin((2 * y + sin(2 * y)) / cp)];\n };\n\n return forward;\n}\n\nexport var mollweideRaw = mollweideBromleyRaw(sqrt2 / halfPi, sqrt2, pi);\n\nexport default function() {\n return projection(mollweideRaw)\n .scale(169.529);\n}\n","import { geoPath, geoAlbers, geoAlbersUsa, geoAzimuthalEqualArea, geoAzimuthalEquidistant, geoConicConformal, geoConicEqualArea, geoConicEquidistant, geoEqualEarth, geoEquirectangular, geoGnomonic, geoIdentity, geoMercator, geoNaturalEarth1, geoOrthographic, geoStereographic, geoTransverseMercator } from 'd3-geo';\nimport { geoMollweide } from 'd3-geo-projection';\nimport { registerScale } from 'vega-scale';\n\nconst defaultPath = geoPath();\nconst projectionProperties = [\n// standard properties in d3-geo\n'clipAngle', 'clipExtent', 'scale', 'translate', 'center', 'rotate', 'parallels', 'precision', 'reflectX', 'reflectY',\n// extended properties in d3-geo-projections\n'coefficient', 'distance', 'fraction', 'lobes', 'parallel', 'radius', 'ratio', 'spacing', 'tilt'];\n\n/**\n * Augment projections with their type and a copy method.\n */\nfunction create(type, constructor) {\n return function projection() {\n const p = constructor();\n p.type = type;\n p.path = geoPath().projection(p);\n p.copy = p.copy || function () {\n const c = projection();\n projectionProperties.forEach(prop => {\n if (p[prop]) c[prop](p[prop]());\n });\n c.path.pointRadius(p.path.pointRadius());\n return c;\n };\n return registerScale(p);\n };\n}\nfunction projection(type, proj) {\n if (!type || typeof type !== 'string') {\n throw new Error('Projection type must be a name string.');\n }\n type = type.toLowerCase();\n if (arguments.length > 1) {\n projections[type] = create(type, proj);\n return this;\n } else {\n return projections[type] || null;\n }\n}\nfunction getProjectionPath(proj) {\n return proj && proj.path || defaultPath;\n}\nconst projections = {\n // base d3-geo projection types\n albers: geoAlbers,\n albersusa: geoAlbersUsa,\n azimuthalequalarea: geoAzimuthalEqualArea,\n azimuthalequidistant: geoAzimuthalEquidistant,\n conicconformal: geoConicConformal,\n conicequalarea: geoConicEqualArea,\n conicequidistant: geoConicEquidistant,\n equalEarth: geoEqualEarth,\n equirectangular: geoEquirectangular,\n gnomonic: geoGnomonic,\n identity: geoIdentity,\n mercator: geoMercator,\n mollweide: geoMollweide,\n naturalEarth1: geoNaturalEarth1,\n orthographic: geoOrthographic,\n stereographic: geoStereographic,\n transversemercator: geoTransverseMercator\n};\nfor (const key in projections) {\n projection(key, projections[key]);\n}\n\nexport { getProjectionPath, projection, projectionProperties };\n","import { Transform, rederive, ingest, replace } from 'vega-dataflow';\nimport { error, extent, inherits, identity, isArray, isFunction, isNumber, array, constant, one, accessorName, accessorFields, field, extend, toSet, zero } from 'vega-util';\nimport { tickStep, range, max, sum } from 'd3-array';\nimport { bandwidthNRD } from 'vega-statistics';\nimport { getProjectionPath, projectionProperties, projection } from 'vega-projection';\nimport { geoGraticule } from 'd3-geo';\nimport { rgb } from 'd3-color';\nimport { canvas } from 'vega-canvas';\n\nfunction noop() {}\nconst cases = [[], [[[1.0, 1.5], [0.5, 1.0]]], [[[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [0.5, 1.0]]], [[[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 0.5], [1.0, 1.5]]], [[[1.0, 0.5], [0.5, 1.0]]], [[[0.5, 1.0], [1.0, 0.5]]], [[[1.0, 1.5], [1.0, 0.5]]], [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [1.0, 0.5]]], [[[0.5, 1.0], [1.5, 1.0]]], [[[1.0, 1.5], [1.5, 1.0]]], [[[0.5, 1.0], [1.0, 1.5]]], []];\n\n// Implementation adapted from d3/d3-contour. Thanks!\nfunction contours () {\n var dx = 1,\n dy = 1,\n smooth = smoothLinear;\n function contours(values, tz) {\n return tz.map(value => contour(values, value));\n }\n\n // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n function contour(values, value) {\n var polygons = [],\n holes = [];\n isorings(values, value, ring => {\n smooth(ring, values, value);\n if (area(ring) > 0) polygons.push([ring]);else holes.push(ring);\n });\n holes.forEach(hole => {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n return {\n type: 'MultiPolygon',\n value: value,\n coordinates: polygons\n };\n }\n\n // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n function isorings(values, value, callback) {\n var fragmentByStart = new Array(),\n fragmentByEnd = new Array(),\n x,\n y,\n t0,\n t1,\n t2,\n t3;\n\n // Special case for the first row (y = -1, t2 = t3 = 0).\n x = y = -1;\n t1 = values[0] >= value;\n cases[t1 << 1].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[x + 1] >= value;\n cases[t0 | t1 << 1].forEach(stitch);\n }\n cases[t1 << 0].forEach(stitch);\n\n // General case for the intermediate rows.\n while (++y < dy - 1) {\n x = -1;\n t1 = values[y * dx + dx] >= value;\n t2 = values[y * dx] >= value;\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t1 | t2 << 3].forEach(stitch);\n }\n\n // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t2 << 3].forEach(stitch);\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f,\n g;\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {\n start: f.start,\n end: g.end,\n ring: f.ring.concat(g.ring)\n };\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {\n start: g.start,\n end: f.end,\n ring: g.ring.concat(f.ring)\n };\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {\n start: startIndex,\n end: endIndex,\n ring: [start, end]\n };\n }\n }\n }\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n function smoothLinear(ring, values, value) {\n ring.forEach(point => {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v0,\n v1 = values[yt * dx + xt];\n if (x > 0 && x < dx && xt === x) {\n v0 = values[yt * dx + xt - 1];\n point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n }\n if (y > 0 && y < dy && yt === y) {\n v0 = values[(yt - 1) * dx + xt];\n point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n }\n });\n }\n contours.contour = contour;\n contours.size = function (_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.floor(_[0]),\n _1 = Math.floor(_[1]);\n if (!(_0 >= 0 && _1 >= 0)) error('invalid size');\n return dx = _0, dy = _1, contours;\n };\n contours.smooth = function (_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n };\n return contours;\n}\nfunction area(ring) {\n var i = 0,\n n = ring.length,\n area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n return area;\n}\nfunction contains(ring, hole) {\n var i = -1,\n n = hole.length,\n c;\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n return 0;\n}\nfunction ringContains(ring, point) {\n var x = point[0],\n y = point[1],\n contains = -1;\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i],\n xi = pi[0],\n yi = pi[1],\n pj = ring[j],\n xj = pj[0],\n yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi) contains = -contains;\n }\n return contains;\n}\nfunction segmentContains(a, b, c) {\n var i;\n return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n\nfunction quantize (k, nice, zero) {\n return function (values) {\n var ex = extent(values),\n start = zero ? Math.min(ex[0], 0) : ex[0],\n stop = ex[1],\n span = stop - start,\n step = nice ? tickStep(start, stop, k) : span / (k + 1);\n return range(start + step, stop, step);\n };\n}\n\n/**\n * Generate isocontours (level sets) based on input raster grid data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} [params.field] - The field with raster grid\n * data. If unspecified, the tuple itself is interpreted as a raster grid.\n * @param {Array} [params.thresholds] - Contour threshold array. If\n * specified, the levels, nice, resolve, and zero parameters are ignored.\n * @param {number} [params.levels] - The desired number of contour levels.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified levels.\n * @param {string} [params.resolve] - The method for resolving thresholds\n * across multiple input grids. If 'independent' (the default), threshold\n * calculation will be performed separately for each grid. If 'shared', a\n * single set of threshold values will be used for all input grids.\n * @param {boolean} [params.zero] - Boolean flag indicating if the contour\n * threshold values should include zero.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n * @param {boolean} [params.scale] - Optional numerical value by which to\n * scale the output isocontour coordinates. This parameter can be useful\n * to scale the contours to match a desired output resolution.\n * @param {string} [params.as='contour'] - The output field in which to store\n * the generated isocontour data (default 'contour').\n */\nfunction Isocontour(params) {\n Transform.call(this, null, params);\n}\nIsocontour.Definition = {\n 'type': 'Isocontour',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'thresholds',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'levels',\n 'type': 'number'\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'zero',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'scale',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'translate',\n 'type': 'number',\n 'array': true,\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'default': 'contour'\n }]\n};\ninherits(Isocontour, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n source = pulse.materialize(pulse.SOURCE).source,\n field = _.field || identity,\n contour = contours().smooth(_.smooth !== false),\n tz = _.thresholds || levels(source, field, _),\n as = _.as === null ? null : _.as || 'contour',\n values = [];\n source.forEach(t => {\n const grid = field(t);\n\n // generate contour paths in GeoJSON format\n const paths = contour.size([grid.width, grid.height])(grid.values, isArray(tz) ? tz : tz(grid.values));\n\n // adjust contour path coordinates as needed\n transformPaths(paths, grid, t, _);\n\n // ingest; copy source data properties to output\n paths.forEach(p => {\n values.push(rederive(t, ingest(as != null ? {\n [as]: p\n } : p)));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = values;\n return out;\n }\n});\nfunction levels(values, f, _) {\n const q = quantize(_.levels || 10, _.nice, _.zero !== false);\n return _.resolve !== 'shared' ? q : q(values.map(t => max(f(t).values)));\n}\nfunction transformPaths(paths, grid, datum, _) {\n let s = _.scale || grid.scale,\n t = _.translate || grid.translate;\n if (isFunction(s)) s = s(datum, _);\n if (isFunction(t)) t = t(datum, _);\n if ((s === 1 || s == null) && !t) return;\n const sx = (isNumber(s) ? s : s[0]) || 1,\n sy = (isNumber(s) ? s : s[1]) || 1,\n tx = t && t[0] || 0,\n ty = t && t[1] || 0;\n paths.forEach(transform(grid, sx, sy, tx, ty));\n}\nfunction transform(grid, sx, sy, tx, ty) {\n const x1 = grid.x1 || 0,\n y1 = grid.y1 || 0,\n flip = sx * sy < 0;\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n function transformRing(coordinates) {\n if (flip) coordinates.reverse(); // maintain winding order\n coordinates.forEach(transformPoint);\n }\n function transformPoint(coordinates) {\n coordinates[0] = (coordinates[0] - x1) * sx + tx;\n coordinates[1] = (coordinates[1] - y1) * sy + ty;\n }\n return function (geometry) {\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n };\n}\n\nfunction radius(bw, data, f) {\n const v = bw >= 0 ? bw : bandwidthNRD(data, f);\n return Math.round((Math.sqrt(4 * v * v + 1) - 1) / 2);\n}\nfunction number(_) {\n return isFunction(_) ? _ : constant(+_);\n}\n\n// Implementation adapted from d3/d3-contour. Thanks!\nfunction density2D () {\n var x = d => d[0],\n y = d => d[1],\n weight = one,\n bandwidth = [-1, -1],\n dx = 960,\n dy = 500,\n k = 2; // log2(cellSize)\n\n function density(data, counts) {\n const rx = radius(bandwidth[0], data, x) >> k,\n // blur x-radius\n ry = radius(bandwidth[1], data, y) >> k,\n // blur y-radius\n ox = rx ? rx + 2 : 0,\n // x-offset padding for blur\n oy = ry ? ry + 2 : 0,\n // y-offset padding for blur\n n = 2 * ox + (dx >> k),\n // grid width\n m = 2 * oy + (dy >> k),\n // grid height\n values0 = new Float32Array(n * m),\n values1 = new Float32Array(n * m);\n let values = values0;\n data.forEach(d => {\n const xi = ox + (+x(d) >> k),\n yi = oy + (+y(d) >> k);\n if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n values0[xi + yi * n] += +weight(d);\n }\n });\n if (rx > 0 && ry > 0) {\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n } else if (rx > 0) {\n blurX(n, m, values0, values1, rx);\n blurX(n, m, values1, values0, rx);\n blurX(n, m, values0, values1, rx);\n values = values1;\n } else if (ry > 0) {\n blurY(n, m, values0, values1, ry);\n blurY(n, m, values1, values0, ry);\n blurY(n, m, values0, values1, ry);\n values = values1;\n }\n\n // scale density estimates\n // density in points per square pixel or probability density\n const s = counts ? Math.pow(2, -2 * k) : 1 / sum(values);\n for (let i = 0, sz = n * m; i < sz; ++i) values[i] *= s;\n return {\n values: values,\n scale: 1 << k,\n width: n,\n height: m,\n x1: ox,\n y1: oy,\n x2: ox + (dx >> k),\n y2: oy + (dy >> k)\n };\n }\n density.x = function (_) {\n return arguments.length ? (x = number(_), density) : x;\n };\n density.y = function (_) {\n return arguments.length ? (y = number(_), density) : y;\n };\n density.weight = function (_) {\n return arguments.length ? (weight = number(_), density) : weight;\n };\n density.size = function (_) {\n if (!arguments.length) return [dx, dy];\n var _0 = +_[0],\n _1 = +_[1];\n if (!(_0 >= 0 && _1 >= 0)) error('invalid size');\n return dx = _0, dy = _1, density;\n };\n density.cellSize = function (_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) error('invalid cell size');\n k = Math.floor(Math.log(_) / Math.LN2);\n return density;\n };\n density.bandwidth = function (_) {\n if (!arguments.length) return bandwidth;\n _ = array(_);\n if (_.length === 1) _ = [+_[0], +_[0]];\n if (_.length !== 2) error('invalid bandwidth');\n return bandwidth = _, density;\n };\n return density;\n}\nfunction blurX(n, m, source, target, r) {\n const w = (r << 1) + 1;\n for (let j = 0; j < m; ++j) {\n for (let i = 0, sr = 0; i < n + r; ++i) {\n if (i < n) {\n sr += source[i + j * n];\n }\n if (i >= r) {\n if (i >= w) {\n sr -= source[i - w + j * n];\n }\n target[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n }\n }\n }\n}\nfunction blurY(n, m, source, target, r) {\n const w = (r << 1) + 1;\n for (let i = 0; i < n; ++i) {\n for (let j = 0, sr = 0; j < m + r; ++j) {\n if (j < m) {\n sr += source[i + j * n];\n }\n if (j >= r) {\n if (j >= w) {\n sr -= source[i + (j - w) * n];\n }\n target[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n }\n }\n }\n}\n\n/**\n * Perform 2D kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The [width, height] extent (in\n * units of input pixels) over which to perform density estimation.\n * @param {function(object): number} params.x - The x-coordinate accessor.\n * @param {function(object): number} params.y - The y-coordinate accessor.\n * @param {function(object): number} [params.weight] - The weight accessor.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * This parameter determines the level of spatial approximation. For example,\n * the default value of 4 maps to 2x reductions in both x- and y- dimensions.\n * A value of 1 will result in an output raster grid whose dimensions exactly\n * matches the size parameter.\n * @param {Array} [params.bandwidth] - The KDE kernel bandwidths,\n * in pixels. The input can be a two-element array specifying separate\n * x and y bandwidths, or a single-element array specifying both. If the\n * bandwidth is unspecified or less than zero, the bandwidth will be\n * automatically determined.\n * @param {boolean} [params.counts=false] - A boolean flag indicating if the\n * output values should be probability estimates (false, default) or\n * smoothed counts (true).\n * @param {string} [params.as='grid'] - The output field in which to store\n * the generated raster grid (default 'grid').\n */\nfunction KDE2D(params) {\n Transform.call(this, null, params);\n}\nKDE2D.Definition = {\n 'type': 'KDE2D',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'weight',\n 'type': 'field'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'cellSize',\n 'type': 'number'\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'counts',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'grid'\n }]\n};\nconst PARAMS = ['x', 'y', 'weight', 'size', 'cellSize', 'bandwidth'];\nfunction params(obj, _) {\n PARAMS.forEach(param => _[param] != null ? obj[param](_[param]) : 0);\n return obj;\n}\ninherits(KDE2D, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) return pulse.StopPropagation;\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n kde = params(density2D(), _),\n as = _.as || 'grid',\n values = [];\n function set(t, vals) {\n for (let i = 0; i < names.length; ++i) t[names[i]] = vals[i];\n return t;\n }\n\n // generate density raster grids\n values = groups.map(g => ingest(set({\n [as]: kde(g, _.counts)\n }, g.dims)));\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = values;\n return out;\n }\n});\nfunction partition(data, groupby) {\n var groups = [],\n get = f => f(t),\n map,\n i,\n n,\n t,\n k,\n g;\n\n // partition data points into groups\n if (groupby == null) {\n groups.push(data);\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n g.push(t);\n }\n }\n return groups;\n}\n\n/**\n * Generate contours based on kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The dimensions [width, height] over which to compute contours.\n * If the values parameter is provided, this must be the dimensions of the input data.\n * If density estimation is performed, this is the output view dimensions in pixels.\n * @param {Array} [params.values] - An array of numeric values representing an\n * width x height grid of values over which to compute contours. If unspecified, this\n * transform will instead attempt to compute contours for the kernel density estimate\n * using values drawn from data tuples in the input pulse.\n * @param {function(object): number} [params.x] - The pixel x-coordinate accessor for density estimation.\n * @param {function(object): number} [params.y] - The pixel y-coordinate accessor for density estimation.\n * @param {function(object): number} [params.weight] - The data point weight accessor for density estimation.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * @param {number} [params.bandwidth] - Kernel density estimation bandwidth.\n * @param {Array} [params.thresholds] - Contour threshold array. If\n * this parameter is set, the count and nice parameters will be ignored.\n * @param {number} [params.count] - The desired number of contours.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified count.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n */\nfunction Contour(params) {\n Transform.call(this, null, params);\n}\nContour.Definition = {\n 'type': 'Contour',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'values',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'x',\n 'type': 'field'\n }, {\n 'name': 'y',\n 'type': 'field'\n }, {\n 'name': 'weight',\n 'type': 'field'\n }, {\n 'name': 'cellSize',\n 'type': 'number'\n }, {\n 'name': 'bandwidth',\n 'type': 'number'\n }, {\n 'name': 'count',\n 'type': 'number'\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'thresholds',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': true\n }]\n};\ninherits(Contour, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n contour = contours().smooth(_.smooth !== false),\n values = _.values,\n thresh = _.thresholds || quantize(_.count || 10, _.nice, !!values),\n size = _.size,\n grid,\n post;\n if (!values) {\n values = pulse.materialize(pulse.SOURCE).source;\n grid = params(density2D(), _)(values, true);\n post = transform(grid, grid.scale || 1, grid.scale || 1, 0, 0);\n size = [grid.width, grid.height];\n values = grid.values;\n }\n thresh = isArray(thresh) ? thresh : thresh(values);\n values = contour.size(size)(values, thresh);\n if (post) values.forEach(post);\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = (values || []).map(ingest);\n return out;\n }\n});\n\nconst Feature = 'Feature';\nconst FeatureCollection = 'FeatureCollection';\nconst MultiPoint = 'MultiPoint';\n\n/**\n * Consolidate an array of [longitude, latitude] points or GeoJSON features\n * into a combined GeoJSON object. This transform is particularly useful for\n * combining geo data for a Projection's fit argument. The resulting GeoJSON\n * data is available as this transform's value. Input pulses are unchanged.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.fields] - A two-element array\n * of field accessors for the longitude and latitude values.\n * @param {function(object): *} params.geojson - A field accessor for\n * retrieving GeoJSON feature data.\n */\nfunction GeoJSON(params) {\n Transform.call(this, null, params);\n}\nGeoJSON.Definition = {\n 'type': 'GeoJSON',\n 'metadata': {},\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'geojson',\n 'type': 'field'\n }]\n};\ninherits(GeoJSON, Transform, {\n transform(_, pulse) {\n var features = this._features,\n points = this._points,\n fields = _.fields,\n lon = fields && fields[0],\n lat = fields && fields[1],\n geojson = _.geojson || !fields && identity,\n flag = pulse.ADD,\n mod;\n mod = _.modified() || pulse.changed(pulse.REM) || pulse.modified(accessorFields(geojson)) || lon && pulse.modified(accessorFields(lon)) || lat && pulse.modified(accessorFields(lat));\n if (!this.value || mod) {\n flag = pulse.SOURCE;\n this._features = features = [];\n this._points = points = [];\n }\n if (geojson) {\n pulse.visit(flag, t => features.push(geojson(t)));\n }\n if (lon && lat) {\n pulse.visit(flag, t => {\n var x = lon(t),\n y = lat(t);\n if (x != null && y != null && (x = +x) === x && (y = +y) === y) {\n points.push([x, y]);\n }\n });\n features = features.concat({\n type: Feature,\n geometry: {\n type: MultiPoint,\n coordinates: points\n }\n });\n }\n this.value = {\n type: FeatureCollection,\n features: features\n };\n }\n});\n\n/**\n * Map GeoJSON data to an SVG path string.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='path'] - The output field in which to store\n * the generated path data (default 'path').\n */\nfunction GeoPath(params) {\n Transform.call(this, null, params);\n}\nGeoPath.Definition = {\n 'type': 'GeoPath',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection'\n }, {\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'pointRadius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\ninherits(GeoPath, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n path = this.value,\n field = _.field || identity,\n as = _.as || 'path',\n flag = out.SOURCE;\n if (!path || _.modified()) {\n // parameters updated, reset and reflow\n this.value = path = getProjectionPath(_.projection);\n out.materialize().reflow();\n } else {\n flag = field === identity || pulse.modified(field.fields) ? out.ADD_MOD : out.ADD;\n }\n const prev = initPath(path, _.pointRadius);\n out.visit(flag, t => t[as] = path(field(t)));\n path.pointRadius(prev);\n return out.modifies(as);\n }\n});\nfunction initPath(path, pointRadius) {\n const prev = path.pointRadius();\n path.context(null);\n if (pointRadius != null) {\n path.pointRadius(pointRadius);\n }\n return prev;\n}\n\n/**\n * Geo-code a longitude/latitude point to an x/y coordinate.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {Array} params.fields - A two-element array of\n * field accessors for the longitude and latitude values.\n * @param {Array} [params.as] - A two-element array of field names\n * under which to store the result. Defaults to ['x','y'].\n */\nfunction GeoPoint(params) {\n Transform.call(this, null, params);\n}\nGeoPoint.Definition = {\n 'type': 'GeoPoint',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection',\n 'required': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['x', 'y']\n }]\n};\ninherits(GeoPoint, Transform, {\n transform(_, pulse) {\n var proj = _.projection,\n lon = _.fields[0],\n lat = _.fields[1],\n as = _.as || ['x', 'y'],\n x = as[0],\n y = as[1],\n mod;\n function set(t) {\n const xy = proj([lon(t), lat(t)]);\n if (xy) {\n t[x] = xy[0];\n t[y] = xy[1];\n } else {\n t[x] = undefined;\n t[y] = undefined;\n }\n }\n if (_.modified()) {\n // parameters updated, reflow\n pulse = pulse.materialize().reflow(true).visit(pulse.SOURCE, set);\n } else {\n mod = pulse.modified(lon.fields) || pulse.modified(lat.fields);\n pulse.visit(mod ? pulse.ADD_MOD : pulse.ADD, set);\n }\n return pulse.modifies(as);\n }\n});\n\n/**\n * Annotate items with a geopath shape generator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='shape'] - The output field in which to store\n * the generated path data (default 'shape').\n */\nfunction GeoShape(params) {\n Transform.call(this, null, params);\n}\nGeoShape.Definition = {\n 'type': 'GeoShape',\n 'metadata': {\n 'modifies': true,\n 'nomod': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection'\n }, {\n 'name': 'field',\n 'type': 'field',\n 'default': 'datum'\n }, {\n 'name': 'pointRadius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'shape'\n }]\n};\ninherits(GeoShape, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n shape = this.value,\n as = _.as || 'shape',\n flag = out.ADD;\n if (!shape || _.modified()) {\n // parameters updated, reset and reflow\n this.value = shape = shapeGenerator(getProjectionPath(_.projection), _.field || field('datum'), _.pointRadius);\n out.materialize().reflow();\n flag = out.SOURCE;\n }\n out.visit(flag, t => t[as] = shape);\n return out.modifies(as);\n }\n});\nfunction shapeGenerator(path, field, pointRadius) {\n const shape = pointRadius == null ? _ => path(field(_)) : _ => {\n var prev = path.pointRadius(),\n value = path.pointRadius(pointRadius)(field(_));\n path.pointRadius(prev);\n return value;\n };\n shape.context = _ => {\n path.context(_);\n return shape;\n };\n return shape;\n}\n\n/**\n * GeoJSON feature generator for creating graticules.\n * @constructor\n */\nfunction Graticule(params) {\n Transform.call(this, [], params);\n this.generator = geoGraticule();\n}\nGraticule.Definition = {\n 'type': 'Graticule',\n 'metadata': {\n 'changes': true,\n 'generates': true\n },\n 'params': [{\n 'name': 'extent',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'extentMajor',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'extentMinor',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'step',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'stepMajor',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'default': [90, 360]\n }, {\n 'name': 'stepMinor',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'default': [10, 10]\n }, {\n 'name': 'precision',\n 'type': 'number',\n 'default': 2.5\n }]\n};\ninherits(Graticule, Transform, {\n transform(_, pulse) {\n var src = this.value,\n gen = this.generator,\n t;\n if (!src.length || _.modified()) {\n for (const prop in _) {\n if (isFunction(gen[prop])) {\n gen[prop](_[prop]);\n }\n }\n }\n t = gen();\n if (src.length) {\n pulse.mod.push(replace(src[0], t));\n } else {\n pulse.add.push(ingest(t));\n }\n src[0] = t;\n return pulse;\n }\n});\n\n/**\n * Render a heatmap image for input raster grid data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} [params.field] - The field with raster grid\n * data. If unspecified, the tuple itself is interpreted as a raster grid.\n * @param {string} [params.color] - A constant color value or function for\n * individual pixel color. If a function, it will be invoked with an input\n * object that includes $x, $y, $value, and $max fields for the grid.\n * @param {number} [params.opacity] - A constant opacity value or function for\n * individual pixel opacity. If a function, it will be invoked with an input\n * object that includes $x, $y, $value, and $max fields for the grid.\n * @param {string} [params.resolve] - The method for resolving maximum values\n * across multiple input grids. If 'independent' (the default), maximum\n * calculation will be performed separately for each grid. If 'shared',\n * a single global maximum will be used for all input grids.\n * @param {string} [params.as='image'] - The output field in which to store\n * the generated bitmap canvas images (default 'image').\n */\nfunction Heatmap(params) {\n Transform.call(this, null, params);\n}\nHeatmap.Definition = {\n 'type': 'heatmap',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'color',\n 'type': 'string',\n 'expr': true\n }, {\n 'name': 'opacity',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'image'\n }]\n};\ninherits(Heatmap, Transform, {\n transform(_, pulse) {\n if (!pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n var source = pulse.materialize(pulse.SOURCE).source,\n shared = _.resolve === 'shared',\n field = _.field || identity,\n opacity = opacity_(_.opacity, _),\n color = color_(_.color, _),\n as = _.as || 'image',\n obj = {\n $x: 0,\n $y: 0,\n $value: 0,\n $max: shared ? max(source.map(t => max(field(t).values))) : 0\n };\n source.forEach(t => {\n const v = field(t);\n\n // build proxy data object\n const o = extend({}, t, obj);\n // set maximum value if not globally shared\n if (!shared) o.$max = max(v.values || []);\n\n // generate canvas image\n // optimize color/opacity if not pixel-dependent\n t[as] = toCanvas(v, o, color.dep ? color : constant(color(o)), opacity.dep ? opacity : constant(opacity(o)));\n });\n return pulse.reflow(true).modifies(as);\n }\n});\n\n// get image color function\nfunction color_(color, _) {\n let f;\n if (isFunction(color)) {\n f = obj => rgb(color(obj, _));\n f.dep = dependency(color);\n } else {\n // default to mid-grey\n f = constant(rgb(color || '#888'));\n }\n return f;\n}\n\n// get image opacity function\nfunction opacity_(opacity, _) {\n let f;\n if (isFunction(opacity)) {\n f = obj => opacity(obj, _);\n f.dep = dependency(opacity);\n } else if (opacity) {\n f = constant(opacity);\n } else {\n // default to [0, max] opacity gradient\n f = obj => obj.$value / obj.$max || 0;\n f.dep = true;\n }\n return f;\n}\n\n// check if function depends on individual pixel data\nfunction dependency(f) {\n if (!isFunction(f)) return false;\n const set = toSet(accessorFields(f));\n return set.$x || set.$y || set.$value || set.$max;\n}\n\n// render raster grid to canvas\nfunction toCanvas(grid, obj, color, opacity) {\n const n = grid.width,\n m = grid.height,\n x1 = grid.x1 || 0,\n y1 = grid.y1 || 0,\n x2 = grid.x2 || n,\n y2 = grid.y2 || m,\n val = grid.values,\n value = val ? i => val[i] : zero,\n can = canvas(x2 - x1, y2 - y1),\n ctx = can.getContext('2d'),\n img = ctx.getImageData(0, 0, x2 - x1, y2 - y1),\n pix = img.data;\n for (let j = y1, k = 0; j < y2; ++j) {\n obj.$y = j - y1;\n for (let i = x1, r = j * n; i < x2; ++i, k += 4) {\n obj.$x = i - x1;\n obj.$value = value(i + r);\n const v = color(obj);\n pix[k + 0] = v.r;\n pix[k + 1] = v.g;\n pix[k + 2] = v.b;\n pix[k + 3] = ~~(255 * opacity(obj));\n }\n }\n ctx.putImageData(img, 0, 0);\n return can;\n}\n\n/**\n * Maintains a cartographic projection.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Projection(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\n\ninherits(Projection, Transform, {\n transform(_, pulse) {\n let proj = this.value;\n if (!proj || _.modified('type')) {\n this.value = proj = create(_.type);\n projectionProperties.forEach(prop => {\n if (_[prop] != null) set(proj, prop, _[prop]);\n });\n } else {\n projectionProperties.forEach(prop => {\n if (_.modified(prop)) set(proj, prop, _[prop]);\n });\n }\n if (_.pointRadius != null) proj.path.pointRadius(_.pointRadius);\n if (_.fit) fit(proj, _);\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n }\n});\nfunction fit(proj, _) {\n const data = collectGeoJSON(_.fit);\n _.extent ? proj.fitExtent(_.extent, data) : _.size ? proj.fitSize(_.size, data) : 0;\n}\nfunction create(type) {\n const constructor = projection((type || 'mercator').toLowerCase());\n if (!constructor) error('Unrecognized projection type: ' + type);\n return constructor();\n}\nfunction set(proj, key, value) {\n if (isFunction(proj[key])) proj[key](value);\n}\nfunction collectGeoJSON(data) {\n data = array(data);\n return data.length === 1 ? data[0] : {\n type: FeatureCollection,\n features: data.reduce((a, f) => a.concat(featurize(f)), [])\n };\n}\nfunction featurize(f) {\n return f.type === FeatureCollection ? f.features : array(f).filter(d => d != null).map(d => d.type === Feature ? d : {\n type: Feature,\n geometry: d\n });\n}\n\nexport { Contour as contour, GeoJSON as geojson, GeoPath as geopath, GeoPoint as geopoint, GeoShape as geoshape, Graticule as graticule, Heatmap as heatmap, Isocontour as isocontour, KDE2D as kde2d, Projection as projection };\n","import { Transform } from 'vega-dataflow';\nimport { inherits, array, isFunction, accessorFields, hasOwnProperty, error } from 'vega-util';\nimport { forceSimulation, forceCenter, forceCollide, forceManyBody, forceLink, forceX, forceY } from 'd3-force';\n\nconst ForceMap = {\n center: forceCenter,\n collide: forceCollide,\n nbody: forceManyBody,\n link: forceLink,\n x: forceX,\n y: forceY\n};\nconst Forces = 'forces',\n ForceParams = ['alpha', 'alphaMin', 'alphaTarget', 'velocityDecay', 'forces'],\n ForceConfig = ['static', 'iterations'],\n ForceOutput = ['x', 'y', 'vx', 'vy'];\n\n/**\n * Force simulation layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.forces - The forces to apply.\n */\nfunction Force(params) {\n Transform.call(this, null, params);\n}\nForce.Definition = {\n 'type': 'Force',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'static',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'restart',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 300\n }, {\n 'name': 'alpha',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'alphaMin',\n 'type': 'number',\n 'default': 0.001\n }, {\n 'name': 'alphaTarget',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'velocityDecay',\n 'type': 'number',\n 'default': 0.4\n }, {\n 'name': 'forces',\n 'type': 'param',\n 'array': true,\n 'params': [{\n 'key': {\n 'force': 'center'\n },\n 'params': [{\n 'name': 'x',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'y',\n 'type': 'number',\n 'default': 0\n }]\n }, {\n 'key': {\n 'force': 'collide'\n },\n 'params': [{\n 'name': 'radius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.7\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 1\n }]\n }, {\n 'key': {\n 'force': 'nbody'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': -30,\n 'expr': true\n }, {\n 'name': 'theta',\n 'type': 'number',\n 'default': 0.9\n }, {\n 'name': 'distanceMin',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'distanceMax',\n 'type': 'number'\n }]\n }, {\n 'key': {\n 'force': 'link'\n },\n 'params': [{\n 'name': 'links',\n 'type': 'data'\n }, {\n 'name': 'id',\n 'type': 'field'\n }, {\n 'name': 'distance',\n 'type': 'number',\n 'default': 30,\n 'expr': true\n }, {\n 'name': 'strength',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 1\n }]\n }, {\n 'key': {\n 'force': 'x'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.1\n }, {\n 'name': 'x',\n 'type': 'field'\n }]\n }, {\n 'key': {\n 'force': 'y'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.1\n }, {\n 'name': 'y',\n 'type': 'field'\n }]\n }]\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'modify': false,\n 'default': ForceOutput\n }]\n};\ninherits(Force, Transform, {\n transform(_, pulse) {\n var sim = this.value,\n change = pulse.changed(pulse.ADD_REM),\n params = _.modified(ForceParams),\n iters = _.iterations || 300;\n\n // configure simulation\n if (!sim) {\n this.value = sim = simulation(pulse.source, _);\n sim.on('tick', rerun(pulse.dataflow, this));\n if (!_.static) {\n change = true;\n sim.tick(); // ensure we run on init\n }\n\n pulse.modifies('index');\n } else {\n if (change) {\n pulse.modifies('index');\n sim.nodes(pulse.source);\n }\n if (params || pulse.changed(pulse.MOD)) {\n setup(sim, _, 0, pulse);\n }\n }\n\n // run simulation\n if (params || change || _.modified(ForceConfig) || pulse.changed() && _.restart) {\n sim.alpha(Math.max(sim.alpha(), _.alpha || 1)).alphaDecay(1 - Math.pow(sim.alphaMin(), 1 / iters));\n if (_.static) {\n for (sim.stop(); --iters >= 0;) sim.tick();\n } else {\n if (sim.stopped()) sim.restart();\n if (!change) return pulse.StopPropagation; // defer to sim ticks\n }\n }\n\n return this.finish(_, pulse);\n },\n finish(_, pulse) {\n const dataflow = pulse.dataflow;\n\n // inspect dependencies, touch link source data\n for (let args = this._argops, j = 0, m = args.length, arg; j < m; ++j) {\n arg = args[j];\n if (arg.name !== Forces || arg.op._argval.force !== 'link') {\n continue;\n }\n for (var ops = arg.op._argops, i = 0, n = ops.length, op; i < n; ++i) {\n if (ops[i].name === 'links' && (op = ops[i].op.source)) {\n dataflow.pulse(op, dataflow.changeset().reflow());\n break;\n }\n }\n }\n\n // reflow all nodes\n return pulse.reflow(_.modified()).modifies(ForceOutput);\n }\n});\nfunction rerun(df, op) {\n return () => df.touch(op).run();\n}\nfunction simulation(nodes, _) {\n const sim = forceSimulation(nodes),\n stop = sim.stop,\n restart = sim.restart;\n let stopped = false;\n sim.stopped = () => stopped;\n sim.restart = () => (stopped = false, restart());\n sim.stop = () => (stopped = true, stop());\n return setup(sim, _, true).on('end', () => stopped = true);\n}\nfunction setup(sim, _, init, pulse) {\n var f = array(_.forces),\n i,\n n,\n p,\n name;\n for (i = 0, n = ForceParams.length; i < n; ++i) {\n p = ForceParams[i];\n if (p !== Forces && _.modified(p)) sim[p](_[p]);\n }\n for (i = 0, n = f.length; i < n; ++i) {\n name = Forces + i;\n p = init || _.modified(Forces, i) ? getForce(f[i]) : pulse && modified(f[i], pulse) ? sim.force(name) : null;\n if (p) sim.force(name, p);\n }\n for (n = sim.numForces || 0; i < n; ++i) {\n sim.force(Forces + i, null); // remove\n }\n\n sim.numForces = f.length;\n return sim;\n}\nfunction modified(f, pulse) {\n var k, v;\n for (k in f) {\n if (isFunction(v = f[k]) && pulse.modified(accessorFields(v))) return 1;\n }\n return 0;\n}\nfunction getForce(_) {\n var f, p;\n if (!hasOwnProperty(ForceMap, _.force)) {\n error('Unrecognized force: ' + _.force);\n }\n f = ForceMap[_.force]();\n for (p in _) {\n if (isFunction(f[p])) setForceParam(f[p], _[p], _);\n }\n return f;\n}\nfunction setForceParam(f, v, _) {\n f(isFunction(v) ? d => v(d, _) : v);\n}\n\nexport { Force as force };\n","import { Transform, isTuple, ingest, tupleid, stableCompare } from 'vega-dataflow';\nimport { inherits, error, array, one, truthy, hasOwnProperty } from 'vega-util';\nimport { hierarchy, pack, partition, stratify, tree, cluster, treemap, treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, treemapResquarify } from 'd3-hierarchy';\n\n// Build lookup table mapping tuple keys to tree node instances\nfunction lookup (tree, key, filter) {\n const map = {};\n tree.each(node => {\n const t = node.data;\n if (filter(t)) map[key(t)] = node;\n });\n tree.lookup = map;\n return tree;\n}\n\n/**\n * Nest tuples into a tree structure, grouped by key values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.keys - The key fields to nest by, in order.\n * @param {boolean} [params.generate=false] - A boolean flag indicating if\n * non-leaf nodes generated by this transform should be included in the\n * output. The default (false) includes only the input data (leaf nodes)\n * in the data stream.\n */\nfunction Nest(params) {\n Transform.call(this, null, params);\n}\nNest.Definition = {\n 'type': 'Nest',\n 'metadata': {\n 'treesource': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'keys',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'generate',\n 'type': 'boolean'\n }]\n};\nconst children = n => n.values;\ninherits(Nest, Transform, {\n transform(_, pulse) {\n if (!pulse.source) {\n error('Nest transform requires an upstream data source.');\n }\n var gen = _.generate,\n mod = _.modified(),\n out = pulse.clone(),\n tree = this.value;\n if (!tree || mod || pulse.changed()) {\n // collect nodes to remove\n if (tree) {\n tree.each(node => {\n if (node.children && isTuple(node.data)) {\n out.rem.push(node.data);\n }\n });\n }\n\n // generate new tree structure\n this.value = tree = hierarchy({\n values: array(_.keys).reduce((n, k) => {\n n.key(k);\n return n;\n }, nest()).entries(out.source)\n }, children);\n\n // collect nodes to add\n if (gen) {\n tree.each(node => {\n if (node.children) {\n node = ingest(node.data);\n out.add.push(node);\n out.source.push(node);\n }\n });\n }\n\n // build lookup table\n lookup(tree, tupleid, tupleid);\n }\n out.source.root = tree;\n return out;\n }\n});\nfunction nest() {\n const keys = [],\n nest = {\n entries: array => entries(apply(array, 0), 0),\n key: d => (keys.push(d), nest)\n };\n function apply(array, depth) {\n if (depth >= keys.length) {\n return array;\n }\n const n = array.length,\n key = keys[depth++],\n valuesByKey = {},\n result = {};\n let i = -1,\n keyValue,\n value,\n values;\n while (++i < n) {\n keyValue = key(value = array[i]) + '';\n if (values = valuesByKey[keyValue]) {\n values.push(value);\n } else {\n valuesByKey[keyValue] = [value];\n }\n }\n for (keyValue in valuesByKey) {\n result[keyValue] = apply(valuesByKey[keyValue], depth);\n }\n return result;\n }\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n const array = [];\n for (const key in map) {\n array.push({\n key,\n values: entries(map[key], depth)\n });\n }\n return array;\n }\n return nest;\n}\n\n/**\n * Abstract class for tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction HierarchyLayout(params) {\n Transform.call(this, null, params);\n}\nconst defaultSeparation = (a, b) => a.parent === b.parent ? 1 : 2;\ninherits(HierarchyLayout, Transform, {\n transform(_, pulse) {\n if (!pulse.source || !pulse.source.root) {\n error(this.constructor.name + ' transform requires a backing tree data source.');\n }\n const layout = this.layout(_.method),\n fields = this.fields,\n root = pulse.source.root,\n as = _.as || fields;\n if (_.field) root.sum(_.field);else root.count();\n if (_.sort) root.sort(stableCompare(_.sort, d => d.data));\n setParams(layout, this.params, _);\n if (layout.separation) {\n layout.separation(_.separation !== false ? defaultSeparation : one);\n }\n try {\n this.value = layout(root);\n } catch (err) {\n error(err);\n }\n root.each(node => setFields(node, fields, as));\n return pulse.reflow(_.modified()).modifies(as).modifies('leaf');\n }\n});\nfunction setParams(layout, params, _) {\n for (let p, i = 0, n = params.length; i < n; ++i) {\n p = params[i];\n if (p in _) layout[p](_[p]);\n }\n}\nfunction setFields(node, fields, as) {\n const t = node.data,\n n = fields.length - 1;\n for (let i = 0; i < n; ++i) {\n t[as[i]] = node[fields[i]];\n }\n t[as[n]] = node.children ? node.children.length : 0;\n}\n\nconst Output$3 = ['x', 'y', 'r', 'depth', 'children'];\n\n/**\n * Packed circle tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\nfunction Pack(params) {\n HierarchyLayout.call(this, params);\n}\nPack.Definition = {\n 'type': 'Pack',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'radius',\n 'type': 'field',\n 'default': null\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$3.length,\n 'default': Output$3\n }]\n};\ninherits(Pack, HierarchyLayout, {\n layout: pack,\n params: ['radius', 'size', 'padding'],\n fields: Output$3\n});\n\nconst Output$2 = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n\n/**\n * Partition tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\nfunction Partition(params) {\n HierarchyLayout.call(this, params);\n}\nPartition.Definition = {\n 'type': 'Partition',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'round',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$2.length,\n 'default': Output$2\n }]\n};\ninherits(Partition, HierarchyLayout, {\n layout: partition,\n params: ['size', 'round', 'padding'],\n fields: Output$2\n});\n\n/**\n * Stratify a collection of tuples into a tree structure based on\n * id and parent id fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.key - Unique key field for each tuple.\n * @param {function(object): *} params.parentKey - Field with key for parent tuple.\n */\nfunction Stratify(params) {\n Transform.call(this, null, params);\n}\nStratify.Definition = {\n 'type': 'Stratify',\n 'metadata': {\n 'treesource': true\n },\n 'params': [{\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'parentKey',\n 'type': 'field',\n 'required': true\n }]\n};\ninherits(Stratify, Transform, {\n transform(_, pulse) {\n if (!pulse.source) {\n error('Stratify transform requires an upstream data source.');\n }\n let tree = this.value;\n const mod = _.modified(),\n out = pulse.fork(pulse.ALL).materialize(pulse.SOURCE),\n run = !tree || mod || pulse.changed(pulse.ADD_REM) || pulse.modified(_.key.fields) || pulse.modified(_.parentKey.fields);\n\n // prevent upstream source pollution\n out.source = out.source.slice();\n if (run) {\n tree = out.source.length ? lookup(stratify().id(_.key).parentId(_.parentKey)(out.source), _.key, truthy) : lookup(stratify()([{}]), _.key, _.key);\n }\n out.source.root = this.value = tree;\n return out;\n }\n});\n\nconst Layouts = {\n tidy: tree,\n cluster: cluster\n};\nconst Output$1 = ['x', 'y', 'depth', 'children'];\n\n/**\n * Tree layout. Depending on the method parameter, performs either\n * Reingold-Tilford 'tidy' layout or dendrogram 'cluster' layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Tree(params) {\n HierarchyLayout.call(this, params);\n}\nTree.Definition = {\n 'type': 'Tree',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'tidy',\n 'values': ['tidy', 'cluster']\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'nodeSize',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'separation',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$1.length,\n 'default': Output$1\n }]\n};\ninherits(Tree, HierarchyLayout, {\n /**\n * Tree layout generator. Supports both 'tidy' and 'cluster' layouts.\n */\n layout(method) {\n const m = method || 'tidy';\n if (hasOwnProperty(Layouts, m)) return Layouts[m]();else error('Unrecognized Tree layout method: ' + m);\n },\n params: ['size', 'nodeSize'],\n fields: Output$1\n});\n\n/**\n * Generate tuples representing links between tree nodes.\n * The resulting tuples will contain 'source' and 'target' fields,\n * which point to parent and child node tuples, respectively.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction TreeLinks(params) {\n Transform.call(this, [], params);\n}\nTreeLinks.Definition = {\n 'type': 'TreeLinks',\n 'metadata': {\n 'tree': true,\n 'generates': true,\n 'changes': true\n },\n 'params': []\n};\ninherits(TreeLinks, Transform, {\n transform(_, pulse) {\n const links = this.value,\n tree = pulse.source && pulse.source.root,\n out = pulse.fork(pulse.NO_SOURCE),\n lut = {};\n if (!tree) error('TreeLinks transform requires a tree data source.');\n if (pulse.changed(pulse.ADD_REM)) {\n // remove previous links\n out.rem = links;\n\n // build lookup table of valid tuples\n pulse.visit(pulse.SOURCE, t => lut[tupleid(t)] = 1);\n\n // generate links for all edges incident on valid tuples\n tree.each(node => {\n const t = node.data,\n p = node.parent && node.parent.data;\n if (p && lut[tupleid(t)] && lut[tupleid(p)]) {\n out.add.push(ingest({\n source: p,\n target: t\n }));\n }\n });\n this.value = out.add;\n } else if (pulse.changed(pulse.MOD)) {\n // build lookup table of modified tuples\n pulse.visit(pulse.MOD, t => lut[tupleid(t)] = 1);\n\n // gather links incident on modified tuples\n links.forEach(link => {\n if (lut[tupleid(link.source)] || lut[tupleid(link.target)]) {\n out.mod.push(link);\n }\n });\n }\n return out;\n }\n});\n\nconst Tiles = {\n binary: treemapBinary,\n dice: treemapDice,\n slice: treemapSlice,\n slicedice: treemapSliceDice,\n squarify: treemapSquarify,\n resquarify: treemapResquarify\n};\nconst Output = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n\n/**\n * Treemap layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\nfunction Treemap(params) {\n HierarchyLayout.call(this, params);\n}\nTreemap.Definition = {\n 'type': 'Treemap',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'squarify',\n 'values': ['squarify', 'resquarify', 'binary', 'dice', 'slice', 'slicedice']\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingInner',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingOuter',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingTop',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingRight',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingBottom',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingLeft',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'ratio',\n 'type': 'number',\n 'default': 1.618033988749895\n }, {\n 'name': 'round',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output.length,\n 'default': Output\n }]\n};\ninherits(Treemap, HierarchyLayout, {\n /**\n * Treemap layout generator. Adds 'method' and 'ratio' parameters\n * to configure the underlying tile method.\n */\n layout() {\n const x = treemap();\n x.ratio = _ => {\n const t = x.tile();\n if (t.ratio) x.tile(t.ratio(_));\n };\n x.method = _ => {\n if (hasOwnProperty(Tiles, _)) x.tile(Tiles[_]);else error('Unrecognized Treemap layout method: ' + _);\n };\n return x;\n },\n params: ['method', 'ratio', 'size', 'round', 'padding', 'paddingInner', 'paddingOuter', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'],\n fields: Output\n});\n\nexport { Nest as nest, Pack as pack, Partition as partition, Stratify as stratify, Tree as tree, TreeLinks as treelinks, Treemap as treemap };\n","import { Marks, textMetrics } from 'vega-scenegraph';\nimport { canvas } from 'vega-canvas';\nimport { rederive, Transform } from 'vega-dataflow';\nimport { inherits, error, array, isFunction } from 'vega-util';\n\n// bit mask for getting first 2 bytes of alpha value\nconst ALPHA_MASK = 0xff000000;\nfunction baseBitmaps($, data) {\n const bitmap = $.bitmap();\n // when there is no base mark but data points are to be avoided\n (data || []).forEach(d => bitmap.set($(d.boundary[0]), $(d.boundary[3])));\n return [bitmap, undefined];\n}\nfunction markBitmaps($, baseMark, avoidMarks, labelInside, isGroupArea) {\n // create canvas\n const width = $.width,\n height = $.height,\n border = labelInside || isGroupArea,\n context = canvas(width, height).getContext('2d'),\n baseMarkContext = canvas(width, height).getContext('2d'),\n strokeContext = border && canvas(width, height).getContext('2d');\n\n // render all marks to be avoided into canvas\n avoidMarks.forEach(items => draw(context, items, false));\n draw(baseMarkContext, baseMark, false);\n if (border) {\n draw(strokeContext, baseMark, true);\n }\n\n // get canvas buffer, create bitmaps\n const buffer = getBuffer(context, width, height),\n baseMarkBuffer = getBuffer(baseMarkContext, width, height),\n strokeBuffer = border && getBuffer(strokeContext, width, height),\n layer1 = $.bitmap(),\n layer2 = border && $.bitmap();\n\n // populate bitmap layers\n let x, y, u, v, index, alpha, strokeAlpha, baseMarkAlpha;\n for (y = 0; y < height; ++y) {\n for (x = 0; x < width; ++x) {\n index = y * width + x;\n alpha = buffer[index] & ALPHA_MASK;\n baseMarkAlpha = baseMarkBuffer[index] & ALPHA_MASK;\n strokeAlpha = border && strokeBuffer[index] & ALPHA_MASK;\n if (alpha || strokeAlpha || baseMarkAlpha) {\n u = $(x);\n v = $(y);\n if (!isGroupArea && (alpha || baseMarkAlpha)) layer1.set(u, v); // update interior bitmap\n if (border && (alpha || strokeAlpha)) layer2.set(u, v); // update border bitmap\n }\n }\n }\n\n return [layer1, layer2];\n}\nfunction getBuffer(context, width, height) {\n return new Uint32Array(context.getImageData(0, 0, width, height).data.buffer);\n}\nfunction draw(context, items, interior) {\n if (!items.length) return;\n const type = items[0].mark.marktype;\n if (type === 'group') {\n items.forEach(group => {\n group.items.forEach(mark => draw(context, mark.items, interior));\n });\n } else {\n Marks[type].draw(context, {\n items: interior ? items.map(prepare) : items\n });\n }\n}\n\n/**\n * Prepare item before drawing into canvas (setting stroke and opacity)\n * @param {object} source item to be prepared\n * @returns prepared item\n */\nfunction prepare(source) {\n const item = rederive(source, {});\n if (item.stroke && item.strokeOpacity !== 0 || item.fill && item.fillOpacity !== 0) {\n return {\n ...item,\n strokeOpacity: 1,\n stroke: '#000',\n fillOpacity: 0\n };\n }\n return item;\n}\n\nconst DIV = 5,\n // bit shift from x, y index to bit vector array index\n MOD = 31,\n // bit mask for index lookup within a bit vector\n SIZE = 32,\n // individual bit vector size\n RIGHT0 = new Uint32Array(SIZE + 1),\n // left-anchored bit vectors, full -> 0\n RIGHT1 = new Uint32Array(SIZE + 1); // right-anchored bit vectors, 0 -> full\n\nRIGHT1[0] = 0;\nRIGHT0[0] = ~RIGHT1[0];\nfor (let i = 1; i <= SIZE; ++i) {\n RIGHT1[i] = RIGHT1[i - 1] << 1 | 1;\n RIGHT0[i] = ~RIGHT1[i];\n}\nfunction Bitmap (w, h) {\n const array = new Uint32Array(~~((w * h + SIZE) / SIZE));\n function _set(index, mask) {\n array[index] |= mask;\n }\n function _clear(index, mask) {\n array[index] &= mask;\n }\n return {\n array: array,\n get: (x, y) => {\n const index = y * w + x;\n return array[index >>> DIV] & 1 << (index & MOD);\n },\n set: (x, y) => {\n const index = y * w + x;\n _set(index >>> DIV, 1 << (index & MOD));\n },\n clear: (x, y) => {\n const index = y * w + x;\n _clear(index >>> DIV, ~(1 << (index & MOD)));\n },\n getRange: (x, y, x2, y2) => {\n let r = y2,\n start,\n end,\n indexStart,\n indexEnd;\n for (; r >= y; --r) {\n start = r * w + x;\n end = r * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n if (array[indexStart] & RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]) {\n return true;\n }\n } else {\n if (array[indexStart] & RIGHT0[start & MOD]) return true;\n if (array[indexEnd] & RIGHT1[(end & MOD) + 1]) return true;\n for (let i = indexStart + 1; i < indexEnd; ++i) {\n if (array[i]) return true;\n }\n }\n }\n return false;\n },\n setRange: (x, y, x2, y2) => {\n let start, end, indexStart, indexEnd, i;\n for (; y <= y2; ++y) {\n start = y * w + x;\n end = y * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n _set(indexStart, RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]);\n } else {\n _set(indexStart, RIGHT0[start & MOD]);\n _set(indexEnd, RIGHT1[(end & MOD) + 1]);\n for (i = indexStart + 1; i < indexEnd; ++i) _set(i, 0xffffffff);\n }\n }\n },\n clearRange: (x, y, x2, y2) => {\n let start, end, indexStart, indexEnd, i;\n for (; y <= y2; ++y) {\n start = y * w + x;\n end = y * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n _clear(indexStart, RIGHT1[start & MOD] | RIGHT0[(end & MOD) + 1]);\n } else {\n _clear(indexStart, RIGHT1[start & MOD]);\n _clear(indexEnd, RIGHT0[(end & MOD) + 1]);\n for (i = indexStart + 1; i < indexEnd; ++i) _clear(i, 0);\n }\n }\n },\n outOfBounds: (x, y, x2, y2) => x < 0 || y < 0 || y2 >= h || x2 >= w\n };\n}\n\nfunction scaler (width, height, padding) {\n const ratio = Math.max(1, Math.sqrt(width * height / 1e6)),\n w = ~~((width + 2 * padding + ratio) / ratio),\n h = ~~((height + 2 * padding + ratio) / ratio),\n scale = _ => ~~((_ + padding) / ratio);\n scale.invert = _ => _ * ratio - padding;\n scale.bitmap = () => Bitmap(w, h);\n scale.ratio = ratio;\n scale.padding = padding;\n scale.width = width;\n scale.height = height;\n return scale;\n}\n\nfunction placeAreaLabelNaive ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height;\n\n // try to place a label within an input area mark\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text); // label height\n\n let maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n areaWidth;\n\n // for each area sample point\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2;\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n if (areaWidth >= maxAreaWidth) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n }\n }\n x = textWidth / 2;\n y = textHeight / 2;\n x1 = d.x - x;\n x2 = d.x + x;\n y1 = d.y - y;\n y2 = d.y + y;\n d.align = 'center';\n if (x1 < 0 && x2 <= width) {\n d.align = 'left';\n } else if (0 <= x1 && width < x2) {\n d.align = 'right';\n }\n d.baseline = 'middle';\n if (y1 < 0 && y2 <= height) {\n d.baseline = 'top';\n } else if (0 <= y1 && height < y2) {\n d.baseline = 'bottom';\n }\n return true;\n };\n}\n\nfunction outOfBounds(x, y, textWidth, textHeight, width, height) {\n let r = textWidth / 2;\n return x - r < 0 || x + r > width || y - (r = textHeight / 2) < 0 || y + r > height;\n}\nfunction collision($, x, y, textHeight, textWidth, h, bm0, bm1) {\n const w = textWidth * h / (textHeight * 2),\n x1 = $(x - w),\n x2 = $(x + w),\n y1 = $(y - (h = h / 2)),\n y2 = $(y + h);\n return bm0.outOfBounds(x1, y1, x2, y2) || bm0.getRange(x1, y1, x2, y2) || bm1 && bm1.getRange(x1, y1, x2, y2);\n}\n\nfunction placeAreaLabelReducedSearch ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n // where labels have been placed\n bm1 = bitmaps[1]; // area outlines\n\n function tryLabel(_x, _y, maxSize, textWidth, textHeight) {\n const x = $.invert(_x),\n y = $.invert(_y);\n let lo = maxSize,\n hi = height,\n mid;\n if (!outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, lo, bm0, bm1) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n // if the label fits at the current sample point,\n // perform binary search to find the largest font size that fits\n while (hi - lo >= 1) {\n mid = (lo + hi) / 2;\n if (collision($, x, y, textHeight, textWidth, mid, bm0, bm1)) {\n hi = mid;\n } else {\n lo = mid;\n }\n }\n // place label if current lower bound exceeds prior max font size\n if (lo > maxSize) {\n return [x, y, lo, true];\n }\n }\n }\n\n // try to place a label within an input area mark\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text); // label height\n\n let maxSize = avoidBaseMark ? textHeight : 0,\n labelPlaced = false,\n labelPlaced2 = false,\n maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n _x,\n _y,\n _x1,\n _xMid,\n _x2,\n _y1,\n _yMid,\n _y2,\n areaWidth,\n result,\n swapTmp;\n\n // for each area sample point\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n if (x1 > x2) {\n swapTmp = x1;\n x1 = x2;\n x2 = swapTmp;\n }\n if (y1 > y2) {\n swapTmp = y1;\n y1 = y2;\n y2 = swapTmp;\n }\n _x1 = $(x1);\n _x2 = $(x2);\n _xMid = ~~((_x1 + _x2) / 2);\n _y1 = $(y1);\n _y2 = $(y2);\n _yMid = ~~((_y1 + _y2) / 2);\n\n // search along the line from mid point between the 2 border to lower border\n for (_x = _xMid; _x >= _x1; --_x) {\n for (_y = _yMid; _y >= _y1; --_y) {\n result = tryLabel(_x, _y, maxSize, textWidth, textHeight);\n if (result) {\n [d.x, d.y, maxSize, labelPlaced] = result;\n }\n }\n }\n\n // search along the line from mid point between the 2 border to upper border\n for (_x = _xMid; _x <= _x2; ++_x) {\n for (_y = _yMid; _y <= _y2; ++_y) {\n result = tryLabel(_x, _y, maxSize, textWidth, textHeight);\n if (result) {\n [d.x, d.y, maxSize, labelPlaced] = result;\n }\n }\n }\n\n // place label at slice center if not placed through other means\n // and if we're not avoiding overlap with other areas\n if (!labelPlaced && !avoidBaseMark) {\n // one span is zero, hence we can add\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2;\n\n // place label if it fits and improves the max area width\n if (areaWidth >= maxAreaWidth && !outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n labelPlaced2 = true;\n }\n }\n }\n\n // record current label placement information, update label bitmap\n if (labelPlaced || labelPlaced2) {\n x = textWidth / 2;\n y = textHeight / 2;\n bm0.setRange($(d.x - x), $(d.y - y), $(d.x + x), $(d.y + y));\n d.align = 'center';\n d.baseline = 'middle';\n return true;\n } else {\n return false;\n }\n };\n}\n\n// pixel direction offsets for flood fill search\nconst X_DIR = [-1, -1, 1, 1];\nconst Y_DIR = [-1, 1, -1, 1];\nfunction placeAreaLabelFloodFill ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n // where labels have been placed\n bm1 = bitmaps[1],\n // area outlines\n bm2 = $.bitmap(); // flood-fill visitations\n\n // try to place a label within an input area mark\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text),\n // label height\n stack = []; // flood fill stack\n\n let maxSize = avoidBaseMark ? textHeight : 0,\n labelPlaced = false,\n labelPlaced2 = false,\n maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n _x,\n _y,\n lo,\n hi,\n mid,\n areaWidth;\n\n // for each area sample point\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n\n // add scaled center point to stack\n stack.push([$((x1 + x2) / 2), $((y1 + y2) / 2)]);\n\n // perform flood fill, visit points\n while (stack.length) {\n [_x, _y] = stack.pop();\n\n // exit if point already marked\n if (bm0.get(_x, _y) || bm1.get(_x, _y) || bm2.get(_x, _y)) continue;\n\n // mark point in flood fill bitmap\n // add search points for all (in bound) directions\n bm2.set(_x, _y);\n for (let j = 0; j < 4; ++j) {\n x = _x + X_DIR[j];\n y = _y + Y_DIR[j];\n if (!bm2.outOfBounds(x, y, x, y)) stack.push([x, y]);\n }\n\n // unscale point back to x, y space\n x = $.invert(_x);\n y = $.invert(_y);\n lo = maxSize;\n hi = height; // TODO: make this bound smaller\n\n if (!outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, lo, bm0, bm1) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n // if the label fits at the current sample point,\n // perform binary search to find the largest font size that fits\n while (hi - lo >= 1) {\n mid = (lo + hi) / 2;\n if (collision($, x, y, textHeight, textWidth, mid, bm0, bm1)) {\n hi = mid;\n } else {\n lo = mid;\n }\n }\n // place label if current lower bound exceeds prior max font size\n if (lo > maxSize) {\n d.x = x;\n d.y = y;\n maxSize = lo;\n labelPlaced = true;\n }\n }\n }\n\n // place label at slice center if not placed through other means\n // and if we're not avoiding overlap with other areas\n if (!labelPlaced && !avoidBaseMark) {\n // one span is zero, hence we can add\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2;\n\n // place label if it fits and improves the max area width\n if (areaWidth >= maxAreaWidth && !outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n labelPlaced2 = true;\n }\n }\n }\n\n // record current label placement information, update label bitmap\n if (labelPlaced || labelPlaced2) {\n x = textWidth / 2;\n y = textHeight / 2;\n bm0.setRange($(d.x - x), $(d.y - y), $(d.x + x), $(d.y + y));\n d.align = 'center';\n d.baseline = 'middle';\n return true;\n } else {\n return false;\n }\n };\n}\n\nconst Aligns = ['right', 'center', 'left'],\n Baselines = ['bottom', 'middle', 'top'];\nfunction placeMarkLabel ($, bitmaps, anchors, offsets) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n bm1 = bitmaps[1],\n n = offsets.length;\n return function (d) {\n const boundary = d.boundary,\n textHeight = d.datum.fontSize;\n\n // can not be placed if the mark is not visible in the graph bound\n if (boundary[2] < 0 || boundary[5] < 0 || boundary[0] > width || boundary[3] > height) {\n return false;\n }\n let textWidth = d.textWidth ?? 0,\n dx,\n dy,\n isInside,\n sizeFactor,\n insideFactor,\n x1,\n x2,\n y1,\n y2,\n xc,\n yc,\n _x1,\n _x2,\n _y1,\n _y2;\n\n // for each anchor and offset\n for (let i = 0; i < n; ++i) {\n dx = (anchors[i] & 0x3) - 1;\n dy = (anchors[i] >>> 0x2 & 0x3) - 1;\n isInside = dx === 0 && dy === 0 || offsets[i] < 0;\n sizeFactor = dx && dy ? Math.SQRT1_2 : 1;\n insideFactor = offsets[i] < 0 ? -1 : 1;\n x1 = boundary[1 + dx] + offsets[i] * dx * sizeFactor;\n yc = boundary[4 + dy] + insideFactor * textHeight * dy / 2 + offsets[i] * dy * sizeFactor;\n y1 = yc - textHeight / 2;\n y2 = yc + textHeight / 2;\n _x1 = $(x1);\n _y1 = $(y1);\n _y2 = $(y2);\n if (!textWidth) {\n // to avoid finding width of text label,\n if (!test(_x1, _x1, _y1, _y2, bm0, bm1, x1, x1, y1, y2, boundary, isInside)) {\n // skip this anchor/offset option if we fail to place a label with 1px width\n continue;\n } else {\n // Otherwise, find the label width\n textWidth = textMetrics.width(d.datum, d.datum.text);\n }\n }\n xc = x1 + insideFactor * textWidth * dx / 2;\n x1 = xc - textWidth / 2;\n x2 = xc + textWidth / 2;\n _x1 = $(x1);\n _x2 = $(x2);\n if (test(_x1, _x2, _y1, _y2, bm0, bm1, x1, x2, y1, y2, boundary, isInside)) {\n // place label if the position is placeable\n d.x = !dx ? xc : dx * insideFactor < 0 ? x2 : x1;\n d.y = !dy ? yc : dy * insideFactor < 0 ? y2 : y1;\n d.align = Aligns[dx * insideFactor + 1];\n d.baseline = Baselines[dy * insideFactor + 1];\n bm0.setRange(_x1, _y1, _x2, _y2);\n return true;\n }\n }\n return false;\n };\n}\n\n// Test if a label with the given dimensions can be added without overlap\nfunction test(_x1, _x2, _y1, _y2, bm0, bm1, x1, x2, y1, y2, boundary, isInside) {\n return !(bm0.outOfBounds(_x1, _y1, _x2, _y2) || (isInside && bm1 || bm0).getRange(_x1, _y1, _x2, _y2));\n}\n\n// 8-bit representation of anchors\nconst TOP = 0x0,\n MIDDLE = 0x4,\n BOTTOM = 0x8,\n LEFT = 0x0,\n CENTER = 0x1,\n RIGHT = 0x2;\n\n// Mapping from text anchor to number representation\nconst anchorCode = {\n 'top-left': TOP + LEFT,\n 'top': TOP + CENTER,\n 'top-right': TOP + RIGHT,\n 'left': MIDDLE + LEFT,\n 'middle': MIDDLE + CENTER,\n 'right': MIDDLE + RIGHT,\n 'bottom-left': BOTTOM + LEFT,\n 'bottom': BOTTOM + CENTER,\n 'bottom-right': BOTTOM + RIGHT\n};\nconst placeAreaLabel = {\n 'naive': placeAreaLabelNaive,\n 'reduced-search': placeAreaLabelReducedSearch,\n 'floodfill': placeAreaLabelFloodFill\n};\nfunction labelLayout (texts, size, compare, offset, anchor, avoidMarks, avoidBaseMark, lineAnchor, markIndex, padding, method) {\n // early exit for empty data\n if (!texts.length) return texts;\n const positions = Math.max(offset.length, anchor.length),\n offsets = getOffsets(offset, positions),\n anchors = getAnchors(anchor, positions),\n marktype = markType(texts[0].datum),\n grouptype = marktype === 'group' && texts[0].datum.items[markIndex].marktype,\n isGroupArea = grouptype === 'area',\n boundary = markBoundary(marktype, grouptype, lineAnchor, markIndex),\n infPadding = padding === null || padding === Infinity,\n isNaiveGroupArea = isGroupArea && method === 'naive';\n let maxTextWidth = -1,\n maxTextHeight = -1;\n\n // prepare text mark data for placing\n const data = texts.map(d => {\n const textWidth = infPadding ? textMetrics.width(d, d.text) : undefined;\n maxTextWidth = Math.max(maxTextWidth, textWidth);\n maxTextHeight = Math.max(maxTextHeight, d.fontSize);\n return {\n datum: d,\n opacity: 0,\n x: undefined,\n y: undefined,\n align: undefined,\n baseline: undefined,\n boundary: boundary(d),\n textWidth\n };\n });\n padding = padding === null || padding === Infinity ? Math.max(maxTextWidth, maxTextHeight) + Math.max(...offset) : padding;\n const $ = scaler(size[0], size[1], padding);\n let bitmaps;\n if (!isNaiveGroupArea) {\n // sort labels in priority order, if comparator is provided\n if (compare) {\n data.sort((a, b) => compare(a.datum, b.datum));\n }\n\n // flag indicating if label can be placed inside its base mark\n let labelInside = false;\n for (let i = 0; i < anchors.length && !labelInside; ++i) {\n // label inside if anchor is at center\n // label inside if offset to be inside the mark bound\n labelInside = anchors[i] === 0x5 || offsets[i] < 0;\n }\n\n // extract data information from base mark when base mark is to be avoided\n // base mark is implicitly avoided if it is a group area\n const baseMark = (marktype && avoidBaseMark || isGroupArea) && texts.map(d => d.datum);\n\n // generate bitmaps for layout calculation\n bitmaps = avoidMarks.length || baseMark ? markBitmaps($, baseMark || [], avoidMarks, labelInside, isGroupArea) : baseBitmaps($, avoidBaseMark && data);\n }\n\n // generate label placement function\n const place = isGroupArea ? placeAreaLabel[method]($, bitmaps, avoidBaseMark, markIndex) : placeMarkLabel($, bitmaps, anchors, offsets);\n\n // place all labels\n data.forEach(d => d.opacity = +place(d));\n return data;\n}\nfunction getOffsets(_, count) {\n const offsets = new Float64Array(count),\n n = _.length;\n for (let i = 0; i < n; ++i) offsets[i] = _[i] || 0;\n for (let i = n; i < count; ++i) offsets[i] = offsets[n - 1];\n return offsets;\n}\nfunction getAnchors(_, count) {\n const anchors = new Int8Array(count),\n n = _.length;\n for (let i = 0; i < n; ++i) anchors[i] |= anchorCode[_[i]];\n for (let i = n; i < count; ++i) anchors[i] = anchors[n - 1];\n return anchors;\n}\nfunction markType(item) {\n return item && item.mark && item.mark.marktype;\n}\n\n/**\n * Factory function for function for getting base mark boundary, depending\n * on mark and group type. When mark type is undefined, line or area: boundary\n * is the coordinate of each data point. When base mark is grouped line,\n * boundary is either at the start or end of the line depending on the\n * value of lineAnchor. Otherwise, use bounds of base mark.\n */\nfunction markBoundary(marktype, grouptype, lineAnchor, markIndex) {\n const xy = d => [d.x, d.x, d.x, d.y, d.y, d.y];\n if (!marktype) {\n return xy; // no reactive geometry\n } else if (marktype === 'line' || marktype === 'area') {\n return d => xy(d.datum);\n } else if (grouptype === 'line') {\n return d => {\n const items = d.datum.items[markIndex].items;\n return xy(items.length ? items[lineAnchor === 'start' ? 0 : items.length - 1] : {\n x: NaN,\n y: NaN\n });\n };\n } else {\n return d => {\n const b = d.datum.bounds;\n return [b.x1, (b.x1 + b.x2) / 2, b.x2, b.y1, (b.y1 + b.y2) / 2, b.y2];\n };\n }\n}\n\nconst Output = ['x', 'y', 'opacity', 'align', 'baseline'];\nconst Anchors = ['top-left', 'left', 'bottom-left', 'top', 'bottom', 'top-right', 'right', 'bottom-right'];\n\n/**\n * Compute text label layout to annotate marks.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The size of the layout, provided as a [width, height] array.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting label data in priority order.\n * @param {Array} [params.anchor] - Label anchor points relative to the base mark bounding box.\n * The available options are 'top-left', 'left', 'bottom-left', 'top',\n * 'bottom', 'top-right', 'right', 'bottom-right', 'middle'.\n * @param {Array} [params.offset] - Label offsets (in pixels) from the base mark bounding box.\n * This parameter is parallel to the list of anchor points.\n * @param {number | null} [params.padding=0] - The amount (in pixels) that a label may exceed the layout size.\n * If this parameter is null, a label may exceed the layout size without any boundary.\n * @param {string} [params.lineAnchor='end'] - For group line mark labels only, indicates the anchor\n * position for labels. One of 'start' or 'end'.\n * @param {string} [params.markIndex=0] - For group mark labels only, an index indicating\n * which mark within the group should be labeled.\n * @param {Array} [params.avoidMarks] - A list of additional mark names for which the label\n * layout should avoid overlap.\n * @param {boolean} [params.avoidBaseMark=true] - Boolean flag indicating if labels should avoid\n * overlap with the underlying base mark being labeled.\n * @param {string} [params.method='naive'] - For area make labels only, a method for\n * place labels. One of 'naive', 'reduced-search', or 'floodfill'.\n * @param {Array} [params.as] - The output fields written by the transform.\n * The default is ['x', 'y', 'opacity', 'align', 'baseline'].\n */\nfunction Label(params) {\n Transform.call(this, null, params);\n}\nLabel.Definition = {\n type: 'Label',\n metadata: {\n modifies: true\n },\n params: [{\n name: 'size',\n type: 'number',\n array: true,\n length: 2,\n required: true\n }, {\n name: 'sort',\n type: 'compare'\n }, {\n name: 'anchor',\n type: 'string',\n array: true,\n default: Anchors\n }, {\n name: 'offset',\n type: 'number',\n array: true,\n default: [1]\n }, {\n name: 'padding',\n type: 'number',\n default: 0,\n null: true\n }, {\n name: 'lineAnchor',\n type: 'string',\n values: ['start', 'end'],\n default: 'end'\n }, {\n name: 'markIndex',\n type: 'number',\n default: 0\n }, {\n name: 'avoidBaseMark',\n type: 'boolean',\n default: true\n }, {\n name: 'avoidMarks',\n type: 'data',\n array: true\n }, {\n name: 'method',\n type: 'string',\n default: 'naive'\n }, {\n name: 'as',\n type: 'string',\n array: true,\n length: Output.length,\n default: Output\n }]\n};\ninherits(Label, Transform, {\n transform(_, pulse) {\n function modp(param) {\n const p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n const mod = _.modified();\n if (!(mod || pulse.changed(pulse.ADD_REM) || modp('sort'))) return;\n if (!_.size || _.size.length !== 2) {\n error('Size parameter should be specified as a [width, height] array.');\n }\n const as = _.as || Output;\n\n // run label layout\n labelLayout(pulse.materialize(pulse.SOURCE).source || [], _.size, _.sort, array(_.offset == null ? 1 : _.offset), array(_.anchor || Anchors), _.avoidMarks || [], _.avoidBaseMark !== false, _.lineAnchor || 'end', _.markIndex || 0, _.padding === undefined ? 0 : _.padding, _.method || 'naive').forEach(l => {\n // write layout results to data stream\n const t = l.datum;\n t[as[0]] = l.x;\n t[as[1]] = l.y;\n t[as[2]] = l.opacity;\n t[as[3]] = l.align;\n t[as[4]] = l.baseline;\n });\n return pulse.reflow(mod).modifies(as);\n }\n});\n\nexport { Label as label };\n","import { regressionLoess, sampleCurve, regressionConstant, regressionLinear, regressionLog, regressionExp, regressionPow, regressionQuad, regressionPoly } from 'vega-statistics';\nimport { Transform, ingest } from 'vega-dataflow';\nimport { inherits, accessorName, hasOwnProperty, error, extent } from 'vega-util';\n\nfunction partition (data, groupby) {\n var groups = [],\n get = function (f) {\n return f(t);\n },\n map,\n i,\n n,\n t,\n k,\n g;\n\n // partition data points into stack groups\n if (groupby == null) {\n groups.push(data);\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n g.push(t);\n }\n }\n return groups;\n}\n\n/**\n * Compute locally-weighted regression fits for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.x - An accessor for the predictor data field.\n * @param {function(object): *} params.y - An accessor for the predicted data field.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {number} [params.bandwidth=0.3] - The loess bandwidth.\n */\nfunction Loess(params) {\n Transform.call(this, null, params);\n}\nLoess.Definition = {\n 'type': 'Loess',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0.3\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Loess, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n m = names.length,\n as = _.as || [accessorName(_.x), accessorName(_.y)],\n values = [];\n groups.forEach(g => {\n regressionLoess(g, _.x, _.y, _.bandwidth || 0.3).forEach(p => {\n const t = {};\n for (let i = 0; i < m; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = p[0];\n t[as[1]] = p[1];\n values.push(ingest(t));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\n\nconst Methods = {\n constant: regressionConstant,\n linear: regressionLinear,\n log: regressionLog,\n exp: regressionExp,\n pow: regressionPow,\n quad: regressionQuad,\n poly: regressionPoly\n};\nconst degreesOfFreedom = (method, order) => method === 'poly' ? order : method === 'quad' ? 2 : 1;\n\n/**\n * Compute regression fits for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.x - An accessor for the predictor data field.\n * @param {function(object): *} params.y - An accessor for the predicted data field.\n * @param {string} [params.method='linear'] - The regression method to apply.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {Array} [params.extent] - The domain extent over which to plot the regression line.\n * @param {number} [params.order=3] - The polynomial order. Only applies to the 'poly' method.\n */\nfunction Regression(params) {\n Transform.call(this, null, params);\n}\nRegression.Definition = {\n 'type': 'Regression',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'method',\n 'type': 'string',\n 'default': 'linear',\n 'values': Object.keys(Methods)\n }, {\n 'name': 'order',\n 'type': 'number',\n 'default': 3\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'params',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Regression, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n method = _.method || 'linear',\n order = _.order == null ? 3 : _.order,\n dof = degreesOfFreedom(method, order),\n as = _.as || [accessorName(_.x), accessorName(_.y)],\n fit = Methods[method],\n values = [];\n let domain = _.extent;\n if (!hasOwnProperty(Methods, method)) {\n error('Invalid regression method: ' + method);\n }\n if (domain != null) {\n if (method === 'log' && domain[0] <= 0) {\n pulse.dataflow.warn('Ignoring extent with values <= 0 for log regression.');\n domain = null;\n }\n }\n groups.forEach(g => {\n const n = g.length;\n if (n <= dof) {\n pulse.dataflow.warn('Skipping regression with more parameters than data points.');\n return;\n }\n const model = fit(g, _.x, _.y, order);\n if (_.params) {\n // if parameter vectors requested return those\n values.push(ingest({\n keys: g.dims,\n coef: model.coef,\n rSquared: model.rSquared\n }));\n return;\n }\n const dom = domain || extent(g, _.x),\n add = p => {\n const t = {};\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = p[0];\n t[as[1]] = p[1];\n values.push(ingest(t));\n };\n if (method === 'linear' || method === 'constant') {\n // for linear or constant regression we only need the end points\n dom.forEach(x => add([x, model.predict(x)]));\n } else {\n // otherwise return trend line sample points\n sampleCurve(model.predict, dom, 25, 200).forEach(add);\n }\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\n\nexport { Loess as loess, Regression as regression };\n","import { Transform } from 'vega-dataflow';\nimport { inherits } from 'vega-util';\nimport { Delaunay } from 'd3-delaunay';\n\nfunction Voronoi(params) {\n Transform.call(this, null, params);\n}\nVoronoi.Definition = {\n 'type': 'Voronoi',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'extent',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'default': [[-1e5, -1e5], [1e5, 1e5]],\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\nconst defaultExtent = [-1e5, -1e5, 1e5, 1e5];\ninherits(Voronoi, Transform, {\n transform(_, pulse) {\n const as = _.as || 'path',\n data = pulse.source;\n\n // nothing to do if no data\n if (!data || !data.length) return pulse;\n\n // configure and construct voronoi diagram\n let s = _.size;\n s = s ? [0, 0, s[0], s[1]] : (s = _.extent) ? [s[0][0], s[0][1], s[1][0], s[1][1]] : defaultExtent;\n const voronoi = this.value = Delaunay.from(data, _.x, _.y).voronoi(s);\n\n // map polygons to paths\n for (let i = 0, n = data.length; i < n; ++i) {\n const polygon = voronoi.cellPolygon(i);\n data[i][as] = polygon && !isPoint(polygon) ? toPathString(polygon) : null;\n }\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\n\n// suppress duplicated end point vertices\nfunction toPathString(p) {\n const x = p[0][0],\n y = p[0][1];\n let n = p.length - 1;\n for (; p[n][0] === x && p[n][1] === y; --n);\n return 'M' + p.slice(0, n + 1).join('L') + 'Z';\n}\nfunction isPoint(p) {\n return p.length === 2 && p[0][0] === p[1][0] && p[0][1] === p[1][1];\n}\n\nexport { Voronoi as voronoi };\n","import { canvas } from 'vega-canvas';\nimport { Transform } from 'vega-dataflow';\nimport { inherits, error, isFunction, constant, extent } from 'vega-util';\nimport { scale } from 'vega-scale';\nimport { random } from 'vega-statistics';\n\n/*\nCopyright (c) 2013, Jason Davies.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * The name Jason Davies may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\nOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\nADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/\n// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf\n\nvar cloudRadians = Math.PI / 180,\n cw = 1 << 11 >> 5,\n ch = 1 << 11;\nfunction cloud () {\n var size = [256, 256],\n text,\n font,\n fontSize,\n fontStyle,\n fontWeight,\n rotate,\n padding,\n spiral = archimedeanSpiral,\n words = [],\n random = Math.random,\n cloud = {};\n cloud.layout = function () {\n var contextAndRatio = getContext(canvas()),\n board = zeroArray((size[0] >> 5) * size[1]),\n bounds = null,\n n = words.length,\n i = -1,\n tags = [],\n data = words.map(d => ({\n text: text(d),\n font: font(d),\n style: fontStyle(d),\n weight: fontWeight(d),\n rotate: rotate(d),\n size: ~~(fontSize(d) + 1e-14),\n padding: padding(d),\n xoff: 0,\n yoff: 0,\n x1: 0,\n y1: 0,\n x0: 0,\n y0: 0,\n hasText: false,\n sprite: null,\n datum: d\n })).sort((a, b) => b.size - a.size);\n while (++i < n) {\n var d = data[i];\n d.x = size[0] * (random() + .5) >> 1;\n d.y = size[1] * (random() + .5) >> 1;\n cloudSprite(contextAndRatio, d, data, i);\n if (d.hasText && place(board, d, bounds)) {\n tags.push(d);\n if (bounds) cloudBounds(bounds, d);else bounds = [{\n x: d.x + d.x0,\n y: d.y + d.y0\n }, {\n x: d.x + d.x1,\n y: d.y + d.y1\n }];\n // Temporary hack\n d.x -= size[0] >> 1;\n d.y -= size[1] >> 1;\n }\n }\n return tags;\n };\n function getContext(canvas) {\n canvas.width = canvas.height = 1;\n var ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);\n canvas.width = (cw << 5) / ratio;\n canvas.height = ch / ratio;\n var context = canvas.getContext('2d');\n context.fillStyle = context.strokeStyle = 'red';\n context.textAlign = 'center';\n return {\n context: context,\n ratio: ratio\n };\n }\n function place(board, tag, bounds) {\n var startX = tag.x,\n startY = tag.y,\n maxDelta = Math.hypot(size[0], size[1]),\n s = spiral(size),\n dt = random() < .5 ? 1 : -1,\n t = -dt,\n dxdy,\n dx,\n dy;\n while (dxdy = s(t += dt)) {\n dx = ~~dxdy[0];\n dy = ~~dxdy[1];\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;\n tag.x = startX + dx;\n tag.y = startY + dy;\n if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue;\n // TODO only check for collisions within current bounds.\n if (!bounds || !cloudCollide(tag, board, size[0])) {\n if (!bounds || collideRects(tag, bounds)) {\n var sprite = tag.sprite,\n w = tag.width >> 5,\n sw = size[0] >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n board[x + i] |= last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n x += sw;\n }\n tag.sprite = null;\n return true;\n }\n }\n }\n return false;\n }\n cloud.words = function (_) {\n if (arguments.length) {\n words = _;\n return cloud;\n } else {\n return words;\n }\n };\n cloud.size = function (_) {\n if (arguments.length) {\n size = [+_[0], +_[1]];\n return cloud;\n } else {\n return size;\n }\n };\n cloud.font = function (_) {\n if (arguments.length) {\n font = functor(_);\n return cloud;\n } else {\n return font;\n }\n };\n cloud.fontStyle = function (_) {\n if (arguments.length) {\n fontStyle = functor(_);\n return cloud;\n } else {\n return fontStyle;\n }\n };\n cloud.fontWeight = function (_) {\n if (arguments.length) {\n fontWeight = functor(_);\n return cloud;\n } else {\n return fontWeight;\n }\n };\n cloud.rotate = function (_) {\n if (arguments.length) {\n rotate = functor(_);\n return cloud;\n } else {\n return rotate;\n }\n };\n cloud.text = function (_) {\n if (arguments.length) {\n text = functor(_);\n return cloud;\n } else {\n return text;\n }\n };\n cloud.spiral = function (_) {\n if (arguments.length) {\n spiral = spirals[_] || _;\n return cloud;\n } else {\n return spiral;\n }\n };\n cloud.fontSize = function (_) {\n if (arguments.length) {\n fontSize = functor(_);\n return cloud;\n } else {\n return fontSize;\n }\n };\n cloud.padding = function (_) {\n if (arguments.length) {\n padding = functor(_);\n return cloud;\n } else {\n return padding;\n }\n };\n cloud.random = function (_) {\n if (arguments.length) {\n random = _;\n return cloud;\n } else {\n return random;\n }\n };\n return cloud;\n}\n\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\nfunction cloudSprite(contextAndRatio, d, data, di) {\n if (d.sprite) return;\n var c = contextAndRatio.context,\n ratio = contextAndRatio.ratio;\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n var x = 0,\n y = 0,\n maxh = 0,\n n = data.length,\n w,\n w32,\n h,\n i,\n j;\n --di;\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.style + ' ' + d.weight + ' ' + ~~((d.size + 1) / ratio) + 'px ' + d.font;\n w = c.measureText(d.text + 'm').width * ratio;\n h = d.size << 1;\n if (d.rotate) {\n var sr = Math.sin(d.rotate * cloudRadians),\n cr = Math.cos(d.rotate * cloudRadians),\n wcr = w * cr,\n wsr = w * sr,\n hcr = h * cr,\n hsr = h * sr;\n w = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f >> 5 << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n } else {\n w = w + 0x1f >> 5 << 5;\n }\n if (h > maxh) maxh = h;\n if (x + w >= cw << 5) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n if (y + h >= ch) break;\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.rotate) c.rotate(d.rotate * cloudRadians);\n c.fillText(d.text, 0, 0);\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,\n sprite = [];\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) continue;\n w = d.width;\n w32 = w >> 5;\n h = d.y1 - d.y0;\n // Zero the buffer\n for (i = 0; i < h * w32; i++) sprite[i] = 0;\n x = d.xoff;\n if (x == null) return;\n y = d.yoff;\n var seen = 0,\n seenRow = -1;\n for (j = 0; j < h; j++) {\n for (i = 0; i < w; i++) {\n var k = w32 * j + (i >> 5),\n m = pixels[(y + j) * (cw << 5) + (x + i) << 2] ? 1 << 31 - i % 32 : 0;\n sprite[k] |= m;\n seen |= m;\n }\n if (seen) seenRow = j;else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n}\n\n// Use mask-based collision detection.\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n var sprite = tag.sprite,\n w = tag.width >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n if ((last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i]) return true;\n }\n x += sw;\n }\n return false;\n}\nfunction cloudBounds(bounds, d) {\n var b0 = bounds[0],\n b1 = bounds[1];\n if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\nfunction collideRects(a, b) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\nfunction archimedeanSpiral(size) {\n var e = size[0] / size[1];\n return function (t) {\n return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\n };\n}\nfunction rectangularSpiral(size) {\n var dy = 4,\n dx = dy * size[0] / size[1],\n x = 0,\n y = 0;\n return function (t) {\n var sign = t < 0 ? -1 : 1;\n // See triangular numbers: T_n = n * (n + 1) / 2.\n switch (Math.sqrt(1 + 4 * sign * t) - sign & 3) {\n case 0:\n x += dx;\n break;\n case 1:\n y += dy;\n break;\n case 2:\n x -= dx;\n break;\n default:\n y -= dy;\n break;\n }\n return [x, y];\n };\n}\n\n// TODO reuse arrays?\nfunction zeroArray(n) {\n var a = [],\n i = -1;\n while (++i < n) a[i] = 0;\n return a;\n}\nfunction functor(d) {\n return typeof d === 'function' ? d : function () {\n return d;\n };\n}\nvar spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n\nconst Output = ['x', 'y', 'font', 'fontSize', 'fontStyle', 'fontWeight', 'angle'];\nconst Params = ['text', 'font', 'rotate', 'fontSize', 'fontStyle', 'fontWeight'];\nfunction Wordcloud(params) {\n Transform.call(this, cloud(), params);\n}\nWordcloud.Definition = {\n 'type': 'Wordcloud',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'font',\n 'type': 'string',\n 'expr': true,\n 'default': 'sans-serif'\n }, {\n 'name': 'fontStyle',\n 'type': 'string',\n 'expr': true,\n 'default': 'normal'\n }, {\n 'name': 'fontWeight',\n 'type': 'string',\n 'expr': true,\n 'default': 'normal'\n }, {\n 'name': 'fontSize',\n 'type': 'number',\n 'expr': true,\n 'default': 14\n }, {\n 'name': 'fontSizeRange',\n 'type': 'number',\n 'array': 'nullable',\n 'default': [10, 50]\n }, {\n 'name': 'rotate',\n 'type': 'number',\n 'expr': true,\n 'default': 0\n }, {\n 'name': 'text',\n 'type': 'field'\n }, {\n 'name': 'spiral',\n 'type': 'string',\n 'values': ['archimedean', 'rectangular']\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 7,\n 'default': Output\n }]\n};\ninherits(Wordcloud, Transform, {\n transform(_, pulse) {\n if (_.size && !(_.size[0] && _.size[1])) {\n error('Wordcloud size dimensions must be non-zero.');\n }\n function modp(param) {\n const p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n const mod = _.modified();\n if (!(mod || pulse.changed(pulse.ADD_REM) || Params.some(modp))) return;\n const data = pulse.materialize(pulse.SOURCE).source,\n layout = this.value,\n as = _.as || Output;\n let fontSize = _.fontSize || 14,\n range;\n isFunction(fontSize) ? range = _.fontSizeRange : fontSize = constant(fontSize);\n\n // create font size scaling function as needed\n if (range) {\n const fsize = fontSize,\n sizeScale = scale('sqrt')().domain(extent(data, fsize)).range(range);\n fontSize = x => sizeScale(fsize(x));\n }\n data.forEach(t => {\n t[as[0]] = NaN;\n t[as[1]] = NaN;\n t[as[3]] = 0;\n });\n\n // configure layout\n const words = layout.words(data).text(_.text).size(_.size || [500, 500]).padding(_.padding || 1).spiral(_.spiral || 'archimedean').rotate(_.rotate || 0).font(_.font || 'sans-serif').fontStyle(_.fontStyle || 'normal').fontWeight(_.fontWeight || 'normal').fontSize(fontSize).random(random).layout();\n const size = layout.size(),\n dx = size[0] >> 1,\n dy = size[1] >> 1,\n n = words.length;\n for (let i = 0, w, t; i < n; ++i) {\n w = words[i];\n t = w.datum;\n t[as[0]] = w.x + dx;\n t[as[1]] = w.y + dy;\n t[as[2]] = w.font;\n t[as[3]] = w.size;\n t[as[4]] = w.style;\n t[as[5]] = w.weight;\n t[as[6]] = w.rotate;\n }\n return pulse.reflow(mod).modifies(as);\n }\n});\n\nexport { Wordcloud as wordcloud };\n","import { bisectLeft, bisectRight, permute } from 'd3-array';\nimport { Transform } from 'vega-dataflow';\nimport { inherits } from 'vega-util';\n\nconst array8 = n => new Uint8Array(n);\nconst array16 = n => new Uint16Array(n);\nconst array32 = n => new Uint32Array(n);\n\n/**\n * Maintains CrossFilter state.\n */\nfunction Bitmaps() {\n let width = 8,\n data = [],\n seen = array32(0),\n curr = array(0, width),\n prev = array(0, width);\n return {\n data: () => data,\n seen: () => seen = lengthen(seen, data.length),\n add(array) {\n for (let i = 0, j = data.length, n = array.length, t; i < n; ++i) {\n t = array[i];\n t._index = j++;\n data.push(t);\n }\n },\n remove(num, map) {\n // map: index -> boolean (true => remove)\n const n = data.length,\n copy = Array(n - num),\n reindex = data; // reuse old data array for index map\n let t, i, j;\n\n // seek forward to first removal\n for (i = 0; !map[i] && i < n; ++i) {\n copy[i] = data[i];\n reindex[i] = i;\n }\n\n // condense arrays\n for (j = i; i < n; ++i) {\n t = data[i];\n if (!map[i]) {\n reindex[i] = j;\n curr[j] = curr[i];\n prev[j] = prev[i];\n copy[j] = t;\n t._index = j++;\n } else {\n reindex[i] = -1;\n }\n curr[i] = 0; // clear unused bits\n }\n\n data = copy;\n return reindex;\n },\n size: () => data.length,\n curr: () => curr,\n prev: () => prev,\n reset: k => prev[k] = curr[k],\n all: () => width < 0x101 ? 0xff : width < 0x10001 ? 0xffff : 0xffffffff,\n set(k, one) {\n curr[k] |= one;\n },\n clear(k, one) {\n curr[k] &= ~one;\n },\n resize(n, m) {\n const k = curr.length;\n if (n > k || m > width) {\n width = Math.max(m, width);\n curr = array(n, width, curr);\n prev = array(n, width);\n }\n }\n };\n}\nfunction lengthen(array, length, copy) {\n if (array.length >= length) return array;\n copy = copy || new array.constructor(length);\n copy.set(array);\n return copy;\n}\nfunction array(n, m, array) {\n const copy = (m < 0x101 ? array8 : m < 0x10001 ? array16 : array32)(n);\n if (array) copy.set(array);\n return copy;\n}\n\nfunction Dimension (index, i, query) {\n const bit = 1 << i;\n return {\n one: bit,\n zero: ~bit,\n range: query.slice(),\n bisect: index.bisect,\n index: index.index,\n size: index.size,\n onAdd(added, curr) {\n const dim = this,\n range = dim.bisect(dim.range, added.value),\n idx = added.index,\n lo = range[0],\n hi = range[1],\n n1 = idx.length;\n let i;\n for (i = 0; i < lo; ++i) curr[idx[i]] |= bit;\n for (i = hi; i < n1; ++i) curr[idx[i]] |= bit;\n return dim;\n }\n };\n}\n\n/**\n * Maintains a list of values, sorted by key.\n */\nfunction SortedIndex() {\n let index = array32(0),\n value = [],\n size = 0;\n function insert(key, data, base) {\n if (!data.length) return [];\n const n0 = size,\n n1 = data.length,\n addi = array32(n1);\n let addv = Array(n1),\n oldv,\n oldi,\n i;\n for (i = 0; i < n1; ++i) {\n addv[i] = key(data[i]);\n addi[i] = i;\n }\n addv = sort(addv, addi);\n if (n0) {\n oldv = value;\n oldi = index;\n value = Array(n0 + n1);\n index = array32(n0 + n1);\n merge(base, oldv, oldi, n0, addv, addi, n1, value, index);\n } else {\n if (base > 0) for (i = 0; i < n1; ++i) {\n addi[i] += base;\n }\n value = addv;\n index = addi;\n }\n size = n0 + n1;\n return {\n index: addi,\n value: addv\n };\n }\n function remove(num, map) {\n // map: index -> remove\n const n = size;\n let idx, i, j;\n\n // seek forward to first removal\n for (i = 0; !map[index[i]] && i < n; ++i);\n\n // condense index and value arrays\n for (j = i; i < n; ++i) {\n if (!map[idx = index[i]]) {\n index[j] = idx;\n value[j] = value[i];\n ++j;\n }\n }\n size = n - num;\n }\n function reindex(map) {\n for (let i = 0, n = size; i < n; ++i) {\n index[i] = map[index[i]];\n }\n }\n function bisect(range, array) {\n let n;\n if (array) {\n n = array.length;\n } else {\n array = value;\n n = size;\n }\n return [bisectLeft(array, range[0], 0, n), bisectRight(array, range[1], 0, n)];\n }\n return {\n insert: insert,\n remove: remove,\n bisect: bisect,\n reindex: reindex,\n index: () => index,\n size: () => size\n };\n}\nfunction sort(values, index) {\n values.sort.call(index, (a, b) => {\n const x = values[a],\n y = values[b];\n return x < y ? -1 : x > y ? 1 : 0;\n });\n return permute(values, index);\n}\nfunction merge(base, value0, index0, n0, value1, index1, n1, value, index) {\n let i0 = 0,\n i1 = 0,\n i;\n for (i = 0; i0 < n0 && i1 < n1; ++i) {\n if (value0[i0] < value1[i1]) {\n value[i] = value0[i0];\n index[i] = index0[i0++];\n } else {\n value[i] = value1[i1];\n index[i] = index1[i1++] + base;\n }\n }\n for (; i0 < n0; ++i0, ++i) {\n value[i] = value0[i0];\n index[i] = index0[i0];\n }\n for (; i1 < n1; ++i1, ++i) {\n value[i] = value1[i1];\n index[i] = index1[i1] + base;\n }\n}\n\n/**\n * An indexed multi-dimensional filter.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of dimension accessors to filter.\n * @param {Array} params.query - An array of per-dimension range queries.\n */\nfunction CrossFilter(params) {\n Transform.call(this, Bitmaps(), params);\n this._indices = null;\n this._dims = null;\n}\nCrossFilter.Definition = {\n 'type': 'CrossFilter',\n 'metadata': {},\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'query',\n 'type': 'array',\n 'array': true,\n 'required': true,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }]\n};\ninherits(CrossFilter, Transform, {\n transform(_, pulse) {\n if (!this._dims) {\n return this.init(_, pulse);\n } else {\n var init = _.modified('fields') || _.fields.some(f => pulse.modified(f.fields));\n return init ? this.reinit(_, pulse) : this.eval(_, pulse);\n }\n },\n init(_, pulse) {\n const fields = _.fields,\n query = _.query,\n indices = this._indices = {},\n dims = this._dims = [],\n m = query.length;\n let i = 0,\n key,\n index;\n\n // instantiate indices and dimensions\n for (; i < m; ++i) {\n key = fields[i].fname;\n index = indices[key] || (indices[key] = SortedIndex());\n dims.push(Dimension(index, i, query[i]));\n }\n return this.eval(_, pulse);\n },\n reinit(_, pulse) {\n const output = pulse.materialize().fork(),\n fields = _.fields,\n query = _.query,\n indices = this._indices,\n dims = this._dims,\n bits = this.value,\n curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(),\n out = output.rem = output.add,\n mod = output.mod,\n m = query.length,\n adds = {};\n let add, index, key, mods, remMap, modMap, i, n, f;\n\n // set prev to current state\n prev.set(curr);\n\n // if pulse has remove tuples, process them first\n if (pulse.rem.length) {\n remMap = this.remove(_, pulse, output);\n }\n\n // if pulse has added tuples, add them to state\n if (pulse.add.length) {\n bits.add(pulse.add);\n }\n\n // if pulse has modified tuples, create an index map\n if (pulse.mod.length) {\n modMap = {};\n for (mods = pulse.mod, i = 0, n = mods.length; i < n; ++i) {\n modMap[mods[i]._index] = 1;\n }\n }\n\n // re-initialize indices as needed, update curr bitmap\n for (i = 0; i < m; ++i) {\n f = fields[i];\n if (!dims[i] || _.modified('fields', i) || pulse.modified(f.fields)) {\n key = f.fname;\n if (!(add = adds[key])) {\n indices[key] = index = SortedIndex();\n adds[key] = add = index.insert(f, pulse.source, 0);\n }\n dims[i] = Dimension(index, i, query[i]).onAdd(add, curr);\n }\n }\n\n // visit each tuple\n // if filter state changed, push index to add/rem\n // else if in mod and passes a filter, push index to mod\n for (i = 0, n = bits.data().length; i < n; ++i) {\n if (remMap[i]) {\n // skip if removed tuple\n continue;\n } else if (prev[i] !== curr[i]) {\n // add if state changed\n out.push(i);\n } else if (modMap[i] && curr[i] !== all) {\n // otherwise, pass mods through\n mod.push(i);\n }\n }\n bits.mask = (1 << m) - 1;\n return output;\n },\n eval(_, pulse) {\n const output = pulse.materialize().fork(),\n m = this._dims.length;\n let mask = 0;\n if (pulse.rem.length) {\n this.remove(_, pulse, output);\n mask |= (1 << m) - 1;\n }\n if (_.modified('query') && !_.modified('fields')) {\n mask |= this.update(_, pulse, output);\n }\n if (pulse.add.length) {\n this.insert(_, pulse, output);\n mask |= (1 << m) - 1;\n }\n if (pulse.mod.length) {\n this.modify(pulse, output);\n mask |= (1 << m) - 1;\n }\n this.value.mask = mask;\n return output;\n },\n insert(_, pulse, output) {\n const tuples = pulse.add,\n bits = this.value,\n dims = this._dims,\n indices = this._indices,\n fields = _.fields,\n adds = {},\n out = output.add,\n n = bits.size() + tuples.length,\n m = dims.length;\n let k = bits.size(),\n j,\n key,\n add;\n\n // resize bitmaps and add tuples as needed\n bits.resize(n, m);\n bits.add(tuples);\n const curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all();\n\n // add to dimensional indices\n for (j = 0; j < m; ++j) {\n key = fields[j].fname;\n add = adds[key] || (adds[key] = indices[key].insert(fields[j], tuples, k));\n dims[j].onAdd(add, curr);\n }\n\n // set previous filters, output if passes at least one filter\n for (; k < n; ++k) {\n prev[k] = all;\n if (curr[k] !== all) out.push(k);\n }\n },\n modify(pulse, output) {\n const out = output.mod,\n bits = this.value,\n curr = bits.curr(),\n all = bits.all(),\n tuples = pulse.mod;\n let i, n, k;\n for (i = 0, n = tuples.length; i < n; ++i) {\n k = tuples[i]._index;\n if (curr[k] !== all) out.push(k);\n }\n },\n remove(_, pulse, output) {\n const indices = this._indices,\n bits = this.value,\n curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(),\n map = {},\n out = output.rem,\n tuples = pulse.rem;\n let i, n, k, f;\n\n // process tuples, output if passes at least one filter\n for (i = 0, n = tuples.length; i < n; ++i) {\n k = tuples[i]._index;\n map[k] = 1; // build index map\n prev[k] = f = curr[k];\n curr[k] = all;\n if (f !== all) out.push(k);\n }\n\n // remove from dimensional indices\n for (k in indices) {\n indices[k].remove(n, map);\n }\n this.reindex(pulse, n, map);\n return map;\n },\n // reindex filters and indices after propagation completes\n reindex(pulse, num, map) {\n const indices = this._indices,\n bits = this.value;\n pulse.runAfter(() => {\n const indexMap = bits.remove(num, map);\n for (const key in indices) indices[key].reindex(indexMap);\n });\n },\n update(_, pulse, output) {\n const dims = this._dims,\n query = _.query,\n stamp = pulse.stamp,\n m = dims.length;\n let mask = 0,\n i,\n q;\n\n // survey how many queries have changed\n output.filters = 0;\n for (q = 0; q < m; ++q) {\n if (_.modified('query', q)) {\n i = q;\n ++mask;\n }\n }\n if (mask === 1) {\n // only one query changed, use more efficient update\n mask = dims[i].one;\n this.incrementOne(dims[i], query[i], output.add, output.rem);\n } else {\n // multiple queries changed, perform full record keeping\n for (q = 0, mask = 0; q < m; ++q) {\n if (!_.modified('query', q)) continue;\n mask |= dims[q].one;\n this.incrementAll(dims[q], query[q], stamp, output.add);\n output.rem = output.add; // duplicate add/rem for downstream resolve\n }\n }\n\n return mask;\n },\n incrementAll(dim, query, stamp, out) {\n const bits = this.value,\n seen = bits.seen(),\n curr = bits.curr(),\n prev = bits.prev(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one;\n let i, j, k;\n\n // Fast incremental update based on previous lo index.\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n }\n\n // Fast incremental update based on previous hi index.\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n }\n dim.range = query.slice();\n },\n incrementOne(dim, query, add, rem) {\n const bits = this.value,\n curr = bits.curr(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one;\n let i, j, k;\n\n // Fast incremental update based on previous lo index.\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n\n // Fast incremental update based on previous hi index.\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n dim.range = query.slice();\n }\n});\n\n/**\n * Selectively filters tuples by resolving against a filter bitmap.\n * Useful for processing the output of a cross-filter transform.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.ignore - A bit mask indicating which filters to ignore.\n * @param {object} params.filter - The per-tuple filter bitmaps. Typically this\n * parameter value is a reference to a {@link CrossFilter} transform.\n */\nfunction ResolveFilter(params) {\n Transform.call(this, null, params);\n}\nResolveFilter.Definition = {\n 'type': 'ResolveFilter',\n 'metadata': {},\n 'params': [{\n 'name': 'ignore',\n 'type': 'number',\n 'required': true,\n 'description': 'A bit mask indicating which filters to ignore.'\n }, {\n 'name': 'filter',\n 'type': 'object',\n 'required': true,\n 'description': 'Per-tuple filter bitmaps from a CrossFilter transform.'\n }]\n};\ninherits(ResolveFilter, Transform, {\n transform(_, pulse) {\n const ignore = ~(_.ignore || 0),\n // bit mask where zeros -> dims to ignore\n bitmap = _.filter,\n mask = bitmap.mask;\n\n // exit early if no relevant filter changes\n if ((mask & ignore) === 0) return pulse.StopPropagation;\n const output = pulse.fork(pulse.ALL),\n data = bitmap.data(),\n curr = bitmap.curr(),\n prev = bitmap.prev(),\n pass = k => !(curr[k] & ignore) ? data[k] : null;\n\n // propagate all mod tuples that pass the filter\n output.filter(output.MOD, pass);\n\n // determine add & rem tuples via filter functions\n // for efficiency, we do *not* populate new arrays,\n // instead we add filter functions applied downstream\n\n if (!(mask & mask - 1)) {\n // only one filter changed\n output.filter(output.ADD, pass);\n output.filter(output.REM, k => (curr[k] & ignore) === mask ? data[k] : null);\n } else {\n // multiple filters changed\n output.filter(output.ADD, k => {\n const c = curr[k] & ignore,\n f = !c && c ^ prev[k] & ignore;\n return f ? data[k] : null;\n });\n output.filter(output.REM, k => {\n const c = curr[k] & ignore,\n f = c && !(c ^ (c ^ prev[k] & ignore));\n return f ? data[k] : null;\n });\n }\n\n // add filter to source data in case of reflow...\n return output.filter(output.SOURCE, t => pass(t._index));\n }\n});\n\nexport { CrossFilter as crossfilter, ResolveFilter as resolvefilter };\n","import { error, toSet, isFunction, isString, hasOwnProperty } from 'vega-util';\n\nconst RawCode = 'RawCode';\nconst Literal = 'Literal';\nconst Property = 'Property';\nconst Identifier = 'Identifier';\nconst ArrayExpression = 'ArrayExpression';\nconst BinaryExpression = 'BinaryExpression';\nconst CallExpression = 'CallExpression';\nconst ConditionalExpression = 'ConditionalExpression';\nconst LogicalExpression = 'LogicalExpression';\nconst MemberExpression = 'MemberExpression';\nconst ObjectExpression = 'ObjectExpression';\nconst UnaryExpression = 'UnaryExpression';\nfunction ASTNode(type) {\n this.type = type;\n}\nASTNode.prototype.visit = function (visitor) {\n let c, i, n;\n if (visitor(this)) return 1;\n for (c = children(this), i = 0, n = c.length; i < n; ++i) {\n if (c[i].visit(visitor)) return 1;\n }\n};\nfunction children(node) {\n switch (node.type) {\n case ArrayExpression:\n return node.elements;\n case BinaryExpression:\n case LogicalExpression:\n return [node.left, node.right];\n case CallExpression:\n return [node.callee].concat(node.arguments);\n case ConditionalExpression:\n return [node.test, node.consequent, node.alternate];\n case MemberExpression:\n return [node.object, node.property];\n case ObjectExpression:\n return node.properties;\n case Property:\n return [node.key, node.value];\n case UnaryExpression:\n return [node.argument];\n case Identifier:\n case Literal:\n case RawCode:\n default:\n return [];\n }\n}\n\n/*\n The following expression parser is based on Esprima (http://esprima.org/).\n Original header comment and license for Esprima is included here:\n\n Copyright (C) 2013 Ariya Hidayat \n Copyright (C) 2013 Thaddee Tyl \n Copyright (C) 2013 Mathias Bynens \n Copyright (C) 2012 Ariya Hidayat \n Copyright (C) 2012 Mathias Bynens \n Copyright (C) 2012 Joost-Wim Boekesteijn \n Copyright (C) 2012 Kris Kowal \n Copyright (C) 2012 Yusuke Suzuki \n Copyright (C) 2012 Arpad Borsos \n Copyright (C) 2011 Ariya Hidayat \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nvar TokenName, source, index, length, lookahead;\nvar TokenBooleanLiteral = 1,\n TokenEOF = 2,\n TokenIdentifier = 3,\n TokenKeyword = 4,\n TokenNullLiteral = 5,\n TokenNumericLiteral = 6,\n TokenPunctuator = 7,\n TokenStringLiteral = 8,\n TokenRegularExpression = 9;\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\nvar SyntaxArrayExpression = 'ArrayExpression',\n SyntaxBinaryExpression = 'BinaryExpression',\n SyntaxCallExpression = 'CallExpression',\n SyntaxConditionalExpression = 'ConditionalExpression',\n SyntaxIdentifier = 'Identifier',\n SyntaxLiteral = 'Literal',\n SyntaxLogicalExpression = 'LogicalExpression',\n SyntaxMemberExpression = 'MemberExpression',\n SyntaxObjectExpression = 'ObjectExpression',\n SyntaxProperty = 'Property',\n SyntaxUnaryExpression = 'UnaryExpression';\n\n// Error messages should be identical to V8.\nvar MessageUnexpectedToken = 'Unexpected token %0',\n MessageUnexpectedNumber = 'Unexpected number',\n MessageUnexpectedString = 'Unexpected string',\n MessageUnexpectedIdentifier = 'Unexpected identifier',\n MessageUnexpectedReserved = 'Unexpected reserved word',\n MessageUnexpectedEOS = 'Unexpected end of input',\n MessageInvalidRegExp = 'Invalid regular expression',\n MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\nvar ILLEGAL = 'ILLEGAL',\n DISABLED = 'Disabled.';\n\n// See also tools/generate-unicode-regex.py.\nvar RegexNonAsciiIdentifierStart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'),\n // eslint-disable-next-line no-misleading-character-class\n RegexNonAsciiIdentifierPart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]');\n\n// Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n /* istanbul ignore next */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n}\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 && ch <= 0x39; // 0..9\n}\n\nfunction isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\nfunction isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n}\n\n// 7.2 White Space\n\nfunction isWhiteSpace(ch) {\n return ch === 0x20 || ch === 0x09 || ch === 0x0B || ch === 0x0C || ch === 0xA0 || ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0;\n}\n\n// 7.3 Line Terminators\n\nfunction isLineTerminator(ch) {\n return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029;\n}\n\n// 7.6 Identifier Names and Identifiers\n\nfunction isIdentifierStart(ch) {\n return ch === 0x24 || ch === 0x5F ||\n // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A ||\n // A..Z\n ch >= 0x61 && ch <= 0x7A ||\n // a..z\n ch === 0x5C ||\n // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch));\n}\nfunction isIdentifierPart(ch) {\n return ch === 0x24 || ch === 0x5F ||\n // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A ||\n // A..Z\n ch >= 0x61 && ch <= 0x7A ||\n // a..z\n ch >= 0x30 && ch <= 0x39 ||\n // 0..9\n ch === 0x5C ||\n // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch));\n}\n\n// 7.6.1.1 Keywords\n\nconst keywords = {\n 'if': 1,\n 'in': 1,\n 'do': 1,\n 'var': 1,\n 'for': 1,\n 'new': 1,\n 'try': 1,\n 'let': 1,\n 'this': 1,\n 'else': 1,\n 'case': 1,\n 'void': 1,\n 'with': 1,\n 'enum': 1,\n 'while': 1,\n 'break': 1,\n 'catch': 1,\n 'throw': 1,\n 'const': 1,\n 'yield': 1,\n 'class': 1,\n 'super': 1,\n 'return': 1,\n 'typeof': 1,\n 'delete': 1,\n 'switch': 1,\n 'export': 1,\n 'import': 1,\n 'public': 1,\n 'static': 1,\n 'default': 1,\n 'finally': 1,\n 'extends': 1,\n 'package': 1,\n 'private': 1,\n 'function': 1,\n 'continue': 1,\n 'debugger': 1,\n 'interface': 1,\n 'protected': 1,\n 'instanceof': 1,\n 'implements': 1\n};\nfunction skipComment() {\n while (index < length) {\n const ch = source.charCodeAt(index);\n if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n ++index;\n } else {\n break;\n }\n }\n}\nfunction scanHexEscape(prefix) {\n var i,\n len,\n ch,\n code = 0;\n len = prefix === 'u' ? 4 : 2;\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n return String.fromCharCode(code);\n}\nfunction scanUnicodeCodePointEscape() {\n var ch, code, cu1, cu2;\n ch = source[index];\n code = 0;\n\n // At least, one hex digit is required.\n if (ch === '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n while (index < length) {\n ch = source[index++];\n if (!isHexDigit(ch)) {\n break;\n }\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n if (code > 0x10FFFF || ch !== '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n // UTF-16 Encoding\n if (code <= 0xFFFF) {\n return String.fromCharCode(code);\n }\n cu1 = (code - 0x10000 >> 10) + 0xD800;\n cu2 = (code - 0x10000 & 1023) + 0xDC00;\n return String.fromCharCode(cu1, cu2);\n}\nfunction getEscapedIdentifier() {\n var ch, id;\n ch = source.charCodeAt(index++);\n id = String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id = ch;\n }\n while (index < length) {\n ch = source.charCodeAt(index);\n if (!isIdentifierPart(ch)) {\n break;\n }\n ++index;\n id += String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n id = id.substr(0, id.length - 1);\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id += ch;\n }\n }\n return id;\n}\nfunction getIdentifier() {\n var start, ch;\n start = index++;\n while (index < length) {\n ch = source.charCodeAt(index);\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getEscapedIdentifier();\n }\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n return source.slice(start, index);\n}\nfunction scanIdentifier() {\n var start, id, type;\n start = index;\n\n // Backslash (U+005C) starts an escaped character.\n id = source.charCodeAt(index) === 0x5C ? getEscapedIdentifier() : getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n if (id.length === 1) {\n type = TokenIdentifier;\n } else if (keywords.hasOwnProperty(id)) {\n // eslint-disable-line no-prototype-builtins\n type = TokenKeyword;\n } else if (id === 'null') {\n type = TokenNullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = TokenBooleanLiteral;\n } else {\n type = TokenIdentifier;\n }\n return {\n type: type,\n value: id,\n start: start,\n end: index\n };\n}\n\n// 7.7 Punctuators\n\nfunction scanPunctuator() {\n var start = index,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2,\n ch3,\n ch4;\n switch (code) {\n // Check for most common single-character punctuators.\n case 0x2E: // . dot\n case 0x28: // ( open bracket\n case 0x29: // ) close bracket\n case 0x3B: // ; semicolon\n case 0x2C: // , comma\n case 0x7B: // { open curly brace\n case 0x7D: // } close curly brace\n case 0x5B: // [\n case 0x5D: // ]\n case 0x3A: // :\n case 0x3F: // ?\n case 0x7E:\n // ~\n ++index;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code),\n start: start,\n end: index\n };\n default:\n code2 = source.charCodeAt(index + 1);\n\n // '=' (U+003D) marks an assignment or comparison operator.\n if (code2 === 0x3D) {\n switch (code) {\n case 0x2B: // +\n case 0x2D: // -\n case 0x2F: // /\n case 0x3C: // <\n case 0x3E: // >\n case 0x5E: // ^\n case 0x7C: // |\n case 0x25: // %\n case 0x26: // &\n case 0x2A:\n // *\n index += 2;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n start: start,\n end: index\n };\n case 0x21: // !\n case 0x3D:\n // =\n index += 2;\n\n // !== and ===\n if (source.charCodeAt(index) === 0x3D) {\n ++index;\n }\n return {\n type: TokenPunctuator,\n value: source.slice(start, index),\n start: start,\n end: index\n };\n }\n }\n }\n\n // 4-character punctuator: >>>=\n\n ch4 = source.substr(index, 4);\n if (ch4 === '>>>=') {\n index += 4;\n return {\n type: TokenPunctuator,\n value: ch4,\n start: start,\n end: index\n };\n }\n\n // 3-character punctuators: === !== >>> <<= >>=\n\n ch3 = ch4.substr(0, 3);\n if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n index += 3;\n return {\n type: TokenPunctuator,\n value: ch3,\n start: start,\n end: index\n };\n }\n\n // Other 2-character punctuators: ++ -- << >> && ||\n ch2 = ch3.substr(0, 2);\n if (ch1 === ch2[1] && '+-<>&|'.indexOf(ch1) >= 0 || ch2 === '=>') {\n index += 2;\n return {\n type: TokenPunctuator,\n value: ch2,\n start: start,\n end: index\n };\n }\n if (ch2 === '//') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n // 1-character punctuators: < > = ! + - * % & | ^ /\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;\n return {\n type: TokenPunctuator,\n value: ch1,\n start: start,\n end: index\n };\n }\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n}\n\n// 7.8.3 Numeric Literals\n\nfunction scanHexLiteral(start) {\n let number = '';\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n if (number.length === 0) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenNumericLiteral,\n value: parseInt('0x' + number, 16),\n start: start,\n end: index\n };\n}\nfunction scanOctalLiteral(start) {\n let number = '0' + source[index++];\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenNumericLiteral,\n value: parseInt(number, 8),\n octal: true,\n start: start,\n end: index\n };\n}\nfunction scanNumericLiteral() {\n var number, start, ch;\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || ch === '.', 'Numeric literal must start with a decimal digit or a decimal point');\n start = index;\n number = '';\n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex number starts with '0x'.\n // Octal number starts with '0'.\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n if (isOctalDigit(ch)) {\n return scanOctalLiteral(start);\n }\n\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenNumericLiteral,\n value: parseFloat(number),\n start: start,\n end: index\n };\n}\n\n// 7.8.4 String Literals\n\nfunction scanStringLiteral() {\n var str = '',\n quote,\n start,\n ch,\n code,\n octal = false;\n quote = source[index];\n assert(quote === '\\'' || quote === '\"', 'String literal must starts with a quote');\n start = index;\n ++index;\n while (index < length) {\n ch = source[index++];\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n str += scanHexEscape(ch);\n }\n break;\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n default:\n if (isOctalDigit(ch)) {\n code = '01234567'.indexOf(ch);\n\n // \\0 is not octal escape sequence\n if (code !== 0) {\n octal = true;\n }\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]);\n\n // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n if ('0123'.indexOf(ch) >= 0 && index < length && isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n str += String.fromCharCode(code);\n } else {\n str += ch;\n }\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n if (quote !== '') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenStringLiteral,\n value: str,\n octal: octal,\n start: start,\n end: index\n };\n}\nfunction testRegExp(pattern, flags) {\n let tmp = pattern;\n if (flags.indexOf('u') >= 0) {\n // Replace each astral symbol and every Unicode code point\n // escape sequence with a single ASCII symbol to avoid throwing on\n // regular expressions that are only valid in combination with the\n // `/u` flag.\n // Note: replacing with the ASCII symbol `x` might cause false\n // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n // perfectly valid pattern that is equivalent to `[a-b]`, but it\n // would be replaced by `[x-b]` which throws an error.\n tmp = tmp.replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, ($0, $1) => {\n if (parseInt($1, 16) <= 0x10FFFF) {\n return 'x';\n }\n throwError({}, MessageInvalidRegExp);\n }).replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n }\n\n // First, detect invalid regular expressions.\n try {\n new RegExp(tmp);\n } catch (e) {\n throwError({}, MessageInvalidRegExp);\n }\n\n // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n}\nfunction scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n classMarker = false;\n terminated = false;\n while (index < length) {\n ch = source[index++];\n str += ch;\n if (ch === '\\\\') {\n ch = source[index++];\n // ECMA-262 7.8.5\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n }\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n if (!terminated) {\n throwError({}, MessageUnterminatedRegExp);\n }\n\n // Exclude leading and trailing slash.\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n}\nfunction scanRegExpFlags() {\n var ch, str, flags;\n str = '';\n flags = '';\n while (index < length) {\n ch = source[index];\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n ++index;\n if (ch === '\\\\' && index < length) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } else {\n flags += ch;\n str += ch;\n }\n }\n if (flags.search(/[^gimuy]/g) >= 0) {\n throwError({}, MessageInvalidRegExp, flags);\n }\n return {\n value: flags,\n literal: str\n };\n}\nfunction scanRegExp() {\n var start, body, flags, value;\n lookahead = null;\n skipComment();\n start = index;\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n}\nfunction isIdentifierName(token) {\n return token.type === TokenIdentifier || token.type === TokenKeyword || token.type === TokenBooleanLiteral || token.type === TokenNullLiteral;\n}\nfunction advance() {\n skipComment();\n if (index >= length) {\n return {\n type: TokenEOF,\n start: index,\n end: index\n };\n }\n const ch = source.charCodeAt(index);\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n }\n\n // Very common: ( and ) and ;\n if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (U+0027) or double quote (U+0022).\n if (ch === 0x27 || ch === 0x22) {\n return scanStringLiteral();\n }\n\n // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n if (ch === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n}\nfunction lex() {\n const token = lookahead;\n index = token.end;\n lookahead = advance();\n index = token.end;\n return token;\n}\nfunction peek() {\n const pos = index;\n lookahead = advance();\n index = pos;\n}\nfunction finishArrayExpression(elements) {\n const node = new ASTNode(SyntaxArrayExpression);\n node.elements = elements;\n return node;\n}\nfunction finishBinaryExpression(operator, left, right) {\n const node = new ASTNode(operator === '||' || operator === '&&' ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n node.operator = operator;\n node.left = left;\n node.right = right;\n return node;\n}\nfunction finishCallExpression(callee, args) {\n const node = new ASTNode(SyntaxCallExpression);\n node.callee = callee;\n node.arguments = args;\n return node;\n}\nfunction finishConditionalExpression(test, consequent, alternate) {\n const node = new ASTNode(SyntaxConditionalExpression);\n node.test = test;\n node.consequent = consequent;\n node.alternate = alternate;\n return node;\n}\nfunction finishIdentifier(name) {\n const node = new ASTNode(SyntaxIdentifier);\n node.name = name;\n return node;\n}\nfunction finishLiteral(token) {\n const node = new ASTNode(SyntaxLiteral);\n node.value = token.value;\n node.raw = source.slice(token.start, token.end);\n if (token.regex) {\n if (node.raw === '//') {\n node.raw = '/(?:)/';\n }\n node.regex = token.regex;\n }\n return node;\n}\nfunction finishMemberExpression(accessor, object, property) {\n const node = new ASTNode(SyntaxMemberExpression);\n node.computed = accessor === '[';\n node.object = object;\n node.property = property;\n if (!node.computed) property.member = true;\n return node;\n}\nfunction finishObjectExpression(properties) {\n const node = new ASTNode(SyntaxObjectExpression);\n node.properties = properties;\n return node;\n}\nfunction finishProperty(kind, key, value) {\n const node = new ASTNode(SyntaxProperty);\n node.key = key;\n node.value = value;\n node.kind = kind;\n return node;\n}\nfunction finishUnaryExpression(operator, argument) {\n const node = new ASTNode(SyntaxUnaryExpression);\n node.operator = operator;\n node.argument = argument;\n node.prefix = true;\n return node;\n}\n\n// Throw an exception\n\nfunction throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(/%(\\d)/g, (whole, index) => {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n });\n error = new Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n}\n\n// Throw an exception because of the token.\n\nfunction throwUnexpected(token) {\n if (token.type === TokenEOF) {\n throwError(token, MessageUnexpectedEOS);\n }\n if (token.type === TokenNumericLiteral) {\n throwError(token, MessageUnexpectedNumber);\n }\n if (token.type === TokenStringLiteral) {\n throwError(token, MessageUnexpectedString);\n }\n if (token.type === TokenIdentifier) {\n throwError(token, MessageUnexpectedIdentifier);\n }\n if (token.type === TokenKeyword) {\n throwError(token, MessageUnexpectedReserved);\n }\n\n // BooleanLiteral, NullLiteral, or Punctuator.\n throwError(token, MessageUnexpectedToken, token.value);\n}\n\n// Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\nfunction expect(value) {\n const token = lex();\n if (token.type !== TokenPunctuator || token.value !== value) {\n throwUnexpected(token);\n }\n}\n\n// Return true if the next token matches the specified punctuator.\n\nfunction match(value) {\n return lookahead.type === TokenPunctuator && lookahead.value === value;\n}\n\n// Return true if the next token matches the specified keyword\n\nfunction matchKeyword(keyword) {\n return lookahead.type === TokenKeyword && lookahead.value === keyword;\n}\n\n// 11.1.4 Array Initialiser\n\nfunction parseArrayInitialiser() {\n const elements = [];\n index = lookahead.start;\n expect('[');\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseConditionalExpression());\n if (!match(']')) {\n expect(',');\n }\n }\n }\n lex();\n return finishArrayExpression(elements);\n}\n\n// 11.1.5 Object Initialiser\n\nfunction parseObjectPropertyKey() {\n index = lookahead.start;\n const token = lex();\n\n // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n if (token.octal) {\n throwError(token, MessageStrictOctalLiteral);\n }\n return finishLiteral(token);\n }\n return finishIdentifier(token.value);\n}\nfunction parseObjectProperty() {\n var token, key, id, value;\n index = lookahead.start;\n token = lookahead;\n if (token.type === TokenIdentifier) {\n id = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', id, value);\n }\n if (token.type === TokenEOF || token.type === TokenPunctuator) {\n throwUnexpected(token);\n } else {\n key = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', key, value);\n }\n}\nfunction parseObjectInitialiser() {\n var properties = [],\n property,\n name,\n key,\n map = {},\n toString = String;\n index = lookahead.start;\n expect('{');\n while (!match('}')) {\n property = parseObjectProperty();\n if (property.key.type === SyntaxIdentifier) {\n name = property.key.name;\n } else {\n name = toString(property.key.value);\n }\n key = '$' + name;\n if (Object.prototype.hasOwnProperty.call(map, key)) {\n throwError({}, MessageStrictDuplicateProperty);\n } else {\n map[key] = true;\n }\n properties.push(property);\n if (!match('}')) {\n expect(',');\n }\n }\n expect('}');\n return finishObjectExpression(properties);\n}\n\n// 11.1.6 The Grouping Operator\n\nfunction parseGroupExpression() {\n expect('(');\n const expr = parseExpression();\n expect(')');\n return expr;\n}\n\n// 11.1 Primary Expressions\n\nconst legalKeywords = {\n 'if': 1\n};\nfunction parsePrimaryExpression() {\n var type, token, expr;\n if (match('(')) {\n return parseGroupExpression();\n }\n if (match('[')) {\n return parseArrayInitialiser();\n }\n if (match('{')) {\n return parseObjectInitialiser();\n }\n type = lookahead.type;\n index = lookahead.start;\n if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n expr = finishIdentifier(lex().value);\n } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n if (lookahead.octal) {\n throwError(lookahead, MessageStrictOctalLiteral);\n }\n expr = finishLiteral(lex());\n } else if (type === TokenKeyword) {\n throw new Error(DISABLED);\n } else if (type === TokenBooleanLiteral) {\n token = lex();\n token.value = token.value === 'true';\n expr = finishLiteral(token);\n } else if (type === TokenNullLiteral) {\n token = lex();\n token.value = null;\n expr = finishLiteral(token);\n } else if (match('/') || match('/=')) {\n expr = finishLiteral(scanRegExp());\n peek();\n } else {\n throwUnexpected(lex());\n }\n return expr;\n}\n\n// 11.2 Left-Hand-Side Expressions\n\nfunction parseArguments() {\n const args = [];\n expect('(');\n if (!match(')')) {\n while (index < length) {\n args.push(parseConditionalExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n expect(')');\n return args;\n}\nfunction parseNonComputedProperty() {\n index = lookahead.start;\n const token = lex();\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n return finishIdentifier(token.value);\n}\nfunction parseNonComputedMember() {\n expect('.');\n return parseNonComputedProperty();\n}\nfunction parseComputedMember() {\n expect('[');\n const expr = parseExpression();\n expect(']');\n return expr;\n}\nfunction parseLeftHandSideExpressionAllowCall() {\n var expr, args, property;\n expr = parsePrimaryExpression();\n for (;;) {\n if (match('.')) {\n property = parseNonComputedMember();\n expr = finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = finishCallExpression(expr, args);\n } else if (match('[')) {\n property = parseComputedMember();\n expr = finishMemberExpression('[', expr, property);\n } else {\n break;\n }\n }\n return expr;\n}\n\n// 11.3 Postfix Expressions\n\nfunction parsePostfixExpression() {\n const expr = parseLeftHandSideExpressionAllowCall();\n if (lookahead.type === TokenPunctuator) {\n if (match('++') || match('--')) {\n throw new Error(DISABLED);\n }\n }\n return expr;\n}\n\n// 11.4 Unary Operators\n\nfunction parseUnaryExpression() {\n var token, expr;\n if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n throw new Error(DISABLED);\n } else if (match('+') || match('-') || match('~') || match('!')) {\n token = lex();\n expr = parseUnaryExpression();\n expr = finishUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw new Error(DISABLED);\n } else {\n expr = parsePostfixExpression();\n }\n return expr;\n}\nfunction binaryPrecedence(token) {\n let prec = 0;\n if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n return 0;\n }\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n case '&&':\n prec = 2;\n break;\n case '|':\n prec = 3;\n break;\n case '^':\n prec = 4;\n break;\n case '&':\n prec = 5;\n break;\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n case 'in':\n prec = 7;\n break;\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n case '+':\n case '-':\n prec = 9;\n break;\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n }\n return prec;\n}\n\n// 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\nfunction parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n marker = lookahead;\n left = parseUnaryExpression();\n token = lookahead;\n prec = binaryPrecedence(token);\n if (prec === 0) {\n return left;\n }\n token.prec = prec;\n lex();\n markers = [marker, lookahead];\n right = parseUnaryExpression();\n stack = [left, token, right];\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n // Reduce: make a binary expression from the three topmost entries.\n while (stack.length > 2 && prec <= stack[stack.length - 2].prec) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = finishBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = parseUnaryExpression();\n stack.push(expr);\n }\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n while (i > 1) {\n markers.pop();\n expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n return expr;\n}\n\n// 11.12 Conditional Operator\n\nfunction parseConditionalExpression() {\n var expr, consequent, alternate;\n expr = parseBinaryExpression();\n if (match('?')) {\n lex();\n consequent = parseConditionalExpression();\n expect(':');\n alternate = parseConditionalExpression();\n expr = finishConditionalExpression(expr, consequent, alternate);\n }\n return expr;\n}\n\n// 11.14 Comma Operator\n\nfunction parseExpression() {\n const expr = parseConditionalExpression();\n if (match(',')) {\n throw new Error(DISABLED); // no sequence expressions\n }\n\n return expr;\n}\nfunction parser (code) {\n source = code;\n index = 0;\n length = source.length;\n lookahead = null;\n peek();\n const expr = parseExpression();\n if (lookahead.type !== TokenEOF) {\n throw new Error('Unexpect token after expression.');\n }\n return expr;\n}\n\nvar Constants = {\n NaN: 'NaN',\n E: 'Math.E',\n LN2: 'Math.LN2',\n LN10: 'Math.LN10',\n LOG2E: 'Math.LOG2E',\n LOG10E: 'Math.LOG10E',\n PI: 'Math.PI',\n SQRT1_2: 'Math.SQRT1_2',\n SQRT2: 'Math.SQRT2',\n MIN_VALUE: 'Number.MIN_VALUE',\n MAX_VALUE: 'Number.MAX_VALUE'\n};\n\nfunction Functions (codegen) {\n function fncall(name, args, cast, type) {\n let obj = codegen(args[0]);\n if (cast) {\n obj = cast + '(' + obj + ')';\n if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n }\n return obj + '.' + name + (type < 0 ? '' : type === 0 ? '()' : '(' + args.slice(1).map(codegen).join(',') + ')');\n }\n function fn(name, cast, type) {\n return args => fncall(name, args, cast, type);\n }\n const DATE = 'new Date',\n STRING = 'String',\n REGEXP = 'RegExp';\n return {\n // MATH functions\n isNaN: 'Number.isNaN',\n isFinite: 'Number.isFinite',\n abs: 'Math.abs',\n acos: 'Math.acos',\n asin: 'Math.asin',\n atan: 'Math.atan',\n atan2: 'Math.atan2',\n ceil: 'Math.ceil',\n cos: 'Math.cos',\n exp: 'Math.exp',\n floor: 'Math.floor',\n hypot: 'Math.hypot',\n log: 'Math.log',\n max: 'Math.max',\n min: 'Math.min',\n pow: 'Math.pow',\n random: 'Math.random',\n round: 'Math.round',\n sin: 'Math.sin',\n sqrt: 'Math.sqrt',\n tan: 'Math.tan',\n clamp: function (args) {\n if (args.length < 3) error('Missing arguments to clamp function.');\n if (args.length > 3) error('Too many arguments to clamp function.');\n const a = args.map(codegen);\n return 'Math.max(' + a[1] + ', Math.min(' + a[2] + ',' + a[0] + '))';\n },\n // DATE functions\n now: 'Date.now',\n utc: 'Date.UTC',\n datetime: DATE,\n date: fn('getDate', DATE, 0),\n day: fn('getDay', DATE, 0),\n year: fn('getFullYear', DATE, 0),\n month: fn('getMonth', DATE, 0),\n hours: fn('getHours', DATE, 0),\n minutes: fn('getMinutes', DATE, 0),\n seconds: fn('getSeconds', DATE, 0),\n milliseconds: fn('getMilliseconds', DATE, 0),\n time: fn('getTime', DATE, 0),\n timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n utcdate: fn('getUTCDate', DATE, 0),\n utcday: fn('getUTCDay', DATE, 0),\n utcyear: fn('getUTCFullYear', DATE, 0),\n utcmonth: fn('getUTCMonth', DATE, 0),\n utchours: fn('getUTCHours', DATE, 0),\n utcminutes: fn('getUTCMinutes', DATE, 0),\n utcseconds: fn('getUTCSeconds', DATE, 0),\n utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n // sequence functions\n length: fn('length', null, -1),\n // STRING functions\n parseFloat: 'parseFloat',\n parseInt: 'parseInt',\n upper: fn('toUpperCase', STRING, 0),\n lower: fn('toLowerCase', STRING, 0),\n substring: fn('substring', STRING),\n split: fn('split', STRING),\n trim: fn('trim', STRING, 0),\n // REGEXP functions\n regexp: REGEXP,\n test: fn('test', REGEXP),\n // Control Flow functions\n if: function (args) {\n if (args.length < 3) error('Missing arguments to if function.');\n if (args.length > 3) error('Too many arguments to if function.');\n const a = args.map(codegen);\n return '(' + a[0] + '?' + a[1] + ':' + a[2] + ')';\n }\n };\n}\n\nfunction stripQuotes(s) {\n const n = s && s.length - 1;\n return n && (s[0] === '\"' && s[n] === '\"' || s[0] === '\\'' && s[n] === '\\'') ? s.slice(1, -1) : s;\n}\nfunction codegen (opt) {\n opt = opt || {};\n const allowed = opt.allowed ? toSet(opt.allowed) : {},\n forbidden = opt.forbidden ? toSet(opt.forbidden) : {},\n constants = opt.constants || Constants,\n functions = (opt.functions || Functions)(visit),\n globalvar = opt.globalvar,\n fieldvar = opt.fieldvar,\n outputGlobal = isFunction(globalvar) ? globalvar : id => `${globalvar}[\"${id}\"]`;\n let globals = {},\n fields = {},\n memberDepth = 0;\n function visit(ast) {\n if (isString(ast)) return ast;\n const generator = Generators[ast.type];\n if (generator == null) error('Unsupported type: ' + ast.type);\n return generator(ast);\n }\n const Generators = {\n Literal: n => n.raw,\n Identifier: n => {\n const id = n.name;\n if (memberDepth > 0) {\n return id;\n } else if (hasOwnProperty(forbidden, id)) {\n return error('Illegal identifier: ' + id);\n } else if (hasOwnProperty(constants, id)) {\n return constants[id];\n } else if (hasOwnProperty(allowed, id)) {\n return id;\n } else {\n globals[id] = 1;\n return outputGlobal(id);\n }\n },\n MemberExpression: n => {\n const d = !n.computed,\n o = visit(n.object);\n if (d) memberDepth += 1;\n const p = visit(n.property);\n if (o === fieldvar) {\n // strip quotes to sanitize field name (#1653)\n fields[stripQuotes(p)] = 1;\n }\n if (d) memberDepth -= 1;\n return o + (d ? '.' + p : '[' + p + ']');\n },\n CallExpression: n => {\n if (n.callee.type !== 'Identifier') {\n error('Illegal callee type: ' + n.callee.type);\n }\n const callee = n.callee.name,\n args = n.arguments,\n fn = hasOwnProperty(functions, callee) && functions[callee];\n if (!fn) error('Unrecognized function: ' + callee);\n return isFunction(fn) ? fn(args) : fn + '(' + args.map(visit).join(',') + ')';\n },\n ArrayExpression: n => '[' + n.elements.map(visit).join(',') + ']',\n BinaryExpression: n => '(' + visit(n.left) + ' ' + n.operator + ' ' + visit(n.right) + ')',\n UnaryExpression: n => '(' + n.operator + visit(n.argument) + ')',\n ConditionalExpression: n => '(' + visit(n.test) + '?' + visit(n.consequent) + ':' + visit(n.alternate) + ')',\n LogicalExpression: n => '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n ObjectExpression: n => '{' + n.properties.map(visit).join(',') + '}',\n Property: n => {\n memberDepth += 1;\n const k = visit(n.key);\n memberDepth -= 1;\n return k + ':' + visit(n.value);\n }\n };\n function codegen(ast) {\n const result = {\n code: visit(ast),\n globals: Object.keys(globals),\n fields: Object.keys(fields)\n };\n globals = {};\n fields = {};\n return result;\n }\n codegen.functions = functions;\n codegen.constants = constants;\n return codegen;\n}\n\nexport { ASTNode, ArrayExpression, BinaryExpression, CallExpression, ConditionalExpression, Identifier, Literal, LogicalExpression, MemberExpression, ObjectExpression, Property, RawCode, UnaryExpression, codegen as codegenExpression, Constants as constants, Functions as functions, parser as parseExpression };\n","import { bisector, union, intersection } from 'd3-array';\nimport { field, isDate, toNumber, isArray, inrange, extend, array, error, peek, hasOwnProperty } from 'vega-util';\nimport { Literal } from 'vega-expression';\n\n// Registers vega-util field accessors to protect against XSS attacks\nconst SELECTION_GETTER = Symbol('vega_selection_getter');\nfunction getter(f) {\n if (!f.getter || !f.getter[SELECTION_GETTER]) {\n f.getter = field(f.field);\n f.getter[SELECTION_GETTER] = true;\n }\n return f.getter;\n}\nconst Intersect = 'intersect';\nconst Union = 'union';\nconst VlMulti = 'vlMulti';\nconst VlPoint = 'vlPoint';\nconst Or = 'or';\nconst And = 'and';\nconst SelectionId = '_vgsid_';\nconst $selectionId = field(SelectionId);\n\nconst TYPE_ENUM = 'E',\n TYPE_RANGE_INC = 'R',\n TYPE_RANGE_EXC = 'R-E',\n TYPE_RANGE_LE = 'R-LE',\n TYPE_RANGE_RE = 'R-RE',\n UNIT_INDEX = 'index:unit';\n\n// TODO: revisit date coercion?\nfunction testPoint(datum, entry) {\n var fields = entry.fields,\n values = entry.values,\n n = fields.length,\n i = 0,\n dval,\n f;\n for (; i < n; ++i) {\n f = fields[i];\n dval = getter(f)(datum);\n if (isDate(dval)) dval = toNumber(dval);\n if (isDate(values[i])) values[i] = toNumber(values[i]);\n if (isArray(values[i]) && isDate(values[i][0])) values[i] = values[i].map(toNumber);\n if (f.type === TYPE_ENUM) {\n // Enumerated fields can either specify individual values (single/multi selections)\n // or an array of values (interval selections).\n if (isArray(values[i]) ? values[i].indexOf(dval) < 0 : dval !== values[i]) {\n return false;\n }\n } else {\n if (f.type === TYPE_RANGE_INC) {\n if (!inrange(dval, values[i])) return false;\n } else if (f.type === TYPE_RANGE_RE) {\n // Discrete selection of bins test within the range [bin_start, bin_end).\n if (!inrange(dval, values[i], true, false)) return false;\n } else if (f.type === TYPE_RANGE_EXC) {\n // 'R-E'/'R-LE' included for completeness.\n if (!inrange(dval, values[i], false, false)) return false;\n } else if (f.type === TYPE_RANGE_LE) {\n if (!inrange(dval, values[i], false, true)) return false;\n }\n }\n }\n return true;\n}\n\n/**\n * Tests if a tuple is contained within an interactive selection.\n * @param {string} name - The name of the data set representing the selection.\n * Tuples in the dataset are of the form\n * {unit: string, fields: array, values: array<*>}.\n * Fielddef is of the form\n * {field: string, channel: string, type: 'E' | 'R'} where\n * 'type' identifies whether tuples in the dataset enumerate\n * values for the field, or specify a continuous range.\n * @param {object} datum - The tuple to test for inclusion.\n * @param {string} op - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @return {boolean} - True if the datum is in the selection, false otherwise.\n */\nfunction selectionTest(name, datum, op) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === Intersect,\n n = entries.length,\n i = 0,\n entry,\n miss,\n count,\n unit,\n b;\n for (; i < n; ++i) {\n entry = entries[i];\n if (unitIdx && intersect) {\n // multi selections union within the same unit and intersect across units.\n miss = miss || {};\n count = miss[unit = entry.unit] || 0;\n\n // if we've already matched this unit, skip.\n if (count === -1) continue;\n b = testPoint(datum, entry);\n miss[unit] = b ? -1 : ++count;\n\n // if we match and there are no other units return true\n // if we've missed against all tuples in this unit return false\n if (b && unitIdx.size === 1) return true;\n if (!b && count === unitIdx.get(unit).count) return false;\n } else {\n b = testPoint(datum, entry);\n\n // if we find a miss and we do require intersection return false\n // if we find a match and we don't require intersection return true\n if (intersect ^ b) return b;\n }\n }\n\n // if intersecting and we made it here, then we saw no misses\n // if not intersecting, then we saw no matches\n // if no active selections, return false\n return n && intersect;\n}\nconst bisect = bisector($selectionId),\n bisectLeft = bisect.left,\n bisectRight = bisect.right;\nfunction selectionIdTest(name, datum, op) {\n const data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === Intersect,\n value = $selectionId(datum),\n index = bisectLeft(entries, value);\n if (index === entries.length) return false;\n if ($selectionId(entries[index]) !== value) return false;\n if (unitIdx && intersect) {\n if (unitIdx.size === 1) return true;\n if (bisectRight(entries, value) - index < unitIdx.size) return false;\n }\n return true;\n}\n\n/**\n * Maps an array of scene graph items to an array of selection tuples.\n * @param {string} name - The name of the dataset representing the selection.\n * @param {string} base - The base object that generated tuples extend.\n *\n * @returns {array} An array of selection entries for the given unit.\n */\nfunction selectionTuples(array, base) {\n return array.map(x => extend(base.fields ? {\n values: base.fields.map(f => getter(f)(x.datum))\n } : {\n [SelectionId]: $selectionId(x.datum)\n }, base));\n}\n\n/**\n * Resolves selection for use as a scale domain or reads via the API.\n * @param {string} name - The name of the dataset representing the selection\n * @param {string} [op='union'] - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @param {boolean} isMulti - Identifies a \"multi\" selection to perform more\n * expensive resolution computation.\n * @param {boolean} vl5 - With Vega-Lite v5, \"multi\" selections are now called \"point\"\n * selections, and thus the resolved tuple should reflect this name.\n * This parameter allows us to reflect this change without triggering\n * a major version bump for Vega.\n * @returns {object} An object of selected fields and values.\n */\nfunction selectionResolve(name, op, isMulti, vl5) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n resolved = {},\n multiRes = {},\n types = {},\n entry,\n fields,\n values,\n unit,\n field,\n value,\n res,\n resUnit,\n type,\n union,\n n = entries.length,\n i = 0,\n j,\n m;\n\n // First union all entries within the same unit.\n for (; i < n; ++i) {\n entry = entries[i];\n unit = entry.unit;\n fields = entry.fields;\n values = entry.values;\n if (fields && values) {\n // Intentional selection stores\n for (j = 0, m = fields.length; j < m; ++j) {\n field = fields[j];\n res = resolved[field.field] || (resolved[field.field] = {});\n resUnit = res[unit] || (res[unit] = []);\n types[field.field] = type = field.type.charAt(0);\n union = ops[`${type}_union`];\n res[unit] = union(resUnit, array(values[j]));\n }\n\n // If the same multi-selection is repeated over views and projected over\n // an encoding, it may operate over different fields making it especially\n // tricky to reliably resolve it. At best, we can de-dupe identical entries\n // but doing so may be more computationally expensive than it is worth.\n // Instead, for now, we simply transform our store representation into\n // a more human-friendly one.\n if (isMulti) {\n resUnit = multiRes[unit] || (multiRes[unit] = []);\n resUnit.push(array(values).reduce((obj, curr, j) => (obj[fields[j].field] = curr, obj), {}));\n }\n } else {\n // Short circuit extensional selectionId stores which hold sorted IDs unique to each unit.\n field = SelectionId;\n value = $selectionId(entry);\n res = resolved[field] || (resolved[field] = {});\n resUnit = res[unit] || (res[unit] = []);\n resUnit.push(value);\n if (isMulti) {\n resUnit = multiRes[unit] || (multiRes[unit] = []);\n resUnit.push({\n [SelectionId]: value\n });\n }\n }\n }\n\n // Then resolve fields across units as per the op.\n op = op || Union;\n if (resolved[SelectionId]) {\n resolved[SelectionId] = ops[`${SelectionId}_${op}`](...Object.values(resolved[SelectionId]));\n } else {\n Object.keys(resolved).forEach(field => {\n resolved[field] = Object.keys(resolved[field]).map(unit => resolved[field][unit]).reduce((acc, curr) => acc === undefined ? curr : ops[`${types[field]}_${op}`](acc, curr));\n });\n }\n entries = Object.keys(multiRes);\n if (isMulti && entries.length) {\n const key = vl5 ? VlPoint : VlMulti;\n resolved[key] = op === Union ? {\n [Or]: entries.reduce((acc, k) => (acc.push(...multiRes[k]), acc), [])\n } : {\n [And]: entries.map(k => ({\n [Or]: multiRes[k]\n }))\n };\n }\n return resolved;\n}\nvar ops = {\n [`${SelectionId}_union`]: union,\n [`${SelectionId}_intersect`]: intersection,\n E_union: function (base, value) {\n if (!base.length) return value;\n var i = 0,\n n = value.length;\n for (; i < n; ++i) if (base.indexOf(value[i]) < 0) base.push(value[i]);\n return base;\n },\n E_intersect: function (base, value) {\n return !base.length ? value : base.filter(v => value.indexOf(v) >= 0);\n },\n R_union: function (base, value) {\n var lo = toNumber(value[0]),\n hi = toNumber(value[1]);\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n if (!base.length) return [lo, hi];\n if (base[0] > lo) base[0] = lo;\n if (base[1] < hi) base[1] = hi;\n return base;\n },\n R_intersect: function (base, value) {\n var lo = toNumber(value[0]),\n hi = toNumber(value[1]);\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n if (!base.length) return [lo, hi];\n if (hi < base[0] || base[1] < lo) {\n return [];\n } else {\n if (base[0] < lo) base[0] = lo;\n if (base[1] > hi) base[1] = hi;\n }\n return base;\n }\n};\n\nconst DataPrefix = ':',\n IndexPrefix = '@';\nfunction selectionVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to selection functions must be a string literal.');\n const data = args[0].value,\n op = args.length >= 2 && peek(args).value,\n field = 'unit',\n indexName = IndexPrefix + field,\n dataName = DataPrefix + data;\n\n // eslint-disable-next-line no-prototype-builtins\n if (op === Intersect && !hasOwnProperty(params, indexName)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n\n // eslint-disable-next-line no-prototype-builtins\n if (!hasOwnProperty(params, dataName)) {\n params[dataName] = scope.getData(data).tuplesRef();\n }\n}\n\nexport { selectionIdTest, selectionResolve, selectionTest, selectionTuples, selectionVisitor };\n","import { truthy, error, hasOwnProperty, isFunction, isString, stringValue, extend, isArray, isObject, field, peek, identity, array as array$1, isBoolean, isDate, isNumber, isRegExp, toBoolean, toDate, toNumber, toString, flush, lerp, pad, span, inrange, truncate, quarter, utcquarter, extent, clampRange, panLinear, panLog, panPow, panSymlog, zoomLinear, zoomLog, zoomPow, zoomSymlog } from 'vega-util';\nimport { Literal, codegenExpression, constants, functions, parseExpression, CallExpression } from 'vega-expression';\nimport { isRegisteredScale, bandSpace, scale as scale$1, scaleFraction } from 'vega-scale';\nimport { geoArea as geoArea$1, geoBounds as geoBounds$1, geoCentroid as geoCentroid$1 } from 'd3-geo';\nimport { rgb, lab, hcl, hsl } from 'd3-color';\nimport { isTuple } from 'vega-dataflow';\nimport { Gradient, pathRender, pathParse, Bounds, intersect as intersect$1 } from 'vega-scenegraph';\nimport { selectionVisitor, selectionTest, selectionIdTest, selectionResolve, selectionTuples } from 'vega-selections';\nimport { random, cumulativeNormal, cumulativeLogNormal, cumulativeUniform, densityNormal, densityLogNormal, densityUniform, quantileNormal, quantileLogNormal, quantileUniform, sampleNormal, sampleLogNormal, sampleUniform } from 'vega-statistics';\nimport { utcOffset, utcSequence, timeOffset, timeSequence, timeUnitSpecifier, week, utcweek, dayofyear, utcdayofyear } from 'vega-time';\nimport { range as range$1 } from 'd3-array';\n\nfunction data(name) {\n const data = this.context.data[name];\n return data ? data.values.value : [];\n}\nfunction indata(name, field, value) {\n const index = this.context.data[name]['index:' + field],\n entry = index ? index.value.get(value) : undefined;\n return entry ? entry.count : entry;\n}\nfunction setdata(name, tuples) {\n const df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input;\n df.pulse(input, df.changeset().remove(truthy).insert(tuples));\n return 1;\n}\n\nfunction encode (item, name, retval) {\n if (item) {\n const df = this.context.dataflow,\n target = item.mark.source;\n df.pulse(target, df.changeset().encode(item, name));\n }\n return retval !== undefined ? retval : item;\n}\n\nconst wrap = method => function (value, spec) {\n const locale = this.context.dataflow.locale();\n return locale[method](spec)(value);\n};\nconst format = wrap('format');\nconst timeFormat = wrap('timeFormat');\nconst utcFormat = wrap('utcFormat');\nconst timeParse = wrap('timeParse');\nconst utcParse = wrap('utcParse');\nconst dateObj = new Date(2000, 0, 1);\nfunction time(month, day, specifier) {\n if (!Number.isInteger(month) || !Number.isInteger(day)) return '';\n dateObj.setYear(2000);\n dateObj.setMonth(month);\n dateObj.setDate(day);\n return timeFormat.call(this, dateObj, specifier);\n}\nfunction monthFormat(month) {\n return time.call(this, month, 1, '%B');\n}\nfunction monthAbbrevFormat(month) {\n return time.call(this, month, 1, '%b');\n}\nfunction dayFormat(day) {\n return time.call(this, 0, 2 + day, '%A');\n}\nfunction dayAbbrevFormat(day) {\n return time.call(this, 0, 2 + day, '%a');\n}\n\nconst DataPrefix = ':';\nconst IndexPrefix = '@';\nconst ScalePrefix = '%';\nconst SignalPrefix = '$';\n\nfunction dataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) {\n error('First argument to data functions must be a string literal.');\n }\n const data = args[0].value,\n dataName = DataPrefix + data;\n if (!hasOwnProperty(dataName, params)) {\n try {\n params[dataName] = scope.getData(data).tuplesRef();\n } catch (err) {\n // if data set does not exist, there's nothing to track\n }\n }\n}\nfunction indataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to indata must be a string literal.');\n if (args[1].type !== Literal) error('Second argument to indata must be a string literal.');\n const data = args[0].value,\n field = args[1].value,\n indexName = IndexPrefix + field;\n if (!hasOwnProperty(indexName, params)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n}\nfunction scaleVisitor(name, args, scope, params) {\n if (args[0].type === Literal) {\n // add scale dependency\n addScaleDependency(scope, params, args[0].value);\n } else {\n // indirect scale lookup; add all scales as parameters\n for (name in scope.scales) {\n addScaleDependency(scope, params, name);\n }\n }\n}\nfunction addScaleDependency(scope, params, name) {\n const scaleName = ScalePrefix + name;\n if (!hasOwnProperty(params, scaleName)) {\n try {\n params[scaleName] = scope.scaleRef(name);\n } catch (err) {\n // TODO: error handling? warning?\n }\n }\n}\n\nfunction getScale(nameOrFunction, ctx) {\n if (isFunction(nameOrFunction)) {\n return nameOrFunction;\n }\n if (isString(nameOrFunction)) {\n const maybeScale = ctx.scales[nameOrFunction];\n return maybeScale && isRegisteredScale(maybeScale.value) ? maybeScale.value : undefined;\n }\n return undefined;\n}\nfunction internalScaleFunctions(codegen, fnctx, visitors) {\n // add helper method to the 'this' expression function context\n fnctx.__bandwidth = s => s && s.bandwidth ? s.bandwidth() : 0;\n\n // register AST visitors for internal scale functions\n visitors._bandwidth = scaleVisitor;\n visitors._range = scaleVisitor;\n visitors._scale = scaleVisitor;\n\n // resolve scale reference directly to the signal hash argument\n const ref = arg => '_[' + (arg.type === Literal ? stringValue(ScalePrefix + arg.value) : stringValue(ScalePrefix) + '+' + codegen(arg)) + ']';\n\n // define and return internal scale function code generators\n // these internal functions are called by mark encoders\n return {\n _bandwidth: args => `this.__bandwidth(${ref(args[0])})`,\n _range: args => `${ref(args[0])}.range()`,\n _scale: args => `${ref(args[0])}(${codegen(args[1])})`\n };\n}\n\nfunction geoMethod(methodName, globalMethod) {\n return function (projection, geojson, group) {\n if (projection) {\n // projection defined, use it\n const p = getScale(projection, (group || this).context);\n return p && p.path[methodName](geojson);\n } else {\n // projection undefined, use global method\n return globalMethod(geojson);\n }\n };\n}\nconst geoArea = geoMethod('area', geoArea$1);\nconst geoBounds = geoMethod('bounds', geoBounds$1);\nconst geoCentroid = geoMethod('centroid', geoCentroid$1);\nfunction geoScale(projection, group) {\n const p = getScale(projection, (group || this).context);\n return p && p.scale();\n}\n\nfunction inScope (item) {\n const group = this.context.group;\n let value = false;\n if (group) while (item) {\n if (item === group) {\n value = true;\n break;\n }\n item = item.mark.group;\n }\n return value;\n}\n\nfunction log(df, method, args) {\n try {\n df[method].apply(df, ['EXPRESSION'].concat([].slice.call(args)));\n } catch (err) {\n df.warn(err);\n }\n return args[args.length - 1];\n}\nfunction warn() {\n return log(this.context.dataflow, 'warn', arguments);\n}\nfunction info() {\n return log(this.context.dataflow, 'info', arguments);\n}\nfunction debug() {\n return log(this.context.dataflow, 'debug', arguments);\n}\n\n// https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\nfunction channel_luminance_value(channelValue) {\n const val = channelValue / 255;\n if (val <= 0.03928) {\n return val / 12.92;\n }\n return Math.pow((val + 0.055) / 1.055, 2.4);\n}\nfunction luminance(color) {\n const c = rgb(color),\n r = channel_luminance_value(c.r),\n g = channel_luminance_value(c.g),\n b = channel_luminance_value(c.b);\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n\n// https://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\nfunction contrast(color1, color2) {\n const lum1 = luminance(color1),\n lum2 = luminance(color2),\n lumL = Math.max(lum1, lum2),\n lumD = Math.min(lum1, lum2);\n return (lumL + 0.05) / (lumD + 0.05);\n}\n\nfunction merge () {\n const args = [].slice.call(arguments);\n args.unshift({});\n return extend(...args);\n}\n\nfunction equal(a, b) {\n return a === b || a !== a && b !== b ? true : isArray(a) ? isArray(b) && a.length === b.length ? equalArray(a, b) : false : isObject(a) && isObject(b) ? equalObject(a, b) : false;\n}\nfunction equalArray(a, b) {\n for (let i = 0, n = a.length; i < n; ++i) {\n if (!equal(a[i], b[i])) return false;\n }\n return true;\n}\nfunction equalObject(a, b) {\n for (const key in a) {\n if (!equal(a[key], b[key])) return false;\n }\n return true;\n}\nfunction removePredicate(props) {\n return _ => equalObject(props, _);\n}\nfunction modify (name, insert, remove, toggle, modify, values) {\n const df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input,\n stamp = df.stamp();\n let changes = data.changes,\n predicate,\n key;\n if (df._trigger === false || !(input.value.length || insert || toggle)) {\n // nothing to do!\n return 0;\n }\n if (!changes || changes.stamp < stamp) {\n data.changes = changes = df.changeset();\n changes.stamp = stamp;\n df.runAfter(() => {\n data.modified = true;\n df.pulse(input, changes).run();\n }, true, 1);\n }\n if (remove) {\n predicate = remove === true ? truthy : isArray(remove) || isTuple(remove) ? remove : removePredicate(remove);\n changes.remove(predicate);\n }\n if (insert) {\n changes.insert(insert);\n }\n if (toggle) {\n predicate = removePredicate(toggle);\n if (input.value.some(predicate)) {\n changes.remove(predicate);\n } else {\n changes.insert(toggle);\n }\n }\n if (modify) {\n for (key in values) {\n changes.modify(modify, key, values[key]);\n }\n }\n return 1;\n}\n\nfunction pinchDistance(event) {\n const t = event.touches,\n dx = t[0].clientX - t[1].clientX,\n dy = t[0].clientY - t[1].clientY;\n return Math.hypot(dx, dy);\n}\nfunction pinchAngle(event) {\n const t = event.touches;\n return Math.atan2(t[0].clientY - t[1].clientY, t[0].clientX - t[1].clientX);\n}\n\n// memoize accessor functions\nconst accessors = {};\nfunction pluck (data, name) {\n const accessor = accessors[name] || (accessors[name] = field(name));\n return isArray(data) ? data.map(accessor) : accessor(data);\n}\n\nfunction array(seq) {\n return isArray(seq) || ArrayBuffer.isView(seq) ? seq : null;\n}\nfunction sequence(seq) {\n return array(seq) || (isString(seq) ? seq : null);\n}\nfunction join(seq) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return array(seq).join(...args);\n}\nfunction indexof(seq) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n return sequence(seq).indexOf(...args);\n}\nfunction lastindexof(seq) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return sequence(seq).lastIndexOf(...args);\n}\nfunction slice(seq) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n return sequence(seq).slice(...args);\n}\nfunction replace(str, pattern, repl) {\n if (isFunction(repl)) error('Function argument passed to replace.');\n return String(str).replace(pattern, repl);\n}\nfunction reverse(seq) {\n return array(seq).slice().reverse();\n}\n\nfunction bandspace(count, paddingInner, paddingOuter) {\n return bandSpace(count || 0, paddingInner || 0, paddingOuter || 0);\n}\nfunction bandwidth(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.bandwidth ? s.bandwidth() : 0;\n}\nfunction copy(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.copy() : undefined;\n}\nfunction domain(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.domain() : [];\n}\nfunction invert(name, range, group) {\n const s = getScale(name, (group || this).context);\n return !s ? undefined : isArray(range) ? (s.invertRange || s.invert)(range) : (s.invert || s.invertExtent)(range);\n}\nfunction range(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.range ? s.range() : [];\n}\nfunction scale(name, value, group) {\n const s = getScale(name, (group || this).context);\n return s ? s(value) : undefined;\n}\n\nfunction scaleGradient (scale, p0, p1, count, group) {\n scale = getScale(scale, (group || this).context);\n const gradient = Gradient(p0, p1);\n let stops = scale.domain(),\n min = stops[0],\n max = peek(stops),\n fraction = identity;\n if (!(max - min)) {\n // expand scale if domain has zero span, fix #1479\n scale = (scale.interpolator ? scale$1('sequential')().interpolator(scale.interpolator()) : scale$1('linear')().interpolate(scale.interpolate()).range(scale.range())).domain([min = 0, max = 1]);\n } else {\n fraction = scaleFraction(scale, min, max);\n }\n if (scale.ticks) {\n stops = scale.ticks(+count || 15);\n if (min !== stops[0]) stops.unshift(min);\n if (max !== peek(stops)) stops.push(max);\n }\n stops.forEach(_ => gradient.stop(fraction(_), scale(_)));\n return gradient;\n}\n\nfunction geoShape(projection, geojson, group) {\n const p = getScale(projection, (group || this).context);\n return function (context) {\n return p ? p.path.context(context)(geojson) : '';\n };\n}\nfunction pathShape(path) {\n let p = null;\n return function (context) {\n return context ? pathRender(context, p = p || pathParse(path)) : path;\n };\n}\n\nconst datum = d => d.data;\nfunction treeNodes(name, context) {\n const tree = data.call(context, name);\n return tree.root && tree.root.lookup || {};\n}\nfunction treePath(name, source, target) {\n const nodes = treeNodes(name, this),\n s = nodes[source],\n t = nodes[target];\n return s && t ? s.path(t).map(datum) : undefined;\n}\nfunction treeAncestors(name, node) {\n const n = treeNodes(name, this)[node];\n return n ? n.ancestors().map(datum) : undefined;\n}\n\nconst _window = () => typeof window !== 'undefined' && window || null;\nfunction screen() {\n const w = _window();\n return w ? w.screen : {};\n}\nfunction windowSize() {\n const w = _window();\n return w ? [w.innerWidth, w.innerHeight] : [undefined, undefined];\n}\nfunction containerSize() {\n const view = this.context.dataflow,\n el = view.container && view.container();\n return el ? [el.clientWidth, el.clientHeight] : [undefined, undefined];\n}\n\nfunction intersect (b, opt, group) {\n if (!b) return [];\n const [u, v] = b,\n box = new Bounds().set(u[0], u[1], v[0], v[1]),\n scene = group || this.context.dataflow.scenegraph().root;\n return intersect$1(scene, box, filter(opt));\n}\nfunction filter(opt) {\n let p = null;\n if (opt) {\n const types = array$1(opt.marktype),\n names = array$1(opt.markname);\n p = _ => (!types.length || types.some(t => _.marktype === t)) && (!names.length || names.some(s => _.name === s));\n }\n return p;\n}\n\n/**\n * Appends a new point to the lasso\n *\n * @param {*} lasso the lasso in pixel space\n * @param {*} x the x coordinate in pixel space\n * @param {*} y the y coordinate in pixel space\n * @param {*} minDist the minimum distance, in pixels, that thenew point needs to be apart from the last point\n * @returns a new array containing the lasso with the new point\n */\nfunction lassoAppend(lasso, x, y) {\n let minDist = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 5;\n lasso = array$1(lasso);\n const last = lasso[lasso.length - 1];\n\n // Add point to lasso if its the first point or distance to last point exceed minDist\n return last === undefined || Math.hypot(last[0] - x, last[1] - y) > minDist ? [...lasso, [x, y]] : lasso;\n}\n\n/**\n * Generates a svg path command which draws a lasso\n *\n * @param {*} lasso the lasso in pixel space in the form [[x,y], [x,y], ...]\n * @returns the svg path command that draws the lasso\n */\nfunction lassoPath(lasso) {\n return array$1(lasso).reduce((svg, _ref, i) => {\n let [x, y] = _ref;\n return svg += i == 0 ? `M ${x},${y} ` : i === lasso.length - 1 ? ' Z' : `L ${x},${y} `;\n }, '');\n}\n\n/**\n * Inverts the lasso from pixel space to an array of vega scenegraph tuples\n *\n * @param {*} data the dataset\n * @param {*} pixelLasso the lasso in pixel space, [[x,y], [x,y], ...]\n * @param {*} unit the unit where the lasso is defined\n *\n * @returns an array of vega scenegraph tuples\n */\nfunction intersectLasso(markname, pixelLasso, unit) {\n const {\n x,\n y,\n mark\n } = unit;\n const bb = new Bounds().set(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER, Number.MIN_SAFE_INTEGER);\n\n // Get bounding box around lasso\n for (const [px, py] of pixelLasso) {\n if (px < bb.x1) bb.x1 = px;\n if (px > bb.x2) bb.x2 = px;\n if (py < bb.y1) bb.y1 = py;\n if (py > bb.y2) bb.y2 = py;\n }\n\n // Translate bb against unit coordinates\n bb.translate(x, y);\n const intersection = intersect([[bb.x1, bb.y1], [bb.x2, bb.y2]], markname, mark);\n\n // Check every point against the lasso\n return intersection.filter(tuple => pointInPolygon(tuple.x, tuple.y, pixelLasso));\n}\n\n/**\n * Performs a test if a point is inside a polygon based on the idea from\n * https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html\n *\n * This method will not need the same start/end point since it wraps around the edges of the array\n *\n * @param {*} test a point to test against\n * @param {*} polygon a polygon in the form [[x,y], [x,y], ...]\n * @returns true if the point lies inside the polygon, false otherwise\n */\nfunction pointInPolygon(testx, testy, polygon) {\n let intersections = 0;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const [prevX, prevY] = polygon[j];\n const [x, y] = polygon[i];\n\n // count intersections\n if (y > testy != prevY > testy && testx < (prevX - x) * (testy - y) / (prevY - y) + x) {\n intersections++;\n }\n }\n\n // point is in polygon if intersection count is odd\n return intersections & 1;\n}\n\n// Expression function context object\nconst functionContext = {\n random() {\n return random();\n },\n // override default\n cumulativeNormal,\n cumulativeLogNormal,\n cumulativeUniform,\n densityNormal,\n densityLogNormal,\n densityUniform,\n quantileNormal,\n quantileLogNormal,\n quantileUniform,\n sampleNormal,\n sampleLogNormal,\n sampleUniform,\n isArray,\n isBoolean,\n isDate,\n isDefined(_) {\n return _ !== undefined;\n },\n isNumber,\n isObject,\n isRegExp,\n isString,\n isTuple,\n isValid(_) {\n return _ != null && _ === _;\n },\n toBoolean,\n toDate(_) {\n return toDate(_);\n },\n // suppress extra arguments\n toNumber,\n toString,\n indexof,\n join,\n lastindexof,\n replace,\n reverse,\n slice,\n flush,\n lerp,\n merge,\n pad,\n peek,\n pluck,\n span,\n inrange,\n truncate,\n rgb,\n lab,\n hcl,\n hsl,\n luminance,\n contrast,\n sequence: range$1,\n format,\n utcFormat,\n utcParse,\n utcOffset,\n utcSequence,\n timeFormat,\n timeParse,\n timeOffset,\n timeSequence,\n timeUnitSpecifier,\n monthFormat,\n monthAbbrevFormat,\n dayFormat,\n dayAbbrevFormat,\n quarter,\n utcquarter,\n week,\n utcweek,\n dayofyear,\n utcdayofyear,\n warn,\n info,\n debug,\n extent(_) {\n return extent(_);\n },\n // suppress extra arguments\n inScope,\n intersect,\n clampRange,\n pinchDistance,\n pinchAngle,\n screen,\n containerSize,\n windowSize,\n bandspace,\n setdata,\n pathShape,\n panLinear,\n panLog,\n panPow,\n panSymlog,\n zoomLinear,\n zoomLog,\n zoomPow,\n zoomSymlog,\n encode,\n modify,\n lassoAppend,\n lassoPath,\n intersectLasso\n};\nconst eventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'],\n // event functions\n eventPrefix = 'event.vega.',\n // event function prefix\n thisPrefix = 'this.',\n // function context prefix\n astVisitors = {}; // AST visitors for dependency analysis\n\n// export code generator parameters\nconst codegenParams = {\n forbidden: ['_'],\n allowed: ['datum', 'event', 'item'],\n fieldvar: 'datum',\n globalvar: id => `_[${stringValue(SignalPrefix + id)}]`,\n functions: buildFunctions,\n constants: constants,\n visitors: astVisitors\n};\n\n// export code generator\nconst codeGenerator = codegenExpression(codegenParams);\n\n// Build expression function registry\nfunction buildFunctions(codegen) {\n const fn = functions(codegen);\n eventFunctions.forEach(name => fn[name] = eventPrefix + name);\n for (const name in functionContext) {\n fn[name] = thisPrefix + name;\n }\n extend(fn, internalScaleFunctions(codegen, functionContext, astVisitors));\n return fn;\n}\n\n// Register an expression function\nfunction expressionFunction(name, fn, visitor) {\n if (arguments.length === 1) {\n return functionContext[name];\n }\n\n // register with the functionContext\n functionContext[name] = fn;\n\n // if there is an astVisitor register that, too\n if (visitor) astVisitors[name] = visitor;\n\n // if the code generator has already been initialized,\n // we need to also register the function with it\n if (codeGenerator) codeGenerator.functions[name] = thisPrefix + name;\n return this;\n}\n\n// register expression functions with ast visitors\nexpressionFunction('bandwidth', bandwidth, scaleVisitor);\nexpressionFunction('copy', copy, scaleVisitor);\nexpressionFunction('domain', domain, scaleVisitor);\nexpressionFunction('range', range, scaleVisitor);\nexpressionFunction('invert', invert, scaleVisitor);\nexpressionFunction('scale', scale, scaleVisitor);\nexpressionFunction('gradient', scaleGradient, scaleVisitor);\nexpressionFunction('geoArea', geoArea, scaleVisitor);\nexpressionFunction('geoBounds', geoBounds, scaleVisitor);\nexpressionFunction('geoCentroid', geoCentroid, scaleVisitor);\nexpressionFunction('geoShape', geoShape, scaleVisitor);\nexpressionFunction('geoScale', geoScale, scaleVisitor);\nexpressionFunction('indata', indata, indataVisitor);\nexpressionFunction('data', data, dataVisitor);\nexpressionFunction('treePath', treePath, dataVisitor);\nexpressionFunction('treeAncestors', treeAncestors, dataVisitor);\n\n// register Vega-Lite selection functions\nexpressionFunction('vlSelectionTest', selectionTest, selectionVisitor);\nexpressionFunction('vlSelectionIdTest', selectionIdTest, selectionVisitor);\nexpressionFunction('vlSelectionResolve', selectionResolve, selectionVisitor);\nexpressionFunction('vlSelectionTuples', selectionTuples);\n\nfunction parser (expr, scope) {\n const params = {};\n\n // parse the expression to an abstract syntax tree (ast)\n let ast;\n try {\n expr = isString(expr) ? expr : stringValue(expr) + '';\n ast = parseExpression(expr);\n } catch (err) {\n error('Expression parse error: ' + expr);\n }\n\n // analyze ast function calls for dependencies\n ast.visit(node => {\n if (node.type !== CallExpression) return;\n const name = node.callee.name,\n visit = codegenParams.visitors[name];\n if (visit) visit(name, node.arguments, scope, params);\n });\n\n // perform code generation\n const gen = codeGenerator(ast);\n\n // collect signal dependencies\n gen.globals.forEach(name => {\n const signalName = SignalPrefix + name;\n if (!hasOwnProperty(params, signalName) && scope.getSignal(name)) {\n params[signalName] = scope.signalRef(name);\n }\n });\n\n // return generated expression code and dependencies\n return {\n $expr: extend({\n code: gen.code\n }, scope.options.ast ? {\n ast\n } : null),\n $fields: gen.fields,\n $params: params\n };\n}\n\nexport { DataPrefix, IndexPrefix, ScalePrefix, SignalPrefix, bandspace, bandwidth, codeGenerator, codegenParams, containerSize, contrast, copy, data, dataVisitor, dayAbbrevFormat, dayFormat, debug, domain, encode, expressionFunction, format, functionContext, geoArea, geoBounds, geoCentroid, geoScale, geoShape, inScope, indata, indataVisitor, indexof, info, invert, join, lastindexof, luminance, merge, modify, monthAbbrevFormat, monthFormat, parser as parseExpression, pathShape, pinchAngle, pinchDistance, pluck, range, replace, reverse, scale, scaleGradient, scaleVisitor, screen, setdata, slice, timeFormat, timeParse, treeAncestors, treePath, utcFormat, utcParse, warn, windowSize };\n","import { toSet, stringValue, error, isArray, isObject, hasOwnProperty, accessor, key, field, array, compare, truthy } from 'vega-util';\nimport { tupleid } from 'vega-dataflow';\n\n/**\n * Parse a serialized dataflow specification.\n */\nfunction parse (spec) {\n const ctx = this,\n operators = spec.operators || [];\n\n // parse background\n if (spec.background) {\n ctx.background = spec.background;\n }\n\n // parse event configuration\n if (spec.eventConfig) {\n ctx.eventConfig = spec.eventConfig;\n }\n\n // parse locale configuration\n if (spec.locale) {\n ctx.locale = spec.locale;\n }\n\n // parse operators\n operators.forEach(entry => ctx.parseOperator(entry));\n\n // parse operator parameters\n operators.forEach(entry => ctx.parseOperatorParameters(entry));\n\n // parse streams\n (spec.streams || []).forEach(entry => ctx.parseStream(entry));\n\n // parse updates\n (spec.updates || []).forEach(entry => ctx.parseUpdate(entry));\n return ctx.resolve();\n}\n\nconst Skip = toSet(['rule']),\n Swap = toSet(['group', 'image', 'rect']);\nfunction adjustSpatial(encode, marktype) {\n let code = '';\n if (Skip[marktype]) return code;\n if (encode.x2) {\n if (encode.x) {\n if (Swap[marktype]) {\n code += 'if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;';\n }\n code += 'o.width=o.x2-o.x;';\n } else {\n code += 'o.x=o.x2-(o.width||0);';\n }\n }\n if (encode.xc) {\n code += 'o.x=o.xc-(o.width||0)/2;';\n }\n if (encode.y2) {\n if (encode.y) {\n if (Swap[marktype]) {\n code += 'if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;';\n }\n code += 'o.height=o.y2-o.y;';\n } else {\n code += 'o.y=o.y2-(o.height||0);';\n }\n }\n if (encode.yc) {\n code += 'o.y=o.yc-(o.height||0)/2;';\n }\n return code;\n}\nfunction canonicalType(type) {\n return (type + '').toLowerCase();\n}\nfunction isOperator(type) {\n return canonicalType(type) === 'operator';\n}\nfunction isCollect(type) {\n return canonicalType(type) === 'collect';\n}\n\nfunction expression(ctx, args, code) {\n // wrap code in return statement if expression does not terminate\n if (!code.endsWith(';')) {\n code = 'return(' + code + ');';\n }\n const fn = Function(...args.concat(code));\n return ctx && ctx.functions ? fn.bind(ctx.functions) : fn;\n}\n\n// generate code for comparing a single field\nfunction _compare(u, v, lt, gt) {\n return `((u = ${u}) < (v = ${v}) || u == null) && v != null ? ${lt}\n : (u > v || v == null) && u != null ? ${gt}\n : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? ${lt}\n : v !== v && u === u ? ${gt} : `;\n}\nvar expressionCodegen = {\n /**\n * Parse an expression used to update an operator value.\n */\n operator: (ctx, expr) => expression(ctx, ['_'], expr.code),\n /**\n * Parse an expression provided as an operator parameter value.\n */\n parameter: (ctx, expr) => expression(ctx, ['datum', '_'], expr.code),\n /**\n * Parse an expression applied to an event stream.\n */\n event: (ctx, expr) => expression(ctx, ['event'], expr.code),\n /**\n * Parse an expression used to handle an event-driven operator update.\n */\n handler: (ctx, expr) => {\n const code = `var datum=event.item&&event.item.datum;return ${expr.code};`;\n return expression(ctx, ['_', 'event'], code);\n },\n /**\n * Parse an expression that performs visual encoding.\n */\n encode: (ctx, encode) => {\n const {\n marktype,\n channels\n } = encode;\n let code = 'var o=item,datum=o.datum,m=0,$;';\n for (const name in channels) {\n const o = 'o[' + stringValue(name) + ']';\n code += `$=${channels[name].code};if(${o}!==$)${o}=$,m=1;`;\n }\n code += adjustSpatial(channels, marktype);\n code += 'return m;';\n return expression(ctx, ['item', '_'], code);\n },\n /**\n * Optimized code generators for access and comparison.\n */\n codegen: {\n get(path) {\n const ref = `[${path.map(stringValue).join('][')}]`;\n const get = Function('_', `return _${ref};`);\n get.path = ref;\n return get;\n },\n comparator(fields, orders) {\n let t;\n const map = (f, i) => {\n const o = orders[i];\n let u, v;\n if (f.path) {\n u = `a${f.path}`;\n v = `b${f.path}`;\n } else {\n (t = t || {})['f' + i] = f;\n u = `this.f${i}(a)`;\n v = `this.f${i}(b)`;\n }\n return _compare(u, v, -o, o);\n };\n const fn = Function('a', 'b', 'var u, v; return ' + fields.map(map).join('') + '0;');\n return t ? fn.bind(t) : fn;\n }\n }\n};\n\n/**\n * Parse a dataflow operator.\n */\nfunction parseOperator(spec) {\n const ctx = this;\n if (isOperator(spec.type) || !spec.type) {\n ctx.operator(spec, spec.update ? ctx.operatorExpression(spec.update) : null);\n } else {\n ctx.transform(spec, spec.type);\n }\n}\n\n/**\n * Parse and assign operator parameters.\n */\nfunction parseOperatorParameters(spec) {\n const ctx = this;\n if (spec.params) {\n const op = ctx.get(spec.id);\n if (!op) error('Invalid operator id: ' + spec.id);\n ctx.dataflow.connect(op, op.parameters(ctx.parseParameters(spec.params), spec.react, spec.initonly));\n }\n}\n\n/**\n * Parse a set of operator parameters.\n */\nfunction parseParameters(spec, params) {\n params = params || {};\n const ctx = this;\n for (const key in spec) {\n const value = spec[key];\n params[key] = isArray(value) ? value.map(v => parseParameter(v, ctx, params)) : parseParameter(value, ctx, params);\n }\n return params;\n}\n\n/**\n * Parse a single parameter.\n */\nfunction parseParameter(spec, ctx, params) {\n if (!spec || !isObject(spec)) return spec;\n for (let i = 0, n = PARSERS.length, p; i < n; ++i) {\n p = PARSERS[i];\n if (hasOwnProperty(spec, p.key)) {\n return p.parse(spec, ctx, params);\n }\n }\n return spec;\n}\n\n/** Reference parsers. */\nvar PARSERS = [{\n key: '$ref',\n parse: getOperator\n}, {\n key: '$key',\n parse: getKey\n}, {\n key: '$expr',\n parse: getExpression\n}, {\n key: '$field',\n parse: getField\n}, {\n key: '$encode',\n parse: getEncode\n}, {\n key: '$compare',\n parse: getCompare\n}, {\n key: '$context',\n parse: getContext\n}, {\n key: '$subflow',\n parse: getSubflow\n}, {\n key: '$tupleid',\n parse: getTupleId\n}];\n\n/**\n * Resolve an operator reference.\n */\nfunction getOperator(_, ctx) {\n return ctx.get(_.$ref) || error('Operator not defined: ' + _.$ref);\n}\n\n/**\n * Resolve an expression reference.\n */\nfunction getExpression(_, ctx, params) {\n if (_.$params) {\n // parse expression parameters\n ctx.parseParameters(_.$params, params);\n }\n const k = 'e:' + _.$expr.code;\n return ctx.fn[k] || (ctx.fn[k] = accessor(ctx.parameterExpression(_.$expr), _.$fields));\n}\n\n/**\n * Resolve a key accessor reference.\n */\nfunction getKey(_, ctx) {\n const k = 'k:' + _.$key + '_' + !!_.$flat;\n return ctx.fn[k] || (ctx.fn[k] = key(_.$key, _.$flat, ctx.expr.codegen));\n}\n\n/**\n * Resolve a field accessor reference.\n */\nfunction getField(_, ctx) {\n if (!_.$field) return null;\n const k = 'f:' + _.$field + '_' + _.$name;\n return ctx.fn[k] || (ctx.fn[k] = field(_.$field, _.$name, ctx.expr.codegen));\n}\n\n/**\n * Resolve a comparator function reference.\n */\nfunction getCompare(_, ctx) {\n // As of Vega 5.5.3, $tupleid sort is no longer used.\n // Keep here for now for backwards compatibility.\n const k = 'c:' + _.$compare + '_' + _.$order,\n c = array(_.$compare).map(_ => _ && _.$tupleid ? tupleid : _);\n return ctx.fn[k] || (ctx.fn[k] = compare(c, _.$order, ctx.expr.codegen));\n}\n\n/**\n * Resolve an encode operator reference.\n */\nfunction getEncode(_, ctx) {\n const spec = _.$encode,\n encode = {};\n for (const name in spec) {\n const enc = spec[name];\n encode[name] = accessor(ctx.encodeExpression(enc.$expr), enc.$fields);\n encode[name].output = enc.$output;\n }\n return encode;\n}\n\n/**\n * Resolve a context reference.\n */\nfunction getContext(_, ctx) {\n return ctx;\n}\n\n/**\n * Resolve a recursive subflow specification.\n */\nfunction getSubflow(_, ctx) {\n const spec = _.$subflow;\n return function (dataflow, key, parent) {\n const subctx = ctx.fork().parse(spec),\n op = subctx.get(spec.operators[0].id),\n p = subctx.signals.parent;\n if (p) p.set(parent);\n op.detachSubflow = () => ctx.detach(subctx);\n return op;\n };\n}\n\n/**\n * Resolve a tuple id reference.\n */\nfunction getTupleId() {\n return tupleid;\n}\n\n/**\n * Parse an event stream specification.\n */\nfunction parseStream (spec) {\n var ctx = this,\n filter = spec.filter != null ? ctx.eventExpression(spec.filter) : undefined,\n stream = spec.stream != null ? ctx.get(spec.stream) : undefined,\n args;\n if (spec.source) {\n stream = ctx.events(spec.source, spec.type, filter);\n } else if (spec.merge) {\n args = spec.merge.map(_ => ctx.get(_));\n stream = args[0].merge.apply(args[0], args.slice(1));\n }\n if (spec.between) {\n args = spec.between.map(_ => ctx.get(_));\n stream = stream.between(args[0], args[1]);\n }\n if (spec.filter) {\n stream = stream.filter(filter);\n }\n if (spec.throttle != null) {\n stream = stream.throttle(+spec.throttle);\n }\n if (spec.debounce != null) {\n stream = stream.debounce(+spec.debounce);\n }\n if (stream == null) {\n error('Invalid stream definition: ' + JSON.stringify(spec));\n }\n if (spec.consume) stream.consume(true);\n ctx.stream(spec, stream);\n}\n\n/**\n * Parse an event-driven operator update.\n */\nfunction parseUpdate (spec) {\n var ctx = this,\n srcid = isObject(srcid = spec.source) ? srcid.$ref : srcid,\n source = ctx.get(srcid),\n target = null,\n update = spec.update,\n params = undefined;\n if (!source) error('Source not defined: ' + spec.source);\n target = spec.target && spec.target.$expr ? ctx.eventExpression(spec.target.$expr) : ctx.get(spec.target);\n if (update && update.$expr) {\n if (update.$params) {\n params = ctx.parseParameters(update.$params);\n }\n update = ctx.handlerExpression(update.$expr);\n }\n ctx.update(spec, source, target, update, params);\n}\n\nconst SKIP = {\n skip: true\n};\nfunction getState(options) {\n var ctx = this,\n state = {};\n if (options.signals) {\n var signals = state.signals = {};\n Object.keys(ctx.signals).forEach(key => {\n const op = ctx.signals[key];\n if (options.signals(key, op)) {\n signals[key] = op.value;\n }\n });\n }\n if (options.data) {\n var data = state.data = {};\n Object.keys(ctx.data).forEach(key => {\n const dataset = ctx.data[key];\n if (options.data(key, dataset)) {\n data[key] = dataset.input.value;\n }\n });\n }\n if (ctx.subcontext && options.recurse !== false) {\n state.subcontext = ctx.subcontext.map(ctx => ctx.getState(options));\n }\n return state;\n}\nfunction setState(state) {\n var ctx = this,\n df = ctx.dataflow,\n data = state.data,\n signals = state.signals;\n Object.keys(signals || {}).forEach(key => {\n df.update(ctx.signals[key], signals[key], SKIP);\n });\n Object.keys(data || {}).forEach(key => {\n df.pulse(ctx.data[key].input, df.changeset().remove(truthy).insert(data[key]));\n });\n (state.subcontext || []).forEach((substate, i) => {\n const subctx = ctx.subcontext[i];\n if (subctx) subctx.setState(substate);\n });\n}\n\n/**\n * Context objects store the current parse state.\n * Enables lookup of parsed operators, event streams, accessors, etc.\n * Provides a 'fork' method for creating child contexts for subflows.\n */\nfunction context (df, transforms, functions, expr) {\n return new Context(df, transforms, functions, expr);\n}\nfunction Context(df, transforms, functions, expr) {\n this.dataflow = df;\n this.transforms = transforms;\n this.events = df.events.bind(df);\n this.expr = expr || expressionCodegen, this.signals = {};\n this.scales = {};\n this.nodes = {};\n this.data = {};\n this.fn = {};\n if (functions) {\n this.functions = Object.create(functions);\n this.functions.context = this;\n }\n}\nfunction Subcontext(ctx) {\n this.dataflow = ctx.dataflow;\n this.transforms = ctx.transforms;\n this.events = ctx.events;\n this.expr = ctx.expr;\n this.signals = Object.create(ctx.signals);\n this.scales = Object.create(ctx.scales);\n this.nodes = Object.create(ctx.nodes);\n this.data = Object.create(ctx.data);\n this.fn = Object.create(ctx.fn);\n if (ctx.functions) {\n this.functions = Object.create(ctx.functions);\n this.functions.context = this;\n }\n}\nContext.prototype = Subcontext.prototype = {\n fork() {\n const ctx = new Subcontext(this);\n (this.subcontext || (this.subcontext = [])).push(ctx);\n return ctx;\n },\n detach(ctx) {\n this.subcontext = this.subcontext.filter(c => c !== ctx);\n\n // disconnect all nodes in the subcontext\n // wipe out targets first for better efficiency\n const keys = Object.keys(ctx.nodes);\n for (const key of keys) ctx.nodes[key]._targets = null;\n for (const key of keys) ctx.nodes[key].detach();\n ctx.nodes = null;\n },\n get(id) {\n return this.nodes[id];\n },\n set(id, node) {\n return this.nodes[id] = node;\n },\n add(spec, op) {\n const ctx = this,\n df = ctx.dataflow,\n data = spec.value;\n ctx.set(spec.id, op);\n if (isCollect(spec.type) && data) {\n if (data.$ingest) {\n df.ingest(op, data.$ingest, data.$format);\n } else if (data.$request) {\n df.preload(op, data.$request, data.$format);\n } else {\n df.pulse(op, df.changeset().insert(data));\n }\n }\n if (spec.root) {\n ctx.root = op;\n }\n if (spec.parent) {\n let p = ctx.get(spec.parent.$ref);\n if (p) {\n df.connect(p, [op]);\n op.targets().add(p);\n } else {\n (ctx.unresolved = ctx.unresolved || []).push(() => {\n p = ctx.get(spec.parent.$ref);\n df.connect(p, [op]);\n op.targets().add(p);\n });\n }\n }\n if (spec.signal) {\n ctx.signals[spec.signal] = op;\n }\n if (spec.scale) {\n ctx.scales[spec.scale] = op;\n }\n if (spec.data) {\n for (const name in spec.data) {\n const data = ctx.data[name] || (ctx.data[name] = {});\n spec.data[name].forEach(role => data[role] = op);\n }\n }\n },\n resolve() {\n (this.unresolved || []).forEach(fn => fn());\n delete this.unresolved;\n return this;\n },\n operator(spec, update) {\n this.add(spec, this.dataflow.add(spec.value, update));\n },\n transform(spec, type) {\n this.add(spec, this.dataflow.add(this.transforms[canonicalType(type)]));\n },\n stream(spec, stream) {\n this.set(spec.id, stream);\n },\n update(spec, stream, target, update, params) {\n this.dataflow.on(stream, target, update, params, spec.options);\n },\n // expression parsing\n operatorExpression(expr) {\n return this.expr.operator(this, expr);\n },\n parameterExpression(expr) {\n return this.expr.parameter(this, expr);\n },\n eventExpression(expr) {\n return this.expr.event(this, expr);\n },\n handlerExpression(expr) {\n return this.expr.handler(this, expr);\n },\n encodeExpression(encode) {\n return this.expr.encode(this, encode);\n },\n // parse methods\n parse,\n parseOperator,\n parseOperatorParameters,\n parseParameters,\n parseStream,\n parseUpdate,\n // state methods\n getState,\n setState\n};\n\nexport { context };\n","import { isString, hasOwnProperty, error, truthy, constant, extend, array, isObject, isArray, toSet, debounce, isDate, inherits, stringValue } from 'vega-util';\nimport { changeset, isChangeSet, EventStream, transforms, Dataflow, asyncCallback } from 'vega-dataflow';\nimport { point, renderModule, CanvasHandler, RenderType, Scenegraph } from 'vega-scenegraph';\nimport { tickStep } from 'd3-array';\nimport { functionContext } from 'vega-functions';\nimport { context } from 'vega-runtime';\nimport { interval } from 'd3-timer';\nimport { locale } from 'vega-format';\n\n// initialize aria role and label attributes\nfunction initializeAria(view) {\n const el = view.container();\n if (el) {\n el.setAttribute('role', 'graphics-document');\n el.setAttribute('aria-roleDescription', 'visualization');\n ariaLabel(el, view.description());\n }\n}\n\n// update aria-label if we have a DOM container element\nfunction ariaLabel(el, desc) {\n if (el) desc == null ? el.removeAttribute('aria-label') : el.setAttribute('aria-label', desc);\n}\n\nfunction background (view) {\n // respond to background signal\n view.add(null, _ => {\n view._background = _.bg;\n view._resize = 1;\n return _.bg;\n }, {\n bg: view._signals.background\n });\n}\n\nconst Default = 'default';\nfunction cursor (view) {\n // get cursor signal, add to dataflow if needed\n const cursor = view._signals.cursor || (view._signals.cursor = view.add({\n user: Default,\n item: null\n }));\n\n // evaluate cursor on each pointermove event\n view.on(view.events('view', 'pointermove'), cursor, (_, event) => {\n const value = cursor.value,\n user = value ? isString(value) ? value : value.user : Default,\n item = event.item && event.item.cursor || null;\n return value && user === value.user && item == value.item ? value : {\n user: user,\n item: item\n };\n });\n\n // when cursor signal updates, set visible cursor\n view.add(null, function (_) {\n let user = _.cursor,\n item = this.value;\n if (!isString(user)) {\n item = user.item;\n user = user.user;\n }\n setCursor(view, user && user !== Default ? user : item || user);\n return item;\n }, {\n cursor: cursor\n });\n}\nfunction setCursor(view, cursor) {\n const el = view.globalCursor() ? typeof document !== 'undefined' && document.body : view.container();\n if (el) {\n return cursor == null ? el.style.removeProperty('cursor') : el.style.cursor = cursor;\n }\n}\n\nfunction dataref(view, name) {\n var data = view._runtime.data;\n if (!hasOwnProperty(data, name)) {\n error('Unrecognized data set: ' + name);\n }\n return data[name];\n}\nfunction data(name, values) {\n return arguments.length < 2 ? dataref(this, name).values.value : change.call(this, name, changeset().remove(truthy).insert(values));\n}\nfunction change(name, changes) {\n if (!isChangeSet(changes)) {\n error('Second argument to changes must be a changeset.');\n }\n const dataset = dataref(this, name);\n dataset.modified = true;\n return this.pulse(dataset.input, changes);\n}\nfunction insert(name, _) {\n return change.call(this, name, changeset().insert(_));\n}\nfunction remove(name, _) {\n return change.call(this, name, changeset().remove(_));\n}\n\nfunction width(view) {\n var padding = view.padding();\n return Math.max(0, view._viewWidth + padding.left + padding.right);\n}\nfunction height(view) {\n var padding = view.padding();\n return Math.max(0, view._viewHeight + padding.top + padding.bottom);\n}\nfunction offset(view) {\n var padding = view.padding(),\n origin = view._origin;\n return [padding.left + origin[0], padding.top + origin[1]];\n}\nfunction resizeRenderer(view) {\n var origin = offset(view),\n w = width(view),\n h = height(view);\n view._renderer.background(view.background());\n view._renderer.resize(w, h, origin);\n view._handler.origin(origin);\n view._resizeListeners.forEach(handler => {\n try {\n handler(w, h);\n } catch (error) {\n view.error(error);\n }\n });\n}\n\n/**\n * Extend an event with additional view-specific methods.\n * Adds a new property ('vega') to an event that provides a number\n * of methods for querying information about the current interaction.\n * The vega object provides the following methods:\n * view - Returns the backing View instance.\n * item - Returns the currently active scenegraph item (if any).\n * group - Returns the currently active scenegraph group (if any).\n * This method accepts a single string-typed argument indicating the name\n * of the desired parent group. The scenegraph will be traversed from\n * the item up towards the root to search for a matching group. If no\n * argument is provided the enclosing group for the active item is\n * returned, unless the item it itself a group, in which case it is\n * returned directly.\n * xy - Returns a two-element array containing the x and y coordinates for\n * mouse or touch events. For touch events, this is based on the first\n * elements in the changedTouches array. This method accepts a single\n * argument: either an item instance or mark name that should serve as\n * the reference coordinate system. If no argument is provided the\n * top-level view coordinate system is assumed.\n * x - Returns the current x-coordinate, accepts the same arguments as xy.\n * y - Returns the current y-coordinate, accepts the same arguments as xy.\n * @param {Event} event - The input event to extend.\n * @param {Item} item - The currently active scenegraph item (if any).\n * @return {Event} - The extended input event.\n */\nfunction eventExtend (view, event, item) {\n var r = view._renderer,\n el = r && r.canvas(),\n p,\n e,\n translate;\n if (el) {\n translate = offset(view);\n e = event.changedTouches ? event.changedTouches[0] : event;\n p = point(e, el);\n p[0] -= translate[0];\n p[1] -= translate[1];\n }\n event.dataflow = view;\n event.item = item;\n event.vega = extension(view, item, p);\n return event;\n}\nfunction extension(view, item, point) {\n const itemGroup = item ? item.mark.marktype === 'group' ? item : item.mark.group : null;\n function group(name) {\n var g = itemGroup,\n i;\n if (name) for (i = item; i; i = i.mark.group) {\n if (i.mark.name === name) {\n g = i;\n break;\n }\n }\n return g && g.mark && g.mark.interactive ? g : {};\n }\n function xy(item) {\n if (!item) return point;\n if (isString(item)) item = group(item);\n const p = point.slice();\n while (item) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n item = item.mark && item.mark.group;\n }\n return p;\n }\n return {\n view: constant(view),\n item: constant(item || {}),\n group: group,\n xy: xy,\n x: item => xy(item)[0],\n y: item => xy(item)[1]\n };\n}\n\nconst VIEW = 'view',\n TIMER = 'timer',\n WINDOW = 'window',\n NO_TRAP = {\n trap: false\n };\n\n/**\n * Initialize event handling configuration.\n * @param {object} config - The configuration settings.\n * @return {object}\n */\nfunction initializeEventConfig(config) {\n const events = extend({\n defaults: {}\n }, config);\n const unpack = (obj, keys) => {\n keys.forEach(k => {\n if (isArray(obj[k])) obj[k] = toSet(obj[k]);\n });\n };\n unpack(events.defaults, ['prevent', 'allow']);\n unpack(events, ['view', 'window', 'selector']);\n return events;\n}\nfunction trackEventListener(view, sources, type, handler) {\n view._eventListeners.push({\n type: type,\n sources: array(sources),\n handler: handler\n });\n}\nfunction prevent(view, type) {\n var def = view._eventConfig.defaults,\n prevent = def.prevent,\n allow = def.allow;\n return prevent === false || allow === true ? false : prevent === true || allow === false ? true : prevent ? prevent[type] : allow ? !allow[type] : view.preventDefault();\n}\nfunction permit(view, key, type) {\n const rule = view._eventConfig && view._eventConfig[key];\n if (rule === false || isObject(rule) && !rule[type]) {\n view.warn(`Blocked ${key} ${type} event listener.`);\n return false;\n }\n return true;\n}\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @return {EventStream}\n */\nfunction events(source, type, filter) {\n var view = this,\n s = new EventStream(filter),\n send = function (e, item) {\n view.runAsync(null, () => {\n if (source === VIEW && prevent(view, type)) {\n e.preventDefault();\n }\n s.receive(eventExtend(view, e, item));\n });\n },\n sources;\n if (source === TIMER) {\n if (permit(view, 'timer', type)) {\n view.timer(send, type);\n }\n } else if (source === VIEW) {\n if (permit(view, 'view', type)) {\n // send traps errors, so use {trap: false} option\n view.addEventListener(type, send, NO_TRAP);\n }\n } else {\n if (source === WINDOW) {\n if (permit(view, 'window', type) && typeof window !== 'undefined') {\n sources = [window];\n }\n } else if (typeof document !== 'undefined') {\n if (permit(view, 'selector', type)) {\n sources = Array.from(document.querySelectorAll(source));\n }\n }\n if (!sources) {\n view.warn('Can not resolve event source: ' + source);\n } else {\n for (var i = 0, n = sources.length; i < n; ++i) {\n sources[i].addEventListener(type, send);\n }\n trackEventListener(view, sources, type, send);\n }\n }\n return s;\n}\n\nfunction itemFilter(event) {\n return event.item;\n}\nfunction markTarget(event) {\n // grab upstream collector feeding the mark operator\n return event.item.mark.source;\n}\nfunction invoke(name) {\n return function (_, event) {\n return event.vega.view().changeset().encode(event.item, name);\n };\n}\nfunction hover (hoverSet, leaveSet) {\n hoverSet = [hoverSet || 'hover'];\n leaveSet = [leaveSet || 'update', hoverSet[0]];\n\n // invoke hover set upon pointerover\n this.on(this.events('view', 'pointerover', itemFilter), markTarget, invoke(hoverSet));\n\n // invoke leave set upon pointerout\n this.on(this.events('view', 'pointerout', itemFilter), markTarget, invoke(leaveSet));\n return this;\n}\n\n/**\n * Finalize a View instance that is being removed.\n * Cancel any running timers.\n * Remove all external event listeners.\n * Remove any currently displayed tooltip.\n */\nfunction finalize () {\n var tooltip = this._tooltip,\n timers = this._timers,\n listeners = this._eventListeners,\n n,\n m,\n e;\n n = timers.length;\n while (--n >= 0) {\n timers[n].stop();\n }\n n = listeners.length;\n while (--n >= 0) {\n e = listeners[n];\n m = e.sources.length;\n while (--m >= 0) {\n e.sources[m].removeEventListener(e.type, e.handler);\n }\n }\n if (tooltip) {\n tooltip.call(this, this._handler, null, null, null);\n }\n return this;\n}\n\nfunction element (tag, attr, text) {\n const el = document.createElement(tag);\n for (const key in attr) el.setAttribute(key, attr[key]);\n if (text != null) el.textContent = text;\n return el;\n}\n\nconst BindClass = 'vega-bind',\n NameClass = 'vega-bind-name',\n RadioClass = 'vega-bind-radio';\n\n/**\n * Bind a signal to an external HTML input element. The resulting two-way\n * binding will propagate input changes to signals, and propagate signal\n * changes to the input element state. If this view instance has no parent\n * element, we assume the view is headless and no bindings are created.\n * @param {Element|string} el - The parent DOM element to which the input\n * element should be appended as a child. If string-valued, this argument\n * will be treated as a CSS selector. If null or undefined, the parent\n * element of this view will be used as the element.\n * @param {object} param - The binding parameters which specify the signal\n * to bind to, the input element type, and type-specific configuration.\n * @return {View} - This view instance.\n */\nfunction bind (view, el, binding) {\n if (!el) return;\n const param = binding.param;\n let bind = binding.state;\n if (!bind) {\n bind = binding.state = {\n elements: null,\n active: false,\n set: null,\n update: value => {\n if (value != view.signal(param.signal)) {\n view.runAsync(null, () => {\n bind.source = true;\n view.signal(param.signal, value);\n });\n }\n }\n };\n if (param.debounce) {\n bind.update = debounce(param.debounce, bind.update);\n }\n }\n const create = param.input == null && param.element ? target : generate;\n create(bind, el, param, view);\n if (!bind.active) {\n view.on(view._signals[param.signal], null, () => {\n bind.source ? bind.source = false : bind.set(view.signal(param.signal));\n });\n bind.active = true;\n }\n return bind;\n}\n\n/**\n * Bind the signal to an external EventTarget.\n */\nfunction target(bind, node, param, view) {\n const type = param.event || 'input';\n const handler = () => bind.update(node.value);\n\n // initialize signal value to external input value\n view.signal(param.signal, node.value);\n\n // listen for changes on the element\n node.addEventListener(type, handler);\n\n // register with view, so we can remove it upon finalization\n trackEventListener(view, node, type, handler);\n\n // propagate change to element\n bind.set = value => {\n node.value = value;\n node.dispatchEvent(event(type));\n };\n}\nfunction event(type) {\n return typeof Event !== 'undefined' ? new Event(type) : {\n type\n };\n}\n\n/**\n * Generate an HTML input form element and bind it to a signal.\n */\nfunction generate(bind, el, param, view) {\n const value = view.signal(param.signal);\n const div = element('div', {\n 'class': BindClass\n });\n const wrapper = param.input === 'radio' ? div : div.appendChild(element('label'));\n wrapper.appendChild(element('span', {\n 'class': NameClass\n }, param.name || param.signal));\n el.appendChild(div);\n let input = form;\n switch (param.input) {\n case 'checkbox':\n input = checkbox;\n break;\n case 'select':\n input = select;\n break;\n case 'radio':\n input = radio;\n break;\n case 'range':\n input = range;\n break;\n }\n input(bind, wrapper, param, value);\n}\n\n/**\n * Generates an arbitrary input form element.\n * The input type is controlled via user-provided parameters.\n */\nfunction form(bind, el, param, value) {\n const node = element('input');\n for (const key in param) {\n if (key !== 'signal' && key !== 'element') {\n node.setAttribute(key === 'input' ? 'type' : key, param[key]);\n }\n }\n node.setAttribute('name', param.signal);\n node.value = value;\n el.appendChild(node);\n node.addEventListener('input', () => bind.update(node.value));\n bind.elements = [node];\n bind.set = value => node.value = value;\n}\n\n/**\n * Generates a checkbox input element.\n */\nfunction checkbox(bind, el, param, value) {\n const attr = {\n type: 'checkbox',\n name: param.signal\n };\n if (value) attr.checked = true;\n const node = element('input', attr);\n el.appendChild(node);\n node.addEventListener('change', () => bind.update(node.checked));\n bind.elements = [node];\n bind.set = value => node.checked = !!value || null;\n}\n\n/**\n * Generates a selection list input element.\n */\nfunction select(bind, el, param, value) {\n const node = element('select', {\n name: param.signal\n }),\n labels = param.labels || [];\n param.options.forEach((option, i) => {\n const attr = {\n value: option\n };\n if (valuesEqual(option, value)) attr.selected = true;\n node.appendChild(element('option', attr, (labels[i] || option) + ''));\n });\n el.appendChild(node);\n node.addEventListener('change', () => {\n bind.update(param.options[node.selectedIndex]);\n });\n bind.elements = [node];\n bind.set = value => {\n for (let i = 0, n = param.options.length; i < n; ++i) {\n if (valuesEqual(param.options[i], value)) {\n node.selectedIndex = i;\n return;\n }\n }\n };\n}\n\n/**\n * Generates a radio button group.\n */\nfunction radio(bind, el, param, value) {\n const group = element('span', {\n 'class': RadioClass\n }),\n labels = param.labels || [];\n el.appendChild(group);\n bind.elements = param.options.map((option, i) => {\n const attr = {\n type: 'radio',\n name: param.signal,\n value: option\n };\n if (valuesEqual(option, value)) attr.checked = true;\n const input = element('input', attr);\n input.addEventListener('change', () => bind.update(option));\n const label = element('label', {}, (labels[i] || option) + '');\n label.prepend(input);\n group.appendChild(label);\n return input;\n });\n bind.set = value => {\n const nodes = bind.elements,\n n = nodes.length;\n for (let i = 0; i < n; ++i) {\n if (valuesEqual(nodes[i].value, value)) nodes[i].checked = true;\n }\n };\n}\n\n/**\n * Generates a slider input element.\n */\nfunction range(bind, el, param, value) {\n value = value !== undefined ? value : (+param.max + +param.min) / 2;\n const max = param.max != null ? param.max : Math.max(100, +value) || 100,\n min = param.min || Math.min(0, max, +value) || 0,\n step = param.step || tickStep(min, max, 100);\n const node = element('input', {\n type: 'range',\n name: param.signal,\n min: min,\n max: max,\n step: step\n });\n node.value = value;\n const span = element('span', {}, +value);\n el.appendChild(node);\n el.appendChild(span);\n const update = () => {\n span.textContent = node.value;\n bind.update(+node.value);\n };\n\n // subscribe to both input and change\n node.addEventListener('input', update);\n node.addEventListener('change', update);\n bind.elements = [node];\n bind.set = value => {\n node.value = value;\n span.textContent = value;\n };\n}\nfunction valuesEqual(a, b) {\n return a === b || a + '' === b + '';\n}\n\nfunction initializeRenderer (view, r, el, constructor, scaleFactor, opt) {\n r = r || new constructor(view.loader());\n return r.initialize(el, width(view), height(view), offset(view), scaleFactor, opt).background(view.background());\n}\n\nfunction trap (view, fn) {\n return !fn ? null : function () {\n try {\n fn.apply(this, arguments);\n } catch (error) {\n view.error(error);\n }\n };\n}\n\nfunction initializeHandler (view, prevHandler, el, constructor) {\n // instantiate scenegraph handler\n const handler = new constructor(view.loader(), trap(view, view.tooltip())).scene(view.scenegraph().root).initialize(el, offset(view), view);\n\n // transfer event handlers\n if (prevHandler) {\n prevHandler.handlers().forEach(h => {\n handler.on(h.type, h.handler);\n });\n }\n return handler;\n}\n\nfunction initialize (el, elBind) {\n const view = this,\n type = view._renderType,\n config = view._eventConfig.bind,\n module = renderModule(type);\n\n // containing dom element\n el = view._el = el ? lookup(view, el, true) : null;\n\n // initialize aria attributes\n initializeAria(view);\n\n // select appropriate renderer & handler\n if (!module) view.error('Unrecognized renderer type: ' + type);\n const Handler = module.handler || CanvasHandler,\n Renderer = el ? module.renderer : module.headless;\n\n // initialize renderer and input handler\n view._renderer = !Renderer ? null : initializeRenderer(view, view._renderer, el, Renderer);\n view._handler = initializeHandler(view, view._handler, el, Handler);\n view._redraw = true;\n\n // initialize signal bindings\n if (el && config !== 'none') {\n elBind = elBind ? view._elBind = lookup(view, elBind, true) : el.appendChild(element('form', {\n 'class': 'vega-bindings'\n }));\n view._bind.forEach(_ => {\n if (_.param.element && config !== 'container') {\n _.element = lookup(view, _.param.element, !!_.param.input);\n }\n });\n view._bind.forEach(_ => {\n bind(view, _.element || elBind, _);\n });\n }\n return view;\n}\nfunction lookup(view, el, clear) {\n if (typeof el === 'string') {\n if (typeof document !== 'undefined') {\n el = document.querySelector(el);\n if (!el) {\n view.error('Signal bind element not found: ' + el);\n return null;\n }\n } else {\n view.error('DOM document instance not found.');\n return null;\n }\n }\n if (el && clear) {\n try {\n el.textContent = '';\n } catch (e) {\n el = null;\n view.error(e);\n }\n }\n return el;\n}\n\nconst number = _ => +_ || 0;\nconst paddingObject = _ => ({\n top: _,\n bottom: _,\n left: _,\n right: _\n});\nfunction padding (_) {\n return isObject(_) ? {\n top: number(_.top),\n bottom: number(_.bottom),\n left: number(_.left),\n right: number(_.right)\n } : paddingObject(number(_));\n}\n\n/**\n * Render the current scene in a headless fashion.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A Promise that resolves to a renderer.\n */\nasync function renderHeadless (view, type, scaleFactor, opt) {\n const module = renderModule(type),\n ctr = module && module.headless;\n if (!ctr) error('Unrecognized renderer type: ' + type);\n await view.runAsync();\n return initializeRenderer(view, null, null, ctr, scaleFactor, opt).renderAsync(view._scenegraph.root);\n}\n\n/**\n * Produce an image URL for the visualization. Depending on the type\n * parameter, the generated URL contains data for either a PNG or SVG image.\n * The URL can be used (for example) to download images of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @param {string} type - The image type. One of 'svg', 'png' or 'canvas'.\n * The 'canvas' and 'png' types are synonyms for a PNG image.\n * @return {Promise} - A promise that resolves to an image URL.\n */\nasync function renderToImageURL (type, scaleFactor) {\n if (type !== RenderType.Canvas && type !== RenderType.SVG && type !== RenderType.PNG) {\n error('Unrecognized image type: ' + type);\n }\n const r = await renderHeadless(this, type, scaleFactor);\n return type === RenderType.SVG ? toBlobURL(r.svg(), 'image/svg+xml') : r.canvas().toDataURL('image/png');\n}\nfunction toBlobURL(data, mime) {\n const blob = new Blob([data], {\n type: mime\n });\n return window.URL.createObjectURL(blob);\n}\n\n/**\n * Produce a Canvas instance containing a rendered visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to a Canvas instance.\n */\nasync function renderToCanvas (scaleFactor, opt) {\n const r = await renderHeadless(this, RenderType.Canvas, scaleFactor, opt);\n return r.canvas();\n}\n\n/**\n * Produce a rendered SVG string of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to an SVG string.\n */\nasync function renderToSVG (scaleFactor) {\n const r = await renderHeadless(this, RenderType.SVG, scaleFactor);\n return r.svg();\n}\n\nfunction runtime (view, spec, expr) {\n return context(view, transforms, functionContext, expr).parse(spec);\n}\n\nfunction scale(name) {\n var scales = this._runtime.scales;\n if (!hasOwnProperty(scales, name)) {\n error('Unrecognized scale or projection: ' + name);\n }\n return scales[name].value;\n}\n\nvar Width = 'width',\n Height = 'height',\n Padding = 'padding',\n Skip = {\n skip: true\n };\nfunction viewWidth(view, width) {\n var a = view.autosize(),\n p = view.padding();\n return width - (a && a.contains === Padding ? p.left + p.right : 0);\n}\nfunction viewHeight(view, height) {\n var a = view.autosize(),\n p = view.padding();\n return height - (a && a.contains === Padding ? p.top + p.bottom : 0);\n}\nfunction initializeResize(view) {\n var s = view._signals,\n w = s[Width],\n h = s[Height],\n p = s[Padding];\n function resetSize() {\n view._autosize = view._resize = 1;\n }\n\n // respond to width signal\n view._resizeWidth = view.add(null, _ => {\n view._width = _.size;\n view._viewWidth = viewWidth(view, _.size);\n resetSize();\n }, {\n size: w\n });\n\n // respond to height signal\n view._resizeHeight = view.add(null, _ => {\n view._height = _.size;\n view._viewHeight = viewHeight(view, _.size);\n resetSize();\n }, {\n size: h\n });\n\n // respond to padding signal\n const resizePadding = view.add(null, resetSize, {\n pad: p\n });\n\n // set rank to run immediately after source signal\n view._resizeWidth.rank = w.rank + 1;\n view._resizeHeight.rank = h.rank + 1;\n resizePadding.rank = p.rank + 1;\n}\nfunction resizeView(viewWidth, viewHeight, width, height, origin, auto) {\n this.runAfter(view => {\n let rerun = 0;\n\n // reset autosize flag\n view._autosize = 0;\n\n // width value changed: update signal, skip resize op\n if (view.width() !== width) {\n rerun = 1;\n view.signal(Width, width, Skip); // set width, skip update calc\n view._resizeWidth.skip(true); // skip width resize handler\n }\n\n // height value changed: update signal, skip resize op\n if (view.height() !== height) {\n rerun = 1;\n view.signal(Height, height, Skip); // set height, skip update calc\n view._resizeHeight.skip(true); // skip height resize handler\n }\n\n // view width changed: update view property, set resize flag\n if (view._viewWidth !== viewWidth) {\n view._resize = 1;\n view._viewWidth = viewWidth;\n }\n\n // view height changed: update view property, set resize flag\n if (view._viewHeight !== viewHeight) {\n view._resize = 1;\n view._viewHeight = viewHeight;\n }\n\n // origin changed: update view property, set resize flag\n if (view._origin[0] !== origin[0] || view._origin[1] !== origin[1]) {\n view._resize = 1;\n view._origin = origin;\n }\n\n // run dataflow on width/height signal change\n if (rerun) view.run('enter');\n if (auto) view.runAfter(v => v.resize());\n }, false, 1);\n}\n\n/**\n * Get the current view state, consisting of signal values and/or data sets.\n * @param {object} [options] - Options flags indicating which state to export.\n * If unspecified, all signals and data sets will be exported.\n * @param {function(string, Operator):boolean} [options.signals] - Optional\n * predicate function for testing if a signal should be included in the\n * exported state. If unspecified, all signals will be included, except for\n * those named 'parent' or those which refer to a Transform value.\n * @param {function(string, object):boolean} [options.data] - Optional\n * predicate function for testing if a data set's input should be included\n * in the exported state. If unspecified, all data sets that have been\n * explicitly modified will be included.\n * @param {boolean} [options.recurse=true] - Flag indicating if the exported\n * state should recursively include state from group mark sub-contexts.\n * @return {object} - An object containing the exported state values.\n */\nfunction getState(options) {\n return this._runtime.getState(options || {\n data: dataTest,\n signals: signalTest,\n recurse: true\n });\n}\nfunction dataTest(name, data) {\n return data.modified && isArray(data.input.value) && name.indexOf('_:vega:_');\n}\nfunction signalTest(name, op) {\n return !(name === 'parent' || op instanceof transforms.proxy);\n}\n\n/**\n * Sets the current view state and updates the view by invoking run.\n * @param {object} state - A state object containing signal and/or\n * data set values, following the format used by the getState method.\n * @return {View} - This view instance.\n */\nfunction setState(state) {\n this.runAsync(null, v => {\n v._trigger = false;\n v._runtime.setState(state);\n }, v => {\n v._trigger = true;\n });\n return this;\n}\n\nfunction timer (callback, delay) {\n function tick(elapsed) {\n callback({\n timestamp: Date.now(),\n elapsed: elapsed\n });\n }\n this._timers.push(interval(tick, delay));\n}\n\nfunction defaultTooltip (handler, event, item, value) {\n const el = handler.element();\n if (el) el.setAttribute('title', formatTooltip(value));\n}\nfunction formatTooltip(value) {\n return value == null ? '' : isArray(value) ? formatArray(value) : isObject(value) && !isDate(value) ? formatObject(value) : value + '';\n}\nfunction formatObject(obj) {\n return Object.keys(obj).map(key => {\n const v = obj[key];\n return key + ': ' + (isArray(v) ? formatArray(v) : formatValue(v));\n }).join('\\n');\n}\nfunction formatArray(value) {\n return '[' + value.map(formatValue).join(', ') + ']';\n}\nfunction formatValue(value) {\n return isArray(value) ? '[\\u2026]' : isObject(value) && !isDate(value) ? '{\\u2026}' : value;\n}\n\n/**\n * Create a new View instance from a Vega dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be performed upon dataflow runs.\n * @constructor\n * @param {object} spec - The Vega dataflow runtime specification.\n */\nfunction View(spec, options) {\n const view = this;\n options = options || {};\n Dataflow.call(view);\n if (options.loader) view.loader(options.loader);\n if (options.logger) view.logger(options.logger);\n if (options.logLevel != null) view.logLevel(options.logLevel);\n if (options.locale || spec.locale) {\n const loc = extend({}, spec.locale, options.locale);\n view.locale(locale(loc.number, loc.time));\n }\n view._el = null;\n view._elBind = null;\n view._renderType = options.renderer || RenderType.Canvas;\n view._scenegraph = new Scenegraph();\n const root = view._scenegraph.root;\n\n // initialize renderer, handler and event management\n view._renderer = null;\n view._tooltip = options.tooltip || defaultTooltip, view._redraw = true;\n view._handler = new CanvasHandler().scene(root);\n view._globalCursor = false;\n view._preventDefault = false;\n view._timers = [];\n view._eventListeners = [];\n view._resizeListeners = [];\n\n // initialize event configuration\n view._eventConfig = initializeEventConfig(spec.eventConfig);\n view.globalCursor(view._eventConfig.globalCursor);\n\n // initialize dataflow graph\n const ctx = runtime(view, spec, options.expr);\n view._runtime = ctx;\n view._signals = ctx.signals;\n view._bind = (spec.bindings || []).map(_ => ({\n state: null,\n param: extend({}, _)\n }));\n\n // initialize scenegraph\n if (ctx.root) ctx.root.set(root);\n root.source = ctx.data.root.input;\n view.pulse(ctx.data.root.input, view.changeset().insert(root.items));\n\n // initialize view size\n view._width = view.width();\n view._height = view.height();\n view._viewWidth = viewWidth(view, view._width);\n view._viewHeight = viewHeight(view, view._height);\n view._origin = [0, 0];\n view._resize = 0;\n view._autosize = 1;\n initializeResize(view);\n\n // initialize background color\n background(view);\n\n // initialize cursor\n cursor(view);\n\n // initialize view description\n view.description(spec.description);\n\n // initialize hover proessing, if requested\n if (options.hover) view.hover();\n\n // initialize DOM container(s) and renderer\n if (options.container) view.initialize(options.container, options.bind);\n}\nfunction lookupSignal(view, name) {\n return hasOwnProperty(view._signals, name) ? view._signals[name] : error('Unrecognized signal name: ' + stringValue(name));\n}\nfunction findOperatorHandler(op, handler) {\n const h = (op._targets || []).filter(op => op._update && op._update.handler === handler);\n return h.length ? h[0] : null;\n}\nfunction addOperatorListener(view, name, op, handler) {\n let h = findOperatorHandler(op, handler);\n if (!h) {\n h = trap(view, () => handler(name, op.value));\n h.handler = handler;\n view.on(op, null, h);\n }\n return view;\n}\nfunction removeOperatorListener(view, op, handler) {\n const h = findOperatorHandler(op, handler);\n if (h) op._targets.remove(h);\n return view;\n}\ninherits(View, Dataflow, {\n // -- DATAFLOW / RENDERING ----\n\n async evaluate(encode, prerun, postrun) {\n // evaluate dataflow and prerun\n await Dataflow.prototype.evaluate.call(this, encode, prerun);\n\n // render as needed\n if (this._redraw || this._resize) {\n try {\n if (this._renderer) {\n if (this._resize) {\n this._resize = 0;\n resizeRenderer(this);\n }\n await this._renderer.renderAsync(this._scenegraph.root);\n }\n this._redraw = false;\n } catch (e) {\n this.error(e);\n }\n }\n\n // evaluate postrun\n if (postrun) asyncCallback(this, postrun);\n return this;\n },\n dirty(item) {\n this._redraw = true;\n this._renderer && this._renderer.dirty(item);\n },\n // -- GET / SET ----\n\n description(text) {\n if (arguments.length) {\n const desc = text != null ? text + '' : null;\n if (desc !== this._desc) ariaLabel(this._el, this._desc = desc);\n return this;\n }\n return this._desc;\n },\n container() {\n return this._el;\n },\n scenegraph() {\n return this._scenegraph;\n },\n origin() {\n return this._origin.slice();\n },\n signal(name, value, options) {\n const op = lookupSignal(this, name);\n return arguments.length === 1 ? op.value : this.update(op, value, options);\n },\n width(_) {\n return arguments.length ? this.signal('width', _) : this.signal('width');\n },\n height(_) {\n return arguments.length ? this.signal('height', _) : this.signal('height');\n },\n padding(_) {\n return arguments.length ? this.signal('padding', padding(_)) : padding(this.signal('padding'));\n },\n autosize(_) {\n return arguments.length ? this.signal('autosize', _) : this.signal('autosize');\n },\n background(_) {\n return arguments.length ? this.signal('background', _) : this.signal('background');\n },\n renderer(type) {\n if (!arguments.length) return this._renderType;\n if (!renderModule(type)) error('Unrecognized renderer type: ' + type);\n if (type !== this._renderType) {\n this._renderType = type;\n this._resetRenderer();\n }\n return this;\n },\n tooltip(handler) {\n if (!arguments.length) return this._tooltip;\n if (handler !== this._tooltip) {\n this._tooltip = handler;\n this._resetRenderer();\n }\n return this;\n },\n loader(loader) {\n if (!arguments.length) return this._loader;\n if (loader !== this._loader) {\n Dataflow.prototype.loader.call(this, loader);\n this._resetRenderer();\n }\n return this;\n },\n resize() {\n // set flag to perform autosize\n this._autosize = 1;\n // touch autosize signal to ensure top-level ViewLayout runs\n return this.touch(lookupSignal(this, 'autosize'));\n },\n _resetRenderer() {\n if (this._renderer) {\n this._renderer = null;\n this.initialize(this._el, this._elBind);\n }\n },\n // -- SIZING ----\n _resizeView: resizeView,\n // -- EVENT HANDLING ----\n\n addEventListener(type, handler, options) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n // wrap callback in error handler\n callback = trap(this, handler);\n callback.raw = handler;\n }\n this._handler.on(type, callback);\n return this;\n },\n removeEventListener(type, handler) {\n var handlers = this._handler.handlers(type),\n i = handlers.length,\n h,\n t;\n\n // search registered handlers, remove if match found\n while (--i >= 0) {\n t = handlers[i].type;\n h = handlers[i].handler;\n if (type === t && (handler === h || handler === h.raw)) {\n this._handler.off(t, h);\n break;\n }\n }\n return this;\n },\n addResizeListener(handler) {\n const l = this._resizeListeners;\n if (l.indexOf(handler) < 0) {\n // add handler if it isn't already registered\n // note: error trapping handled elsewhere, so\n // no need to wrap handlers here\n l.push(handler);\n }\n return this;\n },\n removeResizeListener(handler) {\n var l = this._resizeListeners,\n i = l.indexOf(handler);\n if (i >= 0) {\n l.splice(i, 1);\n }\n return this;\n },\n addSignalListener(name, handler) {\n return addOperatorListener(this, name, lookupSignal(this, name), handler);\n },\n removeSignalListener(name, handler) {\n return removeOperatorListener(this, lookupSignal(this, name), handler);\n },\n addDataListener(name, handler) {\n return addOperatorListener(this, name, dataref(this, name).values, handler);\n },\n removeDataListener(name, handler) {\n return removeOperatorListener(this, dataref(this, name).values, handler);\n },\n globalCursor(_) {\n if (arguments.length) {\n if (this._globalCursor !== !!_) {\n const prev = setCursor(this, null); // clear previous cursor\n this._globalCursor = !!_;\n if (prev) setCursor(this, prev); // swap cursor\n }\n\n return this;\n } else {\n return this._globalCursor;\n }\n },\n preventDefault(_) {\n if (arguments.length) {\n this._preventDefault = _;\n return this;\n } else {\n return this._preventDefault;\n }\n },\n timer,\n events,\n finalize,\n hover,\n // -- DATA ----\n data,\n change,\n insert,\n remove,\n // -- SCALES --\n scale,\n // -- INITIALIZATION ----\n initialize,\n // -- HEADLESS RENDERING ----\n toImageURL: renderToImageURL,\n toCanvas: renderToCanvas,\n toSVG: renderToSVG,\n // -- SAVE / RESTORE STATE ----\n getState,\n setState\n});\n\nexport { View };\n","const VIEW = 'view',\n LBRACK = '[',\n RBRACK = ']',\n LBRACE = '{',\n RBRACE = '}',\n COLON = ':',\n COMMA = ',',\n NAME = '@',\n GT = '>',\n ILLEGAL = /[[\\]{}]/,\n DEFAULT_MARKS = {\n '*': 1,\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n };\nlet DEFAULT_SOURCE, MARKS;\n\n/**\n * Parse an event selector string.\n * Returns an array of event stream definitions.\n */\nfunction eventSelector (selector, source, marks) {\n DEFAULT_SOURCE = source || VIEW;\n MARKS = marks || DEFAULT_MARKS;\n return parseMerge(selector.trim()).map(parseSelector);\n}\nfunction isMarkType(type) {\n return MARKS[type];\n}\nfunction find(s, i, endChar, pushChar, popChar) {\n const n = s.length;\n let count = 0,\n c;\n for (; i < n; ++i) {\n c = s[i];\n if (!count && c === endChar) return i;else if (popChar && popChar.indexOf(c) >= 0) --count;else if (pushChar && pushChar.indexOf(c) >= 0) ++count;\n }\n return i;\n}\nfunction parseMerge(s) {\n const output = [],\n n = s.length;\n let start = 0,\n i = 0;\n while (i < n) {\n i = find(s, i, COMMA, LBRACK + LBRACE, RBRACK + RBRACE);\n output.push(s.substring(start, i).trim());\n start = ++i;\n }\n if (output.length === 0) {\n throw 'Empty event selector: ' + s;\n }\n return output;\n}\nfunction parseSelector(s) {\n return s[0] === '[' ? parseBetween(s) : parseStream(s);\n}\nfunction parseBetween(s) {\n const n = s.length;\n let i = 1,\n b;\n i = find(s, i, RBRACK, LBRACK, RBRACK);\n if (i === n) {\n throw 'Empty between selector: ' + s;\n }\n b = parseMerge(s.substring(1, i));\n if (b.length !== 2) {\n throw 'Between selector must have two elements: ' + s;\n }\n s = s.slice(i + 1).trim();\n if (s[0] !== GT) {\n throw 'Expected \\'>\\' after between selector: ' + s;\n }\n b = b.map(parseSelector);\n const stream = parseSelector(s.slice(1).trim());\n if (stream.between) {\n return {\n between: b,\n stream: stream\n };\n } else {\n stream.between = b;\n }\n return stream;\n}\nfunction parseStream(s) {\n const stream = {\n source: DEFAULT_SOURCE\n },\n source = [];\n let throttle = [0, 0],\n markname = 0,\n start = 0,\n n = s.length,\n i = 0,\n j,\n filter;\n\n // extract throttle from end\n if (s[n - 1] === RBRACE) {\n i = s.lastIndexOf(LBRACE);\n if (i >= 0) {\n try {\n throttle = parseThrottle(s.substring(i + 1, n - 1));\n } catch (e) {\n throw 'Invalid throttle specification: ' + s;\n }\n s = s.slice(0, i).trim();\n n = s.length;\n } else throw 'Unmatched right brace: ' + s;\n i = 0;\n }\n if (!n) throw s;\n\n // set name flag based on first char\n if (s[0] === NAME) markname = ++i;\n\n // extract first part of multi-part stream selector\n j = find(s, i, COLON);\n if (j < n) {\n source.push(s.substring(start, j).trim());\n start = i = ++j;\n }\n\n // extract remaining part of stream selector\n i = find(s, i, LBRACK);\n if (i === n) {\n source.push(s.substring(start, n).trim());\n } else {\n source.push(s.substring(start, i).trim());\n filter = [];\n start = ++i;\n if (start === n) throw 'Unmatched left bracket: ' + s;\n }\n\n // extract filters\n while (i < n) {\n i = find(s, i, RBRACK);\n if (i === n) throw 'Unmatched left bracket: ' + s;\n filter.push(s.substring(start, i).trim());\n if (i < n - 1 && s[++i] !== LBRACK) throw 'Expected left bracket: ' + s;\n start = ++i;\n }\n\n // marshall event stream specification\n if (!(n = source.length) || ILLEGAL.test(source[n - 1])) {\n throw 'Invalid event selector: ' + s;\n }\n if (n > 1) {\n stream.type = source[1];\n if (markname) {\n stream.markname = source[0].slice(1);\n } else if (isMarkType(source[0])) {\n stream.marktype = source[0];\n } else {\n stream.source = source[0];\n }\n } else {\n stream.type = source[0];\n }\n if (stream.type.slice(-1) === '!') {\n stream.consume = true;\n stream.type = stream.type.slice(0, -1);\n }\n if (filter != null) stream.filter = filter;\n if (throttle[0]) stream.throttle = throttle[0];\n if (throttle[1]) stream.debounce = throttle[1];\n return stream;\n}\nfunction parseThrottle(s) {\n const a = s.split(COMMA);\n if (!s.length || a.length > 2) throw s;\n return a.map(_ => {\n const x = +_;\n if (x !== x) throw s;\n return x;\n });\n}\n\nexport { eventSelector as parseSelector };\n","import { isObject, isArray, extend, hasOwnProperty, array, stringValue, peek, error, isString, splitAccessPath, mergeConfig } from 'vega-util';\nimport { parseExpression } from 'vega-functions';\nimport { parseSelector } from 'vega-event-selector';\nimport { isValidScaleType, isDiscrete, isQuantile, isContinuous, isDiscretizing } from 'vega-scale';\nimport { definition as definition$1 } from 'vega-dataflow';\n\nfunction parseAutosize (spec) {\n return isObject(spec) ? spec : {\n type: spec || 'pad'\n };\n}\n\nconst number = _ => +_ || 0;\nconst paddingObject = _ => ({\n top: _,\n bottom: _,\n left: _,\n right: _\n});\nfunction parsePadding (spec) {\n return !isObject(spec) ? paddingObject(number(spec)) : spec.signal ? spec : {\n top: number(spec.top),\n bottom: number(spec.bottom),\n left: number(spec.left),\n right: number(spec.right)\n };\n}\n\nconst encoder = _ => isObject(_) && !isArray(_) ? extend({}, _) : {\n value: _\n};\nfunction addEncode(object, name, value, set) {\n if (value != null) {\n const isEncoder = isObject(value) && !isArray(value) || isArray(value) && value.length && isObject(value[0]);\n\n // Always assign signal to update, even if the signal is from the enter block\n if (isEncoder) {\n object.update[name] = value;\n } else {\n object[set || 'enter'][name] = {\n value: value\n };\n }\n return 1;\n } else {\n return 0;\n }\n}\nfunction addEncoders(object, enter, update) {\n for (const name in enter) {\n addEncode(object, name, enter[name]);\n }\n for (const name in update) {\n addEncode(object, name, update[name], 'update');\n }\n}\nfunction extendEncode(encode, extra, skip) {\n for (const name in extra) {\n if (skip && hasOwnProperty(skip, name)) continue;\n encode[name] = extend(encode[name] || {}, extra[name]);\n }\n return encode;\n}\nfunction has(key, encode) {\n return encode && (encode.enter && encode.enter[key] || encode.update && encode.update[key]);\n}\n\nconst MarkRole = 'mark';\nconst FrameRole = 'frame';\nconst ScopeRole = 'scope';\nconst AxisRole = 'axis';\nconst AxisDomainRole = 'axis-domain';\nconst AxisGridRole = 'axis-grid';\nconst AxisLabelRole = 'axis-label';\nconst AxisTickRole = 'axis-tick';\nconst AxisTitleRole = 'axis-title';\nconst LegendRole = 'legend';\nconst LegendBandRole = 'legend-band';\nconst LegendEntryRole = 'legend-entry';\nconst LegendGradientRole = 'legend-gradient';\nconst LegendLabelRole = 'legend-label';\nconst LegendSymbolRole = 'legend-symbol';\nconst LegendTitleRole = 'legend-title';\nconst TitleRole = 'title';\nconst TitleTextRole = 'title-text';\nconst TitleSubtitleRole = 'title-subtitle';\n\nfunction applyDefaults (encode, type, role, style, config) {\n const defaults = {},\n enter = {};\n let update, key, skip, props;\n\n // if text mark, apply global lineBreak settings (#2370)\n key = 'lineBreak';\n if (type === 'text' && config[key] != null && !has(key, encode)) {\n applyDefault(defaults, key, config[key]);\n }\n\n // ignore legend and axis roles\n if (role == 'legend' || String(role).startsWith('axis')) {\n role = null;\n }\n\n // resolve mark config\n props = role === FrameRole ? config.group : role === MarkRole ? extend({}, config.mark, config[type]) : null;\n for (key in props) {\n // do not apply defaults if relevant fields are defined\n skip = has(key, encode) || (key === 'fill' || key === 'stroke') && (has('fill', encode) || has('stroke', encode));\n if (!skip) applyDefault(defaults, key, props[key]);\n }\n\n // resolve styles, apply with increasing precedence\n array(style).forEach(name => {\n const props = config.style && config.style[name];\n for (const key in props) {\n if (!has(key, encode)) {\n applyDefault(defaults, key, props[key]);\n }\n }\n });\n encode = extend({}, encode); // defensive copy\n for (key in defaults) {\n props = defaults[key];\n if (props.signal) {\n (update = update || {})[key] = props;\n } else {\n enter[key] = props;\n }\n }\n encode.enter = extend(enter, encode.enter);\n if (update) encode.update = extend(update, encode.update);\n return encode;\n}\nfunction applyDefault(defaults, key, value) {\n defaults[key] = value && value.signal ? {\n signal: value.signal\n } : {\n value: value\n };\n}\n\nconst scaleRef = scale => isString(scale) ? stringValue(scale) : scale.signal ? `(${scale.signal})` : field(scale);\nfunction entry$1(enc) {\n if (enc.gradient != null) {\n return gradient(enc);\n }\n let value = enc.signal ? `(${enc.signal})` : enc.color ? color(enc.color) : enc.field != null ? field(enc.field) : enc.value !== undefined ? stringValue(enc.value) : undefined;\n if (enc.scale != null) {\n value = scale(enc, value);\n }\n if (value === undefined) {\n value = null;\n }\n if (enc.exponent != null) {\n value = `pow(${value},${property(enc.exponent)})`;\n }\n if (enc.mult != null) {\n value += `*${property(enc.mult)}`;\n }\n if (enc.offset != null) {\n value += `+${property(enc.offset)}`;\n }\n if (enc.round) {\n value = `round(${value})`;\n }\n return value;\n}\nconst _color = (type, x, y, z) => `(${type}(${[x, y, z].map(entry$1).join(',')})+'')`;\nfunction color(enc) {\n return enc.c ? _color('hcl', enc.h, enc.c, enc.l) : enc.h || enc.s ? _color('hsl', enc.h, enc.s, enc.l) : enc.l || enc.a ? _color('lab', enc.l, enc.a, enc.b) : enc.r || enc.g || enc.b ? _color('rgb', enc.r, enc.g, enc.b) : null;\n}\nfunction gradient(enc) {\n // map undefined to null; expression lang does not allow undefined\n const args = [enc.start, enc.stop, enc.count].map(_ => _ == null ? null : stringValue(_));\n\n // trim null inputs from the end\n while (args.length && peek(args) == null) args.pop();\n args.unshift(scaleRef(enc.gradient));\n return `gradient(${args.join(',')})`;\n}\nfunction property(property) {\n return isObject(property) ? '(' + entry$1(property) + ')' : property;\n}\nfunction field(ref) {\n return resolveField(isObject(ref) ? ref : {\n datum: ref\n });\n}\nfunction resolveField(ref) {\n let object, level, field;\n if (ref.signal) {\n object = 'datum';\n field = ref.signal;\n } else if (ref.group || ref.parent) {\n level = Math.max(1, ref.level || 1);\n object = 'item';\n while (level-- > 0) {\n object += '.mark.group';\n }\n if (ref.parent) {\n field = ref.parent;\n object += '.datum';\n } else {\n field = ref.group;\n }\n } else if (ref.datum) {\n object = 'datum';\n field = ref.datum;\n } else {\n error('Invalid field reference: ' + stringValue(ref));\n }\n if (!ref.signal) {\n field = isString(field) ? splitAccessPath(field).map(stringValue).join('][') : resolveField(field);\n }\n return object + '[' + field + ']';\n}\nfunction scale(enc, value) {\n const scale = scaleRef(enc.scale);\n if (enc.range != null) {\n // pull value from scale range\n value = `lerp(_range(${scale}), ${+enc.range})`;\n } else {\n // run value through scale and/or pull scale bandwidth\n if (value !== undefined) value = `_scale(${scale}, ${value})`;\n if (enc.band) {\n value = (value ? value + '+' : '') + `_bandwidth(${scale})` + (+enc.band === 1 ? '' : '*' + property(enc.band));\n if (enc.extra) {\n // include logic to handle extraneous elements\n value = `(datum.extra ? _scale(${scale}, datum.extra.value) : ${value})`;\n }\n }\n if (value == null) value = '0';\n }\n return value;\n}\n\nfunction rule (enc) {\n let code = '';\n enc.forEach(rule => {\n const value = entry$1(rule);\n code += rule.test ? `(${rule.test})?${value}:` : value;\n });\n\n // if no else clause, terminate with null (#1366)\n if (peek(code) === ':') {\n code += 'null';\n }\n return code;\n}\n\nfunction parseEncode (encode, type, role, style, scope, params) {\n const enc = {};\n params = params || {};\n params.encoders = {\n $encode: enc\n };\n encode = applyDefaults(encode, type, role, style, scope.config);\n for (const key in encode) {\n enc[key] = parseBlock(encode[key], type, params, scope);\n }\n return params;\n}\nfunction parseBlock(block, marktype, params, scope) {\n const channels = {},\n fields = {};\n for (const name in block) {\n if (block[name] != null) {\n // skip any null entries\n channels[name] = parse$1(expr(block[name]), scope, params, fields);\n }\n }\n return {\n $expr: {\n marktype,\n channels\n },\n $fields: Object.keys(fields),\n $output: Object.keys(block)\n };\n}\nfunction expr(enc) {\n return isArray(enc) ? rule(enc) : entry$1(enc);\n}\nfunction parse$1(code, scope, params, fields) {\n const expr = parseExpression(code, scope);\n expr.$fields.forEach(name => fields[name] = 1);\n extend(params, expr.$params);\n return expr.$expr;\n}\n\nconst OUTER = 'outer',\n OUTER_INVALID = ['value', 'update', 'init', 'react', 'bind'];\nfunction outerError(prefix, name) {\n error(prefix + ' for \"outer\" push: ' + stringValue(name));\n}\nfunction parseSignal (signal, scope) {\n const name = signal.name;\n if (signal.push === OUTER) {\n // signal must already be defined, raise error if not\n if (!scope.signals[name]) outerError('No prior signal definition', name);\n // signal push must not use properties reserved for standard definition\n OUTER_INVALID.forEach(prop => {\n if (signal[prop] !== undefined) outerError('Invalid property ', prop);\n });\n } else {\n // define a new signal in the current scope\n const op = scope.addSignal(name, signal.value);\n if (signal.react === false) op.react = false;\n if (signal.bind) scope.addBinding(name, signal.bind);\n }\n}\n\nfunction Entry(type, value, params, parent) {\n this.id = -1;\n this.type = type;\n this.value = value;\n this.params = params;\n if (parent) this.parent = parent;\n}\nfunction entry(type, value, params, parent) {\n return new Entry(type, value, params, parent);\n}\nfunction operator(value, params) {\n return entry('operator', value, params);\n}\n\n// -----\n\nfunction ref(op) {\n const ref = {\n $ref: op.id\n };\n // if operator not yet registered, cache ref to resolve later\n if (op.id < 0) (op.refs = op.refs || []).push(ref);\n return ref;\n}\nfunction fieldRef$1(field, name) {\n return name ? {\n $field: field,\n $name: name\n } : {\n $field: field\n };\n}\nconst keyFieldRef = fieldRef$1('key');\nfunction compareRef(fields, orders) {\n return {\n $compare: fields,\n $order: orders\n };\n}\nfunction keyRef(fields, flat) {\n const ref = {\n $key: fields\n };\n if (flat) ref.$flat = true;\n return ref;\n}\n\n// -----\n\nconst Ascending = 'ascending';\nconst Descending = 'descending';\nfunction sortKey(sort) {\n return !isObject(sort) ? '' : (sort.order === Descending ? '-' : '+') + aggrField(sort.op, sort.field);\n}\nfunction aggrField(op, field) {\n return (op && op.signal ? '$' + op.signal : op || '') + (op && field ? '_' : '') + (field && field.signal ? '$' + field.signal : field || '');\n}\n\n// -----\n\nconst Scope$1 = 'scope';\nconst View = 'view';\nfunction isSignal(_) {\n return _ && _.signal;\n}\nfunction isExpr$1(_) {\n return _ && _.expr;\n}\nfunction hasSignal(_) {\n if (isSignal(_)) return true;\n if (isObject(_)) for (const key in _) {\n if (hasSignal(_[key])) return true;\n }\n return false;\n}\nfunction value(specValue, defaultValue) {\n return specValue != null ? specValue : defaultValue;\n}\nfunction deref(v) {\n return v && v.signal || v;\n}\n\nconst Timer = 'timer';\nfunction parseStream(stream, scope) {\n const method = stream.merge ? mergeStream : stream.stream ? nestedStream : stream.type ? eventStream : error('Invalid stream specification: ' + stringValue(stream));\n return method(stream, scope);\n}\nfunction eventSource(source) {\n return source === Scope$1 ? View : source || View;\n}\nfunction mergeStream(stream, scope) {\n const list = stream.merge.map(s => parseStream(s, scope)),\n entry = streamParameters({\n merge: list\n }, stream, scope);\n return scope.addStream(entry).id;\n}\nfunction nestedStream(stream, scope) {\n const id = parseStream(stream.stream, scope),\n entry = streamParameters({\n stream: id\n }, stream, scope);\n return scope.addStream(entry).id;\n}\nfunction eventStream(stream, scope) {\n let id;\n if (stream.type === Timer) {\n id = scope.event(Timer, stream.throttle);\n stream = {\n between: stream.between,\n filter: stream.filter\n };\n } else {\n id = scope.event(eventSource(stream.source), stream.type);\n }\n const entry = streamParameters({\n stream: id\n }, stream, scope);\n return Object.keys(entry).length === 1 ? id : scope.addStream(entry).id;\n}\nfunction streamParameters(entry, stream, scope) {\n let param = stream.between;\n if (param) {\n if (param.length !== 2) {\n error('Stream \"between\" parameter must have 2 entries: ' + stringValue(stream));\n }\n entry.between = [parseStream(param[0], scope), parseStream(param[1], scope)];\n }\n param = stream.filter ? [].concat(stream.filter) : [];\n if (stream.marktype || stream.markname || stream.markrole) {\n // add filter for mark type, name and/or role\n param.push(filterMark(stream.marktype, stream.markname, stream.markrole));\n }\n if (stream.source === Scope$1) {\n // add filter to limit events from sub-scope only\n param.push('inScope(event.item)');\n }\n if (param.length) {\n entry.filter = parseExpression('(' + param.join(')&&(') + ')', scope).$expr;\n }\n if ((param = stream.throttle) != null) {\n entry.throttle = +param;\n }\n if ((param = stream.debounce) != null) {\n entry.debounce = +param;\n }\n if (stream.consume) {\n entry.consume = true;\n }\n return entry;\n}\nfunction filterMark(type, name, role) {\n const item = 'event.item';\n return item + (type && type !== '*' ? '&&' + item + '.mark.marktype===\\'' + type + '\\'' : '') + (role ? '&&' + item + '.mark.role===\\'' + role + '\\'' : '') + (name ? '&&' + item + '.mark.name===\\'' + name + '\\'' : '');\n}\n\n// bypass expression parser for internal operator references\nconst OP_VALUE_EXPR = {\n code: '_.$value',\n ast: {\n type: 'Identifier',\n value: 'value'\n }\n};\nfunction parseUpdate (spec, scope, target) {\n const encode = spec.encode,\n entry = {\n target: target\n };\n let events = spec.events,\n update = spec.update,\n sources = [];\n if (!events) {\n error('Signal update missing events specification.');\n }\n\n // interpret as an event selector string\n if (isString(events)) {\n events = parseSelector(events, scope.isSubscope() ? Scope$1 : View);\n }\n\n // separate event streams from signal updates\n events = array(events).filter(s => s.signal || s.scale ? (sources.push(s), 0) : 1);\n\n // merge internal operator listeners\n if (sources.length > 1) {\n sources = [mergeSources(sources)];\n }\n\n // merge event streams, include as source\n if (events.length) {\n sources.push(events.length > 1 ? {\n merge: events\n } : events[0]);\n }\n if (encode != null) {\n if (update) error('Signal encode and update are mutually exclusive.');\n update = 'encode(item(),' + stringValue(encode) + ')';\n }\n\n // resolve update value\n entry.update = isString(update) ? parseExpression(update, scope) : update.expr != null ? parseExpression(update.expr, scope) : update.value != null ? update.value : update.signal != null ? {\n $expr: OP_VALUE_EXPR,\n $params: {\n $value: scope.signalRef(update.signal)\n }\n } : error('Invalid signal update specification.');\n if (spec.force) {\n entry.options = {\n force: true\n };\n }\n sources.forEach(source => scope.addUpdate(extend(streamSource(source, scope), entry)));\n}\nfunction streamSource(stream, scope) {\n return {\n source: stream.signal ? scope.signalRef(stream.signal) : stream.scale ? scope.scaleRef(stream.scale) : parseStream(stream, scope)\n };\n}\nfunction mergeSources(sources) {\n return {\n signal: '[' + sources.map(s => s.scale ? 'scale(\"' + s.scale + '\")' : s.signal) + ']'\n };\n}\n\nfunction parseSignalUpdates (signal, scope) {\n const op = scope.getSignal(signal.name);\n let expr = signal.update;\n if (signal.init) {\n if (expr) {\n error('Signals can not include both init and update expressions.');\n } else {\n expr = signal.init;\n op.initonly = true;\n }\n }\n if (expr) {\n expr = parseExpression(expr, scope);\n op.update = expr.$expr;\n op.params = expr.$params;\n }\n if (signal.on) {\n signal.on.forEach(_ => parseUpdate(_, scope, op.id));\n }\n}\n\nconst transform = name => (params, value, parent) => entry(name, value, params || undefined, parent);\nconst Aggregate = transform('aggregate');\nconst AxisTicks = transform('axisticks');\nconst Bound = transform('bound');\nconst Collect = transform('collect');\nconst Compare = transform('compare');\nconst DataJoin = transform('datajoin');\nconst Encode = transform('encode');\nconst Expression = transform('expression');\nconst Facet = transform('facet');\nconst Field = transform('field');\nconst Key = transform('key');\nconst LegendEntries = transform('legendentries');\nconst Load = transform('load');\nconst Mark = transform('mark');\nconst MultiExtent = transform('multiextent');\nconst MultiValues = transform('multivalues');\nconst Overlap = transform('overlap');\nconst Params = transform('params');\nconst PreFacet = transform('prefacet');\nconst Projection = transform('projection');\nconst Proxy = transform('proxy');\nconst Relay = transform('relay');\nconst Render = transform('render');\nconst Scale = transform('scale');\nconst Sieve = transform('sieve');\nconst SortItems = transform('sortitems');\nconst ViewLayout = transform('viewlayout');\nconst Values = transform('values');\n\nlet FIELD_REF_ID = 0;\nconst MULTIDOMAIN_SORT_OPS = {\n min: 'min',\n max: 'max',\n count: 'sum'\n};\nfunction initScale(spec, scope) {\n const type = spec.type || 'linear';\n if (!isValidScaleType(type)) {\n error('Unrecognized scale type: ' + stringValue(type));\n }\n scope.addScale(spec.name, {\n type,\n domain: undefined\n });\n}\nfunction parseScale(spec, scope) {\n const params = scope.getScale(spec.name).params;\n let key;\n params.domain = parseScaleDomain(spec.domain, spec, scope);\n if (spec.range != null) {\n params.range = parseScaleRange(spec, scope, params);\n }\n if (spec.interpolate != null) {\n parseScaleInterpolate(spec.interpolate, params);\n }\n if (spec.nice != null) {\n params.nice = parseScaleNice(spec.nice);\n }\n if (spec.bins != null) {\n params.bins = parseScaleBins(spec.bins, scope);\n }\n for (key in spec) {\n if (hasOwnProperty(params, key) || key === 'name') continue;\n params[key] = parseLiteral(spec[key], scope);\n }\n}\nfunction parseLiteral(v, scope) {\n return !isObject(v) ? v : v.signal ? scope.signalRef(v.signal) : error('Unsupported object: ' + stringValue(v));\n}\nfunction parseArray(v, scope) {\n return v.signal ? scope.signalRef(v.signal) : v.map(v => parseLiteral(v, scope));\n}\nfunction dataLookupError(name) {\n error('Can not find data set: ' + stringValue(name));\n}\n\n// -- SCALE DOMAIN ----\n\nfunction parseScaleDomain(domain, spec, scope) {\n if (!domain) {\n if (spec.domainMin != null || spec.domainMax != null) {\n error('No scale domain defined for domainMin/domainMax to override.');\n }\n return; // default domain\n }\n\n return domain.signal ? scope.signalRef(domain.signal) : (isArray(domain) ? explicitDomain : domain.fields ? multipleDomain : singularDomain)(domain, spec, scope);\n}\nfunction explicitDomain(domain, spec, scope) {\n return domain.map(v => parseLiteral(v, scope));\n}\nfunction singularDomain(domain, spec, scope) {\n const data = scope.getData(domain.data);\n if (!data) dataLookupError(domain.data);\n return isDiscrete(spec.type) ? data.valuesRef(scope, domain.field, parseSort(domain.sort, false)) : isQuantile(spec.type) ? data.domainRef(scope, domain.field) : data.extentRef(scope, domain.field);\n}\nfunction multipleDomain(domain, spec, scope) {\n const data = domain.data,\n fields = domain.fields.reduce((dom, d) => {\n d = isString(d) ? {\n data: data,\n field: d\n } : isArray(d) || d.signal ? fieldRef(d, scope) : d;\n dom.push(d);\n return dom;\n }, []);\n return (isDiscrete(spec.type) ? ordinalMultipleDomain : isQuantile(spec.type) ? quantileMultipleDomain : numericMultipleDomain)(domain, scope, fields);\n}\nfunction fieldRef(data, scope) {\n const name = '_:vega:_' + FIELD_REF_ID++,\n coll = Collect({});\n if (isArray(data)) {\n coll.value = {\n $ingest: data\n };\n } else if (data.signal) {\n const code = 'setdata(' + stringValue(name) + ',' + data.signal + ')';\n coll.params.input = scope.signalRef(code);\n }\n scope.addDataPipeline(name, [coll, Sieve({})]);\n return {\n data: name,\n field: 'data'\n };\n}\nfunction ordinalMultipleDomain(domain, scope, fields) {\n const sort = parseSort(domain.sort, true);\n let a, v;\n\n // get value counts for each domain field\n const counts = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.countsRef(scope, f.field, sort);\n });\n\n // aggregate the results from each domain field\n const p = {\n groupby: keyFieldRef,\n pulse: counts\n };\n if (sort) {\n a = sort.op || 'count';\n v = sort.field ? aggrField(a, sort.field) : 'count';\n p.ops = [MULTIDOMAIN_SORT_OPS[a]];\n p.fields = [scope.fieldRef(v)];\n p.as = [v];\n }\n a = scope.add(Aggregate(p));\n\n // collect aggregate output\n const c = scope.add(Collect({\n pulse: ref(a)\n }));\n\n // extract values for combined domain\n v = scope.add(Values({\n field: keyFieldRef,\n sort: scope.sortRef(sort),\n pulse: ref(c)\n }));\n return ref(v);\n}\nfunction parseSort(sort, multidomain) {\n if (sort) {\n if (!sort.field && !sort.op) {\n if (isObject(sort)) sort.field = 'key';else sort = {\n field: 'key'\n };\n } else if (!sort.field && sort.op !== 'count') {\n error('No field provided for sort aggregate op: ' + sort.op);\n } else if (multidomain && sort.field) {\n if (sort.op && !MULTIDOMAIN_SORT_OPS[sort.op]) {\n error('Multiple domain scales can not be sorted using ' + sort.op);\n }\n }\n }\n return sort;\n}\nfunction quantileMultipleDomain(domain, scope, fields) {\n // get value arrays for each domain field\n const values = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.domainRef(scope, f.field);\n });\n\n // combine value arrays\n return ref(scope.add(MultiValues({\n values: values\n })));\n}\nfunction numericMultipleDomain(domain, scope, fields) {\n // get extents for each domain field\n const extents = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.extentRef(scope, f.field);\n });\n\n // combine extents\n return ref(scope.add(MultiExtent({\n extents: extents\n })));\n}\n\n// -- SCALE BINS -----\n\nfunction parseScaleBins(v, scope) {\n return v.signal || isArray(v) ? parseArray(v, scope) : scope.objectProperty(v);\n}\n\n// -- SCALE NICE -----\n\nfunction parseScaleNice(nice) {\n return isObject(nice) ? {\n interval: parseLiteral(nice.interval),\n step: parseLiteral(nice.step)\n } : parseLiteral(nice);\n}\n\n// -- SCALE INTERPOLATION -----\n\nfunction parseScaleInterpolate(interpolate, params) {\n params.interpolate = parseLiteral(interpolate.type || interpolate);\n if (interpolate.gamma != null) {\n params.interpolateGamma = parseLiteral(interpolate.gamma);\n }\n}\n\n// -- SCALE RANGE -----\n\nfunction parseScaleRange(spec, scope, params) {\n const config = scope.config.range;\n let range = spec.range;\n if (range.signal) {\n return scope.signalRef(range.signal);\n } else if (isString(range)) {\n if (config && hasOwnProperty(config, range)) {\n spec = extend({}, spec, {\n range: config[range]\n });\n return parseScaleRange(spec, scope, params);\n } else if (range === 'width') {\n range = [0, {\n signal: 'width'\n }];\n } else if (range === 'height') {\n range = isDiscrete(spec.type) ? [0, {\n signal: 'height'\n }] : [{\n signal: 'height'\n }, 0];\n } else {\n error('Unrecognized scale range value: ' + stringValue(range));\n }\n } else if (range.scheme) {\n params.scheme = isArray(range.scheme) ? parseArray(range.scheme, scope) : parseLiteral(range.scheme, scope);\n if (range.extent) params.schemeExtent = parseArray(range.extent, scope);\n if (range.count) params.schemeCount = parseLiteral(range.count, scope);\n return;\n } else if (range.step) {\n params.rangeStep = parseLiteral(range.step, scope);\n return;\n } else if (isDiscrete(spec.type) && !isArray(range)) {\n return parseScaleDomain(range, spec, scope);\n } else if (!isArray(range)) {\n error('Unsupported range type: ' + stringValue(range));\n }\n return range.map(v => (isArray(v) ? parseArray : parseLiteral)(v, scope));\n}\n\nfunction parseProjection (proj, scope) {\n const config = scope.config.projection || {},\n params = {};\n for (const name in proj) {\n if (name === 'name') continue;\n params[name] = parseParameter$1(proj[name], name, scope);\n }\n\n // apply projection defaults from config\n for (const name in config) {\n if (params[name] == null) {\n params[name] = parseParameter$1(config[name], name, scope);\n }\n }\n scope.addProjection(proj.name, params);\n}\nfunction parseParameter$1(_, name, scope) {\n return isArray(_) ? _.map(_ => parseParameter$1(_, name, scope)) : !isObject(_) ? _ : _.signal ? scope.signalRef(_.signal) : name === 'fit' ? _ : error('Unsupported parameter object: ' + stringValue(_));\n}\n\nconst Top = 'top';\nconst Left = 'left';\nconst Right = 'right';\nconst Bottom = 'bottom';\nconst Center = 'center';\nconst Vertical = 'vertical';\nconst Start = 'start';\nconst Middle = 'middle';\nconst End = 'end';\nconst Index = 'index';\nconst Label = 'label';\nconst Offset = 'offset';\nconst Perc = 'perc';\nconst Perc2 = 'perc2';\nconst Value = 'value';\nconst GuideLabelStyle = 'guide-label';\nconst GuideTitleStyle = 'guide-title';\nconst GroupTitleStyle = 'group-title';\nconst GroupSubtitleStyle = 'group-subtitle';\nconst Symbols = 'symbol';\nconst Gradient = 'gradient';\nconst Discrete = 'discrete';\nconst Size = 'size';\nconst Shape = 'shape';\nconst Fill = 'fill';\nconst Stroke = 'stroke';\nconst StrokeWidth = 'strokeWidth';\nconst StrokeDash = 'strokeDash';\nconst Opacity = 'opacity';\n\n// Encoding channels supported by legends\n// In priority order of 'canonical' scale\nconst LegendScales = [Size, Shape, Fill, Stroke, StrokeWidth, StrokeDash, Opacity];\nconst Skip = {\n name: 1,\n style: 1,\n interactive: 1\n};\nconst zero = {\n value: 0\n};\nconst one = {\n value: 1\n};\n\nconst GroupMark = 'group';\nconst RectMark = 'rect';\nconst RuleMark = 'rule';\nconst SymbolMark = 'symbol';\nconst TextMark = 'text';\n\nfunction guideGroup (mark) {\n mark.type = GroupMark;\n mark.interactive = mark.interactive || false;\n return mark;\n}\n\nfunction lookup(spec, config) {\n const _ = (name, dflt) => value(spec[name], value(config[name], dflt));\n _.isVertical = s => Vertical === value(spec.direction, config.direction || (s ? config.symbolDirection : config.gradientDirection));\n _.gradientLength = () => value(spec.gradientLength, config.gradientLength || config.gradientWidth);\n _.gradientThickness = () => value(spec.gradientThickness, config.gradientThickness || config.gradientHeight);\n _.entryColumns = () => value(spec.columns, value(config.columns, +_.isVertical(true)));\n return _;\n}\nfunction getEncoding(name, encode) {\n const v = encode && (encode.update && encode.update[name] || encode.enter && encode.enter[name]);\n return v && v.signal ? v : v ? v.value : null;\n}\nfunction getStyle(name, scope, style) {\n const s = scope.config.style[style];\n return s && s[name];\n}\nfunction anchorExpr(s, e, m) {\n return `item.anchor === '${Start}' ? ${s} : item.anchor === '${End}' ? ${e} : ${m}`;\n}\nconst alignExpr$1 = anchorExpr(stringValue(Left), stringValue(Right), stringValue(Center));\nfunction tickBand(_) {\n const v = _('tickBand');\n let offset = _('tickOffset'),\n band,\n extra;\n if (!v) {\n // if no tick band entry, fall back on other properties\n band = _('bandPosition');\n extra = _('tickExtra');\n } else if (v.signal) {\n // if signal, augment code to interpret values\n band = {\n signal: `(${v.signal}) === 'extent' ? 1 : 0.5`\n };\n extra = {\n signal: `(${v.signal}) === 'extent'`\n };\n if (!isObject(offset)) {\n offset = {\n signal: `(${v.signal}) === 'extent' ? 0 : ${offset}`\n };\n }\n } else if (v === 'extent') {\n // if constant, simply set values\n band = 1;\n extra = true;\n offset = 0;\n } else {\n band = 0.5;\n extra = false;\n }\n return {\n extra,\n band,\n offset\n };\n}\nfunction extendOffset(value, offset) {\n return !offset ? value : !value ? offset : !isObject(value) ? {\n value,\n offset\n } : Object.assign({}, value, {\n offset: extendOffset(value.offset, offset)\n });\n}\n\nfunction guideMark (mark, extras) {\n if (extras) {\n mark.name = extras.name;\n mark.style = extras.style || mark.style;\n mark.interactive = !!extras.interactive;\n mark.encode = extendEncode(mark.encode, extras, Skip);\n } else {\n mark.interactive = false;\n }\n return mark;\n}\n\nfunction legendGradient (spec, scale, config, userEncode) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = _.gradientThickness(),\n length = _.gradientLength();\n let enter, start, stop, width, height;\n if (vertical) {\n start = [0, 1];\n stop = [0, 0];\n width = thickness;\n height = length;\n } else {\n start = [0, 0];\n stop = [1, 0];\n width = length;\n height = thickness;\n }\n const encode = {\n enter: enter = {\n opacity: zero,\n x: zero,\n y: zero,\n width: encoder(width),\n height: encoder(height)\n },\n update: extend({}, enter, {\n opacity: one,\n fill: {\n gradient: scale,\n start: start,\n stop: stop\n }\n }),\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gradientStrokeColor'),\n strokeWidth: _('gradientStrokeWidth')\n }, {\n // update\n opacity: _('gradientOpacity')\n });\n return guideMark({\n type: RectMark,\n role: LegendGradientRole,\n encode\n }, userEncode);\n}\n\nfunction legendGradientDiscrete (spec, scale, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = _.gradientThickness(),\n length = _.gradientLength();\n let u,\n v,\n uu,\n vv,\n adjust = '';\n vertical ? (u = 'y', uu = 'y2', v = 'x', vv = 'width', adjust = '1-') : (u = 'x', uu = 'x2', v = 'y', vv = 'height');\n const enter = {\n opacity: zero,\n fill: {\n scale: scale,\n field: Value\n }\n };\n enter[u] = {\n signal: adjust + 'datum.' + Perc,\n mult: length\n };\n enter[v] = zero;\n enter[uu] = {\n signal: adjust + 'datum.' + Perc2,\n mult: length\n };\n enter[vv] = encoder(thickness);\n const encode = {\n enter: enter,\n update: extend({}, enter, {\n opacity: one\n }),\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gradientStrokeColor'),\n strokeWidth: _('gradientStrokeWidth')\n }, {\n // update\n opacity: _('gradientOpacity')\n });\n return guideMark({\n type: RectMark,\n role: LegendBandRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nconst alignExpr = `datum.${Perc}<=0?\"${Left}\":datum.${Perc}>=1?\"${Right}\":\"${Center}\"`,\n baselineExpr = `datum.${Perc}<=0?\"${Bottom}\":datum.${Perc}>=1?\"${Top}\":\"${Middle}\"`;\nfunction legendGradientLabels (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = encoder(_.gradientThickness()),\n length = _.gradientLength();\n let overlap = _('labelOverlap'),\n enter,\n update,\n u,\n v,\n adjust = '';\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one,\n text: {\n field: Label\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontStyle: _('labelFontStyle'),\n fontWeight: _('labelFontWeight'),\n limit: value(spec.labelLimit, config.gradientLabelLimit)\n });\n if (vertical) {\n enter.align = {\n value: 'left'\n };\n enter.baseline = update.baseline = {\n signal: baselineExpr\n };\n u = 'y';\n v = 'x';\n adjust = '1-';\n } else {\n enter.align = update.align = {\n signal: alignExpr\n };\n enter.baseline = {\n value: 'top'\n };\n u = 'x';\n v = 'y';\n }\n enter[u] = update[u] = {\n signal: adjust + 'datum.' + Perc,\n mult: length\n };\n enter[v] = update[v] = thickness;\n thickness.offset = value(spec.labelOffset, config.gradientLabelOffset) || 0;\n overlap = overlap ? {\n separation: _('labelSeparation'),\n method: overlap,\n order: 'datum.' + Index\n } : undefined;\n\n // type, role, style, key, dataRef, encode, extras\n return guideMark({\n type: TextMark,\n role: LegendLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: dataRef,\n encode,\n overlap\n }, userEncode);\n}\n\n// userEncode is top-level, includes entries, symbols, labels\nfunction legendSymbolGroups (spec, config, userEncode, dataRef, columns) {\n const _ = lookup(spec, config),\n entries = userEncode.entries,\n interactive = !!(entries && entries.interactive),\n name = entries ? entries.name : undefined,\n height = _('clipHeight'),\n symbolOffset = _('symbolOffset'),\n valueRef = {\n data: 'value'\n },\n xSignal = `(${columns}) ? datum.${Offset} : datum.${Size}`,\n yEncode = height ? encoder(height) : {\n field: Size\n },\n index = `datum.${Index}`,\n ncols = `max(1, ${columns})`;\n let encode, enter, update, nrows, sort;\n yEncode.mult = 0.5;\n\n // -- LEGEND SYMBOLS --\n encode = {\n enter: enter = {\n opacity: zero,\n x: {\n signal: xSignal,\n mult: 0.5,\n offset: symbolOffset\n },\n y: yEncode\n },\n update: update = {\n opacity: one,\n x: enter.x,\n y: enter.y\n },\n exit: {\n opacity: zero\n }\n };\n let baseFill = null,\n baseStroke = null;\n if (!spec.fill) {\n baseFill = config.symbolBaseFillColor;\n baseStroke = config.symbolBaseStrokeColor;\n }\n addEncoders(encode, {\n fill: _('symbolFillColor', baseFill),\n shape: _('symbolType'),\n size: _('symbolSize'),\n stroke: _('symbolStrokeColor', baseStroke),\n strokeDash: _('symbolDash'),\n strokeDashOffset: _('symbolDashOffset'),\n strokeWidth: _('symbolStrokeWidth')\n }, {\n // update\n opacity: _('symbolOpacity')\n });\n LegendScales.forEach(scale => {\n if (spec[scale]) {\n update[scale] = enter[scale] = {\n scale: spec[scale],\n field: Value\n };\n }\n });\n const symbols = guideMark({\n type: SymbolMark,\n role: LegendSymbolRole,\n key: Value,\n from: valueRef,\n clip: height ? true : undefined,\n encode\n }, userEncode.symbols);\n\n // -- LEGEND LABELS --\n const labelOffset = encoder(symbolOffset);\n labelOffset.offset = _('labelOffset');\n encode = {\n enter: enter = {\n opacity: zero,\n x: {\n signal: xSignal,\n offset: labelOffset\n },\n y: yEncode\n },\n update: update = {\n opacity: one,\n text: {\n field: Label\n },\n x: enter.x,\n y: enter.y\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n align: _('labelAlign'),\n baseline: _('labelBaseline'),\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontStyle: _('labelFontStyle'),\n fontWeight: _('labelFontWeight'),\n limit: _('labelLimit')\n });\n const labels = guideMark({\n type: TextMark,\n role: LegendLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: valueRef,\n encode\n }, userEncode.labels);\n\n // -- LEGEND ENTRY GROUPS --\n encode = {\n enter: {\n noBound: {\n value: !height\n },\n // ignore width/height in bounds calc\n width: zero,\n height: height ? encoder(height) : zero,\n opacity: zero\n },\n exit: {\n opacity: zero\n },\n update: update = {\n opacity: one,\n row: {\n signal: null\n },\n column: {\n signal: null\n }\n }\n };\n\n // annotate and sort groups to ensure correct ordering\n if (_.isVertical(true)) {\n nrows = `ceil(item.mark.items.length / ${ncols})`;\n update.row.signal = `${index}%${nrows}`;\n update.column.signal = `floor(${index} / ${nrows})`;\n sort = {\n field: ['row', index]\n };\n } else {\n update.row.signal = `floor(${index} / ${ncols})`;\n update.column.signal = `${index} % ${ncols}`;\n sort = {\n field: index\n };\n }\n // handle zero column case (implies infinite columns)\n update.column.signal = `(${columns})?${update.column.signal}:${index}`;\n\n // facet legend entries into sub-groups\n dataRef = {\n facet: {\n data: dataRef,\n name: 'value',\n groupby: Index\n }\n };\n return guideGroup({\n role: ScopeRole,\n from: dataRef,\n encode: extendEncode(encode, entries, Skip),\n marks: [symbols, labels],\n name,\n interactive,\n sort\n });\n}\nfunction legendSymbolLayout(spec, config) {\n const _ = lookup(spec, config);\n\n // layout parameters for legend entries\n return {\n align: _('gridAlign'),\n columns: _.entryColumns(),\n center: {\n row: true,\n column: false\n },\n padding: {\n row: _('rowPadding'),\n column: _('columnPadding')\n }\n };\n}\n\n// expression logic for align, anchor, angle, and baseline calculation\nconst isL = 'item.orient === \"left\"',\n isR = 'item.orient === \"right\"',\n isLR = `(${isL} || ${isR})`,\n isVG = `datum.vgrad && ${isLR}`,\n baseline = anchorExpr('\"top\"', '\"bottom\"', '\"middle\"'),\n alignFlip = anchorExpr('\"right\"', '\"left\"', '\"center\"'),\n exprAlign = `datum.vgrad && ${isR} ? (${alignFlip}) : (${isLR} && !(datum.vgrad && ${isL})) ? \"left\" : ${alignExpr$1}`,\n exprAnchor = `item._anchor || (${isLR} ? \"middle\" : \"start\")`,\n exprAngle = `${isVG} ? (${isL} ? -90 : 90) : 0`,\n exprBaseline = `${isLR} ? (datum.vgrad ? (${isR} ? \"bottom\" : \"top\") : ${baseline}) : \"top\"`;\nfunction legendTitle (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config);\n const encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: one,\n x: {\n field: {\n group: 'padding'\n }\n },\n y: {\n field: {\n group: 'padding'\n }\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n orient: _('titleOrient'),\n _anchor: _('titleAnchor'),\n anchor: {\n signal: exprAnchor\n },\n angle: {\n signal: exprAngle\n },\n align: {\n signal: exprAlign\n },\n baseline: {\n signal: exprBaseline\n },\n text: spec.title,\n fill: _('titleColor'),\n fillOpacity: _('titleOpacity'),\n font: _('titleFont'),\n fontSize: _('titleFontSize'),\n fontStyle: _('titleFontStyle'),\n fontWeight: _('titleFontWeight'),\n limit: _('titleLimit'),\n lineHeight: _('titleLineHeight')\n }, {\n // require update\n align: _('titleAlign'),\n baseline: _('titleBaseline')\n });\n return guideMark({\n type: TextMark,\n role: LegendTitleRole,\n style: GuideTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction clip (clip, scope) {\n let expr;\n if (isObject(clip)) {\n if (clip.signal) {\n expr = clip.signal;\n } else if (clip.path) {\n expr = 'pathShape(' + param(clip.path) + ')';\n } else if (clip.sphere) {\n expr = 'geoShape(' + param(clip.sphere) + ', {type: \"Sphere\"})';\n }\n }\n return expr ? scope.signalRef(expr) : !!clip;\n}\nfunction param(value) {\n return isObject(value) && value.signal ? value.signal : stringValue(value);\n}\n\nfunction getRole (spec) {\n const role = spec.role || '';\n return !role.indexOf('axis') || !role.indexOf('legend') || !role.indexOf('title') ? role : spec.type === GroupMark ? ScopeRole : role || MarkRole;\n}\n\nfunction definition (spec) {\n return {\n marktype: spec.type,\n name: spec.name || undefined,\n role: spec.role || getRole(spec),\n zindex: +spec.zindex || undefined,\n aria: spec.aria,\n description: spec.description\n };\n}\n\nfunction interactive (spec, scope) {\n return spec && spec.signal ? scope.signalRef(spec.signal) : spec === false ? false : true;\n}\n\n/**\n * Parse a data transform specification.\n */\nfunction parseTransform (spec, scope) {\n const def = definition$1(spec.type);\n if (!def) error('Unrecognized transform type: ' + stringValue(spec.type));\n const t = entry(def.type.toLowerCase(), null, parseParameters(def, spec, scope));\n if (spec.signal) scope.addSignal(spec.signal, scope.proxy(t));\n t.metadata = def.metadata || {};\n return t;\n}\n\n/**\n * Parse all parameters of a data transform.\n */\nfunction parseParameters(def, spec, scope) {\n const params = {},\n n = def.params.length;\n for (let i = 0; i < n; ++i) {\n const pdef = def.params[i];\n params[pdef.name] = parseParameter(pdef, spec, scope);\n }\n return params;\n}\n\n/**\n * Parse a data transform parameter.\n */\nfunction parseParameter(def, spec, scope) {\n const type = def.type,\n value = spec[def.name];\n if (type === 'index') {\n return parseIndexParameter(def, spec, scope);\n } else if (value === undefined) {\n if (def.required) {\n error('Missing required ' + stringValue(spec.type) + ' parameter: ' + stringValue(def.name));\n }\n return;\n } else if (type === 'param') {\n return parseSubParameters(def, spec, scope);\n } else if (type === 'projection') {\n return scope.projectionRef(spec[def.name]);\n }\n return def.array && !isSignal(value) ? value.map(v => parameterValue(def, v, scope)) : parameterValue(def, value, scope);\n}\n\n/**\n * Parse a single parameter value.\n */\nfunction parameterValue(def, value, scope) {\n const type = def.type;\n if (isSignal(value)) {\n return isExpr(type) ? error('Expression references can not be signals.') : isField(type) ? scope.fieldRef(value) : isCompare(type) ? scope.compareRef(value) : scope.signalRef(value.signal);\n } else {\n const expr = def.expr || isField(type);\n return expr && outerExpr(value) ? scope.exprRef(value.expr, value.as) : expr && outerField(value) ? fieldRef$1(value.field, value.as) : isExpr(type) ? parseExpression(value, scope) : isData(type) ? ref(scope.getData(value).values) : isField(type) ? fieldRef$1(value) : isCompare(type) ? scope.compareRef(value) : value;\n }\n}\n\n/**\n * Parse parameter for accessing an index of another data set.\n */\nfunction parseIndexParameter(def, spec, scope) {\n if (!isString(spec.from)) {\n error('Lookup \"from\" parameter must be a string literal.');\n }\n return scope.getData(spec.from).lookupRef(scope, spec.key);\n}\n\n/**\n * Parse a parameter that contains one or more sub-parameter objects.\n */\nfunction parseSubParameters(def, spec, scope) {\n const value = spec[def.name];\n if (def.array) {\n if (!isArray(value)) {\n // signals not allowed!\n error('Expected an array of sub-parameters. Instead: ' + stringValue(value));\n }\n return value.map(v => parseSubParameter(def, v, scope));\n } else {\n return parseSubParameter(def, value, scope);\n }\n}\n\n/**\n * Parse a sub-parameter object.\n */\nfunction parseSubParameter(def, value, scope) {\n const n = def.params.length;\n let pdef;\n\n // loop over defs to find matching key\n for (let i = 0; i < n; ++i) {\n pdef = def.params[i];\n for (const k in pdef.key) {\n if (pdef.key[k] !== value[k]) {\n pdef = null;\n break;\n }\n }\n if (pdef) break;\n }\n // raise error if matching key not found\n if (!pdef) error('Unsupported parameter: ' + stringValue(value));\n\n // parse params, create Params transform, return ref\n const params = extend(parseParameters(pdef, value, scope), pdef.key);\n return ref(scope.add(Params(params)));\n}\n\n// -- Utilities -----\n\nconst outerExpr = _ => _ && _.expr;\nconst outerField = _ => _ && _.field;\nconst isData = _ => _ === 'data';\nconst isExpr = _ => _ === 'expr';\nconst isField = _ => _ === 'field';\nconst isCompare = _ => _ === 'compare';\n\nfunction parseData$1 (from, group, scope) {\n let facet, key, op, dataRef, parent;\n\n // if no source data, generate singleton datum\n if (!from) {\n dataRef = ref(scope.add(Collect(null, [{}])));\n }\n\n // if faceted, process facet specification\n else if (facet = from.facet) {\n if (!group) error('Only group marks can be faceted.');\n\n // use pre-faceted source data, if available\n if (facet.field != null) {\n dataRef = parent = getDataRef(facet, scope);\n } else {\n // generate facet aggregates if no direct data specification\n if (!from.data) {\n op = parseTransform(extend({\n type: 'aggregate',\n groupby: array(facet.groupby)\n }, facet.aggregate), scope);\n op.params.key = scope.keyRef(facet.groupby);\n op.params.pulse = getDataRef(facet, scope);\n dataRef = parent = ref(scope.add(op));\n } else {\n parent = ref(scope.getData(from.data).aggregate);\n }\n key = scope.keyRef(facet.groupby, true);\n }\n }\n\n // if not yet defined, get source data reference\n if (!dataRef) {\n dataRef = getDataRef(from, scope);\n }\n return {\n key: key,\n pulse: dataRef,\n parent: parent\n };\n}\nfunction getDataRef(from, scope) {\n return from.$ref ? from : from.data && from.data.$ref ? from.data : ref(scope.getData(from.data).output);\n}\n\nfunction DataScope(scope, input, output, values, aggr) {\n this.scope = scope; // parent scope object\n this.input = input; // first operator in pipeline (tuple input)\n this.output = output; // last operator in pipeline (tuple output)\n this.values = values; // operator for accessing tuples (but not tuple flow)\n\n // last aggregate in transform pipeline\n this.aggregate = aggr;\n\n // lookup table of field indices\n this.index = {};\n}\nDataScope.fromEntries = function (scope, entries) {\n const n = entries.length,\n values = entries[n - 1],\n output = entries[n - 2];\n let input = entries[0],\n aggr = null,\n i = 1;\n if (input && input.type === 'load') {\n input = entries[1];\n }\n\n // add operator entries to this scope, wire up pulse chain\n scope.add(entries[0]);\n for (; i < n; ++i) {\n entries[i].params.pulse = ref(entries[i - 1]);\n scope.add(entries[i]);\n if (entries[i].type === 'aggregate') aggr = entries[i];\n }\n return new DataScope(scope, input, output, values, aggr);\n};\nfunction fieldKey(field) {\n return isString(field) ? field : null;\n}\nfunction addSortField(scope, p, sort) {\n const as = aggrField(sort.op, sort.field);\n let s;\n if (p.ops) {\n for (let i = 0, n = p.as.length; i < n; ++i) {\n if (p.as[i] === as) return;\n }\n } else {\n p.ops = ['count'];\n p.fields = [null];\n p.as = ['count'];\n }\n if (sort.op) {\n p.ops.push((s = sort.op.signal) ? scope.signalRef(s) : sort.op);\n p.fields.push(scope.fieldRef(sort.field));\n p.as.push(as);\n }\n}\nfunction cache(scope, ds, name, optype, field, counts, index) {\n const cache = ds[name] || (ds[name] = {}),\n sort = sortKey(counts);\n let k = fieldKey(field),\n v,\n op;\n if (k != null) {\n scope = ds.scope;\n k = k + (sort ? '|' + sort : '');\n v = cache[k];\n }\n if (!v) {\n const params = counts ? {\n field: keyFieldRef,\n pulse: ds.countsRef(scope, field, counts)\n } : {\n field: scope.fieldRef(field),\n pulse: ref(ds.output)\n };\n if (sort) params.sort = scope.sortRef(counts);\n op = scope.add(entry(optype, undefined, params));\n if (index) ds.index[field] = op;\n v = ref(op);\n if (k != null) cache[k] = v;\n }\n return v;\n}\nDataScope.prototype = {\n countsRef(scope, field, sort) {\n const ds = this,\n cache = ds.counts || (ds.counts = {}),\n k = fieldKey(field);\n let v, a, p;\n if (k != null) {\n scope = ds.scope;\n v = cache[k];\n }\n if (!v) {\n p = {\n groupby: scope.fieldRef(field, 'key'),\n pulse: ref(ds.output)\n };\n if (sort && sort.field) addSortField(scope, p, sort);\n a = scope.add(Aggregate(p));\n v = scope.add(Collect({\n pulse: ref(a)\n }));\n v = {\n agg: a,\n ref: ref(v)\n };\n if (k != null) cache[k] = v;\n } else if (sort && sort.field) {\n addSortField(scope, v.agg.params, sort);\n }\n return v.ref;\n },\n tuplesRef() {\n return ref(this.values);\n },\n extentRef(scope, field) {\n return cache(scope, this, 'extent', 'extent', field, false);\n },\n domainRef(scope, field) {\n return cache(scope, this, 'domain', 'values', field, false);\n },\n valuesRef(scope, field, sort) {\n return cache(scope, this, 'vals', 'values', field, sort || true);\n },\n lookupRef(scope, field) {\n return cache(scope, this, 'lookup', 'tupleindex', field, false);\n },\n indataRef(scope, field) {\n return cache(scope, this, 'indata', 'tupleindex', field, true, true);\n }\n};\n\nfunction parseFacet (spec, scope, group) {\n const facet = spec.from.facet,\n name = facet.name,\n data = getDataRef(facet, scope);\n let op;\n if (!facet.name) {\n error('Facet must have a name: ' + stringValue(facet));\n }\n if (!facet.data) {\n error('Facet must reference a data set: ' + stringValue(facet));\n }\n if (facet.field) {\n op = scope.add(PreFacet({\n field: scope.fieldRef(facet.field),\n pulse: data\n }));\n } else if (facet.groupby) {\n op = scope.add(Facet({\n key: scope.keyRef(facet.groupby),\n group: ref(scope.proxy(group.parent)),\n pulse: data\n }));\n } else {\n error('Facet must specify groupby or field: ' + stringValue(facet));\n }\n\n // initialize facet subscope\n const subscope = scope.fork(),\n source = subscope.add(Collect()),\n values = subscope.add(Sieve({\n pulse: ref(source)\n }));\n subscope.addData(name, new DataScope(subscope, source, source, values));\n subscope.addSignal('parent', null);\n\n // parse faceted subflow\n op.params.subflow = {\n $subflow: subscope.parse(spec).toRuntime()\n };\n}\n\nfunction parseSubflow (spec, scope, input) {\n const op = scope.add(PreFacet({\n pulse: input.pulse\n })),\n subscope = scope.fork();\n subscope.add(Sieve());\n subscope.addSignal('parent', null);\n\n // parse group mark subflow\n op.params.subflow = {\n $subflow: subscope.parse(spec).toRuntime()\n };\n}\n\nfunction parseTrigger (spec, scope, name) {\n const remove = spec.remove,\n insert = spec.insert,\n toggle = spec.toggle,\n modify = spec.modify,\n values = spec.values,\n op = scope.add(operator());\n const update = 'if(' + spec.trigger + ',modify(\"' + name + '\",' + [insert, remove, toggle, modify, values].map(_ => _ == null ? 'null' : _).join(',') + '),0)';\n const expr = parseExpression(update, scope);\n op.update = expr.$expr;\n op.params = expr.$params;\n}\n\nfunction parseMark (spec, scope) {\n const role = getRole(spec),\n group = spec.type === GroupMark,\n facet = spec.from && spec.from.facet,\n overlap = spec.overlap;\n let layout = spec.layout || role === ScopeRole || role === FrameRole,\n ops,\n op,\n store,\n enc,\n name,\n layoutRef,\n boundRef;\n const nested = role === MarkRole || layout || facet;\n\n // resolve input data\n const input = parseData$1(spec.from, group, scope);\n\n // data join to map tuples to visual items\n op = scope.add(DataJoin({\n key: input.key || (spec.key ? fieldRef$1(spec.key) : undefined),\n pulse: input.pulse,\n clean: !group\n }));\n const joinRef = ref(op);\n\n // collect visual items\n op = store = scope.add(Collect({\n pulse: joinRef\n }));\n\n // connect visual items to scenegraph\n op = scope.add(Mark({\n markdef: definition(spec),\n interactive: interactive(spec.interactive, scope),\n clip: clip(spec.clip, scope),\n context: {\n $context: true\n },\n groups: scope.lookup(),\n parent: scope.signals.parent ? scope.signalRef('parent') : null,\n index: scope.markpath(),\n pulse: ref(op)\n }));\n const markRef = ref(op);\n\n // add visual encoders\n op = enc = scope.add(Encode(parseEncode(spec.encode, spec.type, role, spec.style, scope, {\n mod: false,\n pulse: markRef\n })));\n\n // monitor parent marks to propagate changes\n op.params.parent = scope.encode();\n\n // add post-encoding transforms, if defined\n if (spec.transform) {\n spec.transform.forEach(_ => {\n const tx = parseTransform(_, scope),\n md = tx.metadata;\n if (md.generates || md.changes) {\n error('Mark transforms should not generate new data.');\n }\n if (!md.nomod) enc.params.mod = true; // update encode mod handling\n tx.params.pulse = ref(op);\n scope.add(op = tx);\n });\n }\n\n // if item sort specified, perform post-encoding\n if (spec.sort) {\n op = scope.add(SortItems({\n sort: scope.compareRef(spec.sort),\n pulse: ref(op)\n }));\n }\n const encodeRef = ref(op);\n\n // add view layout operator if needed\n if (facet || layout) {\n layout = scope.add(ViewLayout({\n layout: scope.objectProperty(spec.layout),\n legends: scope.legends,\n mark: markRef,\n pulse: encodeRef\n }));\n layoutRef = ref(layout);\n }\n\n // compute bounding boxes\n const bound = scope.add(Bound({\n mark: markRef,\n pulse: layoutRef || encodeRef\n }));\n boundRef = ref(bound);\n\n // if group mark, recurse to parse nested content\n if (group) {\n // juggle layout & bounds to ensure they run *after* any faceting transforms\n if (nested) {\n ops = scope.operators;\n ops.pop();\n if (layout) ops.pop();\n }\n scope.pushState(encodeRef, layoutRef || boundRef, joinRef);\n facet ? parseFacet(spec, scope, input) // explicit facet\n : nested ? parseSubflow(spec, scope, input) // standard mark group\n : scope.parse(spec); // guide group, we can avoid nested scopes\n scope.popState();\n if (nested) {\n if (layout) ops.push(layout);\n ops.push(bound);\n }\n }\n\n // if requested, add overlap removal transform\n if (overlap) {\n boundRef = parseOverlap(overlap, boundRef, scope);\n }\n\n // render / sieve items\n const render = scope.add(Render({\n pulse: boundRef\n })),\n sieve = scope.add(Sieve({\n pulse: ref(render)\n }, undefined, scope.parent()));\n\n // if mark is named, make accessible as reactive geometry\n // add trigger updates if defined\n if (spec.name != null) {\n name = spec.name;\n scope.addData(name, new DataScope(scope, store, render, sieve));\n if (spec.on) spec.on.forEach(on => {\n if (on.insert || on.remove || on.toggle) {\n error('Marks only support modify triggers.');\n }\n parseTrigger(on, scope, name);\n });\n }\n}\nfunction parseOverlap(overlap, source, scope) {\n const method = overlap.method,\n bound = overlap.bound,\n sep = overlap.separation;\n const params = {\n separation: isSignal(sep) ? scope.signalRef(sep.signal) : sep,\n method: isSignal(method) ? scope.signalRef(method.signal) : method,\n pulse: source\n };\n if (overlap.order) {\n params.sort = scope.compareRef({\n field: overlap.order\n });\n }\n if (bound) {\n const tol = bound.tolerance;\n params.boundTolerance = isSignal(tol) ? scope.signalRef(tol.signal) : +tol;\n params.boundScale = scope.scaleRef(bound.scale);\n params.boundOrient = bound.orient;\n }\n return ref(scope.add(Overlap(params)));\n}\n\nfunction parseLegend (spec, scope) {\n const config = scope.config.legend,\n encode = spec.encode || {},\n _ = lookup(spec, config),\n legendEncode = encode.legend || {},\n name = legendEncode.name || undefined,\n interactive = legendEncode.interactive,\n style = legendEncode.style,\n scales = {};\n let scale = 0,\n entryLayout,\n params,\n children;\n\n // resolve scales and 'canonical' scale name\n LegendScales.forEach(s => spec[s] ? (scales[s] = spec[s], scale = scale || spec[s]) : 0);\n if (!scale) error('Missing valid scale for legend.');\n\n // resolve legend type (symbol, gradient, or discrete gradient)\n const type = legendType(spec, scope.scaleType(scale));\n\n // single-element data source for legend group\n const datum = {\n title: spec.title != null,\n scales: scales,\n type: type,\n vgrad: type !== 'symbol' && _.isVertical()\n };\n const dataRef = ref(scope.add(Collect(null, [datum])));\n\n // encoding properties for legend entry sub-group\n const entryEncode = {\n enter: {\n x: {\n value: 0\n },\n y: {\n value: 0\n }\n }\n };\n\n // data source for legend values\n const entryRef = ref(scope.add(LegendEntries(params = {\n type: type,\n scale: scope.scaleRef(scale),\n count: scope.objectProperty(_('tickCount')),\n limit: scope.property(_('symbolLimit')),\n values: scope.objectProperty(spec.values),\n minstep: scope.property(spec.tickMinStep),\n formatType: scope.property(spec.formatType),\n formatSpecifier: scope.property(spec.format)\n })));\n\n // continuous gradient legend\n if (type === Gradient) {\n children = [legendGradient(spec, scale, config, encode.gradient), legendGradientLabels(spec, config, encode.labels, entryRef)];\n // adjust default tick count based on the gradient length\n params.count = params.count || scope.signalRef(`max(2,2*floor((${deref(_.gradientLength())})/100))`);\n }\n\n // discrete gradient legend\n else if (type === Discrete) {\n children = [legendGradientDiscrete(spec, scale, config, encode.gradient, entryRef), legendGradientLabels(spec, config, encode.labels, entryRef)];\n }\n\n // symbol legend\n else {\n // determine legend symbol group layout\n entryLayout = legendSymbolLayout(spec, config);\n children = [legendSymbolGroups(spec, config, encode, entryRef, deref(entryLayout.columns))];\n // pass symbol size information to legend entry generator\n params.size = sizeExpression(spec, scope, children[0].marks);\n }\n\n // generate legend marks\n children = [guideGroup({\n role: LegendEntryRole,\n from: dataRef,\n encode: entryEncode,\n marks: children,\n layout: entryLayout,\n interactive\n })];\n\n // include legend title if defined\n if (datum.title) {\n children.push(legendTitle(spec, config, encode.title, dataRef));\n }\n\n // parse legend specification\n return parseMark(guideGroup({\n role: LegendRole,\n from: dataRef,\n encode: extendEncode(buildLegendEncode(_, spec, config), legendEncode, Skip),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\nfunction legendType(spec, scaleType) {\n let type = spec.type || Symbols;\n if (!spec.type && scaleCount(spec) === 1 && (spec.fill || spec.stroke)) {\n type = isContinuous(scaleType) ? Gradient : isDiscretizing(scaleType) ? Discrete : Symbols;\n }\n return type !== Gradient ? type : isDiscretizing(scaleType) ? Discrete : Gradient;\n}\nfunction scaleCount(spec) {\n return LegendScales.reduce((count, type) => count + (spec[type] ? 1 : 0), 0);\n}\nfunction buildLegendEncode(_, spec, config) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n offset: _('offset'),\n padding: _('padding'),\n titlePadding: _('titlePadding'),\n cornerRadius: _('cornerRadius'),\n fill: _('fillColor'),\n stroke: _('strokeColor'),\n strokeWidth: config.strokeWidth,\n strokeDash: config.strokeDash,\n x: _('legendX'),\n y: _('legendY'),\n // accessibility support\n format: spec.format,\n formatType: spec.formatType\n });\n return encode;\n}\nfunction sizeExpression(spec, scope, marks) {\n const size = deref(getChannel('size', spec, marks)),\n strokeWidth = deref(getChannel('strokeWidth', spec, marks)),\n fontSize = deref(getFontSize(marks[1].encode, scope, GuideLabelStyle));\n return parseExpression(`max(ceil(sqrt(${size})+${strokeWidth}),${fontSize})`, scope);\n}\nfunction getChannel(name, spec, marks) {\n return spec[name] ? `scale(\"${spec[name]}\",datum)` : getEncoding(name, marks[0].encode);\n}\nfunction getFontSize(encode, scope, style) {\n return getEncoding('fontSize', encode) || getStyle('fontSize', scope, style);\n}\n\nconst angleExpr = `item.orient===\"${Left}\"?-90:item.orient===\"${Right}\"?90:0`;\nfunction parseTitle (spec, scope) {\n spec = isString(spec) ? {\n text: spec\n } : spec;\n const _ = lookup(spec, scope.config.title),\n encode = spec.encode || {},\n userEncode = encode.group || {},\n name = userEncode.name || undefined,\n interactive = userEncode.interactive,\n style = userEncode.style,\n children = [];\n\n // single-element data source for group title\n const datum = {},\n dataRef = ref(scope.add(Collect(null, [datum])));\n\n // include title text\n children.push(buildTitle(spec, _, titleEncode(spec), dataRef));\n\n // include subtitle text\n if (spec.subtitle) {\n children.push(buildSubTitle(spec, _, encode.subtitle, dataRef));\n }\n\n // parse title specification\n return parseMark(guideGroup({\n role: TitleRole,\n from: dataRef,\n encode: groupEncode(_, userEncode),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\n\n// provide backwards-compatibility for title custom encode;\n// the top-level encode block has been *deprecated*.\nfunction titleEncode(spec) {\n const encode = spec.encode;\n return encode && encode.title || extend({\n name: spec.name,\n interactive: spec.interactive,\n style: spec.style\n }, encode);\n}\nfunction groupEncode(_, userEncode) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n anchor: _('anchor'),\n align: {\n signal: alignExpr$1\n },\n angle: {\n signal: angleExpr\n },\n limit: _('limit'),\n frame: _('frame'),\n offset: _('offset') || 0,\n padding: _('subtitlePadding')\n });\n return extendEncode(encode, userEncode, Skip);\n}\nfunction buildTitle(spec, _, userEncode, dataRef) {\n const zero = {\n value: 0\n },\n text = spec.text,\n encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: {\n value: 1\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n text: text,\n align: {\n signal: 'item.mark.group.align'\n },\n angle: {\n signal: 'item.mark.group.angle'\n },\n limit: {\n signal: 'item.mark.group.limit'\n },\n baseline: 'top',\n dx: _('dx'),\n dy: _('dy'),\n fill: _('color'),\n font: _('font'),\n fontSize: _('fontSize'),\n fontStyle: _('fontStyle'),\n fontWeight: _('fontWeight'),\n lineHeight: _('lineHeight')\n }, {\n // update\n align: _('align'),\n angle: _('angle'),\n baseline: _('baseline')\n });\n return guideMark({\n type: TextMark,\n role: TitleTextRole,\n style: GroupTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction buildSubTitle(spec, _, userEncode, dataRef) {\n const zero = {\n value: 0\n },\n text = spec.subtitle,\n encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: {\n value: 1\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n text: text,\n align: {\n signal: 'item.mark.group.align'\n },\n angle: {\n signal: 'item.mark.group.angle'\n },\n limit: {\n signal: 'item.mark.group.limit'\n },\n baseline: 'top',\n dx: _('dx'),\n dy: _('dy'),\n fill: _('subtitleColor'),\n font: _('subtitleFont'),\n fontSize: _('subtitleFontSize'),\n fontStyle: _('subtitleFontStyle'),\n fontWeight: _('subtitleFontWeight'),\n lineHeight: _('subtitleLineHeight')\n }, {\n // update\n align: _('align'),\n angle: _('angle'),\n baseline: _('baseline')\n });\n return guideMark({\n type: TextMark,\n role: TitleSubtitleRole,\n style: GroupSubtitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction parseData(data, scope) {\n const transforms = [];\n if (data.transform) {\n data.transform.forEach(tx => {\n transforms.push(parseTransform(tx, scope));\n });\n }\n if (data.on) {\n data.on.forEach(on => {\n parseTrigger(on, scope, data.name);\n });\n }\n scope.addDataPipeline(data.name, analyze(data, scope, transforms));\n}\n\n/**\n * Analyze a data pipeline, add needed operators.\n */\nfunction analyze(data, scope, ops) {\n const output = [];\n let source = null,\n modify = false,\n generate = false,\n upstream,\n i,\n n,\n t,\n m;\n if (data.values) {\n // hard-wired input data set\n if (isSignal(data.values) || hasSignal(data.format)) {\n // if either values is signal or format has signal, use dynamic loader\n output.push(load(scope, data));\n output.push(source = collect());\n } else {\n // otherwise, ingest upon dataflow init\n output.push(source = collect({\n $ingest: data.values,\n $format: data.format\n }));\n }\n } else if (data.url) {\n // load data from external source\n if (hasSignal(data.url) || hasSignal(data.format)) {\n // if either url or format has signal, use dynamic loader\n output.push(load(scope, data));\n output.push(source = collect());\n } else {\n // otherwise, request load upon dataflow init\n output.push(source = collect({\n $request: data.url,\n $format: data.format\n }));\n }\n } else if (data.source) {\n // derives from one or more other data sets\n source = upstream = array(data.source).map(d => ref(scope.getData(d).output));\n output.push(null); // populate later\n }\n\n // scan data transforms, add collectors as needed\n for (i = 0, n = ops.length; i < n; ++i) {\n t = ops[i];\n m = t.metadata;\n if (!source && !m.source) {\n output.push(source = collect());\n }\n output.push(t);\n if (m.generates) generate = true;\n if (m.modifies && !generate) modify = true;\n if (m.source) source = t;else if (m.changes) source = null;\n }\n if (upstream) {\n n = upstream.length - 1;\n output[0] = Relay({\n derive: modify,\n pulse: n ? upstream : upstream[0]\n });\n if (modify || n) {\n // collect derived and multi-pulse tuples\n output.splice(1, 0, collect());\n }\n }\n if (!source) output.push(collect());\n output.push(Sieve({}));\n return output;\n}\nfunction collect(values) {\n const s = Collect({}, values);\n s.metadata = {\n source: true\n };\n return s;\n}\nfunction load(scope, data) {\n return Load({\n url: data.url ? scope.property(data.url) : undefined,\n async: data.async ? scope.property(data.async) : undefined,\n values: data.values ? scope.property(data.values) : undefined,\n format: scope.objectProperty(data.format)\n });\n}\n\nconst isX = orient => orient === Bottom || orient === Top;\n\n// get sign coefficient based on axis orient\nconst getSign = (orient, a, b) => isSignal(orient) ? ifLeftTopExpr(orient.signal, a, b) : orient === Left || orient === Top ? a : b;\n\n// condition on axis x-direction\nconst ifX = (orient, a, b) => isSignal(orient) ? ifXEnc(orient.signal, a, b) : isX(orient) ? a : b;\n\n// condition on axis y-direction\nconst ifY = (orient, a, b) => isSignal(orient) ? ifYEnc(orient.signal, a, b) : isX(orient) ? b : a;\nconst ifTop = (orient, a, b) => isSignal(orient) ? ifTopExpr(orient.signal, a, b) : orient === Top ? {\n value: a\n} : {\n value: b\n};\nconst ifRight = (orient, a, b) => isSignal(orient) ? ifRightExpr(orient.signal, a, b) : orient === Right ? {\n value: a\n} : {\n value: b\n};\nconst ifXEnc = ($orient, a, b) => ifEnc(`${$orient} === '${Top}' || ${$orient} === '${Bottom}'`, a, b);\nconst ifYEnc = ($orient, a, b) => ifEnc(`${$orient} !== '${Top}' && ${$orient} !== '${Bottom}'`, a, b);\nconst ifLeftTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Left}' || ${$orient} === '${Top}'`, a, b);\nconst ifTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Top}'`, a, b);\nconst ifRightExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Right}'`, a, b);\nconst ifEnc = (test, a, b) => {\n // ensure inputs are encoder objects (or null)\n a = a != null ? encoder(a) : a;\n b = b != null ? encoder(b) : b;\n if (isSimple(a) && isSimple(b)) {\n // if possible generate simple signal expression\n a = a ? a.signal || stringValue(a.value) : null;\n b = b ? b.signal || stringValue(b.value) : null;\n return {\n signal: `${test} ? (${a}) : (${b})`\n };\n } else {\n // otherwise generate rule set\n return [extend({\n test\n }, a)].concat(b || []);\n }\n};\nconst isSimple = enc => enc == null || Object.keys(enc).length === 1;\nconst ifExpr = (test, a, b) => ({\n signal: `${test} ? (${toExpr(a)}) : (${toExpr(b)})`\n});\nconst ifOrient = ($orient, t, b, l, r) => ({\n signal: (l != null ? `${$orient} === '${Left}' ? (${toExpr(l)}) : ` : '') + (b != null ? `${$orient} === '${Bottom}' ? (${toExpr(b)}) : ` : '') + (r != null ? `${$orient} === '${Right}' ? (${toExpr(r)}) : ` : '') + (t != null ? `${$orient} === '${Top}' ? (${toExpr(t)}) : ` : '') + '(null)'\n});\nconst toExpr = v => isSignal(v) ? v.signal : v == null ? null : stringValue(v);\nconst mult = (sign, value) => value === 0 ? 0 : isSignal(sign) ? {\n signal: `(${sign.signal}) * ${value}`\n} : {\n value: sign * value\n};\nconst patch = (value, base) => {\n const s = value.signal;\n return s && s.endsWith('(null)') ? {\n signal: s.slice(0, -6) + base.signal\n } : value;\n};\n\nfunction fallback(prop, config, axisConfig, style) {\n let styleProp;\n if (config && hasOwnProperty(config, prop)) {\n return config[prop];\n } else if (hasOwnProperty(axisConfig, prop)) {\n return axisConfig[prop];\n } else if (prop.startsWith('title')) {\n switch (prop) {\n case 'titleColor':\n styleProp = 'fill';\n break;\n case 'titleFont':\n case 'titleFontSize':\n case 'titleFontWeight':\n styleProp = prop[5].toLowerCase() + prop.slice(6);\n }\n return style[GuideTitleStyle][styleProp];\n } else if (prop.startsWith('label')) {\n switch (prop) {\n case 'labelColor':\n styleProp = 'fill';\n break;\n case 'labelFont':\n case 'labelFontSize':\n styleProp = prop[5].toLowerCase() + prop.slice(6);\n }\n return style[GuideLabelStyle][styleProp];\n }\n return null;\n}\nfunction keys(objects) {\n const map = {};\n for (const obj of objects) {\n if (!obj) continue;\n for (const key in obj) map[key] = 1;\n }\n return Object.keys(map);\n}\nfunction axisConfig (spec, scope) {\n var config = scope.config,\n style = config.style,\n axis = config.axis,\n band = scope.scaleType(spec.scale) === 'band' && config.axisBand,\n orient = spec.orient,\n xy,\n or,\n key;\n if (isSignal(orient)) {\n const xyKeys = keys([config.axisX, config.axisY]),\n orientKeys = keys([config.axisTop, config.axisBottom, config.axisLeft, config.axisRight]);\n xy = {};\n for (key of xyKeys) {\n xy[key] = ifX(orient, fallback(key, config.axisX, axis, style), fallback(key, config.axisY, axis, style));\n }\n or = {};\n for (key of orientKeys) {\n or[key] = ifOrient(orient.signal, fallback(key, config.axisTop, axis, style), fallback(key, config.axisBottom, axis, style), fallback(key, config.axisLeft, axis, style), fallback(key, config.axisRight, axis, style));\n }\n } else {\n xy = orient === Top || orient === Bottom ? config.axisX : config.axisY;\n or = config['axis' + orient[0].toUpperCase() + orient.slice(1)];\n }\n const result = xy || or || band ? extend({}, axis, xy, or, band) : axis;\n return result;\n}\n\nfunction axisDomain (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n orient = spec.orient;\n let enter, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('domainColor'),\n strokeCap: _('domainCap'),\n strokeDash: _('domainDash'),\n strokeDashOffset: _('domainDashOffset'),\n strokeWidth: _('domainWidth'),\n strokeOpacity: _('domainOpacity')\n });\n const pos0 = position(spec, 0);\n const pos1 = position(spec, 1);\n enter.x = update.x = ifX(orient, pos0, zero);\n enter.x2 = update.x2 = ifX(orient, pos1);\n enter.y = update.y = ifY(orient, pos0, zero);\n enter.y2 = update.y2 = ifY(orient, pos1);\n return guideMark({\n type: RuleMark,\n role: AxisDomainRole,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction position(spec, pos) {\n return {\n scale: spec.scale,\n range: pos\n };\n}\n\nfunction axisGrid (spec, config, userEncode, dataRef, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n vscale = spec.gridScale,\n sign = getSign(orient, 1, -1),\n offset = offsetValue(spec.offset, sign);\n let enter, exit, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: exit = {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gridColor'),\n strokeCap: _('gridCap'),\n strokeDash: _('gridDash'),\n strokeDashOffset: _('gridDashOffset'),\n strokeOpacity: _('gridOpacity'),\n strokeWidth: _('gridWidth')\n });\n const tickPos = {\n scale: spec.scale,\n field: Value,\n band: band.band,\n extra: band.extra,\n offset: band.offset,\n round: _('tickRound')\n };\n const sz = ifX(orient, {\n signal: 'height'\n }, {\n signal: 'width'\n });\n const gridStart = vscale ? {\n scale: vscale,\n range: 0,\n mult: sign,\n offset: offset\n } : {\n value: 0,\n offset: offset\n };\n const gridEnd = vscale ? {\n scale: vscale,\n range: 1,\n mult: sign,\n offset: offset\n } : extend(sz, {\n mult: sign,\n offset: offset\n });\n enter.x = update.x = ifX(orient, tickPos, gridStart);\n enter.y = update.y = ifY(orient, tickPos, gridStart);\n enter.x2 = update.x2 = ifY(orient, gridEnd);\n enter.y2 = update.y2 = ifX(orient, gridEnd);\n exit.x = ifX(orient, tickPos);\n exit.y = ifY(orient, tickPos);\n return guideMark({\n type: RuleMark,\n role: AxisGridRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction offsetValue(offset, sign) {\n if (sign === 1) ; else if (!isObject(offset)) {\n offset = isSignal(sign) ? {\n signal: `(${sign.signal}) * (${offset || 0})`\n } : sign * (offset || 0);\n } else {\n let entry = offset = extend({}, offset);\n while (entry.mult != null) {\n if (!isObject(entry.mult)) {\n entry.mult = isSignal(sign) // no offset if sign === 1\n ? {\n signal: `(${entry.mult}) * (${sign.signal})`\n } : entry.mult * sign;\n return offset;\n } else {\n entry = entry.mult = extend({}, entry.mult);\n }\n }\n entry.mult = sign;\n }\n return offset;\n}\n\nfunction axisTicks (spec, config, userEncode, dataRef, size, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n sign = getSign(orient, -1, 1);\n let enter, exit, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: exit = {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('tickColor'),\n strokeCap: _('tickCap'),\n strokeDash: _('tickDash'),\n strokeDashOffset: _('tickDashOffset'),\n strokeOpacity: _('tickOpacity'),\n strokeWidth: _('tickWidth')\n });\n const tickSize = encoder(size);\n tickSize.mult = sign;\n const tickPos = {\n scale: spec.scale,\n field: Value,\n band: band.band,\n extra: band.extra,\n offset: band.offset,\n round: _('tickRound')\n };\n update.y = enter.y = ifX(orient, zero, tickPos);\n update.y2 = enter.y2 = ifX(orient, tickSize);\n exit.x = ifX(orient, tickPos);\n update.x = enter.x = ifY(orient, zero, tickPos);\n update.x2 = enter.x2 = ifY(orient, tickSize);\n exit.y = ifY(orient, tickPos);\n return guideMark({\n type: RuleMark,\n role: AxisTickRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction flushExpr(scale, threshold, a, b, c) {\n return {\n signal: 'flush(range(\"' + scale + '\"), ' + 'scale(\"' + scale + '\", datum.value), ' + threshold + ',' + a + ',' + b + ',' + c + ')'\n };\n}\nfunction axisLabels (spec, config, userEncode, dataRef, size, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n scale = spec.scale,\n sign = getSign(orient, -1, 1),\n flush = deref(_('labelFlush')),\n flushOffset = deref(_('labelFlushOffset')),\n labelAlign = _('labelAlign'),\n labelBaseline = _('labelBaseline');\n let flushOn = flush === 0 || !!flush,\n update;\n const tickSize = encoder(size);\n tickSize.mult = sign;\n tickSize.offset = encoder(_('labelPadding') || 0);\n tickSize.offset.mult = sign;\n const tickPos = {\n scale: scale,\n field: Value,\n band: 0.5,\n offset: extendOffset(band.offset, _('labelOffset'))\n };\n const align = ifX(orient, flushOn ? flushExpr(scale, flush, '\"left\"', '\"right\"', '\"center\"') : {\n value: 'center'\n }, ifRight(orient, 'left', 'right'));\n const baseline = ifX(orient, ifTop(orient, 'bottom', 'top'), flushOn ? flushExpr(scale, flush, '\"top\"', '\"bottom\"', '\"middle\"') : {\n value: 'middle'\n });\n const offsetExpr = flushExpr(scale, flush, `-(${flushOffset})`, flushOffset, 0);\n flushOn = flushOn && flushOffset;\n const enter = {\n opacity: zero,\n x: ifX(orient, tickPos, tickSize),\n y: ifY(orient, tickPos, tickSize)\n };\n const encode = {\n enter: enter,\n update: update = {\n opacity: one,\n text: {\n field: Label\n },\n x: enter.x,\n y: enter.y,\n align,\n baseline\n },\n exit: {\n opacity: zero,\n x: enter.x,\n y: enter.y\n }\n };\n addEncoders(encode, {\n dx: !labelAlign && flushOn ? ifX(orient, offsetExpr) : null,\n dy: !labelBaseline && flushOn ? ifY(orient, offsetExpr) : null\n });\n addEncoders(encode, {\n angle: _('labelAngle'),\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontWeight: _('labelFontWeight'),\n fontStyle: _('labelFontStyle'),\n limit: _('labelLimit'),\n lineHeight: _('labelLineHeight')\n }, {\n align: labelAlign,\n baseline: labelBaseline\n });\n const bound = _('labelBound');\n let overlap = _('labelOverlap');\n\n // if overlap method or bound defined, request label overlap removal\n overlap = overlap || bound ? {\n separation: _('labelSeparation'),\n method: overlap,\n order: 'datum.index',\n bound: bound ? {\n scale,\n orient,\n tolerance: bound\n } : null\n } : undefined;\n if (update.align !== align) {\n update.align = patch(update.align, align);\n }\n if (update.baseline !== baseline) {\n update.baseline = patch(update.baseline, baseline);\n }\n return guideMark({\n type: TextMark,\n role: AxisLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: dataRef,\n encode,\n overlap\n }, userEncode);\n}\n\nfunction axisTitle (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n sign = getSign(orient, -1, 1);\n let enter, update;\n const encode = {\n enter: enter = {\n opacity: zero,\n anchor: encoder(_('titleAnchor', null)),\n align: {\n signal: alignExpr$1\n }\n },\n update: update = extend({}, enter, {\n opacity: one,\n text: encoder(spec.title)\n }),\n exit: {\n opacity: zero\n }\n };\n const titlePos = {\n signal: `lerp(range(\"${spec.scale}\"), ${anchorExpr(0, 1, 0.5)})`\n };\n update.x = ifX(orient, titlePos);\n update.y = ifY(orient, titlePos);\n enter.angle = ifX(orient, zero, mult(sign, 90));\n enter.baseline = ifX(orient, ifTop(orient, Bottom, Top), {\n value: Bottom\n });\n update.angle = enter.angle;\n update.baseline = enter.baseline;\n addEncoders(encode, {\n fill: _('titleColor'),\n fillOpacity: _('titleOpacity'),\n font: _('titleFont'),\n fontSize: _('titleFontSize'),\n fontStyle: _('titleFontStyle'),\n fontWeight: _('titleFontWeight'),\n limit: _('titleLimit'),\n lineHeight: _('titleLineHeight')\n }, {\n // require update\n align: _('titleAlign'),\n angle: _('titleAngle'),\n baseline: _('titleBaseline')\n });\n autoLayout(_, orient, encode, userEncode);\n encode.update.align = patch(encode.update.align, enter.align);\n encode.update.angle = patch(encode.update.angle, enter.angle);\n encode.update.baseline = patch(encode.update.baseline, enter.baseline);\n return guideMark({\n type: TextMark,\n role: AxisTitleRole,\n style: GuideTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction autoLayout(_, orient, encode, userEncode) {\n const auto = (value, dim) => value != null ? (encode.update[dim] = patch(encoder(value), encode.update[dim]), false) : !has(dim, userEncode) ? true : false;\n const autoY = auto(_('titleX'), 'x'),\n autoX = auto(_('titleY'), 'y');\n encode.enter.auto = autoX === autoY ? encoder(autoX) : ifX(orient, encoder(autoX), encoder(autoY));\n}\n\nfunction parseAxis (spec, scope) {\n const config = axisConfig(spec, scope),\n encode = spec.encode || {},\n axisEncode = encode.axis || {},\n name = axisEncode.name || undefined,\n interactive = axisEncode.interactive,\n style = axisEncode.style,\n _ = lookup(spec, config),\n band = tickBand(_);\n\n // single-element data source for axis group\n const datum = {\n scale: spec.scale,\n ticks: !!_('ticks'),\n labels: !!_('labels'),\n grid: !!_('grid'),\n domain: !!_('domain'),\n title: spec.title != null\n };\n const dataRef = ref(scope.add(Collect({}, [datum])));\n\n // data source for axis ticks\n const ticksRef = ref(scope.add(AxisTicks({\n scale: scope.scaleRef(spec.scale),\n extra: scope.property(band.extra),\n count: scope.objectProperty(spec.tickCount),\n values: scope.objectProperty(spec.values),\n minstep: scope.property(spec.tickMinStep),\n formatType: scope.property(spec.formatType),\n formatSpecifier: scope.property(spec.format)\n })));\n\n // generate axis marks\n const children = [];\n let size;\n\n // include axis gridlines if requested\n if (datum.grid) {\n children.push(axisGrid(spec, config, encode.grid, ticksRef, band));\n }\n\n // include axis ticks if requested\n if (datum.ticks) {\n size = _('tickSize');\n children.push(axisTicks(spec, config, encode.ticks, ticksRef, size, band));\n }\n\n // include axis labels if requested\n if (datum.labels) {\n size = datum.ticks ? size : 0;\n children.push(axisLabels(spec, config, encode.labels, ticksRef, size, band));\n }\n\n // include axis domain path if requested\n if (datum.domain) {\n children.push(axisDomain(spec, config, encode.domain, dataRef));\n }\n\n // include axis title if defined\n if (datum.title) {\n children.push(axisTitle(spec, config, encode.title, dataRef));\n }\n\n // parse axis specification\n return parseMark(guideGroup({\n role: AxisRole,\n from: dataRef,\n encode: extendEncode(buildAxisEncode(_, spec), axisEncode, Skip),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\nfunction buildAxisEncode(_, spec) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n offset: _('offset') || 0,\n position: value(spec.position, 0),\n titlePadding: _('titlePadding'),\n minExtent: _('minExtent'),\n maxExtent: _('maxExtent'),\n range: {\n signal: `abs(span(range(\"${spec.scale}\")))`\n },\n translate: _('translate'),\n // accessibility support\n format: spec.format,\n formatType: spec.formatType\n });\n return encode;\n}\n\nfunction parseScope (spec, scope, preprocessed) {\n const signals = array(spec.signals),\n scales = array(spec.scales);\n\n // parse signal definitions, if not already preprocessed\n if (!preprocessed) signals.forEach(_ => parseSignal(_, scope));\n\n // parse cartographic projection definitions\n array(spec.projections).forEach(_ => parseProjection(_, scope));\n\n // initialize scale references\n scales.forEach(_ => initScale(_, scope));\n\n // parse data sources\n array(spec.data).forEach(_ => parseData(_, scope));\n\n // parse scale definitions\n scales.forEach(_ => parseScale(_, scope));\n\n // parse signal updates\n (preprocessed || signals).forEach(_ => parseSignalUpdates(_, scope));\n\n // parse axis definitions\n array(spec.axes).forEach(_ => parseAxis(_, scope));\n\n // parse mark definitions\n array(spec.marks).forEach(_ => parseMark(_, scope));\n\n // parse legend definitions\n array(spec.legends).forEach(_ => parseLegend(_, scope));\n\n // parse title, if defined\n if (spec.title) parseTitle(spec.title, scope);\n\n // parse collected lambda (anonymous) expressions\n scope.parseLambdas();\n return scope;\n}\n\nconst rootEncode = spec => extendEncode({\n enter: {\n x: {\n value: 0\n },\n y: {\n value: 0\n }\n },\n update: {\n width: {\n signal: 'width'\n },\n height: {\n signal: 'height'\n }\n }\n}, spec);\nfunction parseView(spec, scope) {\n const config = scope.config;\n\n // add scenegraph root\n const root = ref(scope.root = scope.add(operator()));\n\n // parse top-level signal definitions\n const signals = collectSignals(spec, config);\n signals.forEach(_ => parseSignal(_, scope));\n\n // assign description, event, legend, and locale configuration\n scope.description = spec.description || config.description;\n scope.eventConfig = config.events;\n scope.legends = scope.objectProperty(config.legend && config.legend.layout);\n scope.locale = config.locale;\n\n // store root group item\n const input = scope.add(Collect());\n\n // encode root group item\n const encode = scope.add(Encode(parseEncode(rootEncode(spec.encode), GroupMark, FrameRole, spec.style, scope, {\n pulse: ref(input)\n })));\n\n // perform view layout\n const parent = scope.add(ViewLayout({\n layout: scope.objectProperty(spec.layout),\n legends: scope.legends,\n autosize: scope.signalRef('autosize'),\n mark: root,\n pulse: ref(encode)\n }));\n scope.operators.pop();\n\n // parse remainder of specification\n scope.pushState(ref(encode), ref(parent), null);\n parseScope(spec, scope, signals);\n scope.operators.push(parent);\n\n // bound / render / sieve root item\n let op = scope.add(Bound({\n mark: root,\n pulse: ref(parent)\n }));\n op = scope.add(Render({\n pulse: ref(op)\n }));\n op = scope.add(Sieve({\n pulse: ref(op)\n }));\n\n // track metadata for root item\n scope.addData('root', new DataScope(scope, input, input, op));\n return scope;\n}\nfunction signalObject(name, value) {\n return value && value.signal ? {\n name,\n update: value.signal\n } : {\n name,\n value\n };\n}\n\n/**\n * Collect top-level signals, merging values as needed. Signals\n * defined in the config signals arrays are added only if that\n * signal is not explicitly defined in the specification.\n * Built-in signals (autosize, background, padding, width, height)\n * receive special treatment. They are initialized using the\n * top-level spec property, or, if undefined in the spec, using\n * the corresponding top-level config property. If this property\n * is a signal reference object, the signal expression maps to the\n * signal 'update' property. If the spec's top-level signal array\n * contains an entry that matches a built-in signal, that entry\n * will be merged with the built-in specification, potentially\n * overwriting existing 'value' or 'update' properties.\n */\nfunction collectSignals(spec, config) {\n const _ = name => value(spec[name], config[name]),\n signals = [signalObject('background', _('background')), signalObject('autosize', parseAutosize(_('autosize'))), signalObject('padding', parsePadding(_('padding'))), signalObject('width', _('width') || 0), signalObject('height', _('height') || 0)],\n pre = signals.reduce((p, s) => (p[s.name] = s, p), {}),\n map = {};\n\n // add spec signal array\n array(spec.signals).forEach(s => {\n if (hasOwnProperty(pre, s.name)) {\n // merge if built-in signal\n s = extend(pre[s.name], s);\n } else {\n // otherwise add to signal list\n signals.push(s);\n }\n map[s.name] = s;\n });\n\n // add config signal array\n array(config.signals).forEach(s => {\n if (!hasOwnProperty(map, s.name) && !hasOwnProperty(pre, s.name)) {\n // add to signal list if not already defined\n signals.push(s);\n }\n });\n return signals;\n}\n\nfunction Scope(config, options) {\n this.config = config || {};\n this.options = options || {};\n this.bindings = [];\n this.field = {};\n this.signals = {};\n this.lambdas = {};\n this.scales = {};\n this.events = {};\n this.data = {};\n this.streams = [];\n this.updates = [];\n this.operators = [];\n this.eventConfig = null;\n this.locale = null;\n this._id = 0;\n this._subid = 0;\n this._nextsub = [0];\n this._parent = [];\n this._encode = [];\n this._lookup = [];\n this._markpath = [];\n}\nfunction Subscope(scope) {\n this.config = scope.config;\n this.options = scope.options;\n this.legends = scope.legends;\n this.field = Object.create(scope.field);\n this.signals = Object.create(scope.signals);\n this.lambdas = Object.create(scope.lambdas);\n this.scales = Object.create(scope.scales);\n this.events = Object.create(scope.events);\n this.data = Object.create(scope.data);\n this.streams = [];\n this.updates = [];\n this.operators = [];\n this._id = 0;\n this._subid = ++scope._nextsub[0];\n this._nextsub = scope._nextsub;\n this._parent = scope._parent.slice();\n this._encode = scope._encode.slice();\n this._lookup = scope._lookup.slice();\n this._markpath = scope._markpath;\n}\nScope.prototype = Subscope.prototype = {\n parse(spec) {\n return parseScope(spec, this);\n },\n fork() {\n return new Subscope(this);\n },\n isSubscope() {\n return this._subid > 0;\n },\n toRuntime() {\n this.finish();\n return {\n description: this.description,\n operators: this.operators,\n streams: this.streams,\n updates: this.updates,\n bindings: this.bindings,\n eventConfig: this.eventConfig,\n locale: this.locale\n };\n },\n id() {\n return (this._subid ? this._subid + ':' : 0) + this._id++;\n },\n add(op) {\n this.operators.push(op);\n op.id = this.id();\n // if pre-registration references exist, resolve them now\n if (op.refs) {\n op.refs.forEach(ref => {\n ref.$ref = op.id;\n });\n op.refs = null;\n }\n return op;\n },\n proxy(op) {\n const vref = op instanceof Entry ? ref(op) : op;\n return this.add(Proxy({\n value: vref\n }));\n },\n addStream(stream) {\n this.streams.push(stream);\n stream.id = this.id();\n return stream;\n },\n addUpdate(update) {\n this.updates.push(update);\n return update;\n },\n // Apply metadata\n finish() {\n let name, ds;\n\n // annotate root\n if (this.root) this.root.root = true;\n\n // annotate signals\n for (name in this.signals) {\n this.signals[name].signal = name;\n }\n\n // annotate scales\n for (name in this.scales) {\n this.scales[name].scale = name;\n }\n\n // annotate data sets\n function annotate(op, name, type) {\n let data, list;\n if (op) {\n data = op.data || (op.data = {});\n list = data[name] || (data[name] = []);\n list.push(type);\n }\n }\n for (name in this.data) {\n ds = this.data[name];\n annotate(ds.input, name, 'input');\n annotate(ds.output, name, 'output');\n annotate(ds.values, name, 'values');\n for (const field in ds.index) {\n annotate(ds.index[field], name, 'index:' + field);\n }\n }\n return this;\n },\n // ----\n\n pushState(encode, parent, lookup) {\n this._encode.push(ref(this.add(Sieve({\n pulse: encode\n }))));\n this._parent.push(parent);\n this._lookup.push(lookup ? ref(this.proxy(lookup)) : null);\n this._markpath.push(-1);\n },\n popState() {\n this._encode.pop();\n this._parent.pop();\n this._lookup.pop();\n this._markpath.pop();\n },\n parent() {\n return peek(this._parent);\n },\n encode() {\n return peek(this._encode);\n },\n lookup() {\n return peek(this._lookup);\n },\n markpath() {\n const p = this._markpath;\n return ++p[p.length - 1];\n },\n // ----\n\n fieldRef(field, name) {\n if (isString(field)) return fieldRef$1(field, name);\n if (!field.signal) {\n error('Unsupported field reference: ' + stringValue(field));\n }\n const s = field.signal;\n let f = this.field[s];\n if (!f) {\n const params = {\n name: this.signalRef(s)\n };\n if (name) params.as = name;\n this.field[s] = f = ref(this.add(Field(params)));\n }\n return f;\n },\n compareRef(cmp) {\n let signal = false;\n const check = _ => isSignal(_) ? (signal = true, this.signalRef(_.signal)) : isExpr$1(_) ? (signal = true, this.exprRef(_.expr)) : _;\n const fields = array(cmp.field).map(check),\n orders = array(cmp.order).map(check);\n return signal ? ref(this.add(Compare({\n fields: fields,\n orders: orders\n }))) : compareRef(fields, orders);\n },\n keyRef(fields, flat) {\n let signal = false;\n const check = _ => isSignal(_) ? (signal = true, ref(sig[_.signal])) : _;\n const sig = this.signals;\n fields = array(fields).map(check);\n return signal ? ref(this.add(Key({\n fields: fields,\n flat: flat\n }))) : keyRef(fields, flat);\n },\n sortRef(sort) {\n if (!sort) return sort;\n\n // including id ensures stable sorting\n const a = aggrField(sort.op, sort.field),\n o = sort.order || Ascending;\n return o.signal ? ref(this.add(Compare({\n fields: a,\n orders: this.signalRef(o.signal)\n }))) : compareRef(a, o);\n },\n // ----\n\n event(source, type) {\n const key = source + ':' + type;\n if (!this.events[key]) {\n const id = this.id();\n this.streams.push({\n id: id,\n source: source,\n type: type\n });\n this.events[key] = id;\n }\n return this.events[key];\n },\n // ----\n\n hasOwnSignal(name) {\n return hasOwnProperty(this.signals, name);\n },\n addSignal(name, value) {\n if (this.hasOwnSignal(name)) {\n error('Duplicate signal name: ' + stringValue(name));\n }\n const op = value instanceof Entry ? value : this.add(operator(value));\n return this.signals[name] = op;\n },\n getSignal(name) {\n if (!this.signals[name]) {\n error('Unrecognized signal name: ' + stringValue(name));\n }\n return this.signals[name];\n },\n signalRef(s) {\n if (this.signals[s]) {\n return ref(this.signals[s]);\n } else if (!hasOwnProperty(this.lambdas, s)) {\n this.lambdas[s] = this.add(operator(null));\n }\n return ref(this.lambdas[s]);\n },\n parseLambdas() {\n const code = Object.keys(this.lambdas);\n for (let i = 0, n = code.length; i < n; ++i) {\n const s = code[i],\n e = parseExpression(s, this),\n op = this.lambdas[s];\n op.params = e.$params;\n op.update = e.$expr;\n }\n },\n property(spec) {\n return spec && spec.signal ? this.signalRef(spec.signal) : spec;\n },\n objectProperty(spec) {\n return !spec || !isObject(spec) ? spec : this.signalRef(spec.signal || propertyLambda(spec));\n },\n exprRef(code, name) {\n const params = {\n expr: parseExpression(code, this)\n };\n if (name) params.expr.$name = name;\n return ref(this.add(Expression(params)));\n },\n addBinding(name, bind) {\n if (!this.bindings) {\n error('Nested signals do not support binding: ' + stringValue(name));\n }\n this.bindings.push(extend({\n signal: name\n }, bind));\n },\n // ----\n\n addScaleProj(name, transform) {\n if (hasOwnProperty(this.scales, name)) {\n error('Duplicate scale or projection name: ' + stringValue(name));\n }\n this.scales[name] = this.add(transform);\n },\n addScale(name, params) {\n this.addScaleProj(name, Scale(params));\n },\n addProjection(name, params) {\n this.addScaleProj(name, Projection(params));\n },\n getScale(name) {\n if (!this.scales[name]) {\n error('Unrecognized scale name: ' + stringValue(name));\n }\n return this.scales[name];\n },\n scaleRef(name) {\n return ref(this.getScale(name));\n },\n scaleType(name) {\n return this.getScale(name).params.type;\n },\n projectionRef(name) {\n return this.scaleRef(name);\n },\n projectionType(name) {\n return this.scaleType(name);\n },\n // ----\n\n addData(name, dataScope) {\n if (hasOwnProperty(this.data, name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n return this.data[name] = dataScope;\n },\n getData(name) {\n if (!this.data[name]) {\n error('Undefined data set name: ' + stringValue(name));\n }\n return this.data[name];\n },\n addDataPipeline(name, entries) {\n if (hasOwnProperty(this.data, name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n return this.addData(name, DataScope.fromEntries(this, entries));\n }\n};\nfunction propertyLambda(spec) {\n return (isArray(spec) ? arrayLambda : objectLambda)(spec);\n}\nfunction arrayLambda(array) {\n const n = array.length;\n let code = '[';\n for (let i = 0; i < n; ++i) {\n const value = array[i];\n code += (i > 0 ? ',' : '') + (isObject(value) ? value.signal || propertyLambda(value) : stringValue(value));\n }\n return code + ']';\n}\nfunction objectLambda(obj) {\n let code = '{',\n i = 0,\n key,\n value;\n for (key in obj) {\n value = obj[key];\n code += (++i > 1 ? ',' : '') + stringValue(key) + ':' + (isObject(value) ? value.signal || propertyLambda(value) : stringValue(value));\n }\n return code + '}';\n}\n\n/**\n * Standard configuration defaults for Vega specification parsing.\n * Users can provide their own (sub-)set of these default values\n * by passing in a config object to the top-level parse method.\n */\nfunction defaults () {\n const defaultFont = 'sans-serif',\n defaultSymbolSize = 30,\n defaultStrokeWidth = 2,\n defaultColor = '#4c78a8',\n black = '#000',\n gray = '#888',\n lightGray = '#ddd';\n return {\n // default visualization description\n description: 'Vega visualization',\n // default padding around visualization\n padding: 0,\n // default for automatic sizing; options: 'none', 'pad', 'fit'\n // or provide an object (e.g., {'type': 'pad', 'resize': true})\n autosize: 'pad',\n // default view background color\n // covers the entire view component\n background: null,\n // default event handling configuration\n // preventDefault for view-sourced event types except 'wheel'\n events: {\n defaults: {\n allow: ['wheel']\n }\n },\n // defaults for top-level group marks\n // accepts mark properties (fill, stroke, etc)\n // covers the data rectangle within group width/height\n group: null,\n // defaults for basic mark types\n // each subset accepts mark properties (fill, stroke, etc)\n mark: null,\n arc: {\n fill: defaultColor\n },\n area: {\n fill: defaultColor\n },\n image: null,\n line: {\n stroke: defaultColor,\n strokeWidth: defaultStrokeWidth\n },\n path: {\n stroke: defaultColor\n },\n rect: {\n fill: defaultColor\n },\n rule: {\n stroke: black\n },\n shape: {\n stroke: defaultColor\n },\n symbol: {\n fill: defaultColor,\n size: 64\n },\n text: {\n fill: black,\n font: defaultFont,\n fontSize: 11\n },\n trail: {\n fill: defaultColor,\n size: defaultStrokeWidth\n },\n // style definitions\n style: {\n // axis & legend labels\n 'guide-label': {\n fill: black,\n font: defaultFont,\n fontSize: 10\n },\n // axis & legend titles\n 'guide-title': {\n fill: black,\n font: defaultFont,\n fontSize: 11,\n fontWeight: 'bold'\n },\n // headers, including chart title\n 'group-title': {\n fill: black,\n font: defaultFont,\n fontSize: 13,\n fontWeight: 'bold'\n },\n // chart subtitle\n 'group-subtitle': {\n fill: black,\n font: defaultFont,\n fontSize: 12\n },\n // defaults for styled point marks in Vega-Lite\n point: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'circle'\n },\n circle: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth\n },\n square: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'square'\n },\n // defaults for styled group marks in Vega-Lite\n cell: {\n fill: 'transparent',\n stroke: lightGray\n },\n view: {\n fill: 'transparent'\n }\n },\n // defaults for title\n title: {\n orient: 'top',\n anchor: 'middle',\n offset: 4,\n subtitlePadding: 3\n },\n // defaults for axes\n axis: {\n minExtent: 0,\n maxExtent: 200,\n bandPosition: 0.5,\n domain: true,\n domainWidth: 1,\n domainColor: gray,\n grid: false,\n gridWidth: 1,\n gridColor: lightGray,\n labels: true,\n labelAngle: 0,\n labelLimit: 180,\n labelOffset: 0,\n labelPadding: 2,\n ticks: true,\n tickColor: gray,\n tickOffset: 0,\n tickRound: true,\n tickSize: 5,\n tickWidth: 1,\n titlePadding: 4\n },\n // correction for centering bias\n axisBand: {\n tickOffset: -0.5\n },\n // defaults for cartographic projection\n projection: {\n type: 'mercator'\n },\n // defaults for legends\n legend: {\n orient: 'right',\n padding: 0,\n gridAlign: 'each',\n columnPadding: 10,\n rowPadding: 2,\n symbolDirection: 'vertical',\n gradientDirection: 'vertical',\n gradientLength: 200,\n gradientThickness: 16,\n gradientStrokeColor: lightGray,\n gradientStrokeWidth: 0,\n gradientLabelOffset: 2,\n labelAlign: 'left',\n labelBaseline: 'middle',\n labelLimit: 160,\n labelOffset: 4,\n labelOverlap: true,\n symbolLimit: 30,\n symbolType: 'circle',\n symbolSize: 100,\n symbolOffset: 0,\n symbolStrokeWidth: 1.5,\n symbolBaseFillColor: 'transparent',\n symbolBaseStrokeColor: gray,\n titleLimit: 180,\n titleOrient: 'top',\n titlePadding: 5,\n layout: {\n offset: 18,\n direction: 'horizontal',\n left: {\n direction: 'vertical'\n },\n right: {\n direction: 'vertical'\n }\n }\n },\n // defaults for scale ranges\n range: {\n category: {\n scheme: 'tableau10'\n },\n ordinal: {\n scheme: 'blues'\n },\n heatmap: {\n scheme: 'yellowgreenblue'\n },\n ramp: {\n scheme: 'blues'\n },\n diverging: {\n scheme: 'blueorange',\n extent: [1, 0]\n },\n symbol: ['circle', 'square', 'triangle-up', 'cross', 'diamond', 'triangle-right', 'triangle-down', 'triangle-left']\n }\n };\n}\n\nfunction parse (spec, config, options) {\n if (!isObject(spec)) {\n error('Input Vega specification must be an object.');\n }\n config = mergeConfig(defaults(), config, spec.config);\n return parseView(spec, new Scope(config, options)).toRuntime();\n}\n\nexport { AxisDomainRole, AxisGridRole, AxisLabelRole, AxisRole, AxisTickRole, AxisTitleRole, DataScope, FrameRole, LegendEntryRole, LegendLabelRole, LegendRole, LegendSymbolRole, LegendTitleRole, MarkRole, Scope, ScopeRole, defaults as config, parse, parseSignal as signal, parseSignalUpdates as signalUpdates, parseStream as stream };\n","// -- Transforms -----\n\nimport {extend} from 'vega-util';\nimport {transforms} from 'vega-dataflow';\nimport * as tx from 'vega-transforms';\nimport * as vtx from 'vega-view-transforms';\nimport * as encode from 'vega-encode';\nimport * as geo from 'vega-geo';\nimport * as force from 'vega-force';\nimport * as tree from 'vega-hierarchy';\nimport * as label from 'vega-label';\nimport * as reg from 'vega-regression';\nimport * as voronoi from 'vega-voronoi';\nimport * as wordcloud from 'vega-wordcloud';\nimport * as xf from 'vega-crossfilter';\nextend(\n transforms,\n tx, vtx, encode, geo, force, label, tree, reg, voronoi, wordcloud, xf\n);\n\n\n// -- Exports -----\n\nexport {version} from './package.json';\n\nexport * from 'vega-statistics';\n\nexport * from 'vega-time';\n\nexport * from 'vega-util';\n\nexport * from 'vega-loader';\n\nexport * from 'vega-scenegraph';\n\nexport {\n Dataflow,\n EventStream,\n Parameters,\n Pulse,\n MultiPulse,\n Operator,\n Transform,\n changeset,\n ingest,\n isTuple,\n definition,\n transform,\n transforms,\n tupleid\n} from 'vega-dataflow';\n\nexport {\n scale,\n scheme,\n interpolate,\n interpolateColors,\n interpolateRange,\n quantizeInterpolator\n} from 'vega-scale';\n\nexport {\n projection\n} from 'vega-projection';\n\nexport {\n View\n} from 'vega-view';\n\nexport {\n numberFormatDefaultLocale as formatLocale,\n timeFormatDefaultLocale as timeFormatLocale,\n locale,\n defaultLocale,\n resetDefaultLocale\n} from 'vega-format';\n\nexport {\n expressionFunction\n} from 'vega-functions';\n\nexport {\n parse\n} from 'vega-parser';\n\nexport {\n context as runtimeContext\n} from 'vega-runtime';\n\nexport {\n codegenExpression,\n parseExpression\n} from 'vega-expression';\n\nexport {\n parseSelector\n} from 'vega-event-selector';\n"],"names":["accessor","fn","fields","name","fname","accessorName","accessorFields","getter","path","length","get1","getN","field","obj","len","i","error","message","Error","splitAccessPath","p","n","j","c","q","b","s","push","substring","opt","get","id","identity","_","zero","one","truthy","falsy","log$1","method","level","input","args","concat","slice","call","console","apply","None","Error$1","Warn","Info","Debug","logger","handler","arguments","undefined","this","warn","info","debug","isArray","Array","isObject","Object","isLegalKey","key","mergeConfig","_len","configs","_key","reduce","out","source","signals","mergeNamed","r","layout","writeConfig","output","value","recurse","k","o","a","map","add","forEach","peek","array","toNumber","exp","sign","x","Math","log","symlog","log1p","abs","symexp","expm1","pow","exponent","pan","domain","delta","lift","ground","d0","d1","dd","panLinear","panLog","panPow","panSymlog","constant","zoom","anchor","scale","da","zoomLinear","zoomLog","zoomPow","zoomSymlog","quarter","date","Date","getMonth","utcquarter","getUTCMonth","clampRange","range","min","max","span","lo","hi","isFunction","DESCENDING","compare","orders","ord","fmap","gen","comparator","f","keys","ascending","u","v","compare1","compareN","order","debounce","delay","tid","e","clearTimeout","setTimeout","extend","extent","extentIndex","hop","prototype","hasOwnProperty","has","object","property","NULL","fastmap","test","has$1","size","empty","set","delete","clear","clean","next","flush","threshold","left","right","center","t","l","inherits","child","parent","members","proto","create","defineProperty","writable","enumerable","configurable","inrange","r0","r1","isBoolean","isDate","toString","isIterable","Symbol","iterator","isNumber","isRegExp","isString","flat","replace","lerp","frac","lruCache","maxsize","curr","prev","update","merge","array0","array1","n0","n1","merged","constructor","i0","i1","repeat","str","reps","pad","padchar","align","ceil","$","JSON","stringify","toBoolean","defaultParser","parse","toDate","parser","toSet","truncate","ellipsis","visitArray","filter","visitor","YEAR","QUARTER","MONTH","WEEK","DATE","DAY","DAYOFYEAR","HOURS","MINUTES","SECONDS","MILLISECONDS","TIME_UNITS","UNITS","timeUnits","units","m","unit","sort","defaultSpecifiers","timeUnitSpecifier","specifiers","end","fmt","start","join","trim","t0","localYear","y","setFullYear","setMonth","setDate","setHours","dayofyear","d","localDayOfYear","week","localWeekNum","timeDay","count","getFullYear","timeWeek","localFirst","getDay","localDate","H","M","S","L","utcdayofyear","utcDayOfYear","utcweek","utcWeekNum","UTC","getUTCFullYear","utcDay","utcWeek","utcFirst","setTime","getUTCDay","utcDate","setUTCFullYear","floor","step","inv","newDate","phase","getUnit","year","weekday","day","firstDay","localGet","getDate","getHours","getMinutes","getSeconds","getMilliseconds","localInv","w","timeFloor","utcGet","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","utcInv","utcFloor","timeIntervals","timeYear","timeMonth","every","timeHour","timeMinute","timeSecond","timeMillisecond","utcIntervals","utcYear","utcMonth","utcHour","utcMinute","utcSecond","utcMillisecond","timeInterval","utcInterval","offset","ival","timeOffset","utcOffset","sequence","stop","timeSequence","utcSequence","durationSecond","durationMinute","durationHour","durationDay","durationMonth","durationYear","Milli","Seconds","Minutes","Hours","Day","Month","Year","intervals","bin","ext","maxbins","target","bisector","tickStep","memoize","cache","spec","numberLocale","locale","format","formatPrefix","formatFloat","formatSpecifier","precision","type","numberFormat","decimalChar","dec","indexOf","idx","lastIndexOf","charCodeAt","rightmostDigit","formatSpan","specifier","isNaN","precisionPrefix","precisionRound","precisionFixed","defaultNumberLocale","defaultTimeLocale","resetNumberFormatDefaultLocale","numberFormatLocale","definition","formatLocale","numberFormatDefaultLocale","timeMultiFormat","interval","second","minute","hour","month","timeLocale","timeFormat","utcFormat","timeParse","utcParse","resetTimeFormatDefaultLocale","timeFormatLocale","timeFormatLocale$1","timeFormatDefaultLocale","createLocale","number","time","numberSpec","timeSpec","defaultLocale","protocol_re","allowed_re","whitespace_re","fileProtocol","async","load","uri","options","sanitize","url","href","localFile","file","http","fileAccess","result","isFile","loadFile","base","isAllowed","stringValue","hasProtocol","baseURL","startsWith","endsWith","mode","defaultProtocol","rel","context","crossOrigin","fileLoader","fs","filename","Promise","accept","reject","readFile","data","fileReject","httpLoader","fetch","response","ok","text","status","statusText","httpReject","isValid","Number","typeParsers","boolean","integer","string","unknown","typeTests","isInteger","typeList","inferType","values","inferTypes","types","delimitedFormat","delimiter","delim","dsv","responseType","header","dsvFormat","json","prop","Buffer","isBuffer","copy","parseJSON","filters","interior","exterior","topojson","feature","mesh","objects","features","csv","tsv","formats","reader","read","schema","timeParser","utcParser","datum","columns","parsers","parts","pattern","split","loader","loaderFactory","UniqueList","idFunc","list","ids","remove","splice","asyncCallback","df","callback","err","TUPLE_ID_KEY","TUPLE_ID","isTuple","tupleid","setid","ingest$1","derive","rederive","stableCompare","cmp","isChangeSet","changeset","rem","mod","remp","modp","reflow","insert","modify","tuple","encode","pulse","tuples","cur","modifies","CACHE","Parameters","index","force","modified","OP_ID","NO_PARAMS","Operator","init","params","react","stamp","rank","qrank","flags","_update","parameters","flag","bit","state","targets","_targets","skip","initonly","argval","_argval","argops","_argops","deps","op","marshall","item","detach","evaluate","StopPropagation","run","rv","STREAM_ID","EventStream","receive","_filter","_apply","stream","consume","_consume","evt","val","trg","preventDefault","stopPropagation","throttle","pause","now","dataflow","between","active","SKIP","onStream","func","touch","onOperator","updater","connect","Pulse","materialize","visit","addFilter","MultiPulse","pulses","hash","changed","ADD","REM","MOD","changes","reentrant","ADD_REM","ADD_MOD","ALL","REFLOW","SOURCE","NO_SOURCE","NO_FIELDS","fork","clone","addAll","src","addF","remF","modF","srcF","cleans","runAfter","nomod","some","sum","NO_OPT","Heap","nodes","siftdown","pop","last","ridx","cidx","siftup","pidx","Dataflow","logLevel","_clock","_rank","_locale","_loader","_touched","_input","_pulse","_heap","_postrun","logMethod","_log","Transform","cleanThreshold","shift","sources","targetRank","rerank","queue","_enqueue","ingest","preload","pending","_pending","requests","done","loadPending","res","request","send","document","querySelectorAll","addEventListener","on","prerun","postrun","_getPulse","then","pr","priority","all","cb","runAsync","_running","enqueue","singlePulse","transform","transforms","Definition","toLowerCase","numbers","valueof","quantiles","Float64Array","from","quantileSorted","quartiles","estimateBandwidth","deviation","h","maxb","logb","div","divide","minstep","steps","round","eps","nice","bootstrapCI","samples","alpha","mu","random","quantile","dotbin","smooth","thresh","smoothing","exports","SQRT2PI","sqrt","PI","SQRT2","nextSample","NaN","sampleNormal","mean","stdev","rds","densityNormal","z","cumulativeNormal","Z","cd","quantileNormal","isFinite","Infinity","erfinv","gaussian","sigma","dist","sample","pdf","cdf","icdf","kde","support","bandwidth","kernel","sampleLogNormal","densityLogNormal","cumulativeLogNormal","quantileLogNormal","lognormal","mixture","dists","weights","normalize","distributions","sampleUniform","densityUniform","cumulativeUniform","quantileUniform","uniform","coef","predict","rSquared","ols","uX","uY","uXY","uX2","slope","points","X","Y","xv","yv","ux","uy","visitPoints","SSE","SST","dx","dy","sse","sst","linear","XY","X2","ly","xy","YL","XYL","X2Y","c0","c1","YS","lx","quad","x2","X3","X4","X2X2","poly","lhs","rhs","matrix","gaussianElimination","uncenter","loess","bw","yhat","residuals","robustWeights","fill","iter","edge","W","denom","xk","yk","tricube","xkw","updateInterval","medianResidual","median","arg","cnt","MIN_RADIANS","sampleCurve","minSteps","maxSteps","point","minX","maxX","p0","p1","sx","sy","ymin","ymax","scaleY","pm","angleDelta","a0","atan2","a1","groupkey","String","measureName","as","noop","base_op","AggregateOps","cell","store","num","__count__","missing","valid","product","mean_d","average","req","variance","dev","variancep","stdevp","stderr","distinct","ci0","ci1","q2","q1","q3","argmin","argmax","exponential","exp_r","exponentialb","ValidAggregateOps","createMeasure","param","compareIndex","_ops","aggregate_param","_out","compileMeasures","agg","ops","getreqs","resolve","ctr","TupleStore","reset","measure","prototype$1","Aggregate","_adds","_mods","_alen","_mlen","_drop","_cross","_dims","_dnames","_measures","_countOnly","_counts","_prev","_inputs","_outputs","_add","_rem","_ext","_get","_q","quartile","ci","_ci","Aggregate$1","metadata","generates","null","default","aggr","drop","cross","dims","vals","collect","cells","generate","inputs","outputs","inputMap","inputVisit","groupby","dname","cellkey","aggregate_params","mname","outname","newcell","newtuple","measures","names","celltuple","counts","adds","mods","Bin","SortedList","resort","Collect","Compare","update$5","CountPattern","Cross","required","band","bins","_bins","b0","b1","Collect$1","root","process","tokens","tcase","match","toUpperCase","tokenize","case","_parameterCheck","_match","_stop","_finish","RegExp","stopwords","_tuples","Distributions","randomKDE","randomMixture","normal","randomNormal","randomLogNormal","randomUniform","FUNCTION","def","Density","function","fieldNames","partition$1","groups","g","distribution","minsteps","maxsteps","DotBin","Expression","update$4","expr","Extent","Subflow","Facet","_keys","Field","update$3","Filter","Flatten","Fold","Formula","Generate","autostep","detachSubflow","activate","flow","subflow","flows","sf","_group","detached","initTargets","act","rekey","group","k0","k1","isMod","revisit","arrays","maxlen","fnames","generator","Methods","Empty","Impute","JoinAggregate","KDE","Key","update$2","Load","Lookup","MultiExtent","update$1","extents","MultiValues","Params","Pivot","PreFacet","Project","Proxy","Quantile","gVals","kVal","impute","getValue","getField","fName","kName","gNames","keyvals","gKey","kMap","gMap","partition","_impute","cumulative","density","defaultValue","_transform","limit","pivotKeys","bind","aggregateParams","project","lut","dt","Quantile$1","Relay","Sample","Sequence","Sieve","TimeUnit","probs","cap","OUTPUT","TupleIndex","Values","utc","timezone","_floor","u0","u1","timeBin","tunits","WindowOps","row_number","dense_rank","drank","percent_rank","cume_dist","cume","ntile","lag","lead","first_value","last_value","nth_value","nth","prev_value","next_value","find","ValidWindowOps","WindowState","windows","countOnly","visitInputs","WindowOp","Window","processPartition","ignorePeers","frame","setWindow","adjustRange","bisect","wind","domCanvas","createElement","getContext","width","height","domImage","Image","bandSpace","paddingInner","paddingOuter","space","Linear","Log","Pow","Sqrt","Symlog","Time","Sequential","Diverging","Quantize","Threshold","Ordinal","Point","Band","BinOrdinal","Continuous","Discrete","Discretizing","Interpolating","Temporal","scaleOrdinal","ordinalRange","range$1","rescale","reverse","rangeRound","padding","invertRange","bisectRight","invert","pointish","scales","Map","VEGA_SCALE","registerScale","invertExtent","invertRangeExtent","isValidScaleType","hasType","isContinuous","isDiscrete","isDiscretizing","isLogarithmic","isInterpolating","isQuantile","scaleIdentity","scale$4","scaleLinear","scaleLog","scalePow","scaleSqrt","scaleSymlog","scaleTime","scaleUtc","scaleSequential","scaleSequentialLog","scaleSequentialPow","scaleSequentialSqrt","scaleSequentialSymlog","scaleDiverging","scaleDivergingLog","scaleDivergingPow","scaleDivergingSqrt","scaleDivergingSymlog","scaleQuantile","scaleQuantize","scaleThreshold","scaleBinOrdinal","tickFormat","tickFormat$1","scaleProps","interpolateRange","interpolator","interpolateColors","colors","gamma","$$1","piecewise","interpolate","quantizeInterpolator","scaleFraction","scale$1","interp","palette","scheme","schemes","category10","category20","category20b","category20c","tableau10","tableau20","accent","dark2","paired","pastel1","pastel2","set1","set2","set3","blues","greens","greys","oranges","purples","reds","blueGreen","bluePurple","greenBlue","orangeRed","purpleBlue","purpleBlueGreen","purpleRed","redPurple","yellowGreen","yellowOrangeBrown","yellowOrangeRed","blueOrange","brownBlueGreen","purpleGreen","purpleOrange","redBlue","redGrey","yellowGreenBlue","redYellowBlue","redYellowGreen","pinkYellowGreen","spectral","viridis","magma","inferno","plasma","cividis","rainbow","sinebow","turbo","browns","tealBlues","teals","warmGreys","goldGreen","goldOrange","goldRed","lightGreyRed","lightGreyTeal","lightMulti","lightOrange","lightTealBlue","darkBlue","darkGold","darkGreen","darkMulti","darkRed","SymbolLegend","DiscreteLegend","defaultFormatter","descending","tickCount","minStep","validTicks","ticks","endpoints","tickValues","formatType","noSkip","varfmt","tickLog","symbols","labelValues","binValues","thresholds","thresholdValues","isDiscreteRange","labelFormat","thresholdFormat","formatRange","formatDiscrete","formatPoint","formatValue","dflt","isTemporal","domainCaption","gradient_id","patternPrefix","isGradient","gradient","gradientRef","defs","prefix","x1","y1","y2","r2","Gradient","stops","color","lookup","basis","curve","curveBasis","curveBasisClosed","curveBasisOpen","bundle","curveBundle","tension","cardinal","curveCardinal","curveCardinalOpen","curveCardinalClosed","curveCatmullRom","curveCatmullRomClosed","curveCatmullRomOpen","curveLinear","curveLinearClosed","monotone","horizontal","curveMonotoneY","vertical","curveMonotoneX","natural","curveNatural","curveStep","curveStepAfter","curveStepBefore","curves","orientation","entry","paramCounts","commandPattern","numberPattern","spacePattern","flagPattern","commands","cmd","paramCount","segment","ws","parseParams","DegToRad","HalfPi","Tau","HalfSqrt3","segmentCache","bezierCache","bezier","cx","cy","th0","th1","rx","ry","sin_th","cos_th","a00","a01","a10","a11","cos_th0","cos","sin_th0","sin","cos_th1","sin_th1","th_half","sin_th_h2","x3","y3","temp","current","sX","sY","pathRender","tempX","tempY","tempControlX","tempControlY","previous","controlX","controlY","anchorX","anchorY","beginPath","lineTo","moveTo","bezierCurveTo","quadraticCurveTo","drawArc","closePath","coords","seg","large","sweep","rotateX","ox","oy","th","px","py","pl","x0","y0","sfactor_sq","sfactor","xc","yc","th_arc","segs","th2","th3","segments","bez","Tan30","builtins","circle","draw","arc","diamond","square","rect","arrow","wedge","triangle","stroke","custom","parsed","customSymbol","C","rectangleX","rectangleY","rectangleWidth","rectangleHeight","clamp","vg_rect","crTL","crTR","crBL","crBR","rectangle","buffer","tl","tr","bl","br","path$3","cornerRadius","vg_trail","defined","ready","w2","ud","hypot","trail","defined0","value$1","arcShape","arc$2","startAngle","endAngle","padAngle","innerRadius","outerRadius","areavShape","area$2","area","areahShape","lineShape","line$2","rectShape","cornerRadiusTopLeft","cornerRadiusTopRight","cornerRadiusBottomRight","cornerRadiusBottomLeft","symbolShape","symbol$2","symbol","shape","trailShape","hasCornerRadius","clip_id","resetSVGClipId","clip$1","renderer","clip","_defs","clipping","Bounds","union","Item","mark","bounds","GroupItem","items","ResourceLoader","customLoader","increment","decrement","boundStroke","miter","opacity","strokeOpacity","sw","strokeWidth","expand","strokeJoin","miterAdjustment","MAX_VALUE","equals","translate","rotate","angle","rotatedPoints","intersect","encloses","alignsWith","intersects","contains","sanitizeURL","catch","loadImage","image$1","img","cors","onload","onerror","complete","poll","circleThreshold","rot","ma","mb","mc","md","addL","addX","addY","addp","addpL","boundContext","deg","context$1","px1","py1","px2","py2","quadExtrema","px3","py3","cubicExtrema","sa","ea","ccw","t1","cubic","s2","t2","canvas","intersectPath","brush","isPointInPath","intersectPoint","box","intersectRect","intersectRule","intersectBoxLine","blend","globalCompositeOperation","addStops","addColorStop","createRadialGradient","image","ictx","fillStyle","createLinearGradient","fillRect","createPattern","fillOpacity","globalAlpha","lw","strokeStyle","lineWidth","lineCap","strokeCap","lineJoin","miterLimit","strokeMiterLimit","setLineDash","strokeDash","lineDashOffset","strokeDashOffset","zindex","zorder","scene","zdirty","zitems","pickVisit","hit","drawAll","drawPath","drawOne","pick$1","gx","gy","pixelRatio","hitPath","filled","lc","isPointInStroke","pickPath","translateItem","markItemPath","isect","tag","nested","attr","emit","rotateItem","bound","pick","markMultiItemPath","tip","orient","clipGroup","offset$1","strokeOffset","emitRectangle","off","rectanglePath","hitBackground","hitForeground","hitCorner","noBound","markTypes","fore","strokeForeground","save","marktype","includes","restore","dw","dh","ix","interactive","pickMark","content","background","foreground","xmlns","version","getImage","imageWidth","aspect","imageHeight","imageXOffset","imageYOffset","baseline","toDataURL","ar0","ar1","imageSmoothingEnabled","drawImage","xOffset","yOffset","line","path$1","scaleX","pathCache","path$2","transformItem","draw$2","rule","widthCache","textMetrics","fontSize","measureWidth","estimateWidth","useCanvas","use","_estimateWidth","textValue","currentFontHeight","_measureWidth","font","currentFont","measureText","lineHeight","textLines","lineBreak","multiLineOffset","widthGetter","mid","rtl","dir","fontFamily","quote","fontStyle","fontVariant","fontWeight","textAlign","tempBounds","anchorPoint","radius","theta","lh","fillText","strokeText","ax","ay","Marks","boundItem","DUMMY","boundMark","hasItems","sceneToJSON","indent","sceneFromJSON","initialize","Scenegraph","createMark","role","aria","description","domCreate","doc","ns","createElementNS","domFind","el","childNodes","tagName","domChild","ownerDocument","insertBefore","domClear","removeChild","cssClass","event","getBoundingClientRect","clientX","clientLeft","clientY","top","clientTop","Handler","customTooltip","_active","_handlers","_tooltip","defaultTooltip","element","setAttribute","Renderer","_el","_bgcolor","toJSON","markdef","origin","_obj","firstChild","_origin","_scene","_handlerIndex","handlers","eventName","handleHref","MouseEvent","dispatchEvent","handleTooltip","show","tooltip","mdef","resolveItem","getItemBoundingClientRect","bottom","scaleFactor","resize","bgcolor","_width","_height","_scale","dirty","render","_call","_render","renderAsync","_ready","_load","redraw","DragEnterEvent","DragLeaveEvent","DragOverEvent","PointerDownEvent","PointerMoveEvent","PointerOutEvent","PointerOverEvent","ClickEvent","MouseWheelEvent","TouchStartEvent","TouchMoveEvent","TouchEndEvent","TooltipShowEvent","TooltipHideEvent","HrefEvent","CanvasHandler","_down","_touch","_first","_events","eventListenerCheck","eventBundle","fire","move","moveEvent","overEvent","outEvent","pickEvent","exit","inactive","_canvas","events","DOMMouseScroll","pointermove","dragover","pointerout","dragleave","pointerdown","click","touchstart","changedTouches","touchmove","touchend","vegaType","window","devicePixelRatio","CanvasRenderer","_options","_redraw","_dirty","_tempb","base$2","SVGHandler","_hrefHandler","listener","_tooltipHandler","externalContext","appendChild","inDOM","HTMLElement","parentNode","ratio","style","setTransform","ctx","db","vb","viewBounds","clipToBounds","clearRect","__data__","svg","_svg","removeEventListener","ARIA_HIDDEN","ARIA_LABEL","ARIA_ROLE","ARIA_ROLEDESCRIPTION","GRAPHICS_OBJECT","GRAPHICS_SYMBOL","roledesc","label","AriaIgnore","AriaGuides","axis","desc","caption","title","extractTitle","legend","props","channelCaption","titleCaption","AriaEncode","ariaRole","ariaRoleDescription","ariaItemAttributes","hide","ariaMarkAttributes","ariaGuide","ariaMark","innerText","markup","buf","outer","inner","stack","open","attrs","close","serializeXML","node","_serialize","hasAttributes","attributes","hasChildNodes","children","nodeType","nodeValue","stylesAttr","stylesCss","rootAttributes","svgns","SVGRenderer","_dirtyID","_root","base$1","dirtyParents","updateGradient","grad","pt","setAttributes","viewBox","preserveAspectRatio","fx","fy","fr","updateClipping","mask","sibling","__values__","bg","cg","fg","ownerSVGElement","previousSibling","siblingCheck","nextSibling","_clearDefs","setAttributeNS","RootIndex","setProperty","removeAttribute","_dirtyCheck","_dirtyAll","isDirty","markType","isGroup","lastChild","extra","mark_extras","setStyle","ts","textContent","removeAttributeNS","removeProperty","loc","location","SVGStringRenderer","_text","class","attrList","_hrefs","prefixed","styleList","display","OPTS","svgMarkTypes","svgOnTop","HybridRenderer","_svgRenderer","_canvasRenderer","HybridHandler","_root_el","bottomEl","topEl","position","_svgEl","_canvasEl","pointerEvents","canvasMarkTypes","Canvas","Hybrid","RenderType","PNG","SVG","modules","renderModule","hits","intersectMark","intersectGroup","visitMark","intersectItem","marks","headless","clipBounds","boundClip","TOLERANCE","sceneEqual","pathEqual","ka","kb","objectEqual","Top","Left","Right","Bottom","TopLeft","TopRight","BottomLeft","BottomRight","Start","Middle","End","Group","AxisRole","TitleRole","FrameRole","ScopeRole","LegendRole","RowHeader","RowFooter","RowTitle","ColHeader","ColFooter","ColTitle","Padding","Symbols","Fit","FitX","FitY","Pad","All","Each","Flush","Column","Row","Bound","view","rebound","markBounds","COUNTER_NAME","Identifier","Mark","Overlap","Identifier$1","counter","_signals","scenegraph","lookup$1","Init","methods","parity","greedy","sep","hasOverlap","hasBounds","Render","separation","boundScale","boundTolerance","boundTest","tolerance","boundOrient","isYAxis","axisLayout","indices","grid","labels","axisIndices","minExtent","maxExtent","titlePadding","dl","axisTitleLayout","auto","bboxFlush","bboxFull","offsetValue","gridLayout","nodirty","bbox","alignCol","alignRow","padCol","padRow","ncols","nrows","xExtent","xMax","yExtent","yMax","boxes","trellisLayout","views","rowheaders","rowfooters","colheaders","colfooters","rowtitle","coltitle","gridLayoutGroups","boundFlush","boundFull","headerBand","layoutHeaders","footerBand","titleAnchor","titleBand","layoutTitle","headers","isX","bf","stride","back","legendParams","config","xb","yb","legends","offsets","mult","column","row","legendLayout","_bounds","ex","ey","tpad","tx","ty","legendTitleOffset","legendGroupLayout","legendBounds","entries","widths","legendEntryLayout","lr","noBar","vgrad","ViewLayout","xBounds","yBounds","autosize","pos","subtitle","titleLayout","_autosize","viewWidth","viewHeight","_resizeView","viewSizeLayout","layoutGroup","shouldReflow","AxisTicks","DataJoin","defaultItemCreate","Encode","LegendEntries","newMap","fmod","encoders","reenter","enter","fraction","lskip","perc","adjust","labelFraction","perc2","sourceX","sourceY","targetX","targetY","LinkPath","Paths","rr","iy","lineR","sr","ta","arcR","curveR","orthoX","orthoY","orthoR","sc","ss","tc","diagonalX","diagonalY","diagonalR","mr","Pie","DEFAULT_COUNT","includePad","Scale","domainCheck","adjustScheme","flip","SortItems","isContinuousColor","rawDomain","domainMid","scaleKey","rangeStep","configureRangeStep","scheme$1","schemeExtent","interpolateGamma","schemeCount","configureScheme","interpolateRound","interpolate$1","configureRange","domainRaw","configureBins","raw","includeZero","padDomain","domainMin","domainMax","domainImplicit","scaleImplicit","configureDomain","Zero","Center","Normalize","DefOutput","Stack","stackCenter","stackNormalize","stackZero","lastPos","lastNeg","epsilon","pi","halfPi","sqrt2","asin","mollweideBromleyTheta","cp","phi","cpsinPhi","mollweideRaw","forward","lambda","mollweideBromleyRaw","defaultPath","geoPath","projectionProperties","projection","proj","projections","pointRadius","getProjectionPath","albers","geoAlbers","albersusa","geoAlbersUsa","azimuthalequalarea","geoAzimuthalEqualArea","azimuthalequidistant","geoAzimuthalEquidistant","conicconformal","geoConicConformal","conicequalarea","geoConicEqualArea","conicequidistant","geoConicEquidistant","equalEarth","geoEqualEarth","equirectangular","geoEquirectangular","gnomonic","geoGnomonic","geoIdentity","mercator","geoMercator","mollweide","geoProjection","naturalEarth1","geoNaturalEarth1","orthographic","geoOrthographic","stereographic","geoStereographic","transversemercator","geoTransverseMercator","cases","contours","smoothLinear","tz","contour","polygons","holes","t3","fragmentByStart","fragmentByEnd","stitch","startIndex","endIndex","ring","unshift","isorings","hole","polygon","coordinates","v0","xt","yt","v1","_0","_1","ringContains","xi","yi","pj","xj","yj","segmentContains","collinear","quantize","Isocontour","transformPolygon","transformRing","transformPoint","geometry","bandwidthNRD","density2D","weight","values0","Float32Array","values1","blurX","blurY","sz","cellSize","LN2","KDE2D","levels","paths","transformPaths","PARAMS","Contour","post","Feature","FeatureCollection","GeoJSON","GeoPath","GeoPoint","GeoShape","Graticule","geoGraticule","Heatmap","dependency","$x","$y","$value","$max","Projection","_features","_points","lon","lat","geojson","initPath","shapeGenerator","shared","dep","opacity_","rgb","color_","can","getImageData","pix","putImageData","toCanvas","fit","featurize","collectGeoJSON","fitExtent","fitSize","ForceMap","forceCenter","collide","forceCollide","nbody","forceManyBody","link","forceLink","forceX","forceY","Forces","ForceParams","ForceConfig","ForceOutput","Force","setup","sim","forces","getForce","numForces","setForceParam","change","iters","iterations","forceSimulation","restart","stopped","simulation","static","tick","alphaDecay","alphaMin","finish","tree","each","Nest","treesource","nest","depth","valuesByKey","keyValue","HierarchyLayout","hierarchy","defaultSeparation","setParams","setFields","Output$3","Pack","pack","Output$2","Partition","Stratify","parentKey","stratify","parentId","Layouts","tidy","cluster","Output$1","Tree","TreeLinks","links","Tiles","binary","treemapBinary","dice","treemapDice","treemapSlice","slicedice","treemapSliceDice","squarify","treemapSquarify","resquarify","treemapResquarify","Output","Treemap","treemap","tile","ALPHA_MASK","getBuffer","Uint32Array","prepare","DIV","SIZE","RIGHT0","RIGHT1","scaler","bitmap","_set","_clear","getRange","indexStart","indexEnd","setRange","clearRange","outOfBounds","Bitmap","textWidth","textHeight","collision","bm0","bm1","X_DIR","Y_DIR","Aligns","Baselines","_x1","_x2","_y1","_y2","boundary","isInside","anchorCode","TOP","MIDDLE","middle","BOTTOM","placeAreaLabel","naive","bitmaps","avoidBaseMark","markIndex","areaWidth","maxAreaWidth","tryLabel","_x","_y","maxSize","_xMid","_yMid","swapTmp","labelPlaced","labelPlaced2","floodfill","bm2","labelLayout","texts","avoidMarks","lineAnchor","positions","getOffsets","anchors","Int8Array","getAnchors","grouptype","isGroupArea","markBoundary","infPadding","isNaiveGroupArea","maxTextWidth","maxTextHeight","labelInside","baseMark","border","baseMarkContext","strokeContext","baseMarkBuffer","strokeBuffer","layer1","layer2","strokeAlpha","baseMarkAlpha","markBitmaps","baseBitmaps","place","sizeFactor","insideFactor","SQRT1_2","placeMarkLabel","Anchors","Label","Label$1","Loess","regressionLoess","regressionConstant","regressionLinear","regressionLog","regressionExp","regressionPow","regressionQuad","regressionPoly","Regression","dof","degreesOfFreedom","model","dom","Voronoi","defaultExtent","toPathString","voronoi","Delaunay","cellPolygon","cloudRadians","cw","ch","cloud","spiral","archimedeanSpiral","words","board","dxdy","startX","startY","maxDelta","cloudCollide","collideRects","sprite","msx","contextAndRatio","zeroArray","tags","xoff","yoff","hasText","cloudSprite","cloudBounds","functor","spirals","di","w32","maxh","cr","wcr","wsr","hcr","hsr","pixels","seen","seenRow","archimedean","rectangular","Wordcloud","fontSizeRange","fsize","sizeScale","array8","Uint8Array","array16","Uint16Array","array32","Dimension","query","onAdd","added","dim","SortedIndex","addi","oldv","oldi","addv","permute","value0","index0","value1","index1","bisectLeft","reindex","CrossFilter","lengthen","_index","Bitmaps","_indices","ResolveFilter","reinit","eval","bits","remMap","modMap","indexMap","incrementOne","incrementAll","old","lo1","hi1","lo0","hi0","ignore","pass","Literal","Property","ArrayExpression","BinaryExpression","CallExpression","ConditionalExpression","LogicalExpression","MemberExpression","ObjectExpression","UnaryExpression","ASTNode","TokenName","lookahead","elements","callee","consequent","alternate","properties","argument","TokenBooleanLiteral","TokenEOF","TokenIdentifier","TokenKeyword","TokenNullLiteral","TokenNumericLiteral","TokenPunctuator","TokenStringLiteral","SyntaxArrayExpression","SyntaxBinaryExpression","SyntaxCallExpression","SyntaxConditionalExpression","SyntaxIdentifier","SyntaxLiteral","SyntaxLogicalExpression","SyntaxMemberExpression","SyntaxObjectExpression","SyntaxProperty","SyntaxUnaryExpression","MessageUnexpectedToken","MessageUnexpectedNumber","MessageUnexpectedString","MessageUnexpectedIdentifier","MessageUnexpectedReserved","MessageUnexpectedEOS","MessageInvalidRegExp","MessageUnterminatedRegExp","MessageStrictOctalLiteral","MessageStrictDuplicateProperty","ILLEGAL","DISABLED","RegexNonAsciiIdentifierStart","RegexNonAsciiIdentifierPart","assert","condition","isDecimalDigit","isHexDigit","isOctalDigit","isWhiteSpace","isLineTerminator","isIdentifierStart","fromCharCode","isIdentifierPart","keywords","if","in","do","var","for","new","try","let","else","void","with","enum","while","break","throw","const","yield","super","return","typeof","switch","export","import","public","finally","extends","package","private","continue","debugger","interface","protected","instanceof","implements","skipComment","scanHexEscape","code","throwError","scanUnicodeCodePointEscape","cu1","cu2","getEscapedIdentifier","substr","scanIdentifier","getIdentifier","scanPunctuator","code2","ch2","ch3","ch4","ch1","scanNumericLiteral","parseInt","scanHexLiteral","octal","scanOctalLiteral","parseFloat","scanRegExp","body","classMarker","terminated","literal","scanRegExpBody","search","scanRegExpFlags","tmp","$0","$1","exception","testRegExp","regex","advance","scanStringLiteral","lex","token","finishBinaryExpression","operator","finishCallExpression","finishIdentifier","finishLiteral","finishMemberExpression","computed","member","finishProperty","kind","messageFormat","msg","whole","throwUnexpected","expect","matchKeyword","keyword","parseArrayInitialiser","parseConditionalExpression","finishArrayExpression","parseObjectPropertyKey","parseObjectProperty","parseObjectInitialiser","finishObjectExpression","legalKeywords","parsePrimaryExpression","parseExpression","parseGroupExpression","parseArguments","parseNonComputedProperty","isIdentifierName","parseComputedMember","parsePostfixExpression","parseLeftHandSideExpressionAllowCall","parseUnaryExpression","finishUnaryExpression","binaryPrecedence","prec","marker","markers","parseBinaryExpression","finishConditionalExpression","Constants","E","LN10","LOG2E","LOG10E","MIN_VALUE","Functions","codegen","cast","fncall","STRING","REGEXP","acos","atan","tan","datetime","hours","minutes","seconds","milliseconds","timezoneoffset","utcdate","utcday","utcyear","utcmonth","utchours","utcminutes","utcseconds","utcmilliseconds","upper","lower","regexp","allowed","forbidden","constants","functions","globalvar","fieldvar","outputGlobal","globals","memberDepth","ast","Generators","stripQuotes","SELECTION_GETTER","Intersect","Union","SelectionId","$selectionId","TYPE_ENUM","TYPE_RANGE_INC","TYPE_RANGE_EXC","TYPE_RANGE_LE","TYPE_RANGE_RE","UNIT_INDEX","testPoint","dval","intersection","E_union","E_intersect","R_union","R_intersect","selectionVisitor","scope","indexName","dataName","getData","indataRef","tuplesRef","wrap","dateObj","setYear","ScalePrefix","SignalPrefix","dataVisitor","scaleVisitor","addScaleDependency","scaleName","scaleRef","getScale","nameOrFunction","maybeScale","isRegisteredScale","internalScaleFunctions","fnctx","visitors","__bandwidth","_bandwidth","_range","ref","geoMethod","methodName","globalMethod","geoArea","geoArea$1","geoBounds","geoBounds$1","geoCentroid","geoCentroid$1","channel_luminance_value","channelValue","luminance","equal","equalArray","equalObject","removePredicate","accessors","seq","ArrayBuffer","isView","treeNodes","_window","intersect$1","array$1","markname","functionContext","isDefined","indexof","_len2","_key2","lastindexof","_len3","_key3","repl","_len4","_key4","pluck","lab","hcl","hsl","contrast","color1","color2","lum1","lum2","monthFormat","monthAbbrevFormat","dayFormat","dayAbbrevFormat","inScope","pinchDistance","touches","pinchAngle","screen","containerSize","container","clientWidth","clientHeight","windowSize","innerWidth","innerHeight","bandspace","setdata","pathShape","pathParse","retval","toggle","predicate","_trigger","lassoAppend","lasso","minDist","lassoPath","_ref","intersectLasso","pixelLasso","bb","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","testx","testy","intersections","prevX","prevY","pointInPolygon","eventFunctions","thisPrefix","astVisitors","codegenParams","codeGenerator","codegenExpression","expressionFunction","signalName","getSignal","signalRef","$expr","$fields","$params","ancestors","miss","unitIdx","isMulti","vl5","resUnit","resolved","multiRes","charAt","acc","or","and","Skip","Swap","canonicalType","expression","Function","expressionCodegen","parameter","channels","adjustSpatial","lt","gt","_compare","parseParameter","PARSERS","$ref","$key","$flat","parseParameters","parameterExpression","$field","$name","$encode","enc","encodeExpression","$output","$compare","$order","$tupleid","$subflow","subctx","operators","Context","Subcontext","ariaLabel","subcontext","isCollect","$ingest","$format","$request","unresolved","signal","operatorExpression","eventExpression","handlerExpression","eventConfig","parseOperator","parseOperatorParameters","streams","parseStream","updates","parseUpdate","isOperator","srcid","dataset","getState","setState","substate","Default","setCursor","cursor","globalCursor","dataref","_runtime","_viewWidth","_viewHeight","eventExtend","_renderer","vega","itemGroup","extension","VIEW","NO_TRAP","trap","trackEventListener","_eventListeners","permit","_eventConfig","itemFilter","markTarget","invoke","BindClass","NameClass","RadioClass","Event","wrapper","form","checkbox","select","radio","checked","option","valuesEqual","selected","selectedIndex","prepend","initializeRenderer","querySelector","paddingObject","renderHeadless","module","_scenegraph","Width","Height","dataTest","signalTest","proxy","formatArray","formatTooltip","View","_elBind","_renderType","_handler","_globalCursor","_preventDefault","_timers","_resizeListeners","defaults","unpack","initializeEventConfig","runtime","_bind","bindings","_resize","resetSize","_resizeWidth","_resizeHeight","resizePadding","initializeResize","_background","user","hover","lookupSignal","findOperatorHandler","addOperatorListener","removeOperatorListener","resizeRenderer","_desc","_resetRenderer","rerun","addResizeListener","removeResizeListener","addSignalListener","removeSignalListener","addDataListener","removeDataListener","timer","elapsed","timestamp","prevent","allow","finalize","timers","listeners","hoverSet","leaveSet","elBind","initializeAria","prevHandler","initializeHandler","binding","toImageURL","mime","blob","Blob","URL","createObjectURL","toBlobURL","toSVG","LBRACK","RBRACK","LBRACE","RBRACE","COLON","COMMA","NAME","GT","DEFAULT_MARKS","DEFAULT_SOURCE","MARKS","eventSelector","selector","parseMerge","parseSelector","endChar","pushChar","popChar","parseBetween","parseThrottle","isMarkType","parseAutosize","parsePadding","encoder","addEncode","addEncoders","extendEncode","MarkRole","AxisDomainRole","AxisGridRole","AxisLabelRole","AxisTickRole","AxisTitleRole","LegendBandRole","LegendEntryRole","LegendGradientRole","LegendLabelRole","LegendSymbolRole","LegendTitleRole","TitleTextRole","TitleSubtitleRole","applyDefault","entry$1","_color","resolveField","parseEncode","applyDefaults","parseBlock","block","parse$1","OUTER","OUTER_INVALID","outerError","parseSignal","addSignal","addBinding","Entry","refs","fieldRef$1","keyFieldRef","compareRef","Descending","aggrField","Scope$1","isSignal","hasSignal","specValue","deref","Timer","mergeStream","nestedStream","eventStream","streamParameters","addStream","eventSource","markrole","filterMark","OP_VALUE_EXPR","isSubscope","mergeSources","addUpdate","streamSource","FIELD_REF_ID","MULTIDOMAIN_SORT_OPS","parseScale","parseScaleDomain","parseScaleRange","parseLiteral","parseScaleInterpolate","parseArray","objectProperty","parseScaleBins","dataLookupError","explicitDomain","multipleDomain","singularDomain","valuesRef","parseSort","domainRef","extentRef","coll","addDataPipeline","fieldRef","ordinalMultipleDomain","quantileMultipleDomain","numericMultipleDomain","countsRef","sortRef","multidomain","parseParameter$1","Vertical","Index","Offset","Perc","Perc2","Value","GuideLabelStyle","GuideTitleStyle","GroupTitleStyle","GroupSubtitleStyle","Size","LegendScales","GroupMark","RectMark","RuleMark","SymbolMark","TextMark","guideGroup","isVertical","direction","symbolDirection","gradientDirection","gradientLength","gradientWidth","gradientThickness","gradientHeight","entryColumns","getEncoding","anchorExpr","alignExpr$1","extendOffset","assign","guideMark","extras","legendGradient","userEncode","thickness","legendGradientDiscrete","dataRef","uu","vv","alignExpr","baselineExpr","legendGradientLabels","overlap","labelLimit","gradientLabelLimit","labelOffset","gradientLabelOffset","legendSymbolGroups","symbolOffset","valueRef","xSignal","yEncode","baseFill","baseStroke","symbolBaseFillColor","symbolBaseStrokeColor","facet","isL","isR","isLR","isVG","exprAlign","exprAnchor","exprAngle","exprBaseline","sphere","getRole","parseTransform","definition$1","pdef","lookupRef","parseIndexParameter","parseSubParameter","parseSubParameters","projectionRef","parameterValue","isExpr","isField","isCompare","outerExpr","exprRef","outerField","isData","getDataRef","DataScope","aggregate","fieldKey","addSortField","ds","optype","sortKey","parseTrigger","trigger","parseMark","layoutRef","boundRef","keyRef","parseData$1","joinRef","$context","markpath","markRef","encodeRef","pushState","subscope","addData","toRuntime","parseFacet","parseSubflow","popState","tol","parseOverlap","sieve","parseLegend","legendEncode","entryLayout","scaleType","scaleCount","legendType","entryRef","tickMinStep","legendSymbolLayout","getChannel","getStyle","getFontSize","sizeExpression","_anchor","legendTitle","buildLegendEncode","fromEntries","angleExpr","parseTitle","buildTitle","titleEncode","buildSubTitle","groupEncode","parseData","upstream","analyze","getSign","ifLeftTopExpr","ifX","ifXEnc","ifY","ifYEnc","ifTop","ifTopExpr","ifRight","ifRightExpr","$orient","ifEnc","ifExpr","isSimple","toExpr","ifOrient","patch","fallback","axisConfig","styleProp","axisGrid","vscale","gridScale","tickPos","gridStart","gridEnd","flushExpr","axisTitle","titlePos","autoY","autoX","autoLayout","parseAxis","axisBand","xyKeys","axisX","axisY","orientKeys","axisTop","axisBottom","axisLeft","axisRight","axisEncode","tickBand","ticksRef","tickSize","axisTicks","flushOffset","labelAlign","labelBaseline","flushOn","offsetExpr","axisLabels","pos0","pos1","axisDomain","buildAxisEncode","parseScope","preprocessed","addProjection","parseProjection","addScale","initScale","parseSignalUpdates","axes","parseLambdas","rootEncode","parseView","signalObject","pre","collectSignals","Scope","lambdas","_id","_subid","_nextsub","_parent","_encode","_lookup","_markpath","Subscope","propertyLambda","arrayLambda","objectLambda","vref","annotate","check","isExpr$1","sig","hasOwnSignal","addScaleProj","projectionType","dataScope","vtx","geo","reg","wordcloud","xf","defaultFont","defaultColor","black","gray","lightGray","subtitlePadding","bandPosition","domainWidth","domainColor","gridWidth","gridColor","labelAngle","labelPadding","tickColor","tickOffset","tickRound","tickWidth","gridAlign","columnPadding","rowPadding","gradientStrokeColor","gradientStrokeWidth","labelOverlap","symbolLimit","symbolType","symbolSize","symbolStrokeWidth","titleLimit","titleOrient","category","ordinal","heatmap","ramp","diverging","seed"],"mappings":"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","x_google_ignoreList":[12,13]} \ No newline at end of file diff --git a/docs/vega-schema.json b/docs/vega-schema.json index 2d180e9957..0b8e525af1 100644 --- a/docs/vega-schema.json +++ b/docs/vega-schema.json @@ -13512,7 +13512,9 @@ "min", "max", "argmin", - "argmax" + "argmax", + "exponential", + "exponentialb" ] }, { @@ -13526,6 +13528,35 @@ } ] }, + "aggregate_params": { + "oneOf": [ + { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/definitions/scaleField" + }, + { + "$ref": "#/definitions/paramField" + }, + { + "$ref": "#/definitions/expr" + }, + { + "type": "null" + } + ] + } + }, + { + "$ref": "#/definitions/signalRef" + } + ], + "default": [ + null + ] + }, "fields": { "oneOf": [ { @@ -14797,7 +14828,9 @@ "min", "max", "argmin", - "argmax" + "argmax", + "exponential", + "exponentialb" ] }, { @@ -15218,7 +15251,9 @@ "min", "max", "argmin", - "argmax" + "argmax", + "exponential", + "exponentialb" ] }, { @@ -15755,7 +15790,9 @@ "min", "max", "argmin", - "argmax" + "argmax", + "exponential", + "exponentialb" ] }, { @@ -15792,6 +15829,35 @@ } ] }, + "aggregate_params": { + "oneOf": [ + { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/definitions/scaleField" + }, + { + "$ref": "#/definitions/paramField" + }, + { + "$ref": "#/definitions/expr" + }, + { + "type": "null" + } + ] + } + }, + { + "$ref": "#/definitions/signalRef" + } + ], + "default": [ + null + ] + }, "fields": { "oneOf": [ { diff --git a/docs/vega.js b/docs/vega.js index 279270b032..440e42e711 100644 --- a/docs/vega.js +++ b/docs/vega.js @@ -15,7 +15,7 @@ function accessorFields(fn) { return fn == null ? null : fn.fields; } - function getter(path) { + function getter$1(path) { return path.length === 1 ? get1(path[0]) : getN(path); } const get1 = field => function (obj) { @@ -92,7 +92,7 @@ function field$1(field, name, opt) { const path = splitAccessPath(field); field = path.length === 1 ? path[0] : field; - return accessor((opt && opt.get || getter)(path), [field], name || field); + return accessor((opt && opt.get || getter$1)(path), [field], name || field); } const id = field$1('id'); const identity$6 = accessor(_ => _, [], 'identity'); @@ -575,7 +575,7 @@ fields = flat ? array$5(fields).map(f => f.replace(/\\(.)/g, '$1')) : array$5(fields); } const len = fields && fields.length, - gen = opt && opt.get || getter, + gen = opt && opt.get || getter$1, map = f => gen(flat ? [f] : splitAccessPath(f)); let fn; if (!len) { @@ -7067,20 +7067,35 @@ }, req: ['max', 'values'], idx: 3 + }, + exponential: { + init: (m, r) => { + m.exp = 0; + m.exp_r = r; + }, + value: m => m.valid ? m.exp * (1 - m.exp_r) / (1 - m.exp_r ** m.valid) : undefined, + add: (m, v) => m.exp = m.exp_r * m.exp + v, + rem: (m, v) => m.exp = (m.exp - v / m.exp_r ** (m.valid - 1)) / m.exp_r + }, + exponentialb: { + value: m => m.valid ? m.exp * (1 - m.exp_r) : undefined, + req: ['exponential'], + idx: 1 } }; const ValidAggregateOps = Object.keys(AggregateOps).filter(d => d !== '__count__'); function measure(key, value) { - return out => extend$1({ + return (out, aggregate_param) => extend$1({ name: key, + aggregate_param: aggregate_param, out: out || key }, base_op, value); } [...ValidAggregateOps, '__count__'].forEach(key => { AggregateOps[key] = measure(key, AggregateOps[key]); }); - function createMeasure(op, name) { - return AggregateOps[op](name); + function createMeasure(op, param, name) { + return AggregateOps[op](name, param); } function compareIndex(a, b) { return a.idx - b.idx; @@ -7100,7 +7115,7 @@ function init() { this.valid = 0; this.missing = 0; - this._ops.forEach(op => op.init(this)); + this._ops.forEach(op => op.aggregate_param == null ? op.init(this) : op.init(this, op.aggregate_param)); } function add$2(v, t) { if (v == null || v === '') { @@ -7264,6 +7279,7 @@ * @param {Array} [params.groupby] - An array of accessors to groupby. * @param {Array} [params.fields] - An array of accessors to aggregate. * @param {Array} [params.ops] - An array of strings indicating aggregation operations. + * @param {Array} [params.aggregate_params=[null]] - An optional array of parameters for aggregation operations. * @param {Array} [params.as] - An array of output field names for aggregated values. * @param {boolean} [params.cross=false] - A flag indicating that the full * cross-product of groupby values should be generated, including empty cells. @@ -7306,6 +7322,12 @@ 'type': 'enum', 'array': true, 'values': ValidAggregateOps + }, { + 'name': 'aggregate_params', + 'type': 'field', + 'null': true, + 'array': true, + 'default': [null] }, { 'name': 'fields', 'type': 'field', @@ -7428,16 +7450,18 @@ this._measures = []; const fields = _.fields || [null], ops = _.ops || ['count'], + aggregate_params = _.aggregate_params || [null], as = _.as || [], n = fields.length, map = {}; - let field, op, m, mname, outname, i; + let field, op, aggregate_param, m, mname, outname, i; if (n !== ops.length) { error('Unmatched number of fields and aggregate ops.'); } for (i = 0; i < n; ++i) { field = fields[i]; op = ops[i]; + aggregate_param = aggregate_params[i] || null; if (field == null && op !== 'count') { error('Null aggregate field specified.'); } @@ -7456,7 +7480,7 @@ this._measures.push(m); } if (op !== 'count') this._countOnly = false; - m.push(createMeasure(op, outname)); + m.push(createMeasure(op, aggregate_param, outname)); } this._measures = this._measures.map(m => compileMeasures(m, m.field)); return Object.create(null); // aggregation cells (this.value) @@ -10321,6 +10345,7 @@ const ops = array$5(_.ops), fields = array$5(_.fields), params = array$5(_.params), + aggregate_params = array$5(_.aggregate_params), as = array$5(_.as), outputs = this.outputs = [], windows = this.windows = [], @@ -10335,6 +10360,8 @@ visitInputs(_.sort); ops.forEach((op, i) => { const field = fields[i], + param = params[i], + aggregate_param = aggregate_params[i] || null, mname = accessorName(field), name = measureName(op, mname, as[i]); visitInputs(field); @@ -10342,7 +10369,7 @@ // Window operation if (has$1(WindowOps, op)) { - windows.push(WindowOp(op, fields[i], params[i], name)); + windows.push(WindowOp(op, field, param, name)); } // Aggregate operation @@ -10361,7 +10388,7 @@ m.field = field; measures.push(m); } - m.push(createMeasure(op, name)); + m.push(createMeasure(op, aggregate_param, name)); } }); if (counts.length || measures.length) { @@ -10448,6 +10475,7 @@ * @param {Array} [params.fields] - An array of accessors * for data fields to use as inputs to window operations. * @param {Array<*>} [params.params] - An array of parameter values for window operations. + * @param {Array} [params.aggregate_params] - An optional array of parameter values for aggregation operations. * @param {Array} [params.as] - An array of output field names for window operations. * @param {Array} [params.frame] - Window frame definition as two-element array. * @param {boolean} [params.ignorePeers=false] - If true, base window frame boundaries on row @@ -10481,6 +10509,12 @@ 'type': 'number', 'null': true, 'array': true + }, { + 'name': 'aggregate_params', + 'type': 'field', + 'null': true, + 'array': true, + 'default': [null] }, { 'name': 'fields', 'type': 'field', @@ -14531,7 +14565,7 @@ count = Math.max(count, scale.bins.length); } if (minStep != null) { - count = Math.min(count, Math.floor(span(scale.domain()) / minStep || 1)); + count = Math.min(count, Math.floor(span(scale.domain()) / minStep || 1) + 1); } } if (isObject(count)) { @@ -16602,7 +16636,7 @@ const hitBackground = hitPath(rectanglePath); const hitForeground = hitPath(rectanglePath, false); const hitCorner = hitPath(rectanglePath, true); - function draw$4(context, scene, bounds) { + function draw$4(context, scene, bounds, markTypes) { visit(scene, group => { const gx = group.x || 0, gy = group.y || 0, @@ -16629,7 +16663,9 @@ // draw group contents visit(group, item => { - this.draw(context, item, bounds); + if (item.marktype === 'group' || markTypes == null || markTypes.includes(item.marktype)) { + this.draw(context, item, bounds, markTypes); + } }); // restore graphics context @@ -16998,10 +17034,13 @@ // we are using canvas const currentFont = font(item); return text => _measureWidth(text, currentFont); - } else { + } else if (textMetrics.width === estimateWidth) { // we are relying on estimates const currentFontHeight = fontSize(item); return text => _estimateWidth(text, currentFontHeight); + } else { + // User defined textMetrics.width function in use (e.g. vl-convert) + return text => textMetrics.width(item, text); } } function truncate(item, text) { @@ -17695,15 +17734,17 @@ * after this method returns. To receive notification when rendering is * complete, use the renderAsync method instead. * @param {object} scene - The root mark of a scenegraph to render. + * @param {Array} markTypes - Array of the mark types to render. + * If undefined, render all mark types * @return {Renderer} - This renderer instance. */ - render(scene) { + render(scene, markTypes) { const r = this; // bind arguments into a render call, and cache it // this function may be subsequently called for async redraw r._call = function () { - r._render(scene); + r._render(scene, markTypes); }; // invoke the renderer @@ -17718,8 +17759,10 @@ * Internal rendering method. Renderer subclasses should override this * method to actually perform rendering. * @param {object} scene - The root mark of a scenegraph to render. + * @param {Array} markTypes - Array of the mark types to render. + * If undefined, render all mark types */ - _render( /*scene*/ + _render( /*scene, markTypes*/ ) { // subclasses to override }, @@ -17729,10 +17772,12 @@ * perform image loading to get a complete rendering. The returned * Promise will not resolve until this process completes. * @param {object} scene - The root mark of a scenegraph to render. + * @param {Array} markTypes - Array of the mark types to render. + * If undefined, render all mark types * @return {Promise} - A Promise that resolves when rendering is complete. */ - renderAsync(scene) { - const r = this.render(scene); + renderAsync(scene, markTypes) { + const r = this.render(scene, markTypes); return this._ready ? this._ready.then(() => r) : Promise.resolve(r); }, /** @@ -17783,11 +17828,11 @@ const DragEnterEvent = 'dragenter'; const DragLeaveEvent = 'dragleave'; const DragOverEvent = 'dragover'; - const MouseDownEvent = 'mousedown'; - const MouseUpEvent = 'mouseup'; - const MouseMoveEvent = 'mousemove'; - const MouseOutEvent = 'mouseout'; - const MouseOverEvent = 'mouseover'; + const PointerDownEvent = 'pointerdown'; + const PointerUpEvent = 'pointerup'; + const PointerMoveEvent = 'pointermove'; + const PointerOutEvent = 'pointerout'; + const PointerOverEvent = 'pointerover'; const ClickEvent = 'click'; const DoubleClickEvent = 'dblclick'; const WheelEvent = 'wheel'; @@ -17795,9 +17840,9 @@ const TouchStartEvent = 'touchstart'; const TouchMoveEvent = 'touchmove'; const TouchEndEvent = 'touchend'; - const Events = [KeyDownEvent, KeyPressEvent, KeyUpEvent, DragEnterEvent, DragLeaveEvent, DragOverEvent, MouseDownEvent, MouseUpEvent, MouseMoveEvent, MouseOutEvent, MouseOverEvent, ClickEvent, DoubleClickEvent, WheelEvent, MouseWheelEvent, TouchStartEvent, TouchMoveEvent, TouchEndEvent]; - const TooltipShowEvent = MouseMoveEvent; - const TooltipHideEvent = MouseOutEvent; + const Events = [KeyDownEvent, KeyPressEvent, KeyUpEvent, DragEnterEvent, DragLeaveEvent, DragOverEvent, PointerDownEvent, PointerUpEvent, PointerMoveEvent, PointerOutEvent, PointerOverEvent, ClickEvent, DoubleClickEvent, WheelEvent, MouseWheelEvent, TouchStartEvent, TouchMoveEvent, TouchEndEvent]; + const TooltipShowEvent = PointerMoveEvent; + const TooltipHideEvent = PointerOutEvent; const HrefEvent = ClickEvent; function CanvasHandler(loader, tooltip) { Handler.call(this, loader, tooltip); @@ -17851,7 +17896,7 @@ this._canvas = el && domFind(el, 'canvas'); // add minimal events required for proper state management - [ClickEvent, MouseDownEvent, MouseMoveEvent, MouseOutEvent, DragLeaveEvent].forEach(type => eventListenerCheck(this, type)); + [ClickEvent, PointerDownEvent, PointerMoveEvent, PointerOutEvent, DragLeaveEvent].forEach(type => eventListenerCheck(this, type)); return Handler.prototype.initialize.call(this, el, origin, obj); }, // return the backing canvas instance @@ -17868,13 +17913,13 @@ DOMMouseScroll(evt) { this.fire(MouseWheelEvent, evt); }, - mousemove: move(MouseMoveEvent, MouseOverEvent, MouseOutEvent), + pointermove: move(PointerMoveEvent, PointerOverEvent, PointerOutEvent), dragover: move(DragOverEvent, DragEnterEvent, DragLeaveEvent), - mouseout: inactive(MouseOutEvent), + pointerout: inactive(PointerOutEvent), dragleave: inactive(DragLeaveEvent), - mousedown(evt) { + pointerdown(evt) { this._down = this._active; - this.fire(MouseDownEvent, evt); + this.fire(PointerDownEvent, evt); }, click(evt) { if (this._down === this._active) { @@ -17948,8 +17993,8 @@ o = this._origin; return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]); }, - // find the scenegraph item at the current mouse position - // x, y -- the absolute x, y mouse coordinates on the canvas element + // find the scenegraph item at the current pointer position + // x, y -- the absolute x, y pointer coordinates on the canvas element // gx, gy -- the relative coordinates within the current group pick(scene, x, y, gx, gy) { const g = this.context(), @@ -17985,7 +18030,7 @@ this._dirty = new Bounds(); this._tempb = new Bounds(); } - const base$1 = Renderer.prototype; + const base$2 = Renderer.prototype; const viewBounds = (origin, width, height) => new Bounds().set(0, 0, width, height).translate(-origin[0], -origin[1]); function clipToBounds(g, b, origin) { // expand bounds by 1 pixel, then round to pixel boundaries @@ -18016,10 +18061,10 @@ } // this method will invoke resize to size the canvas appropriately - return base$1.initialize.call(this, el, width, height, origin, scaleFactor); + return base$2.initialize.call(this, el, width, height, origin, scaleFactor); }, resize(width, height, origin, scaleFactor) { - base$1.resize.call(this, width, height, origin, scaleFactor); + base$2.resize.call(this, width, height, origin, scaleFactor); if (this._canvas) { // configure canvas size and transform resize(this._canvas, this._width, this._height, this._origin, this._scale, this._options.context); @@ -18048,7 +18093,7 @@ } this._dirty.union(b); }, - _render(scene) { + _render(scene, markTypes) { const g = this.context(), o = this._origin, w = this._width, @@ -18062,17 +18107,20 @@ this.clear(-o[0], -o[1], w, h); // render - this.draw(g, scene, b); + this.draw(g, scene, b, markTypes); // takedown g.restore(); db.clear(); return this; }, - draw(ctx, scene, bounds) { + draw(ctx, scene, bounds, markTypes) { + if (scene.marktype !== 'group' && markTypes != null && !markTypes.includes(scene.marktype)) { + return; + } const mark = Marks[scene.marktype]; if (scene.clip) clip$2(ctx, scene); - mark.draw.call(this, ctx, scene, bounds); + mark.draw.call(this, ctx, scene, bounds, markTypes); if (scene.clip) ctx.restore(); }, clear(x, y, w, h) { @@ -18371,7 +18419,7 @@ this._root = null; this._defs = null; } - const base = Renderer.prototype; + const base$1 = Renderer.prototype; inherits(SVGRenderer, Renderer, { /** * Initialize a new SVGRenderer instance. @@ -18406,7 +18454,7 @@ // set background color if defined this.background(this._bgcolor); - return base.initialize.call(this, el, width, height, origin, scaleFactor); + return base$1.initialize.call(this, el, width, height, origin, scaleFactor); }, /** * Get / set the background color. @@ -18415,7 +18463,7 @@ if (arguments.length && this._svg) { this._svg.style.setProperty('background-color', bgcolor); } - return base.background.apply(this, arguments); + return base$1.background.apply(this, arguments); }, /** * Resize the display. @@ -18428,7 +18476,7 @@ * @return {SVGRenderer} - This renderer instance; */ resize(width, height, origin, scaleFactor) { - base.resize.call(this, width, height, origin, scaleFactor); + base$1.resize.call(this, width, height, origin, scaleFactor); if (this._svg) { setAttributes(this._svg, { width: this._width * this._scale, @@ -18475,12 +18523,14 @@ /** * Internal rendering method. * @param {object} scene - The root mark of a scenegraph to render. + * @param {Array} markTypes - Array of the mark types to render. + * If undefined, render all mark types */ - _render(scene) { + _render(scene, markTypes) { // perform spot updates and re-render markup if (this._dirtyCheck()) { if (this._dirtyAll) this._clearDefs(); - this.mark(this._root, scene); + this.mark(this._root, scene, undefined, markTypes); domClear(this._root, 1); } this.defs(); @@ -18570,16 +18620,23 @@ * @param {SVGElement} el - The parent element in the SVG tree. * @param {object} scene - The mark parent to render. * @param {SVGElement} prev - The previous sibling in the SVG tree. + * @param {Array} markTypes - Array of the mark types to render. + * If undefined, render all mark types */ - mark(el, scene, prev) { + mark(el, scene, prev, markTypes) { if (!this.isDirty(scene)) { return scene._svg; } const svg = this._svg, - mdef = Marks[scene.marktype], + markType = scene.marktype, + mdef = Marks[markType], events = scene.interactive === false ? 'none' : null, isGroup = mdef.tag === 'g'; const parent = bind$1(scene, el, prev, 'g', svg); + if (markType !== 'group' && markTypes != null && !markTypes.includes(markType)) { + domClear(parent, 0); + return scene._svg; + } parent.setAttribute('class', cssClass(scene)); // apply aria attributes to parent container element @@ -18596,7 +18653,7 @@ node = bind$1(item, parent, sibling, mdef.tag, svg); if (dirty) { this._update(mdef, node, item); - if (isGroup) recurse(this, node, item); + if (isGroup) recurse(this, node, item, markTypes); } sibling = node; ++i; @@ -18777,14 +18834,14 @@ } // Recursively process group contents. - function recurse(renderer, el, group) { + function recurse(renderer, el, group, markTypes) { // child 'g' element is second to last among children (path, g, path) // other children here are foreground and background path elements el = el.lastChild.previousSibling; let prev, idx = 0; visit(group, item => { - prev = renderer.mark(el, item, prev); + prev = renderer.mark(el, item, prev, markTypes); ++idx; }); @@ -19288,7 +19345,139 @@ } return s; } + + /** + * @typedef {Object} HybridRendererOptions + * + * @property {string[]} [svgMarkTypes=['text']] - An array of SVG mark types to render + * in the SVG layer. All other mark types + * will be rendered in the Canvas layer. + * @property {boolean} [svgOnTop=true] - Flag to determine if SVG should be rendered on top. + * @property {boolean} [debug=false] - Flag to enable or disable debugging mode. When true, + * the top layer will be stacked below the bottom layer + * rather than overlaid on top. + */ + + /** @type {HybridRendererOptions} */ + const OPTS = { + svgMarkTypes: ['text'], + svgOnTop: true, + debug: false + }; + + /** + * Configure the HybridRenderer + * + * @param {HybridRendererOptions} options - HybridRenderer configuration options. + */ + function setHybridRendererOptions(options) { + OPTS['svgMarkTypes'] = options.svgMarkTypes ?? ['text']; + OPTS['svgOnTop'] = options.svgOnTop ?? true; + OPTS['debug'] = options.debug ?? false; + } + function HybridRenderer(loader) { + Renderer.call(this, loader); + this._svgRenderer = new SVGRenderer(loader); + this._canvasRenderer = new CanvasRenderer(loader); + } + const base = Renderer.prototype; + inherits(HybridRenderer, Renderer, { + /** + * Initialize a new HybridRenderer instance. + * @param {DOMElement} el - The containing DOM element for the display. + * @param {number} width - The coordinate width of the display, in pixels. + * @param {number} height - The coordinate height of the display, in pixels. + * @param {Array} origin - The origin of the display, in pixels. + * The coordinate system will be translated to this point. + * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply + * the width and height to determine the final pixel size. + * @return {HybridRenderer} - This renderer instance. + */ + initialize(el, width, height, origin, scaleFactor) { + this._root_el = domChild(el, 0, 'div'); + const bottomEl = domChild(this._root_el, 0, 'div'); + const topEl = domChild(this._root_el, 1, 'div'); + this._root_el.style.position = 'relative'; + + // Set position absolute to overlay svg on top of canvas + if (!OPTS.debug) { + bottomEl.style.height = '100%'; + topEl.style.position = 'absolute'; + topEl.style.top = '0'; + topEl.style.left = '0'; + topEl.style.height = '100%'; + topEl.style.width = '100%'; + } + this._svgEl = OPTS.svgOnTop ? topEl : bottomEl; + this._canvasEl = OPTS.svgOnTop ? bottomEl : topEl; + + // pointer-events to none on SVG layer so that canvas gets all events + this._svgEl.style.pointerEvents = 'none'; + this._canvasRenderer.initialize(this._canvasEl, width, height, origin, scaleFactor); + this._svgRenderer.initialize(this._svgEl, width, height, origin, scaleFactor); + return base.initialize.call(this, el, width, height, origin, scaleFactor); + }, + /** + * Flag a mark item as dirty. + * @param {Item} item - The mark item. + */ + dirty(item) { + if (OPTS.svgMarkTypes.includes(item.mark.marktype)) { + this._svgRenderer.dirty(item); + } else { + this._canvasRenderer.dirty(item); + } + return this; + }, + /** + * Internal rendering method. + * @param {object} scene - The root mark of a scenegraph to render. + * @param {Array} markTypes - Array of the mark types to render. + * If undefined, render all mark types + */ + _render(scene, markTypes) { + const allMarkTypes = markTypes ?? ['arc', 'area', 'image', 'line', 'path', 'rect', 'rule', 'shape', 'symbol', 'text', 'trail']; + const canvasMarkTypes = allMarkTypes.filter(m => !OPTS.svgMarkTypes.includes(m)); + this._svgRenderer.render(scene, OPTS.svgMarkTypes); + this._canvasRenderer.render(scene, canvasMarkTypes); + }, + /** + * Resize the display. + * @param {number} width - The new coordinate width of the display, in pixels. + * @param {number} height - The new coordinate height of the display, in pixels. + * @param {Array} origin - The new origin of the display, in pixels. + * The coordinate system will be translated to this point. + * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply + * the width and height to determine the final pixel size. + * @return {SVGRenderer} - This renderer instance; + */ + resize(width, height, origin, scaleFactor) { + base.resize.call(this, width, height, origin, scaleFactor); + this._svgRenderer.resize(width, height, origin, scaleFactor); + this._canvasRenderer.resize(width, height, origin, scaleFactor); + return this; + }, + background(bgcolor) { + // Propagate background color to lower canvas renderer + if (OPTS.svgOnTop) { + this._canvasRenderer.background(bgcolor); + } else { + this._svgRenderer.background(bgcolor); + } + return this; + } + }); + function HybridHandler(loader, tooltip) { + CanvasHandler.call(this, loader, tooltip); + } + inherits(HybridHandler, CanvasHandler, { + initialize(el, origin, obj) { + const canvas = domChild(domChild(el, 0, 'div'), OPTS.svgOnTop ? 0 : 1, 'div'); + return CanvasHandler.prototype.initialize.call(this, canvas, origin, obj); + } + }); const Canvas = 'canvas'; + const Hybrid = 'hybrid'; const PNG = 'png'; const SVG = 'svg'; const None$1 = 'none'; @@ -19296,6 +19485,7 @@ Canvas: Canvas, PNG: PNG, SVG: SVG, + Hybrid: Hybrid, None: None$1 }; const modules = {}; @@ -19309,6 +19499,11 @@ headless: SVGStringRenderer, handler: SVGHandler }; + modules[Hybrid] = { + renderer: HybridRenderer, + headless: HybridRenderer, + handler: HybridHandler + }; modules[None$1] = {}; function renderModule(name, _) { name = String(name || '').toLowerCase(); @@ -31593,7 +31788,7 @@ // map polygons to paths for (let i = 0, n = data.length; i < n; ++i) { const polygon = voronoi.cellPolygon(i); - data[i][as] = polygon ? toPathString(polygon) : null; + data[i][as] = polygon && !isPoint(polygon) ? toPathString(polygon) : null; } return pulse.reflow(_.modified()).modifies(as); } @@ -31607,6 +31802,9 @@ for (; p[n][0] === x && p[n][1] === y; --n); return 'M' + p.slice(0, n + 1).join('L') + 'Z'; } + function isPoint(p) { + return p.length === 2 && p[0][0] === p[1][0] && p[0][1] === p[1][1]; + } var voronoi = /*#__PURE__*/Object.freeze({ __proto__: null, @@ -32822,7 +33020,7 @@ resolvefilter: ResolveFilter }); - var version = "5.25.0"; + var version = "5.26.0"; const RawCode = 'RawCode'; const Literal = 'Literal'; @@ -34403,6 +34601,15 @@ return codegen; } + // Registers vega-util field accessors to protect against XSS attacks + const SELECTION_GETTER = Symbol('vega_selection_getter'); + function getter(f) { + if (!f.getter || !f.getter[SELECTION_GETTER]) { + f.getter = field$1(f.field); + f.getter[SELECTION_GETTER] = true; + } + return f.getter; + } const Intersect = 'intersect'; const Union = 'union'; const VlMulti = 'vlMulti'; @@ -34428,11 +34635,10 @@ f; for (; i < n; ++i) { f = fields[i]; - f.getter = field$1.getter || field$1(f.field); - dval = f.getter(datum); + dval = getter(f)(datum); if (isDate$1(dval)) dval = toNumber(dval); if (isDate$1(values[i])) values[i] = toNumber(values[i]); - if (isDate$1(values[i][0])) values[i] = values[i].map(toNumber); + if (isArray(values[i]) && isDate$1(values[i][0])) values[i] = values[i].map(toNumber); if (f.type === TYPE_ENUM) { // Enumerated fields can either specify individual values (single/multi selections) // or an array of values (interval selections). @@ -34540,7 +34746,7 @@ */ function selectionTuples(array, base) { return array.map(x => extend$1(base.fields ? { - values: base.fields.map(f => (f.getter || (f.getter = field$1(f.field)))(x.datum)) + values: base.fields.map(f => getter(f)(x.datum)) } : { [SelectionId]: $selectionId(x.datum) }, base)); @@ -34855,6 +35061,10 @@ const geoArea = geoMethod('area', geoArea$1); const geoBounds = geoMethod('bounds', geoBounds$1); const geoCentroid = geoMethod('centroid', geoCentroid$1); + function geoScale(projection, group) { + const p = getScale(projection, (group || this).context); + return p && p.scale(); + } function inScope(item) { const group = this.context.group; let value = false; @@ -35400,6 +35610,7 @@ expressionFunction('geoBounds', geoBounds, scaleVisitor); expressionFunction('geoCentroid', geoCentroid, scaleVisitor); expressionFunction('geoShape', geoShape, scaleVisitor); + expressionFunction('geoScale', geoScale, scaleVisitor); expressionFunction('indata', indata, indataVisitor); expressionFunction('data', data$1, dataVisitor); expressionFunction('treePath', treePath, dataVisitor); @@ -36064,8 +36275,8 @@ item: null })); - // evaluate cursor on each mousemove event - view.on(view.events('view', 'mousemove'), cursor, (_, event) => { + // evaluate cursor on each pointermove event + view.on(view.events('view', 'pointermove'), cursor, (_, event) => { const value = cursor.value, user = value ? isString(value) ? value : value.user : Default, item = event.item && event.item.cursor || null; @@ -36337,11 +36548,11 @@ hoverSet = [hoverSet || 'hover']; leaveSet = [leaveSet || 'update', hoverSet[0]]; - // invoke hover set upon mouseover - this.on(this.events('view', 'mouseover', itemFilter), markTarget, invoke(hoverSet)); + // invoke hover set upon pointerover + this.on(this.events('view', 'pointerover', itemFilter), markTarget, invoke(hoverSet)); - // invoke leave set upon mouseout - this.on(this.events('view', 'mouseout', itemFilter), markTarget, invoke(leaveSet)); + // invoke leave set upon pointerout + this.on(this.events('view', 'pointerout', itemFilter), markTarget, invoke(leaveSet)); return this; } @@ -41191,6 +41402,7 @@ } // -- Transforms ----- + extend$1(transforms, tx, vtx, encode$1, geo, force, label, tree, reg, voronoi, wordcloud, xf); exports.Bounds = Bounds; @@ -41207,6 +41419,8 @@ exports.GroupItem = GroupItem; exports.HOURS = HOURS; exports.Handler = Handler; + exports.HybridHandler = HybridHandler; + exports.HybridRenderer = HybridRenderer; exports.Info = Info; exports.Item = Item; exports.MILLISECONDS = MILLISECONDS; @@ -41381,6 +41595,7 @@ exports.sceneZOrder = zorder; exports.scheme = scheme; exports.serializeXML = serializeXML; + exports.setHybridRendererOptions = setHybridRendererOptions; exports.setRandom = setRandom; exports.span = span; exports.splitAccessPath = splitAccessPath; diff --git a/docs/vega.min.js b/docs/vega.min.js index 559d141a47..0f82a801c1 100644 --- a/docs/vega.min.js +++ b/docs/vega.min.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).vega={})}(this,(function(t){"use strict";function e(t,e,n){return t.fields=e||[],t.fname=n,t}function n(t){return null==t?null:t.fname}function r(t){return null==t?null:t.fields}function i(t){return 1===t.length?o(t[0]):a(t)}const o=t=>function(e){return e[t]},a=t=>{const e=t.length;return function(n){for(let r=0;rr&&c(),s=r=i+1):"]"===o&&(s||u("Access path missing open bracket: "+t),s>0&&c(),s=0,r=i+1):i>r?c():r=i+1}return s&&u("Access path missing closing bracket: "+t),a&&u("Access path missing closing quote: "+t),i>r&&(i++,c()),e}function l(t,n,r){const o=s(t);return t=1===o.length?o[0]:t,e((r&&r.get||i)(o),[t],n||t)}const c=l("id"),f=e((t=>t),[],"identity"),h=e((()=>0),[],"zero"),d=e((()=>1),[],"one"),p=e((()=>!0),[],"true"),g=e((()=>!1),[],"false");function m(t,e,n){const r=[e].concat([].slice.call(n));console[t].apply(console,r)}const y=0,v=1,_=2,x=3,b=4;function w(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:m,r=t||y;return{level(t){return arguments.length?(r=+t,this):r},error(){return r>=v&&n(e||"error","ERROR",arguments),this},warn(){return r>=_&&n(e||"warn","WARN",arguments),this},info(){return r>=x&&n(e||"log","INFO",arguments),this},debug(){return r>=b&&n(e||"log","DEBUG",arguments),this}}}var k=Array.isArray;function A(t){return t===Object(t)}const M=t=>"__proto__"!==t;function E(){for(var t=arguments.length,e=new Array(t),n=0;n{for(const n in e)if("signals"===n)t.signals=C(t.signals,e.signals);else{const r="legend"===n?{layout:1}:"style"===n||null;D(t,n,e[n],r)}return t}),{})}function D(t,e,n,r){if(!M(e))return;let i,o;if(A(n)&&!k(n))for(i in o=A(t[e])?t[e]:t[e]={},n)r&&(!0===r||r[i])?D(o,i,n[i]):M(i)&&(o[i]=n[i]);else t[e]=n}function C(t,e){if(null==t)return e;const n={},r=[];function i(t){n[t.name]||(n[t.name]=1,r.push(t))}return e.forEach(i),t.forEach(i),r}function F(t){return t[t.length-1]}function S(t){return null==t||""===t?null:+t}const $=t=>e=>t*Math.exp(e),T=t=>e=>Math.log(t*e),B=t=>e=>Math.sign(e)*Math.log1p(Math.abs(e/t)),N=t=>e=>Math.sign(e)*Math.expm1(Math.abs(e))*t,z=t=>e=>e<0?-Math.pow(-e,t):Math.pow(e,t);function O(t,e,n,r){const i=n(t[0]),o=n(F(t)),a=(o-i)*e;return[r(i-a),r(o-a)]}function R(t,e){return O(t,e,S,f)}function U(t,e){var n=Math.sign(t[0]);return O(t,e,T(n),$(n))}function L(t,e,n){return O(t,e,z(n),z(1/n))}function q(t,e,n){return O(t,e,B(n),N(n))}function P(t,e,n,r,i){const o=r(t[0]),a=r(F(t)),u=null!=e?r(e):(o+a)/2;return[i(u+(o-u)*n),i(u+(a-u)*n)]}function j(t,e,n){return P(t,e,n,S,f)}function I(t,e,n){const r=Math.sign(t[0]);return P(t,e,n,T(r),$(r))}function W(t,e,n,r){return P(t,e,n,z(r),z(1/r))}function H(t,e,n,r){return P(t,e,n,B(r),N(r))}function Y(t){return 1+~~(new Date(t).getMonth()/3)}function G(t){return 1+~~(new Date(t).getUTCMonth()/3)}function V(t){return null!=t?k(t)?t:[t]:[]}function X(t,e,n){let r,i=t[0],o=t[1];return o=n-e?[e,n]:[i=Math.min(Math.max(i,e),n-r),i+r]}function J(t){return"function"==typeof t}const Z="descending";function Q(t,n,i){i=i||{},n=V(n)||[];const o=[],a=[],u={},s=i.comparator||tt;return V(t).forEach(((t,e)=>{null!=t&&(o.push(n[e]===Z?-1:1),a.push(t=J(t)?t:l(t,null,i)),(r(t)||[]).forEach((t=>u[t]=1)))})),0===a.length?null:e(s(a,o),Object.keys(u))}const K=(t,e)=>(te||null==e)&&null!=t?1:(e=e instanceof Date?+e:e,(t=t instanceof Date?+t:t)!==t&&e==e?-1:e!=e&&t==t?1:0),tt=(t,e)=>1===t.length?et(t[0],e[0]):nt(t,e,t.length),et=(t,e)=>function(n,r){return K(t(n),t(r))*e},nt=(t,e,n)=>(e.push(0),function(r,i){let o,a=0,u=-1;for(;0===a&&++ut}function it(t,e){let n;return r=>{n&&clearTimeout(n),n=setTimeout((()=>(e(r),n=null)),t)}}function ot(t){for(let e,n,r=1,i=arguments.length;ro&&(o=r))}else{for(r=e(t[a]);ao&&(o=r))}return[i,o]}function ut(t,e){const n=t.length;let r,i,o,a,u,s=-1;if(null==e){for(;++s=i){r=o=i;break}if(s===n)return[-1,-1];for(a=u=s;++si&&(r=i,a=s),o=i){r=o=i;break}if(s===n)return[-1,-1];for(a=u=s;++si&&(r=i,a=s),or(t)?n[t]:void 0,set(t,e){return r(t)||(++i.size,n[t]===ct&&--i.empty),n[t]=e,this},delete(t){return r(t)&&(--i.size,++i.empty,n[t]=ct),this},clear(){i.size=i.empty=0,i.object=n={}},test(t){return arguments.length?(e=t,i):e},clean(){const t={};let r=0;for(const i in n){const o=n[i];o===ct||e&&e(o)||(t[i]=o,++r)}i.size=r,i.empty=0,i.object=n=t}};return t&&Object.keys(t).forEach((e=>{i.set(e,t[e])})),i}function ht(t,e,n,r,i,o){if(!n&&0!==n)return o;const a=+n;let u,s=t[0],l=F(t);la&&(i=o,o=a,a=i),r=void 0===r||r,((n=void 0===n||n)?o<=t:ot.replace(/\\(.)/g,"$1"))):V(t));const o=t&&t.length,a=r&&r.get||i,u=t=>a(n?[t]:s(t));let l;if(o)if(1===o){const e=u(t[0]);l=function(t){return""+e(t)}}else{const e=t.map(u);l=function(t){let n=""+e[0](t),r=0;for(;++r{e={},n={},r=0},o=(i,o)=>(++r>t&&(n=e,e={},r=1),e[i]=o);return i(),{clear:i,has:t=>lt(e,t)||lt(n,t),get:t=>lt(e,t)?e[t]:lt(n,t)?o(t,n[t]):void 0,set:(t,n)=>lt(e,t)?e[t]=n:o(t,n)}}function Mt(t,e,n,r){const i=e.length,o=n.length;if(!o)return e;if(!i)return n;const a=r||new e.constructor(i+o);let u=0,s=0,l=0;for(;u0?n[s++]:e[u++];for(;u=0;)n+=t;return n}function Dt(t,e,n,r){const i=n||" ",o=t+"",a=e-o.length;return a<=0?o:"left"===r?Et(i,a)+o:"center"===r?Et(i,~~(a/2))+o+Et(i,Math.ceil(a/2)):o+Et(i,a)}function Ct(t){return t&&F(t)-t[0]||0}function Ft(t){return k(t)?"["+t.map(Ft)+"]":A(t)||xt(t)?JSON.stringify(t).replace("\u2028","\\u2028").replace("\u2029","\\u2029"):t}function St(t){return null==t||""===t?null:!(!t||"false"===t||"0"===t)&&!!t}const $t=t=>vt(t)||mt(t)?t:Date.parse(t);function Tt(t,e){return e=e||$t,null==t||""===t?null:e(t)}function Bt(t){return null==t||""===t?null:t+""}function Nt(t){const e={},n=t.length;for(let r=0;r9999?"+"+Wt(e,6):Wt(e,4))+"-"+Wt(t.getUTCMonth()+1,2)+"-"+Wt(t.getUTCDate(),2)+(o?"T"+Wt(n,2)+":"+Wt(r,2)+":"+Wt(i,2)+"."+Wt(o,3)+"Z":i?"T"+Wt(n,2)+":"+Wt(r,2)+":"+Wt(i,2)+"Z":r||n?"T"+Wt(n,2)+":"+Wt(r,2)+"Z":"")}function Yt(t){var e=new RegExp('["'+t+"\n\r]"),n=t.charCodeAt(0);function r(t,e){var r,i=[],o=t.length,a=0,u=0,s=o<=0,l=!1;function c(){if(s)return Ut;if(l)return l=!1,Rt;var e,r,i=a;if(t.charCodeAt(i)===Lt){for(;a++=o?s=!0:(r=t.charCodeAt(a++))===qt?l=!0:r===Pt&&(l=!0,t.charCodeAt(a)===qt&&++a),t.slice(i+1,e-1).replace(/""/g,'"')}for(;a1)r=function(t,e,n){var r,i=[],o=[];function a(t){var e=t<0?~t:t;(o[e]||(o[e]=[])).push({i:t,g:r})}function u(t){t.forEach(a)}function s(t){t.forEach(u)}function l(t){t.forEach(s)}function c(t){switch(r=t,t.type){case"GeometryCollection":t.geometries.forEach(c);break;case"LineString":u(t.arcs);break;case"MultiLineString":case"Polygon":s(t.arcs);break;case"MultiPolygon":l(t.arcs)}}return c(e),o.forEach(null==n?function(t){i.push(t[0].i)}:function(t){n(t[0].g,t[t.length-1].g)&&i.push(t[0].i)}),i}(0,e,n);else for(i=0,r=new Array(o=t.arcs.length);ie?1:t>=e?0:NaN}function ee(t,e){return null==t||null==e?NaN:et?1:e>=t?0:NaN}function ne(t){let e,n,r;function i(t,r){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.length;if(i>>1;n(t[e],r)<0?i=e+1:o=e}while(ite(t(e),n),r=(e,n)=>t(e)-n):(e=t===te||t===ee?t:re,n=t,r=t),{left:i,center:function(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;const o=i(t,e,n,(arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.length)-1);return o>n&&r(t[o-1],e)>-r(t[o],e)?o-1:o},right:function(t,r){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.length;if(i>>1;n(t[e],r)<=0?i=e+1:o=e}while(i0){for(o=t[--i];i>0&&(e=o,n=t[--i],o=e+n,r=n-(o-e),!r););i>0&&(r<0&&t[i-1]<0||r>0&&t[i-1]>0)&&(n=2*r,e=o+n,n==e-o&&(o=e))}return o}}class ce extends Map{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ge;if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[e,n]of t)this.set(e,n)}get(t){return super.get(he(this,t))}has(t){return super.has(he(this,t))}set(t,e){return super.set(de(this,t),e)}delete(t){return super.delete(pe(this,t))}}class fe extends Set{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ge;if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const e of t)this.add(e)}has(t){return super.has(he(this,t))}add(t){return super.add(de(this,t))}delete(t){return super.delete(pe(this,t))}}function he(t,e){let{_intern:n,_key:r}=t;const i=r(e);return n.has(i)?n.get(i):e}function de(t,e){let{_intern:n,_key:r}=t;const i=r(e);return n.has(i)?n.get(i):(n.set(i,e),e)}function pe(t,e){let{_intern:n,_key:r}=t;const i=r(e);return n.has(i)&&(e=n.get(i),n.delete(i)),e}function ge(t){return null!==t&&"object"==typeof t?t.valueOf():t}function me(t,e){return(null==t||!(t>=t))-(null==e||!(e>=e))||(te?1:0)}const ye=Math.sqrt(50),ve=Math.sqrt(10),_e=Math.sqrt(2);function xe(t,e,n){const r=(e-t)/Math.max(0,n),i=Math.floor(Math.log10(r)),o=r/Math.pow(10,i),a=o>=ye?10:o>=ve?5:o>=_e?2:1;let u,s,l;return i<0?(l=Math.pow(10,-i)/a,u=Math.round(t*l),s=Math.round(e*l),u/le&&--s,l=-l):(l=Math.pow(10,i)*a,u=Math.round(t/l),s=Math.round(e/l),u*le&&--s),s0))return[];if((t=+t)===(e=+e))return[t];const r=e=i))return[];const u=o-i+1,s=new Array(u);if(r)if(a<0)for(let t=0;t=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n=i)&&(n=i)}return n}function Me(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n>e||void 0===n&&e>=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}function Ee(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1/0,i=arguments.length>4?arguments[4]:void 0;if(e=Math.floor(e),n=Math.floor(Math.max(0,n)),r=Math.floor(Math.min(t.length-1,r)),!(n<=e&&e<=r))return t;for(i=void 0===i?me:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:te;if(t===te)return me;if("function"!=typeof t)throw new TypeError("compare is not a function");return(e,n)=>{const r=t(e,n);return r||0===r?r:(0===t(n,n))-(0===t(e,e))}}(i);r>n;){if(r-n>600){const o=r-n+1,a=e-n+1,u=Math.log(o),s=.5*Math.exp(2*u/3),l=.5*Math.sqrt(u*s*(o-s)/o)*(a-o/2<0?-1:1);Ee(t,e,Math.max(n,Math.floor(e-a*s/o+l)),Math.min(r,Math.floor(e+(o-a)*s/o+l)),i)}const o=t[e];let a=n,u=r;for(De(t,n,e),i(t[r],o)>0&&De(t,n,r);a0;)--u}0===i(t[n],o)?De(t,n,u):(++u,De(t,u,r)),u<=e&&(n=u+1),e<=u&&(r=u-1)}return t}function De(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function Ce(t,e,n){if(t=Float64Array.from(function*(t,e){if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(yield e);else{let n=-1;for(let r of t)null!=(r=e(r,++n,t))&&(r=+r)>=r&&(yield r)}}(t,n)),(r=t.length)&&!isNaN(e=+e)){if(e<=0||r<2)return Me(t);if(e>=1)return Ae(t);var r,i=(r-1)*e,o=Math.floor(i),a=Ae(Ee(t,o).subarray(0,o+1));return a+(Me(t.subarray(o+1))-a)*(i-o)}}function Fe(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:ie;if((r=t.length)&&!isNaN(e=+e)){if(e<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,o=Math.floor(i),a=+n(t[o],o,t);return a+(+n(t[o+1],o+1,t)-a)*(i-o)}}function Se(t,e){return Ce(t,.5,e)}function $e(t){return Array.from(function*(t){for(const e of t)yield*e}(t))}function Te(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((e-t)/n)),o=new Array(i);++r1?r[0]+r.slice(2):r,+t.slice(n+1)]}function Oe(t){return(t=ze(Math.abs(t)))?t[1]:NaN}var Re,Ue=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Le(t){if(!(e=Ue.exec(t)))throw new Error("invalid format: "+t);var e;return new qe({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function qe(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function Pe(t,e){var n=ze(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}Le.prototype=qe.prototype,qe.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var je={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>Pe(100*t,e),r:Pe,s:function(t,e){var n=ze(t,e);if(!n)return t+"";var r=n[0],i=n[1],o=i-(Re=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,a=r.length;return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+ze(t,Math.max(0,e+o-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function Ie(t){return t}var We,He,Ye,Ge=Array.prototype.map,Ve=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Xe(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?Ie:(e=Ge.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,o=[],a=0,u=e[0],s=0;i>0&&u>0&&(s+u+1>r&&(u=Math.max(1,r-s)),o.push(t.substring(i-=u,i+u)),!((s+=u+1)>r));)u=e[a=(a+1)%e.length];return o.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",o=void 0===t.currency?"":t.currency[1]+"",a=void 0===t.decimal?".":t.decimal+"",u=void 0===t.numerals?Ie:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(Ge.call(t.numerals,String)),s=void 0===t.percent?"%":t.percent+"",l=void 0===t.minus?"−":t.minus+"",c=void 0===t.nan?"NaN":t.nan+"";function f(t){var e=(t=Le(t)).fill,n=t.align,f=t.sign,h=t.symbol,d=t.zero,p=t.width,g=t.comma,m=t.precision,y=t.trim,v=t.type;"n"===v?(g=!0,v="g"):je[v]||(void 0===m&&(m=12),y=!0,v="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var _="$"===h?i:"#"===h&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",x="$"===h?o:/[%p]/.test(v)?s:"",b=je[v],w=/[defgprs%]/.test(v);function k(t){var i,o,s,h=_,k=x;if("c"===v)k=b(t)+k,t="";else{var A=(t=+t)<0||1/t<0;if(t=isNaN(t)?c:b(Math.abs(t),m),y&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),A&&0==+t&&"+"!==f&&(A=!1),h=(A?"("===f?f:l:"-"===f||"("===f?"":f)+h,k=("s"===v?Ve[8+Re/3]:"")+k+(A&&"("===f?")":""),w)for(i=-1,o=t.length;++i(s=t.charCodeAt(i))||s>57){k=(46===s?a+t.slice(i+1):t.slice(i))+k,t=t.slice(0,i);break}}g&&!d&&(t=r(t,1/0));var M=h.length+t.length+k.length,E=M>1)+h+t+k+E.slice(M);break;default:t=E+h+t+k}return u(t)}return m=void 0===m?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,m)):Math.max(0,Math.min(20,m)),k.toString=function(){return t+""},k}return{format:f,formatPrefix:function(t,e){var n=f(((t=Le(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(Oe(e)/3))),i=Math.pow(10,-r),o=Ve[8+r/3];return function(t){return n(i*t)+o}}}}function Je(t){return Math.max(0,-Oe(Math.abs(t)))}function Ze(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Oe(e)/3)))-Oe(Math.abs(t)))}function Qe(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Oe(e)-Oe(t))+1}!function(t){We=Xe(t),He=We.format,Ye=We.formatPrefix}({thousands:",",grouping:[3],currency:["$",""]});const Ke=new Date,tn=new Date;function en(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=e=>(t(e=new Date(+e)),e),i.ceil=n=>(t(n=new Date(n-1)),e(n,1),t(n),n),i.round=t=>{const e=i(t),n=i.ceil(t);return t-e(e(t=new Date(+t),null==n?1:Math.floor(n)),t),i.range=(n,r,o)=>{const a=[];if(n=i.ceil(n),o=null==o?1:Math.floor(o),!(n0))return a;let u;do{a.push(u=new Date(+n)),e(n,o),t(n)}while(uen((e=>{if(e>=e)for(;t(e),!n(e);)e.setTime(e-1)}),((t,r)=>{if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););})),n&&(i.count=(e,r)=>(Ke.setTime(+e),tn.setTime(+r),t(Ke),t(tn),Math.floor(n(Ke,tn))),i.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?e=>r(e)%t==0:e=>i.count(0,e)%t==0):i:null)),i}const nn=en((()=>{}),((t,e)=>{t.setTime(+t+e)}),((t,e)=>e-t));nn.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?en((e=>{e.setTime(Math.floor(e/t)*t)}),((e,n)=>{e.setTime(+e+n*t)}),((e,n)=>(n-e)/t)):nn:null),nn.range;const rn=1e3,on=60*rn,an=60*on,un=24*an,sn=7*un,ln=30*un,cn=365*un,fn=en((t=>{t.setTime(t-t.getMilliseconds())}),((t,e)=>{t.setTime(+t+e*rn)}),((t,e)=>(e-t)/rn),(t=>t.getUTCSeconds()));fn.range;const hn=en((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*rn)}),((t,e)=>{t.setTime(+t+e*on)}),((t,e)=>(e-t)/on),(t=>t.getMinutes()));hn.range;const dn=en((t=>{t.setUTCSeconds(0,0)}),((t,e)=>{t.setTime(+t+e*on)}),((t,e)=>(e-t)/on),(t=>t.getUTCMinutes()));dn.range;const pn=en((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*rn-t.getMinutes()*on)}),((t,e)=>{t.setTime(+t+e*an)}),((t,e)=>(e-t)/an),(t=>t.getHours()));pn.range;const gn=en((t=>{t.setUTCMinutes(0,0,0)}),((t,e)=>{t.setTime(+t+e*an)}),((t,e)=>(e-t)/an),(t=>t.getUTCHours()));gn.range;const mn=en((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*on)/un),(t=>t.getDate()-1));mn.range;const yn=en((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/un),(t=>t.getUTCDate()-1));yn.range;const vn=en((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/un),(t=>Math.floor(t/un)));function _n(t){return en((e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),((t,e)=>{t.setDate(t.getDate()+7*e)}),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*on)/sn))}vn.range;const xn=_n(0),bn=_n(1),wn=_n(2),kn=_n(3),An=_n(4),Mn=_n(5),En=_n(6);function Dn(t){return en((e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)}),((t,e)=>(e-t)/sn))}xn.range,bn.range,wn.range,kn.range,An.range,Mn.range,En.range;const Cn=Dn(0),Fn=Dn(1),Sn=Dn(2),$n=Dn(3),Tn=Dn(4),Bn=Dn(5),Nn=Dn(6);Cn.range,Fn.range,Sn.range,$n.range,Tn.range,Bn.range,Nn.range;const zn=en((t=>{t.setDate(1),t.setHours(0,0,0,0)}),((t,e)=>{t.setMonth(t.getMonth()+e)}),((t,e)=>e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())),(t=>t.getMonth()));zn.range;const On=en((t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)}),((t,e)=>e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())),(t=>t.getUTCMonth()));On.range;const Rn=en((t=>{t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,e)=>{t.setFullYear(t.getFullYear()+e)}),((t,e)=>e.getFullYear()-t.getFullYear()),(t=>t.getFullYear()));Rn.every=t=>isFinite(t=Math.floor(t))&&t>0?en((e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,n)=>{e.setFullYear(e.getFullYear()+n*t)})):null,Rn.range;const Un=en((t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)}),((t,e)=>e.getUTCFullYear()-t.getUTCFullYear()),(t=>t.getUTCFullYear()));function Ln(t,e,n,r,i,o){const a=[[fn,1,rn],[fn,5,5*rn],[fn,15,15*rn],[fn,30,30*rn],[o,1,on],[o,5,5*on],[o,15,15*on],[o,30,30*on],[i,1,an],[i,3,3*an],[i,6,6*an],[i,12,12*an],[r,1,un],[r,2,2*un],[n,1,sn],[e,1,ln],[e,3,3*ln],[t,1,cn]];function u(e,n,r){const i=Math.abs(n-e)/r,o=ne((t=>{let[,,e]=t;return e})).right(a,i);if(o===a.length)return t.every(ke(e/cn,n/cn,r));if(0===o)return nn.every(Math.max(ke(e,n,r),1));const[u,s]=a[i/a[o-1][2]isFinite(t=Math.floor(t))&&t>0?en((e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null,Un.range;const[qn,Pn]=Ln(Un,On,Cn,vn,gn,dn),[jn,In]=Ln(Rn,zn,xn,mn,pn,hn),Wn="year",Hn="quarter",Yn="month",Gn="week",Vn="date",Xn="day",Jn="dayofyear",Zn="hours",Qn="minutes",Kn="seconds",tr="milliseconds",er=[Wn,Hn,Yn,Gn,Vn,Xn,Jn,Zn,Qn,Kn,tr],nr=er.reduce(((t,e,n)=>(t[e]=1+n,t)),{});function rr(t){const e=V(t).slice(),n={};e.length||u("Missing time unit."),e.forEach((t=>{lt(nr,t)?n[t]=1:u(`Invalid time unit: ${t}.`)}));return(n[Gn]||n[Xn]?1:0)+(n[Hn]||n[Yn]||n[Vn]?1:0)+(n[Jn]?1:0)>1&&u(`Incompatible time units: ${t}`),e.sort(((t,e)=>nr[t]-nr[e])),e}const ir={[Wn]:"%Y ",[Hn]:"Q%q ",[Yn]:"%b ",[Vn]:"%d ",[Gn]:"W%U ",[Xn]:"%a ",[Jn]:"%j ",[Zn]:"%H:00",[Qn]:"00:%M",[Kn]:":%S",[tr]:".%L",[`${Wn}-${Yn}`]:"%Y-%m ",[`${Wn}-${Yn}-${Vn}`]:"%Y-%m-%d ",[`${Zn}-${Qn}`]:"%H:%M"};function or(t,e){const n=ot({},ir,e),r=rr(t),i=r.length;let o,a,u="",s=0;for(s=0;ss;--o)if(a=r.slice(s,o).join("-"),null!=n[a]){u+=n[a],s=o;break}return u.trim()}const ar=new Date;function ur(t){return ar.setFullYear(t),ar.setMonth(0),ar.setDate(1),ar.setHours(0,0,0,0),ar}function sr(t){return cr(new Date(t))}function lr(t){return fr(new Date(t))}function cr(t){return mn.count(ur(t.getFullYear())-1,t)}function fr(t){return xn.count(ur(t.getFullYear())-1,t)}function hr(t){return ur(t).getDay()}function dr(t,e,n,r,i,o,a){if(0<=t&&t<100){const u=new Date(-1,e,n,r,i,o,a);return u.setFullYear(t),u}return new Date(t,e,n,r,i,o,a)}function pr(t){return mr(new Date(t))}function gr(t){return yr(new Date(t))}function mr(t){const e=Date.UTC(t.getUTCFullYear(),0,1);return yn.count(e-1,t)}function yr(t){const e=Date.UTC(t.getUTCFullYear(),0,1);return Cn.count(e-1,t)}function vr(t){return ar.setTime(Date.UTC(t,0,1)),ar.getUTCDay()}function _r(t,e,n,r,i,o,a){if(0<=t&&t<100){const t=new Date(Date.UTC(-1,e,n,r,i,o,a));return t.setUTCFullYear(n.y),t}return new Date(Date.UTC(t,e,n,r,i,o,a))}function xr(t,e,n,r,i){const o=e||1,a=F(t),u=(t,e,i)=>function(t,e,n,r){const i=n<=1?t:r?(e,i)=>r+n*Math.floor((t(e,i)-r)/n):(e,r)=>n*Math.floor(t(e,r)/n);return e?(t,n)=>e(i(t,n),n):i}(n[i=i||t],r[i],t===a&&o,e),s=new Date,l=Nt(t),c=l[Wn]?u(Wn):rt(2012),f=l[Yn]?u(Yn):l[Hn]?u(Hn):h,p=l[Gn]&&l[Xn]?u(Xn,1,Gn+Xn):l[Gn]?u(Gn,1):l[Xn]?u(Xn,1):l[Vn]?u(Vn,1):l[Jn]?u(Jn,1):d,g=l[Zn]?u(Zn):h,m=l[Qn]?u(Qn):h,y=l[Kn]?u(Kn):h,v=l[tr]?u(tr):h;return function(t){s.setTime(+t);const e=c(s);return i(e,f(s),p(s,e),g(s),m(s),y(s),v(s))}}function br(t,e,n){return e+7*t-(n+6)%7}const wr={[Wn]:t=>t.getFullYear(),[Hn]:t=>Math.floor(t.getMonth()/3),[Yn]:t=>t.getMonth(),[Vn]:t=>t.getDate(),[Zn]:t=>t.getHours(),[Qn]:t=>t.getMinutes(),[Kn]:t=>t.getSeconds(),[tr]:t=>t.getMilliseconds(),[Jn]:t=>cr(t),[Gn]:t=>fr(t),[Gn+Xn]:(t,e)=>br(fr(t),t.getDay(),hr(e)),[Xn]:(t,e)=>br(1,t.getDay(),hr(e))},kr={[Hn]:t=>3*t,[Gn]:(t,e)=>br(t,0,hr(e))};function Ar(t,e){return xr(t,e||1,wr,kr,dr)}const Mr={[Wn]:t=>t.getUTCFullYear(),[Hn]:t=>Math.floor(t.getUTCMonth()/3),[Yn]:t=>t.getUTCMonth(),[Vn]:t=>t.getUTCDate(),[Zn]:t=>t.getUTCHours(),[Qn]:t=>t.getUTCMinutes(),[Kn]:t=>t.getUTCSeconds(),[tr]:t=>t.getUTCMilliseconds(),[Jn]:t=>mr(t),[Gn]:t=>yr(t),[Xn]:(t,e)=>br(1,t.getUTCDay(),vr(e)),[Gn+Xn]:(t,e)=>br(yr(t),t.getUTCDay(),vr(e))},Er={[Hn]:t=>3*t,[Gn]:(t,e)=>br(t,0,vr(e))};function Dr(t,e){return xr(t,e||1,Mr,Er,_r)}const Cr={[Wn]:Rn,[Hn]:zn.every(3),[Yn]:zn,[Gn]:xn,[Vn]:mn,[Xn]:mn,[Jn]:mn,[Zn]:pn,[Qn]:hn,[Kn]:fn,[tr]:nn},Fr={[Wn]:Un,[Hn]:On.every(3),[Yn]:On,[Gn]:Cn,[Vn]:yn,[Xn]:yn,[Jn]:yn,[Zn]:gn,[Qn]:dn,[Kn]:fn,[tr]:nn};function Sr(t){return Cr[t]}function $r(t){return Fr[t]}function Tr(t,e,n){return t?t.offset(e,n):void 0}function Br(t,e,n){return Tr(Sr(t),e,n)}function Nr(t,e,n){return Tr($r(t),e,n)}function zr(t,e,n,r){return t?t.range(e,n,r):void 0}function Or(t,e,n,r){return zr(Sr(t),e,n,r)}function Rr(t,e,n,r){return zr($r(t),e,n,r)}const Ur=1e3,Lr=6e4,qr=36e5,Pr=864e5,jr=2592e6,Ir=31536e6,Wr=[Wn,Yn,Vn,Zn,Qn,Kn,tr],Hr=Wr.slice(0,-1),Yr=Hr.slice(0,-1),Gr=Yr.slice(0,-1),Vr=Gr.slice(0,-1),Xr=[Wn,Yn],Jr=[Wn],Zr=[[Hr,1,Ur],[Hr,5,5e3],[Hr,15,15e3],[Hr,30,3e4],[Yr,1,Lr],[Yr,5,3e5],[Yr,15,9e5],[Yr,30,18e5],[Gr,1,qr],[Gr,3,108e5],[Gr,6,216e5],[Gr,12,432e5],[Vr,1,Pr],[[Wn,Gn],1,6048e5],[Xr,1,jr],[Xr,3,7776e6],[Jr,1,Ir]];function Qr(t){const e=t.extent,n=t.maxbins||40,r=Math.abs(Ct(e))/n;let i,o,a=ne((t=>t[2])).right(Zr,r);return a===Zr.length?(i=Jr,o=ke(e[0]/Ir,e[1]/Ir,n)):a?(a=Zr[r/Zr[a-1][2]=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Ao,s:Mo,S:Wi,u:Hi,U:Yi,V:Vi,w:Xi,W:Ji,x:null,X:null,y:Zi,Y:Ki,Z:eo,"%":ko},x={a:function(t){return a[t.getUTCDay()]},A:function(t){return o[t.getUTCDay()]},b:function(t){return s[t.getUTCMonth()]},B:function(t){return u[t.getUTCMonth()]},c:null,d:no,e:no,f:uo,g:_o,G:bo,H:ro,I:io,j:oo,L:ao,m:so,M:lo,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Ao,s:Mo,S:co,u:fo,U:ho,V:go,w:mo,W:yo,x:null,X:null,y:vo,Y:xo,Z:wo,"%":ko},b={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=p.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=f.exec(e.slice(n));return r?(t.w=h.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=y.exec(e.slice(n));return r?(t.m=v.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=g.exec(e.slice(n));return r?(t.m=m.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return A(t,e,n,r)},d:Ei,e:Ei,f:Ti,g:wi,G:bi,H:Ci,I:Ci,j:Di,L:$i,m:Mi,M:Fi,p:function(t,e,n){var r=l.exec(e.slice(n));return r?(t.p=c.get(r[0].toLowerCase()),n+r[0].length):-1},q:Ai,Q:Ni,s:zi,S:Si,u:yi,U:vi,V:_i,w:mi,W:xi,x:function(t,e,r){return A(t,n,e,r)},X:function(t,e,n){return A(t,r,e,n)},y:wi,Y:bi,Z:ki,"%":Bi};function w(t,e){return function(n){var r,i,o,a=[],u=-1,s=0,l=t.length;for(n instanceof Date||(n=new Date(+n));++u53)return null;"w"in o||(o.w=1),"Z"in o?(i=(r=ti(ei(o.y,0,1))).getUTCDay(),r=i>4||0===i?Fn.ceil(r):Fn(r),r=yn.offset(r,7*(o.V-1)),o.y=r.getUTCFullYear(),o.m=r.getUTCMonth(),o.d=r.getUTCDate()+(o.w+6)%7):(i=(r=Kr(ei(o.y,0,1))).getDay(),r=i>4||0===i?bn.ceil(r):bn(r),r=mn.offset(r,7*(o.V-1)),o.y=r.getFullYear(),o.m=r.getMonth(),o.d=r.getDate()+(o.w+6)%7)}else("W"in o||"U"in o)&&("w"in o||(o.w="u"in o?o.u%7:"W"in o?1:0),i="Z"in o?ti(ei(o.y,0,1)).getUTCDay():Kr(ei(o.y,0,1)).getDay(),o.m=0,o.d="W"in o?(o.w+6)%7+7*o.W-(i+5)%7:o.w+7*o.U-(i+6)%7);return"Z"in o?(o.H+=o.Z/100|0,o.M+=o.Z%100,ti(o)):Kr(o)}}function A(t,e,n,r){for(var i,o,a=0,u=e.length,s=n.length;a=s)return-1;if(37===(i=e.charCodeAt(a++))){if(i=e.charAt(a++),!(o=b[i in si?e.charAt(a++):i])||(r=o(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return _.x=w(n,_),_.X=w(r,_),_.c=w(e,_),x.x=w(n,x),x.X=w(r,x),x.c=w(e,x),{format:function(t){var e=w(t+="",_);return e.toString=function(){return t},e},parse:function(t){var e=k(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=w(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=k(t+="",!0);return e.toString=function(){return t},e}}}var ri,ii,oi,ai,ui,si={"-":"",_:" ",0:"0"},li=/^\s*\d+/,ci=/^%/,fi=/[\\^$*+?|[\]().{}]/g;function hi(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o[t.toLowerCase(),e])))}function mi(t,e,n){var r=li.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function yi(t,e,n){var r=li.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function vi(t,e,n){var r=li.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function _i(t,e,n){var r=li.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function xi(t,e,n){var r=li.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function bi(t,e,n){var r=li.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function wi(t,e,n){var r=li.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function ki(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function Ai(t,e,n){var r=li.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function Mi(t,e,n){var r=li.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function Ei(t,e,n){var r=li.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Di(t,e,n){var r=li.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function Ci(t,e,n){var r=li.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Fi(t,e,n){var r=li.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Si(t,e,n){var r=li.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function $i(t,e,n){var r=li.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Ti(t,e,n){var r=li.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Bi(t,e,n){var r=ci.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Ni(t,e,n){var r=li.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function zi(t,e,n){var r=li.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Oi(t,e){return hi(t.getDate(),e,2)}function Ri(t,e){return hi(t.getHours(),e,2)}function Ui(t,e){return hi(t.getHours()%12||12,e,2)}function Li(t,e){return hi(1+mn.count(Rn(t),t),e,3)}function qi(t,e){return hi(t.getMilliseconds(),e,3)}function Pi(t,e){return qi(t,e)+"000"}function ji(t,e){return hi(t.getMonth()+1,e,2)}function Ii(t,e){return hi(t.getMinutes(),e,2)}function Wi(t,e){return hi(t.getSeconds(),e,2)}function Hi(t){var e=t.getDay();return 0===e?7:e}function Yi(t,e){return hi(xn.count(Rn(t)-1,t),e,2)}function Gi(t){var e=t.getDay();return e>=4||0===e?An(t):An.ceil(t)}function Vi(t,e){return t=Gi(t),hi(An.count(Rn(t),t)+(4===Rn(t).getDay()),e,2)}function Xi(t){return t.getDay()}function Ji(t,e){return hi(bn.count(Rn(t)-1,t),e,2)}function Zi(t,e){return hi(t.getFullYear()%100,e,2)}function Qi(t,e){return hi((t=Gi(t)).getFullYear()%100,e,2)}function Ki(t,e){return hi(t.getFullYear()%1e4,e,4)}function to(t,e){var n=t.getDay();return hi((t=n>=4||0===n?An(t):An.ceil(t)).getFullYear()%1e4,e,4)}function eo(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+hi(e/60|0,"0",2)+hi(e%60,"0",2)}function no(t,e){return hi(t.getUTCDate(),e,2)}function ro(t,e){return hi(t.getUTCHours(),e,2)}function io(t,e){return hi(t.getUTCHours()%12||12,e,2)}function oo(t,e){return hi(1+yn.count(Un(t),t),e,3)}function ao(t,e){return hi(t.getUTCMilliseconds(),e,3)}function uo(t,e){return ao(t,e)+"000"}function so(t,e){return hi(t.getUTCMonth()+1,e,2)}function lo(t,e){return hi(t.getUTCMinutes(),e,2)}function co(t,e){return hi(t.getUTCSeconds(),e,2)}function fo(t){var e=t.getUTCDay();return 0===e?7:e}function ho(t,e){return hi(Cn.count(Un(t)-1,t),e,2)}function po(t){var e=t.getUTCDay();return e>=4||0===e?Tn(t):Tn.ceil(t)}function go(t,e){return t=po(t),hi(Tn.count(Un(t),t)+(4===Un(t).getUTCDay()),e,2)}function mo(t){return t.getUTCDay()}function yo(t,e){return hi(Fn.count(Un(t)-1,t),e,2)}function vo(t,e){return hi(t.getUTCFullYear()%100,e,2)}function _o(t,e){return hi((t=po(t)).getUTCFullYear()%100,e,2)}function xo(t,e){return hi(t.getUTCFullYear()%1e4,e,4)}function bo(t,e){var n=t.getUTCDay();return hi((t=n>=4||0===n?Tn(t):Tn.ceil(t)).getUTCFullYear()%1e4,e,4)}function wo(){return"+0000"}function ko(){return"%"}function Ao(t){return+t}function Mo(t){return Math.floor(+t/1e3)}function Eo(t){const e={};return n=>e[n]||(e[n]=t(n))}function Do(t){const e=Eo(t.format),n=t.formatPrefix;return{format:e,formatPrefix:n,formatFloat(t){const n=Le(t||",");if(null==n.precision){switch(n.precision=12,n.type){case"%":n.precision-=2;break;case"e":n.precision-=1}return r=e(n),i=e(".1f")(1)[1],t=>{const e=r(t),n=e.indexOf(i);if(n<0)return e;let o=function(t,e){let n,r=t.lastIndexOf("e");if(r>0)return r;for(r=t.length;--r>e;)if(n=t.charCodeAt(r),n>=48&&n<=57)return r+1}(e,n);const a=on;)if("0"!==e[o]){++o;break}return e.slice(0,o)+a}}return e(n);var r,i},formatSpan(t,r,i,o){o=Le(null==o?",f":o);const a=ke(t,r,i),u=Math.max(Math.abs(t),Math.abs(r));let s;if(null==o.precision)switch(o.type){case"s":return isNaN(s=Ze(a,u))||(o.precision=s),n(o,u);case"":case"e":case"g":case"p":case"r":isNaN(s=Qe(a,u))||(o.precision=s-("e"===o.type));break;case"f":case"%":isNaN(s=Je(a))||(o.precision=s-2*("%"===o.type))}return e(o)}}}let Co,Fo;function So(){return Co=Do({format:He,formatPrefix:Ye})}function $o(t){return Do(Xe(t))}function To(t){return arguments.length?Co=$o(t):Co}function Bo(t,e,n){A(n=n||{})||u(`Invalid time multi-format specifier: ${n}`);const r=e(Kn),i=e(Qn),o=e(Zn),a=e(Vn),s=e(Gn),l=e(Yn),c=e(Hn),f=e(Wn),h=t(n[tr]||".%L"),d=t(n[Kn]||":%S"),p=t(n[Qn]||"%I:%M"),g=t(n[Zn]||"%I %p"),m=t(n[Vn]||n[Xn]||"%a %d"),y=t(n[Gn]||"%b %d"),v=t(n[Yn]||"%B"),_=t(n[Hn]||"%B"),x=t(n[Wn]||"%Y");return t=>(r(t)xt(t)?e(t):Bo(e,Sr,t),utcFormat:t=>xt(t)?n(t):Bo(n,$r,t),timeParse:Eo(t.parse),utcParse:Eo(t.utcParse)}}function zo(){return Fo=No({format:ii,parse:oi,utcFormat:ai,utcParse:ui})}function Oo(t){return No(ni(t))}function Ro(t){return arguments.length?Fo=Oo(t):Fo}!function(t){ri=ni(t),ii=ri.format,oi=ri.parse,ai=ri.utcFormat,ui=ri.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}),So(),zo();const Uo=(t,e)=>ot({},t,e);function Lo(t,e){const n=t?$o(t):To(),r=e?Oo(e):Ro();return Uo(n,r)}function qo(t,e){const n=arguments.length;return n&&2!==n&&u("defaultLocale expects either zero or two arguments."),n?Uo(To(t),Ro(e)):Uo(To(),Ro())}const Po=/^(data:|([A-Za-z]+:)?\/\/)/,jo=/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,Io=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g,Wo="file://";async function Ho(t,e){const n=await this.sanitize(t,e),r=n.href;return n.localFile?this.file(r):this.http(r,e)}async function Yo(t,e){e=ot({},this.options,e);const n=this.fileAccess,r={href:null};let i,o,a;const s=jo.test(t.replace(Io,""));null!=t&&"string"==typeof t&&s||u("Sanitize failure, invalid URI: "+Ft(t));const l=Po.test(t);return(a=e.baseURL)&&!l&&(t.startsWith("/")||a.endsWith("/")||(t="/"+t),t=a+t),o=(i=t.startsWith(Wo))||"file"===e.mode||"http"!==e.mode&&!l&&n,i?t=t.slice(Wo.length):t.startsWith("//")&&("file"===e.defaultProtocol?(t=t.slice(2),o=!0):t=(e.defaultProtocol||"http")+":"+t),Object.defineProperty(r,"localFile",{value:!!o}),r.href=t,e.target&&(r.target=e.target+""),e.rel&&(r.rel=e.rel+""),"image"===e.context&&e.crossOrigin&&(r.crossOrigin=e.crossOrigin+""),r}function Go(t){return t?e=>new Promise(((n,r)=>{t.readFile(e,((t,e)=>{t?r(t):n(e)}))})):Vo}async function Vo(){u("No file system access.")}function Xo(t){return t?async function(e,n){const r=ot({},this.options.http,n),i=n&&n.response,o=await t(e,r);return o.ok?J(o[i])?o[i]():o.text():u(o.status+""+o.statusText)}:Jo}async function Jo(){u("No HTTP fetch method available.")}const Zo=t=>null!=t&&t==t,Qo=t=>!(Number.isNaN(+t)||t instanceof Date),Ko={boolean:St,integer:S,number:S,date:Tt,string:Bt,unknown:f},ta=[t=>"true"===t||"false"===t||!0===t||!1===t,t=>Qo(t)&&Number.isInteger(+t),Qo,t=>!Number.isNaN(Date.parse(t))],ea=["boolean","integer","number","date"];function na(t,e){if(!t||!t.length)return"unknown";const n=t.length,r=ta.length,i=ta.map(((t,e)=>e+1));for(let o,a,u=0,s=0;u0===t?e:t),0)-1]}function ra(t,e){return e.reduce(((e,n)=>(e[n]=na(t,n),e)),{})}function ia(t){const e=function(e,n){const r={delimiter:t};return oa(e,n?ot(n,r):r)};return e.responseType="text",e}function oa(t,e){return e.header&&(t=e.header.map(Ft).join(e.delimiter)+"\n"+t),Yt(e.delimiter).parse(t+"")}function aa(t,e){const n=e&&e.property?l(e.property):f;return!A(t)||(r=t,"function"==typeof Buffer&&J(Buffer.isBuffer)&&Buffer.isBuffer(r))?n(JSON.parse(t)):function(t,e){!k(t)&&yt(t)&&(t=[...t]);return e&&e.copy?JSON.parse(JSON.stringify(t)):t}(n(t),e);var r}oa.responseType="text",aa.responseType="json";const ua={interior:(t,e)=>t!==e,exterior:(t,e)=>t===e};function sa(t,e){let n,r,i,o;return t=aa(t,e),e&&e.feature?(n=Vt,i=e.feature):e&&e.mesh?(n=Qt,i=e.mesh,o=ua[e.filter]):u("Missing TopoJSON feature or mesh parameter."),r=(r=t.objects[i])?n(t,r,o):u("Invalid TopoJSON object: "+i),r&&r.features||[r]}sa.responseType="json";const la={dsv:oa,csv:ia(","),tsv:ia("\t"),json:aa,topojson:sa};function ca(t,e){return arguments.length>1?(la[t]=e,this):lt(la,t)?la[t]:null}function fa(t){const e=ca(t);return e&&e.responseType||"text"}function ha(t,e,n,r){const i=ca((e=e||{}).type||"json");return i||u("Unknown data format type: "+e.type),t=i(t,e),e.parse&&function(t,e,n,r){if(!t.length)return;const i=Ro();n=n||i.timeParse,r=r||i.utcParse;let o,a,u,s,l,c,f=t.columns||Object.keys(t[0]);"auto"===e&&(e=ra(t,f));f=Object.keys(e);const h=f.map((t=>{const i=e[t];let o,a;if(i&&(i.startsWith("date:")||i.startsWith("utc:"))){o=i.split(/:(.+)?/,2),a=o[1],("'"===a[0]&&"'"===a[a.length-1]||'"'===a[0]&&'"'===a[a.length-1])&&(a=a.slice(1,-1));return("utc"===o[0]?r:n)(a)}if(!Ko[i])throw Error("Illegal format pattern: "+t+":"+i);return Ko[i]}));for(u=0,l=t.length,c=f.length;u({options:n||{},sanitize:Yo,load:Ho,fileAccess:!!e,file:Go(e),http:Xo(t)})}("undefined"!=typeof fetch&&fetch,null);function pa(t){const e=t||f,n=[],r={};return n.add=t=>{const i=e(t);return r[i]||(r[i]=1,n.push(t)),n},n.remove=t=>{const i=e(t);if(r[i]){r[i]=0;const e=n.indexOf(t);e>=0&&n.splice(e,1)}return n},n}async function ga(t,e){try{await e(t)}catch(e){t.error(e)}}const ma=Symbol("vega_id");let ya=1;function va(t){return!(!t||!_a(t))}function _a(t){return t[ma]}function xa(t,e){return t[ma]=e,t}function ba(t){const e=t===Object(t)?t:{data:t};return _a(e)?e:xa(e,ya++)}function wa(t){return ka(t,ba({}))}function ka(t,e){for(const n in t)e[n]=t[n];return e}function Aa(t,e){return xa(e,_a(t))}function Ma(t,e){return t?e?(n,r)=>t(n,r)||_a(e(n))-_a(e(r)):(e,n)=>t(e,n)||_a(e)-_a(n):null}function Ea(t){return t&&t.constructor===Da}function Da(){const t=[],e=[],n=[],r=[],i=[];let o=null,a=!1;return{constructor:Da,insert(e){const n=V(e),r=n.length;for(let e=0;e{p(t)&&(l[_a(t)]=-1)}));for(f=0,h=t.length;f0&&(y(g,p,d.value),u.modifies(p));for(f=0,h=i.length;f{p(t)&&l[_a(t)]>0&&y(t,d.field,d.value)})),u.modifies(d.field);if(a)u.mod=e.length||r.length?s.filter((t=>l[_a(t)]>0)):s.slice();else for(m in c)u.mod.push(c[m]);return(o||null==o&&(e.length||r.length))&&u.clean(!0),u}}}const Ca="_:mod:_";function Fa(){Object.defineProperty(this,Ca,{writable:!0,value:{}})}Fa.prototype={set(t,e,n,r){const i=this,o=i[t],a=i[Ca];return null!=e&&e>=0?(o[e]!==n||r)&&(o[e]=n,a[e+":"+t]=-1,a[t]=-1):(o!==n||r)&&(i[t]=n,a[t]=k(n)?1+n.length:-1),i},modified(t,e){const n=this[Ca];if(!arguments.length){for(const t in n)if(n[t])return!0;return!1}if(k(t)){for(let e=0;e=0?e+1{a instanceof Ta?(a!==this&&(e&&a.targets().add(this),o.push(a)),i.push({op:a,name:t,index:n})):r.set(t,n,a)};for(a in t)if(s=t[a],"pulse"===a)V(s).forEach((t=>{t instanceof Ta?t!==this&&(t.targets().add(this),o.push(t)):u("Pulse parameters must be operator instances.")})),this.source=s;else if(k(s))for(r.set(a,-1,Array(l=s.length)),c=0;c{const n=Date.now();return n-e>t?(e=n,1):0}))},debounce(t){const e=Oa();return this.targets().add(Oa(null,null,it(t,(t=>{const n=t.dataflow;e.receive(t),n&&n.run&&n.run()})))),e},between(t,e){let n=!1;return t.targets().add(Oa(null,null,(()=>n=!0))),e.targets().add(Oa(null,null,(()=>n=!1))),this.filter((()=>n))},detach(){this._filter=p,this._targets=null}};const Ra={skip:!0};function Ua(t,e,n,r,i,o){const a=ot({},o,Ra);let u,s;J(n)||(n=rt(n)),void 0===r?u=e=>t.touch(n(e)):J(r)?(s=new Ta(null,r,i,!1),u=e=>{s.evaluate(e);const r=n(e),i=s.value;Ea(i)?t.pulse(r,i,o):t.update(r,i,a)}):u=e=>t.update(n(e),r,a),e.apply(u)}function La(t,e,n,r,i,o){if(void 0===r)e.targets().add(n);else{const a=o||{},u=new Ta(null,function(t,e){return e=J(e)?e:rt(e),t?function(n,r){const i=e(n,r);return t.skip()||(t.skip(i!==this.value).value=i),i}:e}(n,r),i,!1);u.modified(a.force),u.rank=e.rank,e.targets().add(u),n&&(u.skip(!0),u.value=n.value,u.targets().add(n),t.connect(n,[u]))}}const qa={};function Pa(t,e,n){this.dataflow=t,this.stamp=null==e?-1:e,this.add=[],this.rem=[],this.mod=[],this.fields=null,this.encode=n||null}function ja(t,e){const n=[];return Ot(t,e,(t=>n.push(t))),n}function Ia(t,e){const n={};return t.visit(e,(t=>{n[_a(t)]=1})),t=>n[_a(t)]?null:t}function Wa(t,e){return t?(n,r)=>t(n,r)&&e(n,r):e}function Ha(t,e,n,r){const i=this;let o=0;this.dataflow=t,this.stamp=e,this.fields=null,this.encode=r||null,this.pulses=n;for(const t of n)if(t.stamp===e){if(t.fields){const e=i.fields||(i.fields={});for(const n in t.fields)e[n]=1}t.changed(i.ADD)&&(o|=i.ADD),t.changed(i.REM)&&(o|=i.REM),t.changed(i.MOD)&&(o|=i.MOD)}this.changes=o}function Ya(t){return t.error("Dataflow already running. Use runAsync() to chain invocations."),t}Pa.prototype={StopPropagation:qa,ADD:1,REM:2,MOD:4,ADD_REM:3,ADD_MOD:5,ALL:7,REFLOW:8,SOURCE:16,NO_SOURCE:32,NO_FIELDS:64,fork(t){return new Pa(this.dataflow).init(this,t)},clone(){const t=this.fork(7);return t.add=t.add.slice(),t.rem=t.rem.slice(),t.mod=t.mod.slice(),t.source&&(t.source=t.source.slice()),t.materialize(23)},addAll(){let t=this;return!t.source||t.add===t.rem||!t.rem.length&&t.source.length===t.add.length||(t=new Pa(this.dataflow).init(this),t.add=t.source,t.rem=[]),t},init(t,e){const n=this;return n.stamp=t.stamp,n.encode=t.encode,!t.fields||64&e||(n.fields=t.fields),1&e?(n.addF=t.addF,n.add=t.add):(n.addF=null,n.add=[]),2&e?(n.remF=t.remF,n.rem=t.rem):(n.remF=null,n.rem=[]),4&e?(n.modF=t.modF,n.mod=t.mod):(n.modF=null,n.mod=[]),32&e?(n.srcF=null,n.source=null):(n.srcF=t.srcF,n.source=t.source,t.cleans&&(n.cleans=t.cleans)),n},runAfter(t){this.dataflow.runAfter(t)},changed(t){const e=t||7;return 1&e&&this.add.length||2&e&&this.rem.length||4&e&&this.mod.length},reflow(t){if(t)return this.fork(7).reflow();const e=this.add.length,n=this.source&&this.source.length;return n&&n!==e&&(this.mod=this.source,e&&this.filter(4,Ia(this,1))),this},clean(t){return arguments.length?(this.cleans=!!t,this):this.cleans},modifies(t){const e=this.fields||(this.fields={});return k(t)?t.forEach((t=>e[t]=!0)):e[t]=!0,this},modified(t,e){const n=this.fields;return!(!e&&!this.mod.length||!n)&&(arguments.length?k(t)?t.some((t=>n[t])):n[t]:!!n)},filter(t,e){const n=this;return 1&t&&(n.addF=Wa(n.addF,e)),2&t&&(n.remF=Wa(n.remF,e)),4&t&&(n.modF=Wa(n.modF,e)),16&t&&(n.srcF=Wa(n.srcF,e)),n},materialize(t){const e=this;return 1&(t=t||7)&&e.addF&&(e.add=ja(e.add,e.addF),e.addF=null),2&t&&e.remF&&(e.rem=ja(e.rem,e.remF),e.remF=null),4&t&&e.modF&&(e.mod=ja(e.mod,e.modF),e.modF=null),16&t&&e.srcF&&(e.source=e.source.filter(e.srcF),e.srcF=null),e},visit(t,e){const n=this,r=e;if(16&t)return Ot(n.source,n.srcF,r),n;1&t&&Ot(n.add,n.addF,r),2&t&&Ot(n.rem,n.remF,r),4&t&&Ot(n.mod,n.modF,r);const i=n.source;if(8&t&&i){const t=n.add.length+n.mod.length;t===i.length||Ot(i,t?Ia(n,5):n.srcF,r)}return n}},dt(Ha,Pa,{fork(t){const e=new Pa(this.dataflow).init(this,t&this.NO_FIELDS);return void 0!==t&&(t&e.ADD&&this.visit(e.ADD,(t=>e.add.push(t))),t&e.REM&&this.visit(e.REM,(t=>e.rem.push(t))),t&e.MOD&&this.visit(e.MOD,(t=>e.mod.push(t)))),e},changed(t){return this.changes&t},modified(t){const e=this,n=e.fields;return n&&e.changes&e.MOD?k(t)?t.some((t=>n[t])):n[t]:0},filter(){u("MultiPulse does not support filtering.")},materialize(){u("MultiPulse does not support materialization.")},visit(t,e){const n=this,r=n.pulses,i=r.length;let o=0;if(t&n.SOURCE)for(;oe=[],size:()=>e.length,peek:()=>e[0],push:n=>(e.push(n),Xa(e,0,e.length-1,t)),pop:()=>{const n=e.pop();let r;return e.length?(r=e[0],e[0]=n,function(t,e,n){const r=e,i=t.length,o=t[e];let a,u=1+(e<<1);for(;u=0&&(u=a),t[e]=t[u],u=1+((e=u)<<1);t[e]=o,Xa(t,r,e,n)}(e,0,t)):r=n,r}}}function Xa(t,e,n,r){let i,o;const a=t[n];for(;n>e&&(o=n-1>>1,i=t[o],r(a,i)<0);)t[n]=i,n=o;return t[n]=a}function Ja(){this.logger(w()),this.logLevel(v),this._clock=0,this._rank=0,this._locale=qo();try{this._loader=da()}catch(t){}this._touched=pa(c),this._input={},this._pulse=null,this._heap=Va(((t,e)=>t.qrank-e.qrank)),this._postrun=[]}function Za(t){return function(){return this._log[t].apply(this,arguments)}}function Qa(t,e){Ta.call(this,t,null,e)}Ja.prototype={stamp(){return this._clock},loader(t){return arguments.length?(this._loader=t,this):this._loader},locale(t){return arguments.length?(this._locale=t,this):this._locale},logger(t){return arguments.length?(this._log=t,this):this._log},error:Za("error"),warn:Za("warn"),info:Za("info"),debug:Za("debug"),logLevel:Za("level"),cleanThreshold:1e4,add:function(t,e,n,r){let i,o=1;return t instanceof Ta?i=t:t&&t.prototype instanceof Ta?i=new t:J(t)?i=new Ta(null,t):(o=0,i=new Ta(t,e)),this.rank(i),o&&(r=n,n=e),n&&this.connect(i,i.parameters(n,r)),this.touch(i),i},connect:function(t,e){const n=t.rank,r=e.length;for(let i=0;i=0;)e.push(n=r[i]),n===t&&u("Cycle detected in dataflow graph.")},pulse:function(t,e,n){this.touch(t,n||Ga);const r=new Pa(this,this._clock+(this._pulse?0:1)),i=t.pulse&&t.pulse.source||[];return r.target=t,this._input[t.id]=e.pulse(r,i),this},touch:function(t,e){const n=e||Ga;return this._pulse?this._enqueue(t):this._touched.add(t),n.skip&&t.skip(!0),this},update:function(t,e,n){const r=n||Ga;return(t.set(e)||r.force)&&this.touch(t,r),this},changeset:Da,ingest:function(t,e,n){return e=this.parse(e,n),this.pulse(t,this.changeset().insert(e))},parse:function(t,e){const n=this.locale();return ha(t,e,n.timeParse,n.utcParse)},preload:async function(t,e,n){const r=this,i=r._pending||function(t){let e;const n=new Promise((t=>e=t));return n.requests=0,n.done=()=>{0==--n.requests&&(t._pending=null,e(t))},t._pending=n}(r);i.requests+=1;const o=await r.request(e,n);return r.pulse(t,r.changeset().remove(p).insert(o.data||[])),i.done(),o},request:async function(t,e){const n=this;let r,i=0;try{r=await n.loader().load(t,{context:"dataflow",response:fa(e&&e.type)});try{r=n.parse(r,e)}catch(e){i=-2,n.warn("Data ingestion failed",t,e)}}catch(e){i=-1,n.warn("Loading failed",t,e)}return{data:r,status:i}},events:function(t,e,n,r){const i=this,o=Oa(n,r),a=function(t){t.dataflow=i;try{o.receive(t)}catch(t){i.error(t)}finally{i.run()}};let u;u="string"==typeof t&&"undefined"!=typeof document?document.querySelectorAll(t):V(t);const s=u.length;for(let t=0;tr._enqueue(t,!0))),r._touched=pa(c);let a,u,s,l=0;try{for(;r._heap.size()>0;)a=r._heap.pop(),a.rank===a.qrank?(u=a.run(r._getPulse(a,t)),u.then?u=await u:u.async&&(i.push(u.async),u=qa),u!==qa&&a._targets&&a._targets.forEach((t=>r._enqueue(t))),++l):r._enqueue(a,!0)}catch(t){r._heap.clear(),s=t}if(r._input={},r._pulse=null,r.debug(`Pulse ${o}: ${l} operators`),s&&(r._postrun=[],r.error(s)),r._postrun.length){const t=r._postrun.sort(((t,e)=>e.priority-t.priority));r._postrun=[];for(let e=0;er.runAsync(null,(()=>{t.forEach((t=>{try{t(r)}catch(t){r.error(t)}}))})))),r},run:function(t,e,n){return this._pulse?Ya(this):(this.evaluate(t,e,n),this)},runAsync:async function(t,e,n){for(;this._running;)await this._running;const r=()=>this._running=null;return(this._running=this.evaluate(t,e,n)).then(r,r),this._running},runAfter:function(t,e,n){if(this._pulse||e)this._postrun.push({priority:n||0,callback:t});else try{t(this)}catch(t){this.error(t)}},_enqueue:function(t,e){const n=t.stampt.pulse)),e):this._input[t.id]||function(t,e){if(e&&e.stamp===t.stamp)return e;t=t.fork(),e&&e!==qa&&(t.source=e.source);return t}(this._pulse,n&&n.pulse)}},dt(Qa,Ta,{run(t){if(t.stampthis.pulse=t)):e!==t.StopPropagation&&(this.pulse=e),e},evaluate(t){const e=this.marshall(t.stamp),n=this.transform(e,t);return e.clear(),n},transform(){}});const Ka={};function tu(t){const e=eu(t);return e&&e.Definition||null}function eu(t){return t=t&&t.toLowerCase(),lt(Ka,t)?Ka[t]:null}function*nu(t,e){if(null==e)for(let e of t)null!=e&&""!==e&&(e=+e)>=e&&(yield e);else{let n=-1;for(let r of t)r=e(r,++n,t),null!=r&&""!==r&&(r=+r)>=r&&(yield r)}}function ru(t,e,n){const r=Float64Array.from(nu(t,n));return r.sort(te),e.map((t=>Fe(r,t)))}function iu(t,e){return ru(t,[.25,.5,.75],e)}function ou(t,e){const n=t.length,r=function(t,e){const n=function(t,e){let n,r=0,i=0,o=0;if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(n=e-i,i+=n/++r,o+=n*(e-i));else{let a=-1;for(let u of t)null!=(u=e(u,++a,t))&&(u=+u)>=u&&(n=u-i,i+=n/++r,o+=n*(u-i))}if(r>1)return o/(r-1)}(t,e);return n?Math.sqrt(n):n}(t,e),i=iu(t,e),o=(i[2]-i[0])/1.34;return 1.06*(Math.min(r,o)||r||Math.abs(i[0])||1)*Math.pow(n,-.2)}function au(t){const e=t.maxbins||20,n=t.base||10,r=Math.log(n),i=t.divide||[5,2];let o,a,u,s,l,c,f=t.extent[0],h=t.extent[1];const d=t.span||h-f||Math.abs(f)||1;if(t.step)o=t.step;else if(t.steps){for(s=d/e,l=0,c=t.steps.length;le;)o*=n;for(l=0,c=i.length;l=u&&d/s<=e&&(o=s)}s=Math.log(o);const p=s>=0?0:1+~~(-s/r),g=Math.pow(n,-p-1);return(t.nice||void 0===t.nice)&&(s=Math.floor(f/o+g)*o,f=ft);const i=t.length,o=new Float64Array(i);let a,u=0,s=1,l=r(t[0]),c=l,f=l+e;for(;s=f){for(c=(l+c)/2;u>1);ia;)t[i--]=t[o]}o=a,a=r}return t}(o,e+e/4):o}t.random=Math.random;const lu=Math.sqrt(2*Math.PI),cu=Math.SQRT2;let fu=NaN;function hu(e,n){e=e||0,n=null==n?1:n;let r,i,o=0,a=0;if(fu==fu)o=fu,fu=NaN;else{do{o=2*t.random()-1,a=2*t.random()-1,r=o*o+a*a}while(0===r||r>1);i=Math.sqrt(-2*Math.log(r)/r),o*=i,fu=a*i}return e+o*n}function du(t,e,n){const r=(t-(e||0))/(n=null==n?1:n);return Math.exp(-.5*r*r)/(n*lu)}function pu(t,e,n){const r=(t-(e=e||0))/(n=null==n?1:n),i=Math.abs(r);let o;if(i>37)o=0;else{const t=Math.exp(-i*i/2);let e;i<7.07106781186547?(e=.0352624965998911*i+.700383064443688,e=e*i+6.37396220353165,e=e*i+33.912866078383,e=e*i+112.079291497871,e=e*i+221.213596169931,e=e*i+220.206867912376,o=t*e,e=.0883883476483184*i+1.75566716318264,e=e*i+16.064177579207,e=e*i+86.7807322029461,e=e*i+296.564248779674,e=e*i+637.333633378831,e=e*i+793.826512519948,e=e*i+440.413735824752,o/=e):(e=i+.65,e=i+4/e,e=i+3/e,e=i+2/e,e=i+1/e,o=t/e/2.506628274631)}return r>0?1-o:o}function gu(t,e,n){return t<0||t>1?NaN:(e||0)+(null==n?1:n)*cu*function(t){let e,n=-Math.log((1-t)*(1+t));n<6.25?(n-=3.125,e=-364441206401782e-35,e=e*n-16850591381820166e-35,e=128584807152564e-32+e*n,e=11157877678025181e-33+e*n,e=e*n-1333171662854621e-31,e=20972767875968562e-33+e*n,e=6637638134358324e-30+e*n,e=e*n-4054566272975207e-29,e=e*n-8151934197605472e-29,e=26335093153082323e-28+e*n,e=e*n-12975133253453532e-27,e=e*n-5415412054294628e-26,e=1.0512122733215323e-9+e*n,e=e*n-4.112633980346984e-9,e=e*n-2.9070369957882005e-8,e=4.2347877827932404e-7+e*n,e=e*n-13654692000834679e-22,e=e*n-13882523362786469e-21,e=.00018673420803405714+e*n,e=e*n-.000740702534166267,e=e*n-.006033670871430149,e=.24015818242558962+e*n,e=1.6536545626831027+e*n):n<16?(n=Math.sqrt(n)-3.25,e=2.2137376921775787e-9,e=9.075656193888539e-8+e*n,e=e*n-2.7517406297064545e-7,e=1.8239629214389228e-8+e*n,e=15027403968909828e-22+e*n,e=e*n-4013867526981546e-21,e=29234449089955446e-22+e*n,e=12475304481671779e-21+e*n,e=e*n-47318229009055734e-21,e=6828485145957318e-20+e*n,e=24031110387097894e-21+e*n,e=e*n-.0003550375203628475,e=.0009532893797373805+e*n,e=e*n-.0016882755560235047,e=.002491442096107851+e*n,e=e*n-.003751208507569241,e=.005370914553590064+e*n,e=1.0052589676941592+e*n,e=3.0838856104922208+e*n):Number.isFinite(n)?(n=Math.sqrt(n)-5,e=-27109920616438573e-27,e=e*n-2.555641816996525e-10,e=1.5076572693500548e-9+e*n,e=e*n-3.789465440126737e-9,e=7.61570120807834e-9+e*n,e=e*n-1.496002662714924e-8,e=2.914795345090108e-8+e*n,e=e*n-6.771199775845234e-8,e=2.2900482228026655e-7+e*n,e=e*n-9.9298272942317e-7,e=4526062597223154e-21+e*n,e=e*n-1968177810553167e-20,e=7599527703001776e-20+e*n,e=e*n-.00021503011930044477,e=e*n-.00013871931833623122,e=1.0103004648645344+e*n,e=4.849906401408584+e*n):e=1/0;return e*t}(2*t-1)}function mu(t,e){let n,r;const i={mean(t){return arguments.length?(n=t||0,i):n},stdev(t){return arguments.length?(r=null==t?1:t,i):r},sample:()=>hu(n,r),pdf:t=>du(t,n,r),cdf:t=>pu(t,n,r),icdf:t=>gu(t,n,r)};return i.mean(t).stdev(e)}function yu(e,n){const r=mu();let i=0;const o={data(t){return arguments.length?(e=t,i=t?t.length:0,o.bandwidth(n)):e},bandwidth(t){return arguments.length?(!(n=t)&&e&&(n=ou(e)),o):n},sample:()=>e[~~(t.random()*i)]+n*r.sample(),pdf(t){let o=0,a=0;for(;avu(n,r),pdf:t=>_u(t,n,r),cdf:t=>xu(t,n,r),icdf:t=>bu(t,n,r)};return i.mean(t).stdev(e)}function ku(e,n){let r,i=0;const o={weights(t){return arguments.length?(r=function(t){const e=[];let n,r=0;for(n=0;n=e&&t<=n?1/(n-e):0}function Eu(t,e,n){return null==n&&(n=null==e?1:e,e=0),tn?1:(t-e)/(n-e)}function Du(t,e,n){return null==n&&(n=null==e?1:e,e=0),t>=0&&t<=1?e+t*(n-e):NaN}function Cu(t,e){let n,r;const i={min(t){return arguments.length?(n=t||0,i):n},max(t){return arguments.length?(r=null==t?1:t,i):r},sample:()=>Au(n,r),pdf:t=>Mu(t,n,r),cdf:t=>Eu(t,n,r),icdf:t=>Du(t,n,r)};return null==e&&(e=null==t?1:t,t=0),i.min(t).max(e)}function Fu(t,e,n){let r=0,i=0;for(const o of t){const t=n(o);null==e(o)||null==t||isNaN(t)||(r+=(t-r)/++i)}return{coef:[r],predict:()=>r,rSquared:0}}function Su(t,e,n,r){const i=r-t*t,o=Math.abs(i)<1e-24?0:(n-t*e)/i;return[e-o*t,o]}function $u(t,e,n,r){t=t.filter((t=>{let r=e(t),i=n(t);return null!=r&&(r=+r)>=r&&null!=i&&(i=+i)>=i})),r&&t.sort(((t,n)=>e(t)-e(n)));const i=t.length,o=new Float64Array(i),a=new Float64Array(i);let u,s,l,c=0,f=0,h=0;for(l of t)o[c]=u=+e(l),a[c]=s=+n(l),++c,f+=(u-f)/c,h+=(s-h)/c;for(c=0;c=i&&null!=o&&(o=+o)>=o&&r(i,o,++a)}function Bu(t,e,n,r,i){let o=0,a=0;return Tu(t,e,n,((t,e)=>{const n=e-i(t),u=e-r;o+=n*n,a+=u*u})),1-o/a}function Nu(t,e,n){let r=0,i=0,o=0,a=0,u=0;Tu(t,e,n,((t,e)=>{++u,r+=(t-r)/u,i+=(e-i)/u,o+=(t*e-o)/u,a+=(t*t-a)/u}));const s=Su(r,i,o,a),l=t=>s[0]+s[1]*t;return{coef:s,predict:l,rSquared:Bu(t,e,n,i,l)}}function zu(t,e,n){let r=0,i=0,o=0,a=0,u=0;Tu(t,e,n,((t,e)=>{++u,t=Math.log(t),r+=(t-r)/u,i+=(e-i)/u,o+=(t*e-o)/u,a+=(t*t-a)/u}));const s=Su(r,i,o,a),l=t=>s[0]+s[1]*Math.log(t);return{coef:s,predict:l,rSquared:Bu(t,e,n,i,l)}}function Ou(t,e,n){const[r,i,o,a]=$u(t,e,n);let u,s,l,c=0,f=0,h=0,d=0,p=0;Tu(t,e,n,((t,e)=>{u=r[p++],s=Math.log(e),l=u*e,c+=(e*s-c)/p,f+=(l-f)/p,h+=(l*s-h)/p,d+=(u*l-d)/p}));const[g,m]=Su(f/a,c/a,h/a,d/a),y=t=>Math.exp(g+m*(t-o));return{coef:[Math.exp(g-m*o),m],predict:y,rSquared:Bu(t,e,n,a,y)}}function Ru(t,e,n){let r=0,i=0,o=0,a=0,u=0,s=0;Tu(t,e,n,((t,e)=>{const n=Math.log(t),l=Math.log(e);++s,r+=(n-r)/s,i+=(l-i)/s,o+=(n*l-o)/s,a+=(n*n-a)/s,u+=(e-u)/s}));const l=Su(r,i,o,a),c=t=>l[0]*Math.pow(t,l[1]);return l[0]=Math.exp(l[0]),{coef:l,predict:c,rSquared:Bu(t,e,n,u,c)}}function Uu(t,e,n){const[r,i,o,a]=$u(t,e,n),u=r.length;let s,l,c,f,h=0,d=0,p=0,g=0,m=0;for(s=0;s_*(t-=o)*t+x*t+b+a;return{coef:[b-x*o+_*o*o+a,x-2*_*o,_],predict:w,rSquared:Bu(t,e,n,a,w)}}function Lu(t,e,n,r){if(0===r)return Fu(t,e,n);if(1===r)return Nu(t,e,n);if(2===r)return Uu(t,e,n);const[i,o,a,u]=$u(t,e,n),s=i.length,l=[],c=[],f=r+1;let h,d,p,g,m;for(h=0;hMath.abs(t[r][a])&&(a=i);for(o=r;o=r;o--)t[o][i]-=t[o][r]*t[r][i]/t[r][r]}for(i=e-1;i>=0;--i){for(u=0,o=i+1;o{t-=a;let e=u+y[0]+y[1]*t+y[2]*t*t;for(h=3;h=0;--o)for(u=e[o],s=1,i[o]+=u,a=1;a<=o;++a)s*=(o+1-a)/a,i[o-a]+=u*Math.pow(n,a)*s;return i[0]+=r,i}const Pu=2,ju=1e-12;function Iu(t,e,n,r){const[i,o,a,u]=$u(t,e,n,!0),s=i.length,l=Math.max(2,~~(r*s)),c=new Float64Array(s),f=new Float64Array(s),h=new Float64Array(s).fill(1);for(let t=-1;++t<=Pu;){const e=[0,l-1];for(let t=0;ti[a]-n?r:a;let s=0,l=0,d=0,p=0,g=0;const m=1/Math.abs(i[u]-n||1);for(let t=r;t<=a;++t){const e=i[t],r=o[t],a=Wu(Math.abs(n-e)*m)*h[t],u=e*a;s+=a,l+=u,d+=r*a,p+=r*u,g+=e*u}const[y,v]=Su(l/s,d/s,p/s,g/s);c[t]=y+v*n,f[t]=Math.abs(o[t]-c[t]),Hu(i,t+1,e)}if(t===Pu)break;const n=Se(f);if(Math.abs(n)=1?ju:(e=1-t*t)*e}return function(t,e,n,r){const i=t.length,o=[];let a,u=0,s=0,l=[];for(;u=t.length))for(;e>i&&t[o]-r<=r-t[i];)n[0]=++i,n[1]=o,++o}const Yu=.5*Math.PI/180;function Gu(t,e,n,r){n=n||25,r=Math.max(n,r||200);const i=e=>[e,t(e)],o=e[0],a=e[1],u=a-o,s=u/r,l=[i(o)],c=[];if(n===r){for(let t=1;t0;)c.push(i(o+t/n*u));let f=l[0],h=c[c.length-1];const d=1/u,p=function(t,e){let n=t,r=t;const i=e.length;for(let t=0;tr&&(r=i)}return 1/(r-n)}(f[1],c);for(;h;){const t=i((f[0]+h[0])/2);t[0]-f[0]>=s&&Vu(f,t,h,d,p)>Yu?c.push(t):(f=h,l.push(h),c.pop()),h=c[c.length-1]}return l}function Vu(t,e,n,r,i){const o=Math.atan2(i*(n[1]-t[1]),r*(n[0]-t[0])),a=Math.atan2(i*(e[1]-t[1]),r*(e[0]-t[0]));return Math.abs(o-a)}function Xu(t){return t&&t.length?1===t.length?t[0]:(e=t,t=>{const n=e.length;let r=1,i=String(e[0](t));for(;r{},Qu={init:Zu,add:Zu,rem:Zu,idx:0},Ku={values:{init:t=>t.cell.store=!0,value:t=>t.cell.data.values(),idx:-1},count:{value:t=>t.cell.num},__count__:{value:t=>t.missing+t.valid},missing:{value:t=>t.missing},valid:{value:t=>t.valid},sum:{init:t=>t.sum=0,value:t=>t.sum,add:(t,e)=>t.sum+=+e,rem:(t,e)=>t.sum-=e},product:{init:t=>t.product=1,value:t=>t.valid?t.product:void 0,add:(t,e)=>t.product*=e,rem:(t,e)=>t.product/=e},mean:{init:t=>t.mean=0,value:t=>t.valid?t.mean:void 0,add:(t,e)=>(t.mean_d=e-t.mean,t.mean+=t.mean_d/t.valid),rem:(t,e)=>(t.mean_d=e-t.mean,t.mean-=t.valid?t.mean_d/t.valid:t.mean)},average:{value:t=>t.valid?t.mean:void 0,req:["mean"],idx:1},variance:{init:t=>t.dev=0,value:t=>t.valid>1?t.dev/(t.valid-1):void 0,add:(t,e)=>t.dev+=t.mean_d*(e-t.mean),rem:(t,e)=>t.dev-=t.mean_d*(e-t.mean),req:["mean"],idx:1},variancep:{value:t=>t.valid>1?t.dev/t.valid:void 0,req:["variance"],idx:2},stdev:{value:t=>t.valid>1?Math.sqrt(t.dev/(t.valid-1)):void 0,req:["variance"],idx:2},stdevp:{value:t=>t.valid>1?Math.sqrt(t.dev/t.valid):void 0,req:["variance"],idx:2},stderr:{value:t=>t.valid>1?Math.sqrt(t.dev/(t.valid*(t.valid-1))):void 0,req:["variance"],idx:2},distinct:{value:t=>t.cell.data.distinct(t.get),req:["values"],idx:3},ci0:{value:t=>t.cell.data.ci0(t.get),req:["values"],idx:3},ci1:{value:t=>t.cell.data.ci1(t.get),req:["values"],idx:3},median:{value:t=>t.cell.data.q2(t.get),req:["values"],idx:3},q1:{value:t=>t.cell.data.q1(t.get),req:["values"],idx:3},q3:{value:t=>t.cell.data.q3(t.get),req:["values"],idx:3},min:{init:t=>t.min=void 0,value:t=>t.min=Number.isNaN(t.min)?t.cell.data.min(t.get):t.min,add:(t,e)=>{(e{e<=t.min&&(t.min=NaN)},req:["values"],idx:4},max:{init:t=>t.max=void 0,value:t=>t.max=Number.isNaN(t.max)?t.cell.data.max(t.get):t.max,add:(t,e)=>{(e>t.max||void 0===t.max)&&(t.max=e)},rem:(t,e)=>{e>=t.max&&(t.max=NaN)},req:["values"],idx:4},argmin:{init:t=>t.argmin=void 0,value:t=>t.argmin||t.cell.data.argmin(t.get),add:(t,e,n)=>{e{e<=t.min&&(t.argmin=void 0)},req:["min","values"],idx:3},argmax:{init:t=>t.argmax=void 0,value:t=>t.argmax||t.cell.data.argmax(t.get),add:(t,e,n)=>{e>t.max&&(t.argmax=n)},rem:(t,e)=>{e>=t.max&&(t.argmax=void 0)},req:["max","values"],idx:3}},ts=Object.keys(Ku).filter((t=>"__count__"!==t));function es(t,e){return Ku[t](e)}function ns(t,e){return t.idx-e.idx}function rs(){this.valid=0,this.missing=0,this._ops.forEach((t=>t.init(this)))}function is(t,e){null!=t&&""!==t?t==t&&(++this.valid,this._ops.forEach((n=>n.add(this,t,e)))):++this.missing}function os(t,e){null!=t&&""!==t?t==t&&(--this.valid,this._ops.forEach((n=>n.rem(this,t,e)))):--this.missing}function as(t){return this._out.forEach((e=>t[e.out]=e.value(this))),t}function us(t,e){const n=e||f,r=function(t){const e={};t.forEach((t=>e[t.name]=t));const n=t=>{t.req&&t.req.forEach((t=>{e[t]||n(e[t]=Ku[t]())}))};return t.forEach(n),Object.values(e).sort(ns)}(t),i=t.slice().sort(ns);function o(t){this._ops=r,this._out=i,this.cell=t,this.init()}return o.prototype.init=rs,o.prototype.add=is,o.prototype.rem=os,o.prototype.set=as,o.prototype.get=n,o.fields=t.map((t=>t.out)),o}function ss(t){this._key=t?l(t):_a,this.reset()}[...ts,"__count__"].forEach((t=>{Ku[t]=function(t,e){return n=>ot({name:t,out:n||t},Qu,e)}(t,Ku[t])}));const ls=ss.prototype;function cs(t){Qa.call(this,null,t),this._adds=[],this._mods=[],this._alen=0,this._mlen=0,this._drop=!0,this._cross=!1,this._dims=[],this._dnames=[],this._measures=[],this._countOnly=!1,this._counts=null,this._prev=null,this._inputs=null,this._outputs=null}ls.reset=function(){this._add=[],this._rem=[],this._ext=null,this._get=null,this._q=null},ls.add=function(t){this._add.push(t)},ls.rem=function(t){this._rem.push(t)},ls.values=function(){if(this._get=null,0===this._rem.length)return this._add;const t=this._add,e=this._rem,n=this._key,r=t.length,i=e.length,o=Array(r-i),a={};let u,s,l;for(u=0;u=0;)r=t(e[i])+"",lt(n,r)||(n[r]=1,++o);return o},ls.extent=function(t){if(this._get!==t||!this._ext){const e=this.values(),n=ut(e,t);this._ext=[e[n[0]],e[n[1]]],this._get=t}return this._ext},ls.argmin=function(t){return this.extent(t)[0]||{}},ls.argmax=function(t){return this.extent(t)[1]||{}},ls.min=function(t){const e=this.extent(t)[0];return null!=e?t(e):void 0},ls.max=function(t){const e=this.extent(t)[1];return null!=e?t(e):void 0},ls.quartile=function(t){return this._get===t&&this._q||(this._q=iu(this.values(),t),this._get=t),this._q},ls.q1=function(t){return this.quartile(t)[0]},ls.q2=function(t){return this.quartile(t)[1]},ls.q3=function(t){return this.quartile(t)[2]},ls.ci=function(t){return this._get===t&&this._ci||(this._ci=uu(this.values(),1e3,.05,t),this._get=t),this._ci},ls.ci0=function(t){return this.ci(t)[0]},ls.ci1=function(t){return this.ci(t)[1]},cs.Definition={type:"Aggregate",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"ops",type:"enum",array:!0,values:ts},{name:"fields",type:"field",null:!0,array:!0},{name:"as",type:"string",null:!0,array:!0},{name:"drop",type:"boolean",default:!0},{name:"cross",type:"boolean",default:!1},{name:"key",type:"field"}]},dt(cs,Qa,{transform(t,e){const n=this,r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=t.modified();return n.stamp=r.stamp,n.value&&(i||e.modified(n._inputs,!0))?(n._prev=n.value,n.value=i?n.init(t):Object.create(null),e.visit(e.SOURCE,(t=>n.add(t)))):(n.value=n.value||n.init(t),e.visit(e.REM,(t=>n.rem(t))),e.visit(e.ADD,(t=>n.add(t)))),r.modifies(n._outputs),n._drop=!1!==t.drop,t.cross&&n._dims.length>1&&(n._drop=!1,n.cross()),e.clean()&&n._drop&&r.clean(!0).runAfter((()=>this.clean())),n.changes(r)},cross(){const t=this,e=t.value,n=t._dnames,r=n.map((()=>({}))),i=n.length;function o(t){let e,o,a,u;for(e in t)for(a=t[e].tuple,o=0;o{const e=n(t);return a(t),i.push(e),e})),this.cellkey=t.key?t.key:Xu(this._dims),this._countOnly=!0,this._counts=[],this._measures=[];const s=t.fields||[null],l=t.ops||["count"],c=t.as||[],f=s.length,h={};let d,p,g,m,y,v;for(f!==l.length&&u("Unmatched number of fields and aggregate ops."),v=0;vus(t,t.field))),Object.create(null)},cellkey:Xu(),cell(t,e){let n=this.value[t];return n?0===n.num&&this._drop&&n.stampo.push(t),remove:t=>a[r(t)]=++u,size:()=>i.length,data:(t,e)=>(u&&(i=i.filter((t=>!a[r(t)])),a={},u=0),e&&t&&i.sort(t),o.length&&(i=t?Mt(t,i,o.sort(t)):i.concat(o),o=[]),i)}}function ds(t){Qa.call(this,[],t)}function ps(t){Ta.call(this,null,gs,t)}function gs(t){return this.value&&!t.modified()?this.value:Q(t.fields,t.orders)}function ms(t){Qa.call(this,null,t)}function ys(t){Qa.call(this,null,t)}fs.Definition={type:"Bin",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"interval",type:"boolean",default:!0},{name:"anchor",type:"number"},{name:"maxbins",type:"number",default:20},{name:"base",type:"number",default:10},{name:"divide",type:"number",array:!0,default:[5,2]},{name:"extent",type:"number",array:!0,length:2,required:!0},{name:"span",type:"number"},{name:"step",type:"number"},{name:"steps",type:"number",array:!0},{name:"minstep",type:"number",default:0},{name:"nice",type:"boolean",default:!0},{name:"name",type:"string"},{name:"as",type:"string",array:!0,length:2,default:["bin0","bin1"]}]},dt(fs,Qa,{transform(t,e){const n=!1!==t.interval,i=this._bins(t),o=i.start,a=i.step,u=t.as||["bin0","bin1"],s=u[0],l=u[1];let c;return c=t.modified()?(e=e.reflow(!0)).SOURCE:e.modified(r(t.field))?e.ADD_MOD:e.ADD,e.visit(c,n?t=>{const e=i(t);t[s]=e,t[l]=null==e?null:o+a*(1+(e-o)/a)}:t=>t[s]=i(t)),e.modifies(n?u:s)},_bins(t){if(this.value&&!t.modified())return this.value;const i=t.field,o=au(t),a=o.step;let u,s,l=o.start,c=l+Math.ceil((o.stop-l)/a)*a;null!=(u=t.anchor)&&(s=u-(l+a*Math.floor((u-l)/a)),l+=s,c+=s);const f=function(t){let e=S(i(t));return null==e?null:ec?1/0:(e=Math.max(l,Math.min(e,c-a)),l+a*Math.floor(1e-14+(e-l)/a))};return f.start=l,f.stop=o.stop,f.step=a,this.value=e(f,r(i),t.name||"bin_"+n(i))}}),ds.Definition={type:"Collect",metadata:{source:!0},params:[{name:"sort",type:"compare"}]},dt(ds,Qa,{transform(t,e){const n=e.fork(e.ALL),r=hs(_a,this.value,n.materialize(n.ADD).add),i=t.sort,o=e.changed()||i&&(t.modified("sort")||e.modified(i.fields));return n.visit(n.REM,r.remove),this.modified(o),this.value=n.source=r.data(Ma(i),o),e.source&&e.source.root&&(this.value.root=e.source.root),n}}),dt(ps,Ta),ms.Definition={type:"CountPattern",metadata:{generates:!0,changes:!0},params:[{name:"field",type:"field",required:!0},{name:"case",type:"enum",values:["upper","lower","mixed"],default:"mixed"},{name:"pattern",type:"string",default:'[\\w"]+'},{name:"stopwords",type:"string",default:""},{name:"as",type:"string",array:!0,length:2,default:["text","count"]}]},dt(ms,Qa,{transform(t,e){const n=e=>n=>{for(var r,i=function(t,e,n){switch(e){case"upper":t=t.toUpperCase();break;case"lower":t=t.toLowerCase()}return t.match(n)}(u(n),t.case,o)||[],s=0,l=i.length;si[t]=1+(i[t]||0))),c=n((t=>i[t]-=1));return r?e.visit(e.SOURCE,l):(e.visit(e.ADD,l),e.visit(e.REM,c)),this._finish(e,s)},_parameterCheck(t,e){let n=!1;return!t.modified("stopwords")&&this._stop||(this._stop=new RegExp("^"+(t.stopwords||"")+"$","i"),n=!0),!t.modified("pattern")&&this._match||(this._match=new RegExp(t.pattern||"[\\w']+","g"),n=!0),(t.modified("field")||e.modified(t.field.fields))&&(n=!0),n&&(this._counts={}),n},_finish(t,e){const n=this._counts,r=this._tuples||(this._tuples={}),i=e[0],o=e[1],a=t.fork(t.NO_SOURCE|t.NO_FIELDS);let u,s,l;for(u in n)s=r[u],l=n[u]||0,!s&&l?(r[u]=s=ba({}),s[i]=u,s[o]=l,a.add.push(s)):0===l?(s&&a.rem.push(s),n[u]=null,r[u]=null):s[o]!==l&&(s[o]=l,a.mod.push(s));return a.modifies(e)}}),ys.Definition={type:"Cross",metadata:{generates:!0},params:[{name:"filter",type:"expr"},{name:"as",type:"string",array:!0,length:2,default:["a","b"]}]},dt(ys,Qa,{transform(t,e){const n=e.fork(e.NO_SOURCE),r=t.as||["a","b"],i=r[0],o=r[1],a=!this.value||e.changed(e.ADD_REM)||t.modified("as")||t.modified("filter");let u=this.value;return a?(u&&(n.rem=u),u=e.materialize(e.SOURCE).source,n.add=this.value=function(t,e,n,r){for(var i,o,a=[],u={},s=t.length,l=0;lws(t,e)))):typeof r[n]===xs&&r[n](t[n]);return r}function ks(t){Qa.call(this,null,t)}const As=[{key:{function:"normal"},params:[{name:"mean",type:"number",default:0},{name:"stdev",type:"number",default:1}]},{key:{function:"lognormal"},params:[{name:"mean",type:"number",default:0},{name:"stdev",type:"number",default:1}]},{key:{function:"uniform"},params:[{name:"min",type:"number",default:0},{name:"max",type:"number",default:1}]},{key:{function:"kde"},params:[{name:"field",type:"field",required:!0},{name:"from",type:"data"},{name:"bandwidth",type:"number",default:0}]}],Ms={key:{function:"mixture"},params:[{name:"distributions",type:"param",array:!0,params:As},{name:"weights",type:"number",array:!0}]};function Es(t,e){return t?t.map(((t,r)=>e[r]||n(t))):null}function Ds(t,e,n){const r=[],i=t=>t(s);let o,a,u,s,l,c;if(null==e)r.push(t.map(n));else for(o={},a=0,u=t.length;at.materialize(t.SOURCE).source}(e)),i=t.steps||t.minsteps||25,o=t.steps||t.maxsteps||200;let a=t.method||"pdf";"pdf"!==a&&"cdf"!==a&&u("Invalid density method: "+a),t.extent||r.data||u("Missing density extent parameter."),a=r[a];const s=t.as||["value","density"],l=Gu(a,t.extent||at(r.data()),i,o).map((t=>{const e={};return e[s[0]]=t[0],e[s[1]]=t[1],ba(e)}));this.value&&(n.rem=this.value),this.value=n.add=n.source=l}return n}});function Cs(t){Qa.call(this,null,t)}Cs.Definition={type:"DotBin",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"groupby",type:"field",array:!0},{name:"step",type:"number"},{name:"smooth",type:"boolean",default:!1},{name:"as",type:"string",default:"bin"}]};function Fs(t){Ta.call(this,null,Ss,t),this.modified(!0)}function Ss(t){const i=t.expr;return this.value&&!t.modified("expr")?this.value:e((e=>i(e,t)),r(i),n(i))}function $s(t){Qa.call(this,[void 0,void 0],t)}function Ts(t,e){Ta.call(this,t),this.parent=e,this.count=0}function Bs(t){Qa.call(this,{},t),this._keys=ft();const e=this._targets=[];e.active=0,e.forEach=t=>{for(let n=0,r=e.active;nl(t))):l(t.name,t.as)}function Os(t){Qa.call(this,ft(),t)}function Rs(t){Qa.call(this,[],t)}function Us(t){Qa.call(this,[],t)}function Ls(t){Qa.call(this,null,t)}function qs(t){Qa.call(this,[],t)}dt(Cs,Qa,{transform(t,e){if(this.value&&!t.modified()&&!e.changed())return e;const n=e.materialize(e.SOURCE).source,r=Ds(e.source,t.groupby,f),i=t.smooth||!1,o=t.field,a=t.step||((t,e)=>Ct(at(t,e))/30)(n,o),u=Ma(((t,e)=>o(t)-o(e))),s=t.as||"bin",l=r.length;let c,h=1/0,d=-1/0,p=0;for(;pd&&(d=e),t[++c][s]=e}return this.value={start:h,stop:d,step:a},e.reflow(!0).modifies(s)}}),dt(Fs,Ta),$s.Definition={type:"Extent",metadata:{},params:[{name:"field",type:"field",required:!0}]},dt($s,Qa,{transform(t,e){const r=this.value,i=t.field,o=e.changed()||e.modified(i.fields)||t.modified("field");let a=r[0],u=r[1];if((o||null==a)&&(a=1/0,u=-1/0),e.visit(o?e.SOURCE:e.ADD,(t=>{const e=S(i(t));null!=e&&(eu&&(u=e))})),!Number.isFinite(a)||!Number.isFinite(u)){let t=n(i);t&&(t=` for field "${t}"`),e.dataflow.warn(`Infinite extent${t}: [${a}, ${u}]`),a=u=void 0}this.value=[a,u]}}),dt(Ts,Ta,{connect(t){return this.detachSubflow=t.detachSubflow,this.targets().add(t),t.source=this},add(t){this.count+=1,this.value.add.push(t)},rem(t){this.count-=1,this.value.rem.push(t)},mod(t){this.value.mod.push(t)},init(t){this.value.init(t,t.NO_SOURCE)},evaluate(){return this.value}}),dt(Bs,Qa,{activate(t){this._targets[this._targets.active++]=t},subflow(t,e,n,r){const i=this.value;let o,a,u=lt(i,t)&&i[t];return u?u.value.stampt&&t.count>0));this.initTargets(t)}},initTargets(t){const e=this._targets,n=e.length,r=t?t.length:0;let i=0;for(;ithis.subflow(t,i,e);return this._group=t.group||{},this.initTargets(),e.visit(e.REM,(t=>{const e=_a(t),n=o.get(e);void 0!==n&&(o.delete(e),u(n).rem(t))})),e.visit(e.ADD,(t=>{const e=r(t);o.set(_a(t),e),u(e).add(t)})),a||e.modified(r.fields)?e.visit(e.MOD,(t=>{const e=_a(t),n=o.get(e),i=r(t);n===i?u(i).mod(t):(o.set(e,i),u(n).rem(t),u(i).add(t))})):e.changed(e.MOD)&&e.visit(e.MOD,(t=>{u(o.get(_a(t))).mod(t)})),a&&e.visit(e.REFLOW,(t=>{const e=_a(t),n=o.get(e),i=r(t);n!==i&&(o.set(e,i),u(n).rem(t),u(i).add(t))})),e.clean()?n.runAfter((()=>{this.clean(),o.clean()})):o.empty>n.cleanThreshold&&n.runAfter(o.clean),e}}),dt(Ns,Ta),Os.Definition={type:"Filter",metadata:{changes:!0},params:[{name:"expr",type:"expr",required:!0}]},dt(Os,Qa,{transform(t,e){const n=e.dataflow,r=this.value,i=e.fork(),o=i.add,a=i.rem,u=i.mod,s=t.expr;let l=!0;function c(e){const n=_a(e),i=s(e,t),c=r.get(n);i&&c?(r.delete(n),o.push(e)):i||c?l&&i&&!c&&u.push(e):(r.set(n,1),a.push(e))}return e.visit(e.REM,(t=>{const e=_a(t);r.has(e)?r.delete(e):a.push(t)})),e.visit(e.ADD,(e=>{s(e,t)?o.push(e):r.set(_a(e),1)})),e.visit(e.MOD,c),t.modified()&&(l=!1,e.visit(e.REFLOW,c)),r.empty>n.cleanThreshold&&n.runAfter(r.clean),i}}),Rs.Definition={type:"Flatten",metadata:{generates:!0},params:[{name:"fields",type:"field",array:!0,required:!0},{name:"index",type:"string"},{name:"as",type:"string",array:!0}]},dt(Rs,Qa,{transform(t,e){const n=e.fork(e.NO_SOURCE),r=t.fields,i=Es(r,t.as||[]),o=t.index||null,a=i.length;return n.rem=this.value,e.visit(e.SOURCE,(t=>{const e=r.map((e=>e(t))),u=e.reduce(((t,e)=>Math.max(t,e.length)),0);let s,l,c,f=0;for(;f{for(let e,n=0;ne[r]=n(e,t)))}}),dt(qs,Qa,{transform(t,e){const n=e.fork(e.ALL),r=t.generator;let i,o,a,u=this.value,s=t.size-u.length;if(s>0){for(i=[];--s>=0;)i.push(a=ba(r(t))),u.push(a);n.add=n.add.length?n.materialize(n.ADD).add.concat(i):i}else o=u.slice(0,-s),n.rem=n.rem.length?n.materialize(n.REM).rem.concat(o):o,u=u.slice(-s);return n.source=this.value=u,n}});const Ps={value:"value",median:Se,mean:function(t,e){let n=0,r=0;if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(++n,r+=e);else{let i=-1;for(let o of t)null!=(o=e(o,++i,t))&&(o=+o)>=o&&(++n,r+=o)}if(n)return r/n},min:Me,max:Ae},js=[];function Is(t){Qa.call(this,[],t)}function Ws(t){cs.call(this,t)}function Hs(t){Qa.call(this,null,t)}function Ys(t){Ta.call(this,null,Gs,t)}function Gs(t){return this.value&&!t.modified()?this.value:bt(t.fields,t.flat)}function Vs(t){Qa.call(this,[],t),this._pending=null}function Xs(t,e,n){n.forEach(ba);const r=e.fork(e.NO_FIELDS&e.NO_SOURCE);return r.rem=t.value,t.value=r.source=r.add=n,t._pending=null,r.rem.length&&r.clean(!0),r}function Js(t){Qa.call(this,{},t)}function Zs(t){Ta.call(this,null,Qs,t)}function Qs(t){if(this.value&&!t.modified())return this.value;const e=t.extents,n=e.length;let r,i,o=1/0,a=-1/0;for(r=0;ra&&(a=i[1]);return[o,a]}function Ks(t){Ta.call(this,null,tl,t)}function tl(t){return this.value&&!t.modified()?this.value:t.values.reduce(((t,e)=>t.concat(e)),[])}function el(t){Qa.call(this,null,t)}function nl(t){cs.call(this,t)}function rl(t){Bs.call(this,t)}function il(t){Qa.call(this,null,t)}function ol(t){Qa.call(this,null,t)}function al(t){Qa.call(this,null,t)}Is.Definition={type:"Impute",metadata:{changes:!0},params:[{name:"field",type:"field",required:!0},{name:"key",type:"field",required:!0},{name:"keyvals",array:!0},{name:"groupby",type:"field",array:!0},{name:"method",type:"enum",default:"value",values:["value","mean","median","max","min"]},{name:"value",default:0}]},dt(Is,Qa,{transform(t,e){var r,i,o,a,s,l,c,f,h,d,p=e.fork(e.ALL),g=function(t){var e,n=t.method||Ps.value;if(null!=Ps[n])return n===Ps.value?(e=void 0!==t.value?t.value:0,()=>e):Ps[n];u("Unrecognized imputation method: "+n)}(t),m=function(t){const e=t.field;return t=>t?e(t):NaN}(t),y=n(t.field),v=n(t.key),_=(t.groupby||[]).map(n),x=function(t,e,n,r){var i,o,a,u,s,l,c,f,h=t=>t(f),d=[],p=r?r.slice():[],g={},m={};for(p.forEach(((t,e)=>g[t]=e+1)),u=0,c=t.length;un.add(t)))):(i=n.value=n.value||this.init(t),e.visit(e.REM,(t=>n.rem(t))),e.visit(e.ADD,(t=>n.add(t)))),n.changes(),e.visit(e.SOURCE,(t=>{ot(t,i[n.cellkey(t)].tuple)})),e.reflow(r).modifies(this._outputs)},changes(){const t=this._adds,e=this._mods;let n,r;for(n=0,r=this._alen;n{const n=yu(e,s)[l],r=t.counts?e.length:1;Gu(n,h||at(e),d,p).forEach((t=>{const n={};for(let t=0;t(this._pending=V(t.data),t=>t.touch(this))));return{async:e}}return n.request(t.url,t.format).then((t=>Xs(this,e,V(t.data))))}}),Js.Definition={type:"Lookup",metadata:{modifies:!0},params:[{name:"index",type:"index",params:[{name:"from",type:"data",required:!0},{name:"key",type:"field",required:!0}]},{name:"values",type:"field",array:!0},{name:"fields",type:"field",array:!0,required:!0},{name:"as",type:"string",array:!0},{name:"default",default:null}]},dt(Js,Qa,{transform(t,e){const r=t.fields,i=t.index,o=t.values,a=null==t.default?null:t.default,s=t.modified(),l=r.length;let c,f,h,d=s?e.SOURCE:e.ADD,p=e,g=t.as;return o?(f=o.length,l>1&&!g&&u('Multi-field lookup requires explicit "as" parameter.'),g&&g.length!==l*f&&u('The "as" parameter has too few output field names.'),g=g||o.map(n),c=function(t){for(var e,n,u=0,s=0;ue.modified(t.fields))),d|=h?e.MOD:0),e.visit(d,c),p.modifies(g)}}),dt(Zs,Ta),dt(Ks,Ta),dt(el,Qa,{transform(t,e){return this.modified(t.modified()),this.value=t,e.fork(e.NO_SOURCE|e.NO_FIELDS)}}),nl.Definition={type:"Pivot",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"field",type:"field",required:!0},{name:"value",type:"field",required:!0},{name:"op",type:"enum",values:ts,default:"sum"},{name:"limit",type:"number",default:0},{name:"key",type:"field"}]},dt(nl,cs,{_transform:cs.prototype.transform,transform(t,n){return this._transform(function(t,n){const i=t.field,o=t.value,a=("count"===t.op?"__count__":t.op)||"sum",u=r(i).concat(r(o)),s=function(t,e,n){const r={},i=[];return n.visit(n.SOURCE,(e=>{const n=t(e);r[n]||(r[n]=1,i.push(n))})),i.sort(K),e?i.slice(0,e):i}(i,t.limit||0,n);n.changed()&&t.set("__pivot__",null,null,!0);return{key:t.key,groupby:t.groupby,ops:s.map((()=>a)),fields:s.map((t=>function(t,n,r,i){return e((e=>n(e)===t?r(e):NaN),i,t+"")}(t,i,o,u))),as:s.map((t=>t+"")),modified:t.modified.bind(t)}}(t,n),n)}}),dt(rl,Bs,{transform(t,e){const n=t.subflow,i=t.field,o=t=>this.subflow(_a(t),n,e,t);return(t.modified("field")||i&&e.modified(r(i)))&&u("PreFacet does not support field modification."),this.initTargets(),i?(e.visit(e.MOD,(t=>{const e=o(t);i(t).forEach((t=>e.mod(t)))})),e.visit(e.ADD,(t=>{const e=o(t);i(t).forEach((t=>e.add(ba(t))))})),e.visit(e.REM,(t=>{const e=o(t);i(t).forEach((t=>e.rem(t)))}))):(e.visit(e.MOD,(t=>o(t).mod(t))),e.visit(e.ADD,(t=>o(t).add(t))),e.visit(e.REM,(t=>o(t).rem(t)))),e.clean()&&e.runAfter((()=>this.clean())),e}}),il.Definition={type:"Project",metadata:{generates:!0,changes:!0},params:[{name:"fields",type:"field",array:!0},{name:"as",type:"string",null:!0,array:!0}]},dt(il,Qa,{transform(t,e){const n=e.fork(e.NO_SOURCE),r=t.fields,i=Es(t.fields,t.as||[]),o=r?(t,e)=>function(t,e,n,r){for(let i=0,o=n.length;i{const e=_a(t);n.rem.push(a[e]),a[e]=null})),e.visit(e.ADD,(t=>{const e=o(t,ba({}));a[_a(t)]=e,n.add.push(e)})),e.visit(e.MOD,(t=>{n.mod.push(o(t,a[_a(t)]))})),n}}),dt(ol,Qa,{transform(t,e){return this.value=t.value,t.modified("value")?e.fork(e.NO_SOURCE|e.NO_FIELDS):e.StopPropagation}}),al.Definition={type:"Quantile",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"field",type:"field",required:!0},{name:"probs",type:"number",array:!0},{name:"step",type:"number",default:.01},{name:"as",type:"string",array:!0,default:["prob","value"]}]};function ul(t){Qa.call(this,null,t)}function sl(t){Qa.call(this,[],t),this.count=0}function ll(t){Qa.call(this,null,t)}function cl(t){Qa.call(this,null,t),this.modified(!0)}function fl(t){Qa.call(this,null,t)}dt(al,Qa,{transform(t,e){const r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=t.as||["prob","value"];if(this.value&&!t.modified()&&!e.changed())return r.source=this.value,r;const o=Ds(e.materialize(e.SOURCE).source,t.groupby,t.field),a=(t.groupby||[]).map(n),u=[],s=t.step||.01,l=t.probs||Te(s/2,1-1e-14,s),c=l.length;return o.forEach((t=>{const e=ru(t,l);for(let n=0;n{const e=_a(t);n.rem.push(r[e]),r[e]=null})),e.visit(e.ADD,(t=>{const e=wa(t);r[_a(t)]=e,n.add.push(e)})),e.visit(e.MOD,(t=>{const e=r[_a(t)];for(const r in t)e[r]=t[r],n.modifies(r);n.mod.push(e)}))),n}}),sl.Definition={type:"Sample",metadata:{},params:[{name:"size",type:"number",default:1e3}]},dt(sl,Qa,{transform(e,n){const r=n.fork(n.NO_SOURCE),i=e.modified("size"),o=e.size,a=this.value.reduce(((t,e)=>(t[_a(e)]=1,t)),{});let u=this.value,s=this.count,l=0;function c(e){let n,i;u.length=l&&(n=u[i],a[_a(n)]&&r.rem.push(n),u[i]=e)),++s}if(n.rem.length&&(n.visit(n.REM,(t=>{const e=_a(t);a[e]&&(a[e]=-1,r.rem.push(t)),--s})),u=u.filter((t=>-1!==a[_a(t)]))),(n.rem.length||i)&&u.length{a[_a(t)]||c(t)})),l=-1),i&&u.length>o){const t=u.length-o;for(let e=0;e{a[_a(t)]&&r.mod.push(t)})),n.add.length&&n.visit(n.ADD,c),(n.add.length||l<0)&&(r.add=u.filter((t=>!a[_a(t)]))),this.count=s,this.value=r.source=u,r}}),ll.Definition={type:"Sequence",metadata:{generates:!0,changes:!0},params:[{name:"start",type:"number",required:!0},{name:"stop",type:"number",required:!0},{name:"step",type:"number",default:1},{name:"as",type:"string",default:"data"}]},dt(ll,Qa,{transform(t,e){if(this.value&&!t.modified())return;const n=e.materialize().fork(e.MOD),r=t.as||"data";return n.rem=this.value?e.rem.concat(this.value):e.rem,this.value=Te(t.start,t.stop,t.step||1).map((t=>{const e={};return e[r]=t,ba(e)})),n.add=e.add.concat(this.value),n}}),dt(cl,Qa,{transform(t,e){return this.value=e.source,e.changed()?e.fork(e.NO_SOURCE|e.NO_FIELDS):e.StopPropagation}});const hl=["unit0","unit1"];function dl(t){Qa.call(this,ft(),t)}function pl(t){Qa.call(this,null,t)}fl.Definition={type:"TimeUnit",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"interval",type:"boolean",default:!0},{name:"units",type:"enum",values:er,array:!0},{name:"step",type:"number",default:1},{name:"maxbins",type:"number",default:40},{name:"extent",type:"date",array:!0},{name:"timezone",type:"enum",default:"local",values:["local","utc"]},{name:"as",type:"string",array:!0,length:2,default:hl}]},dt(fl,Qa,{transform(t,e){const n=t.field,i=!1!==t.interval,o="utc"===t.timezone,a=this._floor(t,e),u=(o?$r:Sr)(a.unit).offset,s=t.as||hl,l=s[0],c=s[1],f=a.step;let h=a.start||1/0,d=a.stop||-1/0,p=e.ADD;return(t.modified()||e.changed(e.REM)||e.modified(r(n)))&&(p=(e=e.reflow(!0)).SOURCE,h=1/0,d=-1/0),e.visit(p,(t=>{const e=n(t);let r,o;null==e?(t[l]=null,i&&(t[c]=null)):(t[l]=r=o=a(e),i&&(t[c]=o=u(r,f)),rd&&(d=o))})),a.start=h,a.stop=d,e.modifies(i?s:l)},_floor(t,e){const n="utc"===t.timezone,{units:r,step:i}=t.units?{units:t.units,step:t.step||1}:Qr({extent:t.extent||at(e.materialize(e.SOURCE).source,t.field),maxbins:t.maxbins}),o=rr(r),a=this.value||{},u=(n?Dr:Ar)(o,i);return u.unit=F(o),u.units=o,u.step=i,u.start=a.start,u.stop=a.stop,this.value=u}}),dt(dl,Qa,{transform(t,e){const n=e.dataflow,r=t.field,i=this.value,o=t=>i.set(r(t),t);let a=!0;return t.modified("field")||e.modified(r.fields)?(i.clear(),e.visit(e.SOURCE,o)):e.changed()?(e.visit(e.REM,(t=>i.delete(r(t)))),e.visit(e.ADD,o)):a=!1,this.modified(a),i.empty>n.cleanThreshold&&n.runAfter(i.clean),e.fork()}}),dt(pl,Qa,{transform(t,e){(!this.value||t.modified("field")||t.modified("sort")||e.changed()||t.sort&&e.modified(t.sort.fields))&&(this.value=(t.sort?e.source.slice().sort(Ma(t.sort)):e.source).map(t.field))}});const gl={row_number:function(){return{next:t=>t.index+1}},rank:function(){let t;return{init:()=>t=1,next:e=>{const n=e.index,r=e.data;return n&&e.compare(r[n-1],r[n])?t=n+1:t}}},dense_rank:function(){let t;return{init:()=>t=1,next:e=>{const n=e.index,r=e.data;return n&&e.compare(r[n-1],r[n])?++t:t}}},percent_rank:function(){const t=gl.rank(),e=t.next;return{init:t.init,next:t=>(e(t)-1)/(t.data.length-1)}},cume_dist:function(){let t;return{init:()=>t=0,next:e=>{const n=e.data,r=e.compare;let i=e.index;if(t0||u("ntile num must be greater than zero.");const n=gl.cume_dist(),r=n.next;return{init:n.init,next:t=>Math.ceil(e*r(t))}},lag:function(t,e){return e=+e||1,{next:n=>{const r=n.index-e;return r>=0?t(n.data[r]):null}}},lead:function(t,e){return e=+e||1,{next:n=>{const r=n.index+e,i=n.data;return rt(e.data[e.i0])}},last_value:function(t){return{next:e=>t(e.data[e.i1-1])}},nth_value:function(t,e){return(e=+e)>0||u("nth_value nth must be greater than zero."),{next:n=>{const r=n.i0+(e-1);return re=null,next:n=>{const r=t(n.data[n.index]);return null!=r?e=r:e}}},next_value:function(t){let e,n;return{init:()=>(e=null,n=-1),next:r=>{const i=r.data;return r.index<=n?e:(n=function(t,e,n){for(let r=e.length;nc[t]=1))}m(t.sort),e.forEach(((t,e)=>{const r=i[e],c=n(r),y=Ju(t,c,a[e]);if(m(r),s.push(y),lt(gl,t))l.push(function(t,e,n,r){const i=gl[t](e,n);return{init:i.init||h,update:function(t,e){e[r]=i.next(t)}}}(t,i[e],o[e],y));else{if(null==r&&"count"!==t&&u("Null aggregate field specified."),"count"===t)return void d.push(y);g=!1;let e=f[c];e||(e=f[c]=[],e.field=r,p.push(e)),e.push(es(t,y))}})),(d.length||p.length)&&(this.cell=function(t,e,n){t=t.map((t=>us(t,t.field)));const r={num:0,agg:null,store:!1,count:e};if(!n)for(var i=t.length,o=r.agg=Array(i),a=0;a0&&!i(o[n],o[n-1])&&(t.i0=e.left(o,o[n])),rt.init())),this.cell&&this.cell.init()},vl.update=function(t,e){const n=this.cell,r=this.windows,i=t.data,o=r&&r.length;let a;if(n){for(a=t.p0;athis.group(i(t));let a=this.state;a&&!n||(a=this.state=new yl(t)),n||e.modified(a.inputs)?(this.value={},e.visit(e.SOURCE,(t=>o(t).add(t)))):(e.visit(e.REM,(t=>o(t).remove(t))),e.visit(e.ADD,(t=>o(t).add(t))));for(let e=0,n=this._mlen;e=1?Nl:t<=-1?-Nl:Math.asin(t)}const Rl=Math.PI,Ul=2*Rl,Ll=1e-6,ql=Ul-Ll;function Pl(t){this._+=t[0];for(let e=1,n=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return Pl;const n=10**e;return function(t){this._+=t[0];for(let e=1,r=t.length;eLl)if(Math.abs(c*u-s*l)>Ll&&i){let h=n-o,d=r-a,p=u*u+s*s,g=h*h+d*d,m=Math.sqrt(p),y=Math.sqrt(f),v=i*Math.tan((Rl-Math.acos((p+f-g)/(2*m*y)))/2),_=v/y,x=v/m;Math.abs(_-1)>Ll&&this._append`L${t+_*l},${e+_*c}`,this._append`A${i},${i},0,0,${+(c*h>l*d)},${this._x1=t+x*u},${this._y1=e+x*s}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,n,r,i,o){if(t=+t,e=+e,o=!!o,(n=+n)<0)throw new Error(`negative radius: ${n}`);let a=n*Math.cos(r),u=n*Math.sin(r),s=t+a,l=e+u,c=1^o,f=o?r-i:i-r;null===this._x1?this._append`M${s},${l}`:(Math.abs(this._x1-s)>Ll||Math.abs(this._y1-l)>Ll)&&this._append`L${s},${l}`,n&&(f<0&&(f=f%Ul+Ul),f>ql?this._append`A${n},${n},0,1,${c},${t-a},${e-u}A${n},${n},0,1,${c},${this._x1=s},${this._y1=l}`:f>Ll&&this._append`A${n},${n},0,${+(f>=Rl)},${c},${this._x1=t+n*Math.cos(i)},${this._y1=e+n*Math.sin(i)}`)}rect(t,e,n,r){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${n=+n}v${+r}h${-n}Z`}toString(){return this._}};function Il(){return new jl}function Wl(t){let e=3;return t.digits=function(n){if(!arguments.length)return e;if(null==n)e=null;else{const t=Math.floor(n);if(!(t>=0))throw new RangeError(`invalid digits: ${n}`);e=t}return t},()=>new jl(e)}function Hl(t){return t.innerRadius}function Yl(t){return t.outerRadius}function Gl(t){return t.startAngle}function Vl(t){return t.endAngle}function Xl(t){return t&&t.padAngle}function Jl(t,e,n,r,i,o,a){var u=t-n,s=e-r,l=(a?o:-o)/$l(u*u+s*s),c=l*s,f=-l*u,h=t+c,d=e+f,p=n+c,g=r+f,m=(h+p)/2,y=(d+g)/2,v=p-h,_=g-d,x=v*v+_*_,b=i-o,w=h*g-p*d,k=(_<0?-1:1)*$l(Cl(0,b*b*x-w*w)),A=(w*_-v*k)/x,M=(-w*v-_*k)/x,E=(w*_+v*k)/x,D=(-w*v+_*k)/x,C=A-m,F=M-y,S=E-m,$=D-y;return C*C+F*F>S*S+$*$&&(A=E,M=D),{cx:A,cy:M,x01:-c,y01:-f,x11:A*(i/b-1),y11:M*(i/b-1)}}function Zl(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function Ql(t){this._context=t}function Kl(t){return new Ql(t)}function tc(t){return t[0]}function ec(t){return t[1]}function nc(t,e){var n=Al(!0),r=null,i=Kl,o=null,a=Wl(u);function u(u){var s,l,c,f=(u=Zl(u)).length,h=!1;for(null==r&&(o=i(c=a())),s=0;s<=f;++s)!(s=f;--h)u.point(y[h],v[h]);u.lineEnd(),u.areaEnd()}m&&(y[c]=+t(d,c,l),v[c]=+e(d,c,l),u.point(r?+r(d,c,l):y[c],n?+n(d,c,l):v[c]))}if(p)return u=null,p+""||null}function c(){return nc().defined(i).curve(a).context(o)}return t="function"==typeof t?t:void 0===t?tc:Al(+t),e="function"==typeof e?e:Al(void 0===e?0:+e),n="function"==typeof n?n:void 0===n?ec:Al(+n),l.x=function(e){return arguments.length?(t="function"==typeof e?e:Al(+e),r=null,l):t},l.x0=function(e){return arguments.length?(t="function"==typeof e?e:Al(+e),l):t},l.x1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:Al(+t),l):r},l.y=function(t){return arguments.length?(e="function"==typeof t?t:Al(+t),n=null,l):e},l.y0=function(t){return arguments.length?(e="function"==typeof t?t:Al(+t),l):e},l.y1=function(t){return arguments.length?(n=null==t?null:"function"==typeof t?t:Al(+t),l):n},l.lineX0=l.lineY0=function(){return c().x(t).y(e)},l.lineY1=function(){return c().x(t).y(n)},l.lineX1=function(){return c().x(r).y(e)},l.defined=function(t){return arguments.length?(i="function"==typeof t?t:Al(!!t),l):i},l.curve=function(t){return arguments.length?(a=t,null!=o&&(u=a(o)),l):a},l.context=function(t){return arguments.length?(null==t?o=u=null:u=a(o=t),l):o},l}Il.prototype=jl.prototype,Ql.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}};var ic={draw(t,e){const n=$l(e/Bl);t.moveTo(n,0),t.arc(0,0,n,0,zl)}};function oc(){}function ac(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function uc(t){this._context=t}function sc(t){this._context=t}function lc(t){this._context=t}function cc(t,e){this._basis=new uc(t),this._beta=e}uc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:ac(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:ac(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},sc.prototype={areaStart:oc,areaEnd:oc,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:ac(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},lc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:ac(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},cc.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var r,i=t[0],o=e[0],a=t[n]-i,u=e[n]-o,s=-1;++s<=n;)r=s/n,this._basis.point(this._beta*t[s]+(1-this._beta)*(i+r*a),this._beta*e[s]+(1-this._beta)*(o+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var fc=function t(e){function n(t){return 1===e?new uc(t):new cc(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function hc(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function dc(t,e){this._context=t,this._k=(1-e)/6}dc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:hc(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:hc(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var pc=function t(e){function n(t){return new dc(t,e)}return n.tension=function(e){return t(+e)},n}(0);function gc(t,e){this._context=t,this._k=(1-e)/6}gc.prototype={areaStart:oc,areaEnd:oc,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:hc(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var mc=function t(e){function n(t){return new gc(t,e)}return n.tension=function(e){return t(+e)},n}(0);function yc(t,e){this._context=t,this._k=(1-e)/6}yc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:hc(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var vc=function t(e){function n(t){return new yc(t,e)}return n.tension=function(e){return t(+e)},n}(0);function _c(t,e,n){var r=t._x1,i=t._y1,o=t._x2,a=t._y2;if(t._l01_a>Tl){var u=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,s=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*u-t._x0*t._l12_2a+t._x2*t._l01_2a)/s,i=(i*u-t._y0*t._l12_2a+t._y2*t._l01_2a)/s}if(t._l23_a>Tl){var l=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,c=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*l+t._x1*t._l23_2a-e*t._l12_2a)/c,a=(a*l+t._y1*t._l23_2a-n*t._l12_2a)/c}t._context.bezierCurveTo(r,i,o,a,t._x2,t._y2)}function xc(t,e){this._context=t,this._alpha=e}xc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:_c(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var bc=function t(e){function n(t){return e?new xc(t,e):new dc(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function wc(t,e){this._context=t,this._alpha=e}wc.prototype={areaStart:oc,areaEnd:oc,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:_c(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var kc=function t(e){function n(t){return e?new wc(t,e):new gc(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Ac(t,e){this._context=t,this._alpha=e}Ac.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:_c(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Mc=function t(e){function n(t){return e?new Ac(t,e):new yc(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Ec(t){this._context=t}function Dc(t){return t<0?-1:1}function Cc(t,e,n){var r=t._x1-t._x0,i=e-t._x1,o=(t._y1-t._y0)/(r||i<0&&-0),a=(n-t._y1)/(i||r<0&&-0),u=(o*i+a*r)/(r+i);return(Dc(o)+Dc(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(u))||0}function Fc(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function Sc(t,e,n){var r=t._x0,i=t._y0,o=t._x1,a=t._y1,u=(o-r)/3;t._context.bezierCurveTo(r+u,i+u*e,o-u,a-u*n,o,a)}function $c(t){this._context=t}function Tc(t){this._context=new Bc(t)}function Bc(t){this._context=t}function Nc(t){this._context=t}function zc(t){var e,n,r=t.length-1,i=new Array(r),o=new Array(r),a=new Array(r);for(i[0]=0,o[0]=2,a[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(a[e]-i[e+1])/o[e];for(o[r-1]=(t[r]+i[r-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};const Uc=()=>"undefined"!=typeof Image?Image:null;function Lc(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}function qc(t,e){switch(arguments.length){case 0:break;case 1:"function"==typeof t?this.interpolator(t):this.range(t);break;default:this.domain(t),"function"==typeof e?this.interpolator(e):this.range(e)}return this}const Pc=Symbol("implicit");function jc(){var t=new ce,e=[],n=[],r=Pc;function i(i){let o=t.get(i);if(void 0===o){if(r!==Pc)return r;t.set(i,o=e.push(i)-1)}return n[o%n.length]}return i.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new ce;for(const r of n)t.has(r)||t.set(r,e.push(r)-1);return i},i.range=function(t){return arguments.length?(n=Array.from(t),i):n.slice()},i.unknown=function(t){return arguments.length?(r=t,i):r},i.copy=function(){return jc(e,n).unknown(r)},Lc.apply(i,arguments),i}function Ic(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function Wc(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function Hc(){}var Yc=.7,Gc=1/Yc,Vc="\\s*([+-]?\\d+)\\s*",Xc="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",Jc="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Zc=/^#([0-9a-f]{3,8})$/,Qc=new RegExp(`^rgb\\(${Vc},${Vc},${Vc}\\)$`),Kc=new RegExp(`^rgb\\(${Jc},${Jc},${Jc}\\)$`),tf=new RegExp(`^rgba\\(${Vc},${Vc},${Vc},${Xc}\\)$`),ef=new RegExp(`^rgba\\(${Jc},${Jc},${Jc},${Xc}\\)$`),nf=new RegExp(`^hsl\\(${Xc},${Jc},${Jc}\\)$`),rf=new RegExp(`^hsla\\(${Xc},${Jc},${Jc},${Xc}\\)$`),of={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function af(){return this.rgb().formatHex()}function uf(){return this.rgb().formatRgb()}function sf(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=Zc.exec(t))?(n=e[1].length,e=parseInt(e[1],16),6===n?lf(e):3===n?new df(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?cf(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?cf(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Qc.exec(t))?new df(e[1],e[2],e[3],1):(e=Kc.exec(t))?new df(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=tf.exec(t))?cf(e[1],e[2],e[3],e[4]):(e=ef.exec(t))?cf(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=nf.exec(t))?_f(e[1],e[2]/100,e[3]/100,1):(e=rf.exec(t))?_f(e[1],e[2]/100,e[3]/100,e[4]):of.hasOwnProperty(t)?lf(of[t]):"transparent"===t?new df(NaN,NaN,NaN,0):null}function lf(t){return new df(t>>16&255,t>>8&255,255&t,1)}function cf(t,e,n,r){return r<=0&&(t=e=n=NaN),new df(t,e,n,r)}function ff(t){return t instanceof Hc||(t=sf(t)),t?new df((t=t.rgb()).r,t.g,t.b,t.opacity):new df}function hf(t,e,n,r){return 1===arguments.length?ff(t):new df(t,e,n,null==r?1:r)}function df(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function pf(){return`#${vf(this.r)}${vf(this.g)}${vf(this.b)}`}function gf(){const t=mf(this.opacity);return`${1===t?"rgb(":"rgba("}${yf(this.r)}, ${yf(this.g)}, ${yf(this.b)}${1===t?")":`, ${t})`}`}function mf(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function yf(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function vf(t){return((t=yf(t))<16?"0":"")+t.toString(16)}function _f(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new wf(t,e,n,r)}function xf(t){if(t instanceof wf)return new wf(t.h,t.s,t.l,t.opacity);if(t instanceof Hc||(t=sf(t)),!t)return new wf;if(t instanceof wf)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),o=Math.max(e,n,r),a=NaN,u=o-i,s=(o+i)/2;return u?(a=e===o?(n-r)/u+6*(n0&&s<1?0:a,new wf(a,u,s,t.opacity)}function bf(t,e,n,r){return 1===arguments.length?xf(t):new wf(t,e,n,null==r?1:r)}function wf(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function kf(t){return(t=(t||0)%360)<0?t+360:t}function Af(t){return Math.max(0,Math.min(1,t||0))}function Mf(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}Ic(Hc,sf,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:af,formatHex:af,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return xf(this).formatHsl()},formatRgb:uf,toString:uf}),Ic(df,hf,Wc(Hc,{brighter(t){return t=null==t?Gc:Math.pow(Gc,t),new df(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?Yc:Math.pow(Yc,t),new df(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new df(yf(this.r),yf(this.g),yf(this.b),mf(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:pf,formatHex:pf,formatHex8:function(){return`#${vf(this.r)}${vf(this.g)}${vf(this.b)}${vf(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:gf,toString:gf})),Ic(wf,bf,Wc(Hc,{brighter(t){return t=null==t?Gc:Math.pow(Gc,t),new wf(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?Yc:Math.pow(Yc,t),new wf(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new df(Mf(t>=240?t-240:t+120,i,r),Mf(t,i,r),Mf(t<120?t+240:t-120,i,r),this.opacity)},clamp(){return new wf(kf(this.h),Af(this.s),Af(this.l),mf(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=mf(this.opacity);return`${1===t?"hsl(":"hsla("}${kf(this.h)}, ${100*Af(this.s)}%, ${100*Af(this.l)}%${1===t?")":`, ${t})`}`}}));const Ef=Math.PI/180,Df=180/Math.PI,Cf=.96422,Ff=1,Sf=.82521,$f=4/29,Tf=6/29,Bf=3*Tf*Tf,Nf=Tf*Tf*Tf;function zf(t){if(t instanceof Rf)return new Rf(t.l,t.a,t.b,t.opacity);if(t instanceof If)return Wf(t);t instanceof df||(t=ff(t));var e,n,r=Pf(t.r),i=Pf(t.g),o=Pf(t.b),a=Uf((.2225045*r+.7168786*i+.0606169*o)/Ff);return r===i&&i===o?e=n=a:(e=Uf((.4360747*r+.3850649*i+.1430804*o)/Cf),n=Uf((.0139322*r+.0971045*i+.7141733*o)/Sf)),new Rf(116*a-16,500*(e-a),200*(a-n),t.opacity)}function Of(t,e,n,r){return 1===arguments.length?zf(t):new Rf(t,e,n,null==r?1:r)}function Rf(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function Uf(t){return t>Nf?Math.pow(t,1/3):t/Bf+$f}function Lf(t){return t>Tf?t*t*t:Bf*(t-$f)}function qf(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Pf(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function jf(t,e,n,r){return 1===arguments.length?function(t){if(t instanceof If)return new If(t.h,t.c,t.l,t.opacity);if(t instanceof Rf||(t=zf(t)),0===t.a&&0===t.b)return new If(NaN,0=1?(n=1,e-1):Math.floor(n*e),i=t[r],o=t[r+1],a=r>0?t[r-1]:2*i-o,u=r()=>t;function oh(t,e){return function(n){return t+n*e}}function ah(t,e){var n=e-t;return n?oh(t,n>180||n<-180?n-360*Math.round(n/360):n):ih(isNaN(t)?e:t)}function uh(t){return 1==(t=+t)?sh:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):ih(isNaN(e)?n:e)}}function sh(t,e){var n=e-t;return n?oh(t,n):ih(isNaN(t)?e:t)}var lh=function t(e){var n=uh(e);function r(t,e){var r=n((t=hf(t)).r,(e=hf(e)).r),i=n(t.g,e.g),o=n(t.b,e.b),a=sh(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=o(e),t.opacity=a(e),t+""}}return r.gamma=t,r}(1);function ch(t){return function(e){var n,r,i=e.length,o=new Array(i),a=new Array(i),u=new Array(i);for(n=0;no&&(i=e.slice(o,i),u[a]?u[a]+=i:u[++a]=i),(n=n[0])===(r=r[0])?u[a]?u[a]+=r:u[++a]=r:(u[++a]=null,s.push({i:a,x:yh(n,r)})),o=xh.lastIndex;return o180?e+=360:e-t>180&&(t+=360),o.push({i:n.push(i(n)+"rotate(",null,r)-2,x:yh(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(o.rotate,a.rotate,u,s),function(t,e,n,o){t!==e?o.push({i:n.push(i(n)+"skewX(",null,r)-2,x:yh(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(o.skewX,a.skewX,u,s),function(t,e,n,r,o,a){if(t!==n||e!==r){var u=o.push(i(o)+"scale(",null,",",null,")");a.push({i:u-4,x:yh(t,n)},{i:u-2,x:yh(e,r)})}else 1===n&&1===r||o.push(i(o)+"scale("+n+","+r+")")}(o.scaleX,o.scaleY,a.scaleX,a.scaleY,u,s),o=a=null,function(t){for(var e,n=-1,r=s.length;++ne&&(n=t,t=e,e=n),function(n){return Math.max(t,Math.min(e,n))}}(a[0],a[t-1])),r=t>2?Jh:Xh,i=o=null,f}function f(e){return null==e||isNaN(e=+e)?n:(i||(i=r(a.map(t),u,s)))(t(l(e)))}return f.invert=function(n){return l(e((o||(o=r(u,a.map(t),yh)))(n)))},f.domain=function(t){return arguments.length?(a=Array.from(t,Hh),c()):a.slice()},f.range=function(t){return arguments.length?(u=Array.from(t),c()):u.slice()},f.rangeRound=function(t){return u=Array.from(t),s=kh,c()},f.clamp=function(t){return arguments.length?(l=!!t||Gh,c()):l!==Gh},f.interpolate=function(t){return arguments.length?(s=t,c()):s},f.unknown=function(t){return arguments.length?(n=t,f):n},function(n,r){return t=n,e=r,c()}}function Kh(){return Qh()(Gh,Gh)}function td(t,e,n,r){var i,o=ke(t,e,n);switch((r=Le(null==r?",f":r)).type){case"s":var a=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=Ze(o,a))||(r.precision=i),Ye(r,a);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=Qe(o,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=Je(o))||(r.precision=i-2*("%"===r.type))}return He(r)}function ed(t){var e=t.domain;return t.ticks=function(t){var n=e();return be(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return td(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i,o=e(),a=0,u=o.length-1,s=o[a],l=o[u],c=10;for(l0;){if((i=we(s,l,n))===r)return o[a]=s,o[u]=l,e(o);if(i>0)s=Math.floor(s/i)*i,l=Math.ceil(l/i)*i;else{if(!(i<0))break;s=Math.ceil(s*i)/i,l=Math.floor(l*i)/i}r=i}return t},t}function nd(t,e){var n,r=0,i=(t=t.slice()).length-1,o=t[r],a=t[i];return a-t(-e,n)}function ld(t){const e=t(rd,id),n=e.domain;let r,i,o=10;function a(){return r=function(t){return t===Math.E?Math.log:10===t&&Math.log10||2===t&&Math.log2||(t=Math.log(t),e=>Math.log(e)/t)}(o),i=function(t){return 10===t?ud:t===Math.E?Math.exp:e=>Math.pow(t,e)}(o),n()[0]<0?(r=sd(r),i=sd(i),t(od,ad)):t(rd,id),e}return e.base=function(t){return arguments.length?(o=+t,a()):o},e.domain=function(t){return arguments.length?(n(t),a()):n()},e.ticks=t=>{const e=n();let a=e[0],u=e[e.length-1];const s=u0){for(;f<=h;++f)for(l=1;lu)break;p.push(c)}}else for(;f<=h;++f)for(l=o-1;l>=1;--l)if(c=f>0?l/i(-f):l*i(f),!(cu)break;p.push(c)}2*p.length{if(null==t&&(t=10),null==n&&(n=10===o?"s":","),"function"!=typeof n&&(o%1||null!=(n=Le(n)).precision||(n.trim=!0),n=He(n)),t===1/0)return n;const a=Math.max(1,o*t/e.ticks().length);return t=>{let e=t/i(Math.round(r(t)));return e*on(nd(n(),{floor:t=>i(Math.floor(r(t))),ceil:t=>i(Math.ceil(r(t)))})),e}function cd(t){return function(e){return Math.sign(e)*Math.log1p(Math.abs(e/t))}}function fd(t){return function(e){return Math.sign(e)*Math.expm1(Math.abs(e))*t}}function hd(t){var e=1,n=t(cd(e),fd(e));return n.constant=function(n){return arguments.length?t(cd(e=+n),fd(e)):e},ed(n)}function dd(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function pd(t){return t<0?-Math.sqrt(-t):Math.sqrt(t)}function gd(t){return t<0?-t*t:t*t}function md(t){var e=t(Gh,Gh),n=1;return e.exponent=function(e){return arguments.length?1===(n=+e)?t(Gh,Gh):.5===n?t(pd,gd):t(dd(n),dd(1/n)):n},ed(e)}function yd(){var t=md(Qh());return t.copy=function(){return Zh(t,yd()).exponent(t.exponent())},Lc.apply(t,arguments),t}function vd(t){return new Date(t)}function _d(t){return t instanceof Date?+t:+new Date(+t)}function xd(t,e,n,r,i,o,a,u,s,l){var c=Kh(),f=c.invert,h=c.domain,d=l(".%L"),p=l(":%S"),g=l("%I:%M"),m=l("%I %p"),y=l("%a %d"),v=l("%b %d"),_=l("%B"),x=l("%Y");function b(t){return(s(t)0?r:1:0}const Cd="linear",Fd="log",Sd="pow",$d="sqrt",Td="symlog",Bd="time",Nd="utc",zd="sequential",Od="diverging",Rd="quantile",Ud="quantize",Ld="threshold",qd="ordinal",Pd="point",jd="band",Id="bin-ordinal",Wd="continuous",Hd="discrete",Yd="discretizing",Gd="interpolating",Vd="temporal";function Xd(){const t=jc().unknown(void 0),e=t.domain,n=t.range;let r,i,o=[0,1],a=!1,u=0,s=0,l=.5;function c(){const t=e().length,c=o[1]d+r*t));return n(c?p.reverse():p)}return delete t.unknown,t.domain=function(t){return arguments.length?(e(t),c()):e()},t.range=function(t){return arguments.length?(o=[+t[0],+t[1]],c()):o.slice()},t.rangeRound=function(t){return o=[+t[0],+t[1]],a=!0,c()},t.bandwidth=function(){return i},t.step=function(){return r},t.round=function(t){return arguments.length?(a=!!t,c()):a},t.padding=function(t){return arguments.length?(s=Math.max(0,Math.min(1,t)),u=s,c()):u},t.paddingInner=function(t){return arguments.length?(u=Math.max(0,Math.min(1,t)),c()):u},t.paddingOuter=function(t){return arguments.length?(s=Math.max(0,Math.min(1,t)),c()):s},t.align=function(t){return arguments.length?(l=Math.max(0,Math.min(1,t)),c()):l},t.invertRange=function(t){if(null==t[0]||null==t[1])return;const r=o[1]o[1-r])?void 0:(s=Math.max(0,ae(a,f)-1),l=f===h?s:ae(a,h)-1,f-a[s]>i+1e-10&&++s,r&&(c=s,s=u-l,l=u-c),s>l?void 0:e().slice(s,l+1))},t.invert=function(e){const n=t.invertRange([e,e]);return n?n[0]:n},t.copy=function(){return Xd().domain(e()).range(o).round(a).paddingInner(u).paddingOuter(s).align(l)},c()}function Jd(t){const e=t.copy;return t.padding=t.paddingOuter,delete t.paddingInner,t.copy=function(){return Jd(e())},t}var Zd=Array.prototype.map;const Qd=Array.prototype.slice;const Kd=new Map,tp=Symbol("vega_scale");function ep(t){return t[tp]=!0,t}function np(t,e,n){return arguments.length>1?(Kd.set(t,function(t,e,n){const r=function(){const n=e();return n.invertRange||(n.invertRange=n.invert?function(t){return function(e){let n,r=e[0],i=e[1];return i=u&&n[o]<=s&&(l<0&&(l=o),r=o);if(!(l<0))return u=t.invertExtent(n[l]),s=t.invertExtent(n[r]),[void 0===u[0]?u[1]:u[0],void 0===s[1]?s[0]:s[1]]}}(n):void 0),n.type=t,ep(n)};return r.metadata=Nt(V(n)),r}(t,e,n)),this):rp(t)?Kd.get(t):void 0}function rp(t){return Kd.has(t)}function ip(t,e){const n=Kd.get(t);return n&&n.metadata[e]}function op(t){return ip(t,Wd)}function ap(t){return ip(t,Hd)}function up(t){return ip(t,Yd)}function sp(t){return ip(t,Fd)}function lp(t){return ip(t,Gd)}function cp(t){return ip(t,Rd)}np("identity",(function t(e){var n;function r(t){return null==t||isNaN(t=+t)?n:t}return r.invert=r,r.domain=r.range=function(t){return arguments.length?(e=Array.from(t,Hh),r):e.slice()},r.unknown=function(t){return arguments.length?(n=t,r):n},r.copy=function(){return t(e).unknown(n)},e=arguments.length?Array.from(e,Hh):[0,1],ed(r)})),np(Cd,(function t(){var e=Kh();return e.copy=function(){return Zh(e,t())},Lc.apply(e,arguments),ed(e)}),Wd),np(Fd,(function t(){const e=ld(Qh()).domain([1,10]);return e.copy=()=>Zh(e,t()).base(e.base()),Lc.apply(e,arguments),e}),[Wd,Fd]),np(Sd,yd,Wd),np($d,(function(){return yd.apply(null,arguments).exponent(.5)}),Wd),np(Td,(function t(){var e=hd(Qh());return e.copy=function(){return Zh(e,t()).constant(e.constant())},Lc.apply(e,arguments)}),Wd),np(Bd,(function(){return Lc.apply(xd(jn,In,Rn,zn,xn,mn,pn,hn,fn,ii).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}),[Wd,Vd]),np(Nd,(function(){return Lc.apply(xd(qn,Pn,Un,On,Cn,yn,gn,dn,fn,ai).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}),[Wd,Vd]),np(zd,kd,[Wd,Gd]),np(`${zd}-${Cd}`,kd,[Wd,Gd]),np(`${zd}-${Fd}`,(function t(){var e=ld(bd()).domain([1,10]);return e.copy=function(){return wd(e,t()).base(e.base())},qc.apply(e,arguments)}),[Wd,Gd,Fd]),np(`${zd}-${Sd}`,Ad,[Wd,Gd]),np(`${zd}-${$d}`,(function(){return Ad.apply(null,arguments).exponent(.5)}),[Wd,Gd]),np(`${zd}-${Td}`,(function t(){var e=hd(bd());return e.copy=function(){return wd(e,t()).constant(e.constant())},qc.apply(e,arguments)}),[Wd,Gd]),np(`${Od}-${Cd}`,(function t(){var e=ed(Md()(Gh));return e.copy=function(){return wd(e,t())},qc.apply(e,arguments)}),[Wd,Gd]),np(`${Od}-${Fd}`,(function t(){var e=ld(Md()).domain([.1,1,10]);return e.copy=function(){return wd(e,t()).base(e.base())},qc.apply(e,arguments)}),[Wd,Gd,Fd]),np(`${Od}-${Sd}`,Ed,[Wd,Gd]),np(`${Od}-${$d}`,(function(){return Ed.apply(null,arguments).exponent(.5)}),[Wd,Gd]),np(`${Od}-${Td}`,(function t(){var e=hd(Md());return e.copy=function(){return wd(e,t()).constant(e.constant())},qc.apply(e,arguments)}),[Wd,Gd]),np(Rd,(function t(){var e,n=[],r=[],i=[];function o(){var t=0,e=Math.max(1,r.length);for(i=new Array(e-1);++t0?i[e-1]:n[0],e=i?[o[i-1],r]:[o[e-1],o[e]]},u.unknown=function(t){return arguments.length?(e=t,u):u},u.thresholds=function(){return o.slice()},u.copy=function(){return t().domain([n,r]).range(a).unknown(e)},Lc.apply(ed(u),arguments)}),Yd),np(Ld,(function t(){var e,n=[.5],r=[0,1],i=1;function o(t){return null!=t&&t<=t?r[se(n,t,0,i)]:e}return o.domain=function(t){return arguments.length?(n=Array.from(t),i=Math.min(n.length,r.length-1),o):n.slice()},o.range=function(t){return arguments.length?(r=Array.from(t),i=Math.min(n.length,r.length-1),o):r.slice()},o.invertExtent=function(t){var e=r.indexOf(t);return[n[e-1],n[e]]},o.unknown=function(t){return arguments.length?(e=t,o):e},o.copy=function(){return t().domain(n).range(r).unknown(e)},Lc.apply(o,arguments)}),Yd),np(Id,(function t(){let e=[],n=[];function r(t){return null==t||t!=t?void 0:n[(se(e,t)-1)%n.length]}return r.domain=function(t){return arguments.length?(e=function(t){return Zd.call(t,S)}(t),r):e.slice()},r.range=function(t){return arguments.length?(n=Qd.call(t),r):n.slice()},r.tickFormat=function(t,n){return td(e[0],F(e),null==t?10:t,n)},r.copy=function(){return t().domain(r.domain()).range(r.range())},r}),[Hd,Yd]),np(qd,jc,Hd),np(jd,Xd,Hd),np(Pd,(function(){return Jd(Xd().paddingInner(1))}),Hd);const fp=["clamp","base","constant","exponent"];function hp(t,e){const n=e[0],r=F(e)-n;return function(e){return t(n+e*r)}}function dp(t,e,n){return Ih(mp(e||"rgb",n),t)}function pp(t,e){const n=new Array(e),r=e+1;for(let i=0;it[e]?a[e](t[e]()):0)),a):rt(.5)}function mp(t,e){const n=Wh[function(t){return"interpolate"+t.toLowerCase().split("-").map((t=>t[0].toUpperCase()+t.slice(1))).join("")}(t)];return null!=e&&n&&n.gamma?n.gamma(e):n}function yp(t){const e=t.length/6|0,n=new Array(e);for(let r=0;r1?(_p[t]=e,this):_p[t]}vp({category10:"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf",category20:"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5",category20b:"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6",category20c:"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9",tableau10:"4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac",tableau20:"4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5",accent:"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666",dark2:"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666",paired:"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928",pastel1:"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2",pastel2:"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc",set1:"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999",set2:"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3",set3:"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"},yp),vp({blues:"cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90",greens:"d3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429",greys:"e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e",oranges:"fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303",purples:"e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c",reds:"fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13",blueGreen:"d5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429",bluePurple:"ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71",greenBlue:"d3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1",orangeRed:"fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403",purpleBlue:"dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281",purpleBlueGreen:"dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353",purpleRed:"dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a",redPurple:"fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174",yellowGreen:"e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034",yellowOrangeBrown:"feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204",yellowOrangeRed:"fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225",blueOrange:"134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07",brownBlueGreen:"704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147",purpleGreen:"5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29",purpleOrange:"4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07",redBlue:"8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85",redGrey:"8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434",yellowGreenBlue:"eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185",redYellowBlue:"a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695",redYellowGreen:"a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837",pinkYellowGreen:"8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419",spectral:"9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2",viridis:"440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725",magma:"0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf",inferno:"0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4",plasma:"0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921",cividis:"00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647",rainbow:"6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa",sinebow:"ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040",turbo:"23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00",browns:"eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632",tealBlues:"bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985",teals:"bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667",warmGreys:"dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e",goldGreen:"f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36",goldOrange:"f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26",goldRed:"f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e",lightGreyRed:"efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b",lightGreyTeal:"e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc",lightMulti:"e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c",lightOrange:"f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b",lightTealBlue:"e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988",darkBlue:"3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff",darkGold:"3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff",darkGreen:"3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa",darkMulti:"3737371f5287197d8c29a86995ce3fffe800ffffff",darkRed:"3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c"},(t=>dp(yp(t))));const bp="symbol",wp="discrete",kp=t=>k(t)?t.map((t=>String(t))):String(t),Ap=(t,e)=>t[1]-e[1],Mp=(t,e)=>e[1]-t[1];function Ep(t,e,n){let r;return vt(e)&&(t.bins&&(e=Math.max(e,t.bins.length)),null!=n&&(e=Math.min(e,Math.floor(Ct(t.domain())/n||1)))),A(e)&&(r=e.step,e=e.interval),xt(e)&&(e=t.type===Bd?Sr(e):t.type==Nd?$r(e):u("Only time and utc scales accept interval strings."),r&&(e=e.every(r))),e}function Dp(t,e,n){let r=t.range(),i=r[0],o=F(r),a=Ap;if(i>o&&(r=o,o=i,i=r,a=Mp),i=Math.floor(i),o=Math.ceil(o),e=e.map((e=>[e,t(e)])).filter((t=>i<=t[1]&&t[1]<=o)).sort(a).map((t=>t[0])),n>0&&e.length>1){const t=[e[0],F(e)];for(;e.length>n&&e.length>=3;)e=e.filter(((t,e)=>!(e%2)));e.length<3&&(e=t)}return e}function Cp(t,e){return t.bins?Dp(t,t.bins):t.ticks?t.ticks(e):t.domain()}function Fp(t,e,n,r,i,o){const a=e.type;let u=kp;if(a===Bd||i===Bd)u=t.timeFormat(r);else if(a===Nd||i===Nd)u=t.utcFormat(r);else if(sp(a)){const i=t.formatFloat(r);if(o||e.bins)u=i;else{const t=Sp(e,n,!1);u=e=>t(e)?i(e):""}}else if(e.tickFormat){const i=e.domain();u=t.formatSpan(i[0],i[i.length-1],n,r)}else r&&(u=t.format(r));return u}function Sp(t,e,n){const r=Cp(t,e),i=t.base(),o=Math.log(i),a=Math.max(1,i*e/r.length),u=t=>{let e=t/Math.pow(i,Math.round(Math.log(t)/o));return e*i$p[t.type]||t.bins;function zp(t,e,n,r,i,o,a){const u=Tp[e.type]&&o!==Bd&&o!==Nd?function(t,e,n){const r=e[Tp[e.type]](),i=r.length;let o,a=i>1?r[1]-r[0]:r[0];for(o=1;o(e,n,r)=>{const i=Rp(r[n+1],Rp(r.max,1/0)),o=qp(e,t),a=qp(i,t);return o&&a?o+" – "+a:a?"< "+a:"≥ "+o},Rp=(t,e)=>null!=t?t:e,Up=t=>(e,n)=>n?t(e):null,Lp=t=>e=>t(e),qp=(t,e)=>Number.isFinite(t)?e(t):null;function Pp(t,e,n,r){const i=r||e.type;return xt(n)&&function(t){return ip(t,Vd)}(i)&&(n=n.replace(/%a/g,"%A").replace(/%b/g,"%B")),n||i!==Bd?n||i!==Nd?zp(t,e,5,null,n,r,!0):t.utcFormat("%A, %d %B %Y, %X UTC"):t.timeFormat("%A, %d %B %Y, %X")}function jp(t,e,n){n=n||{};const r=Math.max(3,n.maxlen||7),i=Pp(t,e,n.format,n.formatType);if(up(e.type)){const t=Bp(e).slice(1).map(i),n=t.length;return`${n} boundar${1===n?"y":"ies"}: ${t.join(", ")}`}if(ap(e.type)){const t=e.domain(),n=t.length;return`${n} value${1===n?"":"s"}: ${n>r?t.slice(0,r-2).map(i).join(", ")+", ending with "+t.slice(-1).map(i):t.map(i).join(", ")}`}{const t=e.domain();return`values from ${i(t[0])} to ${i(F(t))}`}}let Ip=0;const Wp="p_";function Hp(t){return t&&t.gradient}function Yp(t,e,n){const r=t.gradient;let i=t.id,o="radial"===r?Wp:"";return i||(i=t.id="gradient_"+Ip++,"radial"===r?(t.x1=Gp(t.x1,.5),t.y1=Gp(t.y1,.5),t.r1=Gp(t.r1,0),t.x2=Gp(t.x2,.5),t.y2=Gp(t.y2,.5),t.r2=Gp(t.r2,.5),o=Wp):(t.x1=Gp(t.x1,0),t.y1=Gp(t.y1,0),t.x2=Gp(t.x2,1),t.y2=Gp(t.y2,0))),e[i]=t,"url("+(n||"")+"#"+o+i+")"}function Gp(t,e){return null!=t?t:e}function Vp(t,e){var n,r=[];return n={gradient:"linear",x1:t?t[0]:0,y1:t?t[1]:0,x2:e?e[0]:1,y2:e?e[1]:0,stops:r,stop:function(t,e){return r.push({offset:t,color:e}),n}}}const Xp={basis:{curve:function(t){return new uc(t)}},"basis-closed":{curve:function(t){return new sc(t)}},"basis-open":{curve:function(t){return new lc(t)}},bundle:{curve:fc,tension:"beta",value:.85},cardinal:{curve:pc,tension:"tension",value:0},"cardinal-open":{curve:vc,tension:"tension",value:0},"cardinal-closed":{curve:mc,tension:"tension",value:0},"catmull-rom":{curve:bc,tension:"alpha",value:.5},"catmull-rom-closed":{curve:kc,tension:"alpha",value:.5},"catmull-rom-open":{curve:Mc,tension:"alpha",value:.5},linear:{curve:Kl},"linear-closed":{curve:function(t){return new Ec(t)}},monotone:{horizontal:function(t){return new Tc(t)},vertical:function(t){return new $c(t)}},natural:{curve:function(t){return new Nc(t)}},step:{curve:function(t){return new Oc(t,.5)}},"step-after":{curve:function(t){return new Oc(t,1)}},"step-before":{curve:function(t){return new Oc(t,0)}}};function Jp(t,e,n){var r=lt(Xp,t)&&Xp[t],i=null;return r&&(i=r.curve||r[e||"vertical"],r.tension&&null!=n&&(i=i[r.tension](n))),i}const Zp={m:2,l:2,h:1,v:1,z:0,c:6,s:4,q:4,t:2,a:7},Qp=/[mlhvzcsqta]([^mlhvzcsqta]+|$)/gi,Kp=/^[+-]?(([0-9]*\.[0-9]+)|([0-9]+\.)|([0-9]+))([eE][+-]?[0-9]+)?/,tg=/^((\s+,?\s*)|(,\s*))/,eg=/^[01]/;function ng(t){const e=[];return(t.match(Qp)||[]).forEach((t=>{let n=t[0];const r=n.toLowerCase(),i=Zp[r],o=function(t,e,n){const r=[];for(let i=0;e&&i1&&(g=Math.sqrt(g),n*=g,r*=g);const m=h/n,y=f/n,v=-f/r,_=h/r,x=m*u+y*s,b=v*u+_*s,w=m*t+y*e,k=v*t+_*e;let A=1/((w-x)*(w-x)+(k-b)*(k-b))-.25;A<0&&(A=0);let M=Math.sqrt(A);o==i&&(M=-M);const E=.5*(x+w)-M*(k-b),D=.5*(b+k)+M*(w-x),C=Math.atan2(b-D,x-E);let F=Math.atan2(k-D,w-E)-C;F<0&&1===o?F+=ag:F>0&&0===o&&(F-=ag);const S=Math.ceil(Math.abs(F/(og+.001))),$=[];for(let t=0;t+t}function Eg(t,e,n){return Math.max(e,Math.min(t,n))}function Dg(){var t=bg,e=wg,n=kg,r=Ag,i=Mg(0),o=i,a=i,u=i,s=null;function l(l,c,f){var h,d=null!=c?c:+t.call(this,l),p=null!=f?f:+e.call(this,l),g=+n.call(this,l),m=+r.call(this,l),y=Math.min(g,m)/2,v=Eg(+i.call(this,l),0,y),_=Eg(+o.call(this,l),0,y),x=Eg(+a.call(this,l),0,y),b=Eg(+u.call(this,l),0,y);if(s||(s=h=Il()),v<=0&&_<=0&&x<=0&&b<=0)s.rect(d,p,g,m);else{var w=d+g,k=p+m;s.moveTo(d+v,p),s.lineTo(w-_,p),s.bezierCurveTo(w-xg*_,p,w,p+xg*_,w,p+_),s.lineTo(w,k-b),s.bezierCurveTo(w,k-xg*b,w-xg*b,k,w-b,k),s.lineTo(d+x,k),s.bezierCurveTo(d+xg*x,k,d,k-xg*x,d,k-x),s.lineTo(d,p+v),s.bezierCurveTo(d,p+xg*v,d+xg*v,p,d+v,p),s.closePath()}if(h)return s=null,h+""||null}return l.x=function(e){return arguments.length?(t=Mg(e),l):t},l.y=function(t){return arguments.length?(e=Mg(t),l):e},l.width=function(t){return arguments.length?(n=Mg(t),l):n},l.height=function(t){return arguments.length?(r=Mg(t),l):r},l.cornerRadius=function(t,e,n,r){return arguments.length?(i=Mg(t),o=null!=e?Mg(e):i,u=null!=n?Mg(n):i,a=null!=r?Mg(r):o,l):i},l.context=function(t){return arguments.length?(s=null==t?null:t,l):s},l}function Cg(){var t,e,n,r,i,o,a,u,s=null;function l(t,e,n){const r=n/2;if(i){var l=a-e,c=t-o;if(l||c){var f=Math.hypot(l,c),h=(l/=f)*u,d=(c/=f)*u,p=Math.atan2(c,l);s.moveTo(o-h,a-d),s.lineTo(t-l*r,e-c*r),s.arc(t,e,r,p-Math.PI,p),s.lineTo(o+h,a+d),s.arc(o,a,u,p,p+Math.PI)}else s.arc(t,e,r,0,ag);s.closePath()}else i=1;o=t,a=e,u=r}function c(o){var a,u,c,f=o.length,h=!1;for(null==s&&(s=c=Il()),a=0;a<=f;++a)!(at.x||0,$g=t=>t.y||0,Tg=t=>!(!1===t.defined),Bg=function(){var t=Hl,e=Yl,n=Al(0),r=null,i=Gl,o=Vl,a=Xl,u=null,s=Wl(l);function l(){var l,c,f=+t.apply(this,arguments),h=+e.apply(this,arguments),d=i.apply(this,arguments)-Nl,p=o.apply(this,arguments)-Nl,g=Ml(p-d),m=p>d;if(u||(u=l=s()),hTl)if(g>zl-Tl)u.moveTo(h*Dl(d),h*Sl(d)),u.arc(0,0,h,d,p,!m),f>Tl&&(u.moveTo(f*Dl(p),f*Sl(p)),u.arc(0,0,f,p,d,m));else{var y,v,_=d,x=p,b=d,w=p,k=g,A=g,M=a.apply(this,arguments)/2,E=M>Tl&&(r?+r.apply(this,arguments):$l(f*f+h*h)),D=Fl(Ml(h-f)/2,+n.apply(this,arguments)),C=D,F=D;if(E>Tl){var S=Ol(E/f*Sl(M)),$=Ol(E/h*Sl(M));(k-=2*S)>Tl?(b+=S*=m?1:-1,w-=S):(k=0,b=w=(d+p)/2),(A-=2*$)>Tl?(_+=$*=m?1:-1,x-=$):(A=0,_=x=(d+p)/2)}var T=h*Dl(_),B=h*Sl(_),N=f*Dl(w),z=f*Sl(w);if(D>Tl){var O,R=h*Dl(x),U=h*Sl(x),L=f*Dl(b),q=f*Sl(b);if(g1?0:t<-1?Bl:Math.acos(t)}((P*I+j*W)/($l(P*P+j*j)*$l(I*I+W*W)))/2),Y=$l(O[0]*O[0]+O[1]*O[1]);C=Fl(D,(f-Y)/(H-1)),F=Fl(D,(h-Y)/(H+1))}else C=F=0}A>Tl?F>Tl?(y=Jl(L,q,T,B,h,F,m),v=Jl(R,U,N,z,h,F,m),u.moveTo(y.cx+y.x01,y.cy+y.y01),FTl&&k>Tl?C>Tl?(y=Jl(N,z,R,U,f,-C,m),v=Jl(T,B,L,q,f,-C,m),u.lineTo(y.cx+y.x01,y.cy+y.y01),Ct.startAngle||0)).endAngle((t=>t.endAngle||0)).padAngle((t=>t.padAngle||0)).innerRadius((t=>t.innerRadius||0)).outerRadius((t=>t.outerRadius||0)).cornerRadius((t=>t.cornerRadius||0)),Ng=rc().x(Sg).y1($g).y0((t=>(t.y||0)+(t.height||0))).defined(Tg),zg=rc().y($g).x1(Sg).x0((t=>(t.x||0)+(t.width||0))).defined(Tg),Og=nc().x(Sg).y($g).defined(Tg),Rg=Dg().x(Sg).y($g).width((t=>t.width||0)).height((t=>t.height||0)).cornerRadius((t=>Fg(t.cornerRadiusTopLeft,t.cornerRadius)||0),(t=>Fg(t.cornerRadiusTopRight,t.cornerRadius)||0),(t=>Fg(t.cornerRadiusBottomRight,t.cornerRadius)||0),(t=>Fg(t.cornerRadiusBottomLeft,t.cornerRadius)||0)),Ug=function(t,e){let n=null,r=Wl(i);function i(){let i;if(n||(n=i=r()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),i)return n=null,i+""||null}return t="function"==typeof t?t:Al(t||ic),e="function"==typeof e?e:Al(void 0===e?64:+e),i.type=function(e){return arguments.length?(t="function"==typeof e?e:Al(e),i):t},i.size=function(t){return arguments.length?(e="function"==typeof t?t:Al(+t),i):e},i.context=function(t){return arguments.length?(n=null==t?null:t,i):n},i}().type((t=>vg(t.shape||"circle"))).size((t=>Fg(t.size,64))),Lg=Cg().x(Sg).y($g).defined(Tg).size((t=>t.size||1));function qg(t){return t.cornerRadius||t.cornerRadiusTopLeft||t.cornerRadiusTopRight||t.cornerRadiusBottomRight||t.cornerRadiusBottomLeft}function Pg(t,e,n,r){return Rg.context(t)(e,n,r)}var jg=1;function Ig(){jg=1}function Wg(t,e,n){var r=e.clip,i=t._defs,o=e.clip_id||(e.clip_id="clip"+jg++),a=i.clipping[o]||(i.clipping[o]={id:o});return J(r)?a.path=r(null):qg(n)?a.path=Pg(null,n,0,0):(a.width=n.width||0,a.height=n.height||0),"url(#"+o+")"}function Hg(t){this.clear(),t&&this.union(t)}function Yg(t){this.mark=t,this.bounds=this.bounds||new Hg}function Gg(t){Yg.call(this,t),this.items=this.items||[]}function Vg(t){this._pending=0,this._loader=t||da()}function Xg(t){t._pending+=1}function Jg(t){t._pending-=1}function Zg(t,e,n){if(e.stroke&&0!==e.opacity&&0!==e.strokeOpacity){const r=null!=e.strokeWidth?+e.strokeWidth:1;t.expand(r+(n?function(t,e){return t.strokeJoin&&"miter"!==t.strokeJoin?0:e}(e,r):0))}return t}Hg.prototype={clone(){return new Hg(this)},clear(){return this.x1=+Number.MAX_VALUE,this.y1=+Number.MAX_VALUE,this.x2=-Number.MAX_VALUE,this.y2=-Number.MAX_VALUE,this},empty(){return this.x1===+Number.MAX_VALUE&&this.y1===+Number.MAX_VALUE&&this.x2===-Number.MAX_VALUE&&this.y2===-Number.MAX_VALUE},equals(t){return this.x1===t.x1&&this.y1===t.y1&&this.x2===t.x2&&this.y2===t.y2},set(t,e,n,r){return nthis.x2&&(this.x2=t),e>this.y2&&(this.y2=e),this},expand(t){return this.x1-=t,this.y1-=t,this.x2+=t,this.y2+=t,this},round(){return this.x1=Math.floor(this.x1),this.y1=Math.floor(this.y1),this.x2=Math.ceil(this.x2),this.y2=Math.ceil(this.y2),this},scale(t){return this.x1*=t,this.y1*=t,this.x2*=t,this.y2*=t,this},translate(t,e){return this.x1+=t,this.x2+=t,this.y1+=e,this.y2+=e,this},rotate(t,e,n){const r=this.rotatedPoints(t,e,n);return this.clear().add(r[0],r[1]).add(r[2],r[3]).add(r[4],r[5]).add(r[6],r[7])},rotatedPoints(t,e,n){var{x1:r,y1:i,x2:o,y2:a}=this,u=Math.cos(t),s=Math.sin(t),l=e-e*u+n*s,c=n-e*s-n*u;return[u*r-s*i+l,s*r+u*i+c,u*r-s*a+l,s*r+u*a+c,u*o-s*i+l,s*o+u*i+c,u*o-s*a+l,s*o+u*a+c]},union(t){return t.x1this.x2&&(this.x2=t.x2),t.y2>this.y2&&(this.y2=t.y2),this},intersect(t){return t.x1>this.x1&&(this.x1=t.x1),t.y1>this.y1&&(this.y1=t.y1),t.x2=t.x2&&this.y1<=t.y1&&this.y2>=t.y2},alignsWith(t){return t&&(this.x1==t.x1||this.x2==t.x2||this.y1==t.y1||this.y2==t.y2)},intersects(t){return t&&!(this.x2t.x2||this.y2t.y2)},contains(t,e){return!(tthis.x2||ethis.y2)},width(){return this.x2-this.x1},height(){return this.y2-this.y1}},dt(Gg,Yg),Vg.prototype={pending(){return this._pending},sanitizeURL(t){const e=this;return Xg(e),e._loader.sanitize(t,{context:"href"}).then((t=>(Jg(e),t))).catch((()=>(Jg(e),null)))},loadImage(t){const e=this,n=Uc();return Xg(e),e._loader.sanitize(t,{context:"image"}).then((t=>{const r=t.href;if(!r||!n)throw{url:r};const i=new n,o=lt(t,"crossOrigin")?t.crossOrigin:"anonymous";return null!=o&&(i.crossOrigin=o),i.onload=()=>Jg(e),i.onerror=()=>Jg(e),i.src=r,i})).catch((t=>(Jg(e),{complete:!1,width:0,height:0,src:t&&t.url||""})))},ready(){const t=this;return new Promise((e=>{!function n(r){t.pending()?setTimeout((()=>{n(!0)}),10):e(r)}(!1)}))}};const Qg=ag-1e-8;let Kg,tm,em,nm,rm,im,om,am;const um=(t,e)=>Kg.add(t,e),sm=(t,e)=>um(tm=t,em=e),lm=t=>um(t,Kg.y1),cm=t=>um(Kg.x1,t),fm=(t,e)=>rm*t+om*e,hm=(t,e)=>im*t+am*e,dm=(t,e)=>um(fm(t,e),hm(t,e)),pm=(t,e)=>sm(fm(t,e),hm(t,e));function gm(t,e){return Kg=t,e?(nm=e*rg,rm=am=Math.cos(nm),im=Math.sin(nm),om=-im):(rm=am=1,nm=im=om=0),mm}const mm={beginPath(){},closePath(){},moveTo:pm,lineTo:pm,rect(t,e,n,r){nm?(dm(t+n,e),dm(t+n,e+r),dm(t,e+r),pm(t,e)):(um(t+n,e+r),sm(t,e))},quadraticCurveTo(t,e,n,r){const i=fm(t,e),o=hm(t,e),a=fm(n,r),u=hm(n,r);ym(tm,i,a,lm),ym(em,o,u,cm),sm(a,u)},bezierCurveTo(t,e,n,r,i,o){const a=fm(t,e),u=hm(t,e),s=fm(n,r),l=hm(n,r),c=fm(i,o),f=hm(i,o);vm(tm,a,s,c,lm),vm(em,u,l,f,cm),sm(c,f)},arc(t,e,n,r,i,o){if(r+=nm,i+=nm,tm=n*Math.cos(i)+t,em=n*Math.sin(i)+e,Math.abs(i-r)>Qg)um(t-n,e-n),um(t+n,e+n);else{const a=r=>um(n*Math.cos(r)+t,n*Math.sin(r)+e);let u,s;if(a(r),a(i),i!==r)if((r%=ag)<0&&(r+=ag),(i%=ag)<0&&(i+=ag),ii;++s,u-=og)a(u);else for(u=r-r%og+og,s=0;s<4&&uig?(s=a*a+u*o,s>=0&&(s=Math.sqrt(s),l=(-a+s)/o,c=(-a-s)/o)):l=.5*u/a,0m)return!1;d>g&&(g=d)}else if(f>0){if(d0&&(t.globalAlpha=n,t.fillStyle=Sm(t,e,e.fill),!0)}var Tm=[];function Bm(t,e,n){var r=null!=(r=e.strokeWidth)?r:1;return!(r<=0)&&((n*=null==e.strokeOpacity?1:e.strokeOpacity)>0&&(t.globalAlpha=n,t.strokeStyle=Sm(t,e,e.stroke),t.lineWidth=r,t.lineCap=e.strokeCap||"butt",t.lineJoin=e.strokeJoin||"miter",t.miterLimit=e.strokeMiterLimit||10,t.setLineDash&&(t.setLineDash(e.strokeDash||Tm),t.lineDashOffset=e.strokeDashOffset||0),!0))}function Nm(t,e){return t.zindex-e.zindex||t.index-e.index}function zm(t){if(!t.zdirty)return t.zitems;var e,n,r,i=t.items,o=[];for(n=0,r=i.length;n=0;)if(n=e(i[r]))return n;if(i===o)for(r=(i=t.items).length;--r>=0;)if(!i[r].zindex&&(n=e(i[r])))return n;return null}function Um(t){return function(e,n,r){Om(n,(n=>{r&&!r.intersects(n.bounds)||qm(t,e,n,n)}))}}function Lm(t){return function(e,n,r){!n.items.length||r&&!r.intersects(n.bounds)||qm(t,e,n.items[0],n.items)}}function qm(t,e,n,r){var i=null==n.opacity?1:n.opacity;0!==i&&(t(e,r)||(Dm(e,n),n.fill&&$m(e,n,i)&&e.fill(),n.stroke&&Bm(e,n,i)&&e.stroke()))}function Pm(t){return t=t||p,function(e,n,r,i,o,a){return r*=e.pixelRatio,i*=e.pixelRatio,Rm(n,(n=>{const u=n.bounds;if((!u||u.contains(o,a))&&u)return t(e,n,r,i,o,a)?n:void 0}))}}function jm(t,e){return function(n,r,i,o){var a,u,s=Array.isArray(r)?r[0]:r,l=null==e?s.fill:e,c=s.stroke&&n.isPointInStroke;return c&&(a=s.strokeWidth,u=s.strokeCap,n.lineWidth=null!=a?a:1,n.lineCap=null!=u?u:"butt"),!t(n,r)&&(l&&n.isPointInPath(i,o)||c&&n.isPointInStroke(i,o))}}function Im(t){return Pm(jm(t))}function Wm(t,e){return"translate("+t+","+e+")"}function Hm(t){return"rotate("+t+")"}function Ym(t){return Wm(t.x||0,t.y||0)}function Gm(t,e,n){function r(t,n){var r=n.x||0,i=n.y||0,o=n.angle||0;t.translate(r,i),o&&t.rotate(o*=rg),t.beginPath(),e(t,n),o&&t.rotate(-o),t.translate(-r,-i)}return{type:t,tag:"path",nested:!1,attr:function(t,n){t("transform",function(t){return Wm(t.x||0,t.y||0)+(t.angle?" "+Hm(t.angle):"")}(n)),t("d",e(null,n))},bound:function(t,n){return e(gm(t,n.angle),n),Zg(t,n).translate(n.x||0,n.y||0)},draw:Um(r),pick:Im(r),isect:n||wm(r)}}var Vm=Gm("arc",(function(t,e){return Bg.context(t)(e)}));function Xm(t,e,n){function r(t,n){t.beginPath(),e(t,n)}const i=jm(r);return{type:t,tag:"path",nested:!0,attr:function(t,n){var r=n.mark.items;r.length&&t("d",e(null,r))},bound:function(t,n){var r=n.items;return 0===r.length?t:(e(gm(t),r),Zg(t,r[0]))},draw:Lm(r),pick:function(t,e,n,r,o,a){var u=e.items,s=e.bounds;return!u||!u.length||s&&!s.contains(o,a)?null:(n*=t.pixelRatio,r*=t.pixelRatio,i(t,u,n,r)?u[0]:null)},isect:km,tip:n}}var Jm=Xm("area",(function(t,e){const n=e[0],r=n.interpolate||"linear";return("horizontal"===n.orient?zg:Ng).curve(Jp(r,n.orient,n.tension)).context(t)(e)}),(function(t,e){for(var n,r,i="horizontal"===t[0].orient?e[1]:e[0],o="horizontal"===t[0].orient?"y":"x",a=t.length,u=1/0;--a>=0;)!1!==t[a].defined&&(r=Math.abs(t[a][o]-i)).5&&e<1.5?.5-Math.abs(e-1):0}function Km(t,e){const n=Qm(e);t("d",Pg(null,e,n,n))}function ty(t,e,n,r){const i=Qm(e);t.beginPath(),Pg(t,e,(n||0)+i,(r||0)+i)}const ey=jm(ty),ny=jm(ty,!1),ry=jm(ty,!0);var iy={type:"group",tag:"g",nested:!1,attr:function(t,e){t("transform",Ym(e))},bound:function(t,e){if(!e.clip&&e.items){const n=e.items,r=n.length;for(let e=0;e{const r=e.x||0,i=e.y||0,o=e.strokeForeground,a=null==e.opacity?1:e.opacity;(e.stroke||e.fill)&&a&&(ty(t,e,r,i),Dm(t,e),e.fill&&$m(t,e,a)&&t.fill(),e.stroke&&!o&&Bm(t,e,a)&&t.stroke()),t.save(),t.translate(r,i),e.clip&&Zm(t,e),n&&n.translate(-r,-i),Om(e,(e=>{this.draw(t,e,n)})),n&&n.translate(r,i),t.restore(),o&&e.stroke&&a&&(ty(t,e,r,i),Dm(t,e),Bm(t,e,a)&&t.stroke())}))},pick:function(t,e,n,r,i,o){if(e.bounds&&!e.bounds.contains(i,o)||!e.items)return null;const a=n*t.pixelRatio,u=r*t.pixelRatio;return Rm(e,(s=>{let l,c,f;const h=s.bounds;if(h&&!h.contains(i,o))return;c=s.x||0,f=s.y||0;const d=c+(s.width||0),p=f+(s.height||0),g=s.clip;if(g&&(id||op))return;if(t.save(),t.translate(c,f),c=i-c,f=o-f,g&&qg(s)&&!ry(t,s,a,u))return t.restore(),null;const m=s.strokeForeground,y=!1!==e.interactive;return y&&m&&s.stroke&&ny(t,s,a,u)?(t.restore(),s):(l=Rm(s,(t=>function(t,e,n){return(!1!==t.interactive||"group"===t.marktype)&&t.bounds&&t.bounds.contains(e,n)}(t,c,f)?this.pick(t,n,r,c,f):null)),!l&&y&&(s.fill||!m&&s.stroke)&&ey(t,s,a,u)&&(l=s),t.restore(),l||null)}))},isect:Am,content:function(t,e,n){t("clip-path",e.clip?Wg(n,e,e):null)},background:function(t,e){t("class","background"),t("aria-hidden",!0),Km(t,e)},foreground:function(t,e){t("class","foreground"),t("aria-hidden",!0),e.strokeForeground?Km(t,e):t("d","")}},oy={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",version:"1.1"};function ay(t,e){var n=t.image;return(!n||t.url&&t.url!==n.url)&&(n={complete:!1,width:0,height:0},e.loadImage(t.url).then((e=>{t.image=e,t.image.url=t.url}))),n}function uy(t,e){return null!=t.width?t.width:e&&e.width?!1!==t.aspect&&t.height?t.height*e.width/e.height:e.width:0}function sy(t,e){return null!=t.height?t.height:e&&e.height?!1!==t.aspect&&t.width?t.width*e.height/e.width:e.height:0}function ly(t,e){return"center"===t?e/2:"right"===t?e:0}function cy(t,e){return"middle"===t?e/2:"bottom"===t?e:0}var fy={type:"image",tag:"image",nested:!1,attr:function(t,e,n){const r=ay(e,n),i=uy(e,r),o=sy(e,r),a=(e.x||0)-ly(e.align,i),u=(e.y||0)-cy(e.baseline,o);t("href",!r.src&&r.toDataURL?r.toDataURL():r.src||"",oy["xmlns:xlink"],"xlink:href"),t("transform",Wm(a,u)),t("width",i),t("height",o),t("preserveAspectRatio",!1===e.aspect?"none":"xMidYMid")},bound:function(t,e){const n=e.image,r=uy(e,n),i=sy(e,n),o=(e.x||0)-ly(e.align,r),a=(e.y||0)-cy(e.baseline,i);return t.set(o,a,o+r,a+i)},draw:function(t,e,n){Om(e,(e=>{if(n&&!n.intersects(e.bounds))return;const r=ay(e,this);let i=uy(e,r),o=sy(e,r);if(0===i||0===o)return;let a,u,s,l,c=(e.x||0)-ly(e.align,i),f=(e.y||0)-cy(e.baseline,o);!1!==e.aspect&&(u=r.width/r.height,s=e.width/e.height,u==u&&s==s&&u!==s&&(s=0;)if(!1!==t[o].defined&&(n=t[o].x-e[0])*n+(r=t[o].y-e[1])*r{if(!n||n.intersects(e.bounds)){var r=null==e.opacity?1:e.opacity;r&&yy(t,e,r)&&(Dm(t,e),t.stroke())}}))},pick:Pm((function(t,e,n,r){return!!t.isPointInStroke&&(yy(t,e,1)&&t.isPointInStroke(n,r))})),isect:Mm},_y=Gm("shape",(function(t,e){return(e.mark.shape||e.shape).context(t)(e)})),xy=Gm("symbol",(function(t,e){return Ug.context(t)(e)}),km);const by=At();var wy={height:Cy,measureWidth:Ey,estimateWidth:Ay,width:Ay,canvas:ky};function ky(t){wy.width=t&&xm?Ey:Ay}function Ay(t,e){return My(Ty(t,e),Cy(t))}function My(t,e){return~~(.8*t.length*e)}function Ey(t,e){return Cy(t)<=0||!(e=Ty(t,e))?0:Dy(e,Ny(t))}function Dy(t,e){const n=`(${e}) ${t}`;let r=by.get(n);return void 0===r&&(xm.font=e,r=xm.measureText(t).width,by.set(n,r)),r}function Cy(t){return null!=t.fontSize?+t.fontSize||0:11}function Fy(t){return null!=t.lineHeight?t.lineHeight:Cy(t)+2}function Sy(t){return e=t.lineBreak&&t.text&&!k(t.text)?t.text.split(t.lineBreak):t.text,k(e)?e.length>1?e:e[0]:e;var e}function $y(t){const e=Sy(t);return(k(e)?e.length-1:0)*Fy(t)}function Ty(t,e){const n=null==e?"":(e+"").trim();return t.limit>0&&n.length?function(t,e){var n=+t.limit,r=function(t){if(wy.width===Ey){const e=Ny(t);return t=>Dy(t,e)}{const e=Cy(t);return t=>My(t,e)}}(t);if(r(e)>>1,r(e.slice(i))>n?u=i+1:s=i;return o+e.slice(u)}for(;u>>1),r(e.slice(0,i))Math.max(t,wy.width(e,n))),0)):r=wy.width(e,f),"center"===o?l-=r/2:"right"===o&&(l-=r),t.set(l+=u,c+=s,l+r,c+i),e.angle&&!n)t.rotate(e.angle*rg,u,s);else if(2===n)return t.rotatedPoints(e.angle*rg,u,s);return t}var qy={type:"text",tag:"text",nested:!1,attr:function(t,e){var n,r=e.dx||0,i=(e.dy||0)+zy(e),o=Uy(e),a=o.x1,u=o.y1,s=e.angle||0;t("text-anchor",Oy[e.align]||"start"),s?(n=Wm(a,u)+" "+Hm(s),(r||i)&&(n+=" "+Wm(r,i))):n=Wm(a+r,u+i),t("transform",n)},bound:Ly,draw:function(t,e,n){Om(e,(e=>{var r,i,o,a,u,s,l,c=null==e.opacity?1:e.opacity;if(!(n&&!n.intersects(e.bounds)||0===c||e.fontSize<=0||null==e.text||0===e.text.length)){if(t.font=Ny(e),t.textAlign=e.align||"left",i=(r=Uy(e)).x1,o=r.y1,e.angle&&(t.save(),t.translate(i,o),t.rotate(e.angle*rg),i=o=0),i+=e.dx||0,o+=(e.dy||0)+zy(e),s=Sy(e),Dm(t,e),k(s))for(u=Fy(e),a=0;a=0;)if(!1!==t[i].defined&&(n=t[i].x-e[0])*n+(r=t[i].y-e[1])*r<(n=t[i].size||1)*n)return t[i];return null})),jy={arc:Vm,area:Jm,group:iy,image:fy,line:hy,path:py,rect:my,rule:vy,shape:_y,symbol:xy,text:qy,trail:Py};function Iy(t,e,n){var r=jy[t.mark.marktype],i=e||r.bound;return r.nested&&(t=t.mark),i(t.bounds||(t.bounds=new Hg),t,n)}var Wy={mark:null};function Hy(t,e,n){var r,i,o,a,u=jy[t.marktype],s=u.bound,l=t.items,c=l&&l.length;if(u.nested)return c?o=l[0]:(Wy.mark=t,o=Wy),a=Iy(o,s,n),e=e&&e.union(a)||a;if(e=e||t.bounds&&t.bounds.clear()||new Hg,c)for(r=0,i=l.length;re;)t.removeChild(n[--r]);return t}function nv(t){return"mark-"+t.marktype+(t.role?" role-"+t.role:"")+(t.name?" "+t.name:"")}function rv(t,e){const n=e.getBoundingClientRect();return[t.clientX-n.left-(e.clientLeft||0),t.clientY-n.top-(e.clientTop||0)]}function iv(t,e){this._active=null,this._handlers={},this._loader=t||da(),this._tooltip=e||ov}function ov(t,e,n,r){t.element().setAttribute("title",r||"")}function av(t){this._el=null,this._bgcolor=null,this._loader=new Vg(t)}Jy.prototype={toJSON(t){return Gy(this.root,t||0)},mark(t,e,n){const r=Zy(t,e=e||this.root.items[0]);return e.items[n]=r,r.zindex&&(r.group.zdirty=!0),r}},iv.prototype={initialize(t,e,n){return this._el=t,this._obj=n||null,this.origin(e)},element(){return this._el},canvas(){return this._el&&this._el.firstChild},origin(t){return arguments.length?(this._origin=t||[0,0],this):this._origin.slice()},scene(t){return arguments.length?(this._scene=t,this):this._scene},on(){},off(){},_handlerIndex(t,e,n){for(let r=t?t.length:0;--r>=0;)if(t[r].type===e&&(!n||t[r].handler===n))return r;return-1},handlers(t){const e=this._handlers,n=[];if(t)n.push(...e[this.eventName(t)]);else for(const t in e)n.push(...e[t]);return n},eventName(t){const e=t.indexOf(".");return e<0?t:t.slice(0,e)},handleHref(t,e,n){this._loader.sanitize(n,{context:"href"}).then((e=>{const n=new MouseEvent(t.type,t),r=Qy(null,"a");for(const t in e)r.setAttribute(t,e[t]);r.dispatchEvent(n)})).catch((()=>{}))},handleTooltip(t,e,n){if(e&&null!=e.tooltip){e=function(t,e,n,r){var i,o,a=t&&t.mark;if(a&&(i=jy[a.marktype]).tip){for((o=rv(e,n))[0]-=r[0],o[1]-=r[1];t=t.mark.group;)o[0]-=t.x||0,o[1]-=t.y||0;t=i.tip(a.items,o)}return t}(e,t,this.canvas(),this._origin);const r=n&&e&&e.tooltip||null;this._tooltip.call(this._obj,this,t,e,r)}},getItemBoundingClientRect(t){const e=this.canvas();if(!e)return;const n=e.getBoundingClientRect(),r=this._origin,i=t.bounds,o=i.width(),a=i.height();let u=i.x1+r[0]+n.left,s=i.y1+r[1]+n.top;for(;t.mark&&(t=t.mark.group);)u+=t.x||0,s+=t.y||0;return{x:u,y:s,width:o,height:a,left:u,top:s,right:u+o,bottom:s+a}}},av.prototype={initialize(t,e,n,r,i){return this._el=t,this.resize(e,n,r,i)},element(){return this._el},canvas(){return this._el&&this._el.firstChild},background(t){return 0===arguments.length?this._bgcolor:(this._bgcolor=t,this)},resize(t,e,n,r){return this._width=t,this._height=e,this._origin=n||[0,0],this._scale=r||1,this},dirty(){},render(t){const e=this;return e._call=function(){e._render(t)},e._call(),e._call=null,e},_render(){},renderAsync(t){const e=this.render(t);return this._ready?this._ready.then((()=>e)):Promise.resolve(e)},_load(t,e){var n=this,r=n._loader[t](e);if(!n._ready){const t=n._call;n._ready=n._loader.ready().then((e=>{e&&t(),n._ready=null}))}return r},sanitizeURL(t){return this._load("sanitizeURL",t)},loadImage(t){return this._load("loadImage",t)}};const uv="dragenter",sv="dragleave",lv="dragover",cv="mousedown",fv="mousemove",hv="mouseout",dv="mouseover",pv="click",gv="mousewheel",mv="touchstart",yv="touchmove",vv="touchend",_v=fv,xv=hv,bv=pv;function wv(t,e){iv.call(this,t,e),this._down=null,this._touch=null,this._first=!0,this._events={}}const kv=t=>t===mv||t===yv||t===vv?[mv,yv,vv]:[t];function Av(t,e){kv(e).forEach((e=>function(t,e){const n=t.canvas();n&&!t._events[e]&&(t._events[e]=1,n.addEventListener(e,t[e]?n=>t[e](n):n=>t.fire(e,n)))}(t,e)))}function Mv(t,e,n){return function(r){const i=this._active,o=this.pickEvent(r);o===i||(i&&i.exit||this.fire(n,r),this._active=o,this.fire(e,r)),this.fire(t,r)}}function Ev(t){return function(e){this.fire(t,e),this._active=null}}dt(wv,iv,{initialize(t,e,n){return this._canvas=t&&Ky(t,"canvas"),[pv,cv,fv,hv,sv].forEach((t=>Av(this,t))),iv.prototype.initialize.call(this,t,e,n)},canvas(){return this._canvas},context(){return this._canvas.getContext("2d")},events:["keydown","keypress","keyup",uv,sv,lv,cv,"mouseup",fv,hv,dv,pv,"dblclick","wheel",gv,mv,yv,vv],DOMMouseScroll(t){this.fire(gv,t)},mousemove:Mv(fv,dv,hv),dragover:Mv(lv,uv,sv),mouseout:Ev(hv),dragleave:Ev(sv),mousedown(t){this._down=this._active,this.fire(cv,t)},click(t){this._down===this._active&&(this.fire(pv,t),this._down=null)},touchstart(t){this._touch=this.pickEvent(t.changedTouches[0]),this._first&&(this._active=this._touch,this._first=!1),this.fire(mv,t,!0)},touchmove(t){this.fire(yv,t,!0)},touchend(t){this.fire(vv,t,!0),this._touch=null},fire(t,e,n){const r=n?this._touch:this._active,i=this._handlers[t];if(e.vegaType=t,t===bv&&r&&r.href?this.handleHref(e,r,r.href):t!==_v&&t!==xv||this.handleTooltip(e,r,t!==xv),i)for(let t=0,n=i.length;t=0&&r.splice(i,1),this},pickEvent(t){const e=rv(t,this._canvas),n=this._origin;return this.pick(this._scene,e[0],e[1],e[0]-n[0],e[1]-n[1])},pick(t,e,n,r,i){const o=this.context();return jy[t.marktype].pick.call(this,o,t,e,n,r,i)}});var Dv="undefined"!=typeof window&&window.devicePixelRatio||1;function Cv(t){av.call(this,t),this._options={},this._redraw=!1,this._dirty=new Hg,this._tempb=new Hg}const Fv=av.prototype;function Sv(t,e){iv.call(this,t,e);const n=this;n._hrefHandler=$v(n,((t,e)=>{e&&e.href&&n.handleHref(t,e,e.href)})),n._tooltipHandler=$v(n,((t,e)=>{n.handleTooltip(t,e,t.type!==xv)}))}dt(Cv,av,{initialize(t,e,n,r,i,o){return this._options=o||{},this._canvas=this._options.externalContext?null:Rc(1,1,this._options.type),t&&this._canvas&&(ev(t,0).appendChild(this._canvas),this._canvas.setAttribute("class","marks")),Fv.initialize.call(this,t,e,n,r,i)},resize(t,e,n,r){if(Fv.resize.call(this,t,e,n,r),this._canvas)!function(t,e,n,r,i,o){const a="undefined"!=typeof HTMLElement&&t instanceof HTMLElement&&null!=t.parentNode,u=t.getContext("2d"),s=a?Dv:i;t.width=e*s,t.height=n*s;for(const t in o)u[t]=o[t];a&&1!==s&&(t.style.width=e+"px",t.style.height=n+"px"),u.pixelRatio=s,u.setTransform(s,0,0,s,s*r[0],s*r[1])}(this._canvas,this._width,this._height,this._origin,this._scale,this._options.context);else{const t=this._options.externalContext;t||u("CanvasRenderer is missing a valid canvas or context"),t.scale(this._scale,this._scale),t.translate(this._origin[0],this._origin[1])}return this._redraw=!0,this},canvas(){return this._canvas},context(){return this._options.externalContext||(this._canvas?this._canvas.getContext("2d"):null)},dirty(t){const e=this._tempb.clear().union(t.bounds);let n=t.mark.group;for(;n;)e.translate(n.x||0,n.y||0),n=n.mark.group;this._dirty.union(e)},_render(t){const e=this.context(),n=this._origin,r=this._width,i=this._height,o=this._dirty,a=((t,e,n)=>(new Hg).set(0,0,e,n).translate(-t[0],-t[1]))(n,r,i);e.save();const u=this._redraw||o.empty()?(this._redraw=!1,a.expand(1)):function(t,e,n){return e.expand(1).round(),t.pixelRatio%1&&e.scale(t.pixelRatio).round().scale(1/t.pixelRatio),e.translate(-n[0]%1,-n[1]%1),t.beginPath(),t.rect(e.x1,e.y1,e.width(),e.height()),t.clip(),e}(e,a.intersect(o),n);return this.clear(-n[0],-n[1],r,i),this.draw(e,t,u),e.restore(),o.clear(),this},draw(t,e,n){const r=jy[e.marktype];e.clip&&function(t,e){var n=e.clip;t.save(),J(n)?(t.beginPath(),n(t),t.clip()):Zm(t,e.group)}(t,e),r.draw.call(this,t,e,n),e.clip&&t.restore()},clear(t,e,n,r){const i=this._options,o=this.context();"pdf"===i.type||i.externalContext||o.clearRect(t,e,n,r),null!=this._bgcolor&&(o.fillStyle=this._bgcolor,o.fillRect(t,e,n,r))}});const $v=(t,e)=>n=>{let r=n.target.__data__;r=Array.isArray(r)?r[0]:r,n.vegaType=n.type,e.call(t._obj,n,r)};dt(Sv,iv,{initialize(t,e,n){let r=this._svg;return r&&(r.removeEventListener(bv,this._hrefHandler),r.removeEventListener(_v,this._tooltipHandler),r.removeEventListener(xv,this._tooltipHandler)),this._svg=r=t&&Ky(t,"svg"),r&&(r.addEventListener(bv,this._hrefHandler),r.addEventListener(_v,this._tooltipHandler),r.addEventListener(xv,this._tooltipHandler)),iv.prototype.initialize.call(this,t,e,n)},canvas(){return this._svg},on(t,e){const n=this.eventName(t),r=this._handlers;if(this._handlerIndex(r[n],t,e)<0){const i={type:t,handler:e,listener:$v(this,e)};(r[n]||(r[n]=[])).push(i),this._svg&&this._svg.addEventListener(n,i.listener)}return this},off(t,e){const n=this.eventName(t),r=this._handlers[n],i=this._handlerIndex(r,t,e);return i>=0&&(this._svg&&this._svg.removeEventListener(n,r[i].listener),r.splice(i,1)),this}});const Tv="aria-hidden",Bv="aria-label",Nv="role",zv="aria-roledescription",Ov="graphics-object",Rv="graphics-symbol",Uv=(t,e,n)=>({[Nv]:t,[zv]:e,[Bv]:n||void 0}),Lv=Nt(["axis-domain","axis-grid","axis-label","axis-tick","axis-title","legend-band","legend-entry","legend-gradient","legend-label","legend-title","legend-symbol","title"]),qv={axis:{desc:"axis",caption:function(t){const e=t.datum,n=t.orient,r=e.title?Hv(t):null,i=t.context,o=i.scales[e.scale].value,a=i.dataflow.locale(),u=o.type;return("left"===n||"right"===n?"Y":"X")+"-axis"+(r?` titled '${r}'`:"")+` for a ${ap(u)?"discrete":u} scale`+` with ${jp(a,o,t)}`}},legend:{desc:"legend",caption:function(t){const e=t.datum,n=e.title?Hv(t):null,r=`${e.type||""} legend`.trim(),i=e.scales,o=Object.keys(i),a=t.context,u=a.scales[i[o[0]]].value,s=a.dataflow.locale();return l=r,(l.length?l[0].toUpperCase()+l.slice(1):l)+(n?` titled '${n}'`:"")+` for ${function(t){return t=t.map((t=>t+("fill"===t||"stroke"===t?" color":""))),t.length<2?t[0]:t.slice(0,-1).join(", ")+" and "+F(t)}(o)}`+` with ${jp(s,u,t)}`;var l}},"title-text":{desc:"title",caption:t=>`Title text '${Wv(t)}'`},"title-subtitle":{desc:"subtitle",caption:t=>`Subtitle text '${Wv(t)}'`}},Pv={ariaRole:Nv,ariaRoleDescription:zv,description:Bv};function jv(t,e){const n=!1===e.aria;if(t(Tv,n||void 0),n||null==e.description)for(const e in Pv)t(Pv[e],void 0);else{const n=e.mark.marktype;t(Bv,e.description),t(Nv,e.ariaRole||("group"===n?Ov:Rv)),t(zv,e.ariaRoleDescription||`${n} mark`)}}function Iv(t){return!1===t.aria?{[Tv]:!0}:Lv[t.role]?null:qv[t.role]?function(t,e){try{const n=t.items[0],r=e.caption||(()=>"");return Uv(e.role||Rv,e.desc,n.description||r(n))}catch(t){return null}}(t,qv[t.role]):function(t){const e=t.marktype,n="group"===e||"text"===e||t.items.some((t=>null!=t.description&&!1!==t.aria));return Uv(n?Ov:Rv,`${e} mark container`,t.description)}(t)}function Wv(t){return V(t.text).join(" ")}function Hv(t){try{return V(F(t.items).items[0].text).join(" ")}catch(t){return null}}const Yv=t=>(t+"").replace(/&/g,"&").replace(//g,">"),Gv=t=>Yv(t).replace(/"/g,""").replace(/\t/g," ").replace(/\n/g," ").replace(/\r/g," ");function Vv(){let t="",e="",n="";const r=[],i=()=>e=n="",o=(t,n)=>(null!=n&&(e+=` ${t}="${Gv(n)}"`),a),a={open(u){(o=>{e&&(t+=`${e}>${n}`,i()),r.push(o)})(u),e="<"+u;for(var s=arguments.length,l=new Array(s>1?s-1:0),c=1;c${n}`:"/>"):``,i(),a},attr:o,text:t=>(n+=Yv(t),a),toString:()=>t};return a}const Xv=t=>Jv(Vv(),t)+"";function Jv(t,e){if(t.open(e.tagName),e.hasAttributes()){const n=e.attributes,r=n.length;for(let e=0;e1&&t.previousSibling!=e}(a,n))&&e.insertBefore(a,n?n.nextSibling:e.firstChild),a}dt(n_,av,{initialize(t,e,n,r,i){return this._defs={},this._clearDefs(),t&&(this._svg=tv(t,0,"svg",e_),this._svg.setAttributeNS(t_,"xmlns",e_),this._svg.setAttributeNS(t_,"xmlns:xlink",oy["xmlns:xlink"]),this._svg.setAttribute("version",oy.version),this._svg.setAttribute("class","marks"),ev(t,1),this._root=tv(this._svg,0,"g",e_),d_(this._root,Kv),ev(this._svg,1)),this.background(this._bgcolor),r_.initialize.call(this,t,e,n,r,i)},background(t){return arguments.length&&this._svg&&this._svg.style.setProperty("background-color",t),r_.background.apply(this,arguments)},resize(t,e,n,r){return r_.resize.call(this,t,e,n,r),this._svg&&(d_(this._svg,{width:this._width*this._scale,height:this._height*this._scale,viewBox:`0 0 ${this._width} ${this._height}`}),this._root.setAttribute("transform",`translate(${this._origin})`)),this._dirty=[],this},canvas(){return this._svg},svg(){const t=this._svg,e=this._bgcolor;if(!t)return null;let n;e&&(t.removeAttribute("style"),n=tv(t,0,"rect",e_),d_(n,{width:this._width,height:this._height,fill:e}));const r=Xv(t);return e&&(t.removeChild(n),this._svg.style.setProperty("background-color",e)),r},_render(t){return this._dirtyCheck()&&(this._dirtyAll&&this._clearDefs(),this.mark(this._root,t),ev(this._root,1)),this.defs(),this._dirty=[],++this._dirtyID,this},dirty(t){t.dirty!==this._dirtyID&&(t.dirty=this._dirtyID,this._dirty.push(t))},isDirty(t){return this._dirtyAll||!t._svg||!t._svg.ownerSVGElement||t.dirty===this._dirtyID},_dirtyCheck(){this._dirtyAll=!0;const t=this._dirty;if(!t.length||!this._dirtyID)return!0;const e=++this._dirtyID;let n,r,i,o,a,u,s;for(a=0,u=t.length;a{t.dirty=e}))),r.zdirty||(n.exit?(o.nested&&r.items.length?(s=r.items[0],s._svg&&this._update(o,s._svg,s)):n._svg&&(s=n._svg.parentNode,s&&s.removeChild(n._svg)),n._svg=null):(n=o.nested?r.items[0]:n,n._update!==e&&(n._svg&&n._svg.ownerSVGElement?this._update(o,n._svg,n):(this._dirtyAll=!1,i_(n,e)),n._update=e)));return!this._dirtyAll},mark(t,e,n){if(!this.isDirty(e))return e._svg;const r=this._svg,i=jy[e.marktype],o=!1===e.interactive?"none":null,a="g"===i.tag,u=u_(e,t,n,"g",r);u.setAttribute("class",nv(e));const s=Iv(e);for(const t in s)p_(u,t,s[t]);a||p_(u,"pointer-events",o),p_(u,"clip-path",e.clip?Wg(this,e,e.group):null);let l=null,c=0;const f=t=>{const e=this.isDirty(t),n=u_(t,u,l,i.tag,r);e&&(this._update(i,n,t),a&&function(t,e,n){e=e.lastChild.previousSibling;let r,i=0;Om(n,(n=>{r=t.mark(e,n,r),++i})),ev(e,1+i)}(this,n,t)),l=n,++c};return i.nested?e.items.length&&f(e.items[0]):Om(e,f),ev(u,c),u},_update(t,e,n){s_=e,l_=e.__values__,jv(f_,n),t.attr(f_,n,this);const r=c_[t.type];r&&r.call(this,t,e,n),s_&&this.style(s_,n)},style(t,e){if(null!=e){for(const n in Zv){let r="font"===n?By(e):e[n];if(r===l_[n])continue;const i=Zv[n];null==r?t.removeAttribute(i):(Hp(r)&&(r=Yp(r,this._defs.gradient,g_())),t.setAttribute(i,r+"")),l_[n]=r}for(const n in Qv)h_(t,Qv[n],e[n])}},defs(){const t=this._svg,e=this._defs;let n=e.el,r=0;for(const i in e.gradient)n||(e.el=n=tv(t,1,"defs",e_)),r=o_(n,e.gradient[i],r);for(const i in e.clipping)n||(e.el=n=tv(t,1,"defs",e_)),r=a_(n,e.clipping[i],r);n&&(0===r?(t.removeChild(n),e.el=null):ev(n,r))},_clearDefs(){const t=this._defs;t.gradient={},t.clipping={}}});let s_=null,l_=null;const c_={group(t,e,n){const r=s_=e.childNodes[2];l_=r.__values__,t.foreground(f_,n,this),l_=e.__values__,s_=e.childNodes[1],t.content(f_,n,this);const i=s_=e.childNodes[0];t.background(f_,n,this);const o=!1===n.mark.interactive?"none":null;if(o!==l_.events&&(p_(r,"pointer-events",o),p_(i,"pointer-events",o),l_.events=o),n.strokeForeground&&n.stroke){const t=n.fill;p_(r,"display",null),this.style(i,n),p_(i,"stroke",null),t&&(n.fill=null),l_=r.__values__,this.style(r,n),t&&(n.fill=t),s_=null}else p_(r,"display","none")},image(t,e,n){!1===n.smooth?(h_(e,"image-rendering","optimizeSpeed"),h_(e,"image-rendering","pixelated")):h_(e,"image-rendering",null)},text(t,e,n){const r=Sy(n);let i,o,a,u;k(r)?(o=r.map((t=>Ty(n,t))),i=o.join("\n"),i!==l_.text&&(ev(e,0),a=e.ownerDocument,u=Fy(n),o.forEach(((t,r)=>{const i=Qy(a,"tspan",e_);i.__data__=n,i.textContent=t,r&&(i.setAttribute("x",0),i.setAttribute("dy",u)),e.appendChild(i)})),l_.text=i)):(o=Ty(n,r),o!==l_.text&&(e.textContent=o,l_.text=o)),p_(e,"font-family",By(n)),p_(e,"font-size",Cy(n)+"px"),p_(e,"font-style",n.fontStyle),p_(e,"font-variant",n.fontVariant),p_(e,"font-weight",n.fontWeight)}};function f_(t,e,n){e!==l_[t]&&(n?function(t,e,n,r){null!=n?t.setAttributeNS(r,e,n):t.removeAttributeNS(r,e)}(s_,t,e,n):p_(s_,t,e),l_[t]=e)}function h_(t,e,n){n!==l_[e]&&(null==n?t.style.removeProperty(e):t.style.setProperty(e,n+""),l_[e]=n)}function d_(t,e){for(const n in e)p_(t,n,e[n])}function p_(t,e,n){null!=n?t.setAttribute(e,n):t.removeAttribute(e)}function g_(){let t;return"undefined"==typeof window?"":(t=window.location).hash?t.href.slice(0,-t.hash.length):t.href}function m_(t){av.call(this,t),this._text=null,this._defs={gradient:{},clipping:{}}}dt(m_,av,{svg(){return this._text},_render(t){const e=Vv();e.open("svg",ot({},oy,{class:"marks",width:this._width*this._scale,height:this._height*this._scale,viewBox:`0 0 ${this._width} ${this._height}`}));const n=this._bgcolor;return n&&"transparent"!==n&&"none"!==n&&e.open("rect",{width:this._width,height:this._height,fill:n}).close(),e.open("g",Kv,{transform:"translate("+this._origin+")"}),this.mark(e,t),e.close(),this.defs(e),this._text=e.close()+"",this},mark(t,e){const n=jy[e.marktype],r=n.tag,i=[jv,n.attr];t.open("g",{class:nv(e),"clip-path":e.clip?Wg(this,e,e.group):null},Iv(e),{"pointer-events":"g"!==r&&!1===e.interactive?"none":null});const o=o=>{const a=this.href(o);if(a&&t.open("a",a),t.open(r,this.attr(e,o,i,"g"!==r?r:null)),"text"===r){const e=Sy(o);if(k(e)){const n={x:0,dy:Fy(o)};for(let r=0;rthis.mark(t,e))),t.close(),r&&a?(i&&(o.fill=null),o.stroke=a,t.open("path",this.attr(e,o,n.foreground,"bgrect")).close(),i&&(o.fill=i)):t.open("path",this.attr(e,o,n.foreground,"bgfore")).close()}t.close(),a&&t.close()};return n.nested?e.items&&e.items.length&&o(e.items[0]):Om(e,o),t.close()},href(t){const e=t.href;let n;if(e){if(n=this._hrefs&&this._hrefs[e])return n;this.sanitizeURL(e).then((t=>{t["xlink:href"]=t.href,t.href=null,(this._hrefs||(this._hrefs={}))[e]=t}))}return null},attr(t,e,n,r){const i={},o=(t,e,n,r)=>{i[r||t]=e};return Array.isArray(n)?n.forEach((t=>t(o,e,this))):n(o,e,this),r&&function(t,e,n,r,i){let o;if(null==e)return t;"bgrect"===r&&!1===n.interactive&&(t["pointer-events"]="none");if("bgfore"===r&&(!1===n.interactive&&(t["pointer-events"]="none"),t.display="none",null!==e.fill))return t;"image"===r&&!1===e.smooth&&(o=["image-rendering: optimizeSpeed;","image-rendering: pixelated;"]);"text"===r&&(t["font-family"]=By(e),t["font-size"]=Cy(e)+"px",t["font-style"]=e.fontStyle,t["font-variant"]=e.fontVariant,t["font-weight"]=e.fontWeight);for(const n in Zv){let r=e[n];const o=Zv[n];("transparent"!==r||"fill"!==o&&"stroke"!==o)&&null!=r&&(Hp(r)&&(r=Yp(r,i.gradient,"")),t[o]=r)}for(const t in Qv){const n=e[t];null!=n&&(o=o||[],o.push(`${Qv[t]}: ${n};`))}o&&(t.style=o.join(" "))}(i,e,t,r,this._defs),i},defs(t){const e=this._defs.gradient,n=this._defs.clipping;if(0!==Object.keys(e).length+Object.keys(n).length){t.open("defs");for(const n in e){const r=e[n],i=r.stops;"radial"===r.gradient?(t.open("pattern",{id:Wp+n,viewBox:"0,0,1,1",width:"100%",height:"100%",preserveAspectRatio:"xMidYMid slice"}),t.open("rect",{width:"1",height:"1",fill:"url(#"+n+")"}).close(),t.close(),t.open("radialGradient",{id:n,fx:r.x1,fy:r.y1,fr:r.r1,cx:r.x2,cy:r.y2,r:r.r2})):t.open("linearGradient",{id:n,x1:r.x1,x2:r.x2,y1:r.y1,y2:r.y2});for(let e=0;e1?(x_[t]=e,this):x_[t]}function w_(t,e,n){const r=[],i=(new Hg).union(e),o=t.marktype;return o?k_(t,i,n,r):"group"===o?A_(t,i,n,r):u("Intersect scene must be mark node or group item.")}function k_(t,e,n,r){if(function(t,e,n){return t.bounds&&e.intersects(t.bounds)&&("group"===t.marktype||!1!==t.interactive&&(!n||n(t)))}(t,e,n)){const i=t.items,o=t.marktype,a=i.length;let u=0;if("group"===o)for(;u=0;r--)if(i[r]!=o[r])return!1;for(r=i.length-1;r>=0;r--)if(!F_(t[n=i[r]],e[n],n))return!1;return typeof t==typeof e}(t,e):t==e)}function S_(t,e){return F_(ng(t),ng(e))}const $_="top",T_="left",B_="right",N_="bottom",z_="top-left",O_="top-right",R_="bottom-left",U_="bottom-right",L_="start",q_="middle",P_="end",j_="x",I_="y",W_="group",H_="axis",Y_="title",G_="frame",V_="scope",X_="legend",J_="row-header",Z_="row-footer",Q_="row-title",K_="column-header",tx="column-footer",ex="column-title",nx="padding",rx="symbol",ix="fit",ox="fit-x",ax="fit-y",ux="pad",sx="none",lx="all",cx="each",fx="flush",hx="column",dx="row";function px(t){Qa.call(this,null,t)}function gx(t,e,n){return e(t.bounds.clear(),t,n)}dt(px,Qa,{transform(t,e){const n=e.dataflow,r=t.mark,i=r.marktype,o=jy[i],a=o.bound;let u,s=r.bounds;if(o.nested)r.items.length&&n.dirty(r.items[0]),s=gx(r,a),r.items.forEach((t=>{t.bounds.clear().union(s)}));else if(i===W_||t.modified())switch(e.visit(e.MOD,(t=>n.dirty(t))),s.clear(),r.items.forEach((t=>s.union(gx(t,a)))),r.role){case H_:case X_:case Y_:e.reflow()}else u=e.changed(e.REM),e.visit(e.ADD,(t=>{s.union(gx(t,a))})),e.visit(e.MOD,(t=>{u=u||s.alignsWith(t.bounds),n.dirty(t),s.union(gx(t,a))})),u&&(s.clear(),r.items.forEach((t=>s.union(t.bounds))));return D_(r),e.modifies("bounds")}});const mx=":vega_identifier:";function yx(t){Qa.call(this,0,t)}function vx(t){Qa.call(this,null,t)}function _x(t){Qa.call(this,null,t)}yx.Definition={type:"Identifier",metadata:{modifies:!0},params:[{name:"as",type:"string",required:!0}]},dt(yx,Qa,{transform(t,e){const n=(i=e.dataflow)._signals[mx]||(i._signals[mx]=i.add(0)),r=t.as;var i;let o=n.value;return e.visit(e.ADD,(t=>t[r]=t[r]||++o)),n.set(this.value=o),e}}),dt(vx,Qa,{transform(t,e){let n=this.value;n||(n=e.dataflow.scenegraph().mark(t.markdef,function(t){const e=t.groups,n=t.parent;return e&&1===e.size?e.get(Object.keys(e.object)[0]):e&&n?e.lookup(n):null}(t),t.index),n.group.context=t.context,t.context.group||(t.context.group=n.group),n.source=this.source,n.clip=t.clip,n.interactive=t.interactive,this.value=n);const r=n.marktype===W_?Gg:Yg;return e.visit(e.ADD,(t=>r.call(t,n))),(t.modified("clip")||t.modified("interactive"))&&(n.clip=t.clip,n.interactive=!!t.interactive,n.zdirty=!0,e.reflow()),n.items=e.source,e}});const xx={parity:t=>t.filter(((t,e)=>e%2?t.opacity=0:1)),greedy:(t,e)=>{let n;return t.filter(((t,r)=>r&&bx(n.bounds,t.bounds,e)?t.opacity=0:(n=t,1)))}},bx=(t,e,n)=>n>Math.max(e.x1-t.x2,t.x1-e.x2,e.y1-t.y2,t.y1-e.y2),wx=(t,e)=>{for(var n,r=1,i=t.length,o=t[0].bounds;r{const e=t.bounds;return e.width()>1&&e.height()>1},Ax=t=>(t.forEach((t=>t.opacity=1)),t),Mx=(t,e)=>t.reflow(e.modified()).modifies("opacity");function Ex(t){Qa.call(this,null,t)}dt(_x,Qa,{transform(t,e){const n=xx[t.method]||xx.parity,r=t.separation||0;let i,o,a=e.materialize(e.SOURCE).source;if(!a||!a.length)return;if(!t.method)return t.modified("method")&&(Ax(a),e=Mx(e,t)),e;if(a=a.filter(kx),!a.length)return;if(t.sort&&(a=a.slice().sort(t.sort)),i=Ax(a),e=Mx(e,t),i.length>=3&&wx(i,r)){do{i=n(i,r)}while(i.length>=3&&wx(i,r));i.length<3&&!F(a).opacity&&(i.length>1&&(F(i).opacity=0),F(a).opacity=1)}t.boundScale&&t.boundTolerance>=0&&(o=((t,e,n)=>{var r=t.range(),i=new Hg;return e===$_||e===N_?i.set(r[0],-1/0,r[1],1/0):i.set(-1/0,r[0],1/0,r[1]),i.expand(n||1),t=>i.encloses(t.bounds)})(t.boundScale,t.boundOrient,+t.boundTolerance),a.forEach((t=>{o(t)||(t.opacity=0)})));const u=i[0].mark.bounds.clear();return a.forEach((t=>{t.opacity&&u.union(t.bounds)})),e}}),dt(Ex,Qa,{transform(t,e){const n=e.dataflow;if(e.visit(e.ALL,(t=>n.dirty(t))),e.fields&&e.fields.zindex){const t=e.source&&e.source[0];t&&(t.mark.zdirty=!0)}}});const Dx=new Hg;function Cx(t,e,n){return t[e]===n?0:(t[e]=n,1)}function Fx(t){var e=t.items[0].orient;return e===T_||e===B_}function Sx(t,e,n,r){var i,o,a=e.items[0],u=a.datum,s=null!=a.translate?a.translate:.5,l=a.orient,c=function(t){let e=+t.grid;return[t.ticks?e++:-1,t.labels?e++:-1,e+ +t.domain]}(u),f=a.range,h=a.offset,d=a.position,p=a.minExtent,g=a.maxExtent,m=u.title&&a.items[c[2]].items[0],y=a.titlePadding,v=a.bounds,_=m&&$y(m),x=0,b=0;switch(Dx.clear().union(v),v.clear(),(i=c[0])>-1&&v.union(a.items[i].bounds),(i=c[1])>-1&&v.union(a.items[i].bounds),l){case $_:x=d||0,b=-h,o=Math.max(p,Math.min(g,-v.y1)),v.add(0,-o).add(f,0),m&&$x(t,m,o,y,_,0,-1,v);break;case T_:x=-h,b=d||0,o=Math.max(p,Math.min(g,-v.x1)),v.add(-o,0).add(0,f),m&&$x(t,m,o,y,_,1,-1,v);break;case B_:x=n+h,b=d||0,o=Math.max(p,Math.min(g,v.x2)),v.add(0,0).add(o,f),m&&$x(t,m,o,y,_,1,1,v);break;case N_:x=d||0,b=r+h,o=Math.max(p,Math.min(g,v.y2)),v.add(0,0).add(f,o),m&&$x(t,m,o,y,0,0,1,v);break;default:x=a.x,b=a.y}return Zg(v.translate(x,b),a),Cx(a,"x",x+s)|Cx(a,"y",b+s)&&(a.bounds=Dx,t.dirty(a),a.bounds=v,t.dirty(a)),a.mark.bounds.clear().union(v)}function $x(t,e,n,r,i,o,a,u){const s=e.bounds;if(e.auto){const u=a*(n+i+r);let l=0,c=0;t.dirty(e),o?l=(e.x||0)-(e.x=u):c=(e.y||0)-(e.y=u),e.mark.bounds.clear().union(s.translate(-l,-c)),t.dirty(e)}u.union(s)}const Tx=(t,e)=>Math.floor(Math.min(t,e)),Bx=(t,e)=>Math.ceil(Math.max(t,e));function Nx(t){return(new Hg).set(0,0,t.width||0,t.height||0)}function zx(t){const e=t.bounds.clone();return e.empty()?e.set(0,0,0,0):e.translate(-(t.x||0),-(t.y||0))}function Ox(t,e,n){const r=A(t)?t[e]:t;return null!=r?r:void 0!==n?n:0}function Rx(t){return t<0?Math.ceil(-t):0}function Ux(t,e,n){var r,i,o,a,u,s,l,c,f,h,d,p=!n.nodirty,g=n.bounds===fx?Nx:zx,m=Dx.set(0,0,0,0),y=Ox(n.align,hx),v=Ox(n.align,dx),_=Ox(n.padding,hx),x=Ox(n.padding,dx),b=n.columns||e.length,w=b<=0?1:Math.ceil(e.length/b),k=e.length,A=Array(k),M=Array(b),E=0,D=Array(k),C=Array(w),F=0,S=Array(k),$=Array(k),T=Array(k);for(i=0;i1)for(i=0;i0&&(S[i]+=f/2);if(v&&Ox(n.center,dx)&&1!==b)for(i=0;i0&&($[i]+=h/2);for(i=0;ii&&(t.warn("Grid headers exceed limit: "+i),e=e.slice(0,i)),A+=o,g=0,y=e.length;g=0&&null==(x=n[m]);m-=h);u?(b=null==d?x.x:Math.round(x.bounds.x1+d*x.bounds.width()),w=A):(b=A,w=null==d?x.y:Math.round(x.bounds.y1+d*x.bounds.height())),v.union(_.bounds.translate(b-(_.x||0),w-(_.y||0))),_.x=b,_.y=w,t.dirty(_),M=a(M,v[l])}return M}function Ix(t,e,n,r,i,o){if(e){t.dirty(e);var a=n,u=n;r?a=Math.round(i.x1+o*i.width()):u=Math.round(i.y1+o*i.height()),e.bounds.translate(a-(e.x||0),u-(e.y||0)),e.mark.bounds.clear().union(e.bounds),e.x=a,e.y=u,t.dirty(e)}}function Wx(t,e,n,r,i,o,a){const u=function(t,e){const n=t[e]||{};return(e,r)=>null!=n[e]?n[e]:null!=t[e]?t[e]:r}(n,e),s=function(t,e){let n=-1/0;return t.forEach((t=>{null!=t.offset&&(n=Math.max(n,t.offset))})),n>-1/0?n:e}(t,u("offset",0)),l=u("anchor",L_),c=l===P_?1:l===q_?.5:0,f={align:cx,bounds:u("bounds",fx),columns:"vertical"===u("direction")?1:t.length,padding:u("margin",8),center:u("center"),nodirty:!0};switch(e){case T_:f.anchor={x:Math.floor(r.x1)-s,column:P_,y:c*(a||r.height()+2*r.y1),row:l};break;case B_:f.anchor={x:Math.ceil(r.x2)+s,y:c*(a||r.height()+2*r.y1),row:l};break;case $_:f.anchor={y:Math.floor(i.y1)-s,row:P_,x:c*(o||i.width()+2*i.x1),column:l};break;case N_:f.anchor={y:Math.ceil(i.y2)+s,x:c*(o||i.width()+2*i.x1),column:l};break;case z_:f.anchor={x:s,y:s};break;case O_:f.anchor={x:o-s,y:s,column:P_};break;case R_:f.anchor={x:s,y:a-s,row:P_};break;case U_:f.anchor={x:o-s,y:a-s,column:P_,row:P_}}return f}function Hx(t,e){var n,r,i=e.items[0],o=i.datum,a=i.orient,u=i.bounds,s=i.x,l=i.y;return i._bounds?i._bounds.clear().union(u):i._bounds=u.clone(),u.clear(),function(t,e,n){var r=e.padding,i=r-n.x,o=r-n.y;if(e.datum.title){var a=e.items[1].items[0],u=a.anchor,s=e.titlePadding||0,l=r-a.x,c=r-a.y;switch(a.orient){case T_:i+=Math.ceil(a.bounds.width())+s;break;case B_:case N_:break;default:o+=a.bounds.height()+s}switch((i||o)&&Gx(t,n,i,o),a.orient){case T_:c+=Yx(e,n,a,u,1,1);break;case B_:l+=Yx(e,n,a,P_,0,0)+s,c+=Yx(e,n,a,u,1,1);break;case N_:l+=Yx(e,n,a,u,0,0),c+=Yx(e,n,a,P_,-1,0,1)+s;break;default:l+=Yx(e,n,a,u,0,0)}(l||c)&&Gx(t,a,l,c),(l=Math.round(a.bounds.x1-r))<0&&(Gx(t,n,-l,0),Gx(t,a,-l,0))}else(i||o)&&Gx(t,n,i,o)}(t,i,i.items[0].items[0]),u=function(t,e){return t.items.forEach((t=>e.union(t.bounds))),e.x1=t.padding,e.y1=t.padding,e}(i,u),n=2*i.padding,r=2*i.padding,u.empty()||(n=Math.ceil(u.width()+n),r=Math.ceil(u.height()+r)),o.type===rx&&function(t){const e=t.reduce(((t,e)=>(t[e.column]=Math.max(e.bounds.x2-e.x,t[e.column]||0),t)),{});t.forEach((t=>{t.width=e[t.column],t.height=t.bounds.y2-t.y}))}(i.items[0].items[0].items[0].items),a!==sx&&(i.x=s=0,i.y=l=0),i.width=n,i.height=r,Zg(u.set(s,l,s+n,l+r),i),i.mark.bounds.clear().union(u),i}function Yx(t,e,n,r,i,o,a){const u="symbol"!==t.datum.type,s=n.datum.vgrad,l=(!u||!o&&s||a?e:e.items[0]).bounds[i?"y2":"x2"]-t.padding,c=s&&o?l:0,f=s&&o?0:l,h=i<=0?0:$y(n);return Math.round(r===L_?c:r===P_?f-h:.5*(l-h))}function Gx(t,e,n,r){e.x+=n,e.y+=r,e.bounds.translate(n,r),e.mark.bounds.translate(n,r),t.dirty(e)}function Vx(t){Qa.call(this,null,t)}dt(Vx,Qa,{transform(t,e){const n=e.dataflow;return t.mark.items.forEach((e=>{t.layout&&Lx(n,e,t.layout),function(t,e,n){var r,i,o,a,u,s=e.items,l=Math.max(0,e.width||0),c=Math.max(0,e.height||0),f=(new Hg).set(0,0,l,c),h=f.clone(),d=f.clone(),p=[];for(a=0,u=s.length;a{(o=t.orient||B_)!==sx&&(e[o]||(e[o]=[])).push(t)}));for(const r in e){const i=e[r];Ux(t,i,Wx(i,r,n.legends,h,d,l,c))}p.forEach((e=>{const r=e.bounds;if(r.equals(e._bounds)||(e.bounds=e._bounds,t.dirty(e),e.bounds=r,t.dirty(e)),!n.autosize||n.autosize.type!==ix&&n.autosize.type!==ox&&n.autosize.type!==ax)f.union(r);else switch(e.orient){case T_:case B_:f.add(r.x1,0).add(r.x2,0);break;case $_:case N_:f.add(0,r.y1).add(0,r.y2)}}))}f.union(h).union(d),r&&f.union(function(t,e,n,r,i){var o,a=e.items[0],u=a.frame,s=a.orient,l=a.anchor,c=a.offset,f=a.padding,h=a.items[0].items[0],d=a.items[1]&&a.items[1].items[0],p=s===T_||s===B_?r:n,g=0,m=0,y=0,v=0,_=0;if(u!==W_?s===T_?(g=i.y2,p=i.y1):s===B_?(g=i.y1,p=i.y2):(g=i.x1,p=i.x2):s===T_&&(g=r,p=0),o=l===L_?g:l===P_?p:(g+p)/2,d&&d.text){switch(s){case $_:case N_:_=h.bounds.height()+f;break;case T_:v=h.bounds.width()+f;break;case B_:v=-h.bounds.width()-f}Dx.clear().union(d.bounds),Dx.translate(v-(d.x||0),_-(d.y||0)),Cx(d,"x",v)|Cx(d,"y",_)&&(t.dirty(d),d.bounds.clear().union(Dx),d.mark.bounds.clear().union(Dx),t.dirty(d)),Dx.clear().union(d.bounds)}else Dx.clear();switch(Dx.union(h.bounds),s){case $_:m=o,y=i.y1-Dx.height()-c;break;case T_:m=i.x1-Dx.width()-c,y=o;break;case B_:m=i.x2+Dx.width()+c,y=o;break;case N_:m=o,y=i.y2+c;break;default:m=a.x,y=a.y}return Cx(a,"x",m)|Cx(a,"y",y)&&(Dx.translate(m,y),t.dirty(a),a.bounds.clear().union(Dx),e.bounds.clear().union(Dx),t.dirty(a)),a.bounds}(t,r,l,c,f));e.clip&&f.set(0,0,e.width||0,e.height||0);!function(t,e,n,r){const i=r.autosize||{},o=i.type;if(t._autosize<1||!o)return;let a=t._width,u=t._height,s=Math.max(0,e.width||0),l=Math.max(0,Math.ceil(-n.x1)),c=Math.max(0,e.height||0),f=Math.max(0,Math.ceil(-n.y1));const h=Math.max(0,Math.ceil(n.x2-s)),d=Math.max(0,Math.ceil(n.y2-c));if(i.contains===nx){const e=t.padding();a-=e.left+e.right,u-=e.top+e.bottom}o===sx?(l=0,f=0,s=a,c=u):o===ix?(s=Math.max(0,a-l-h),c=Math.max(0,u-f-d)):o===ox?(s=Math.max(0,a-l-h),u=c+f+d):o===ax?(a=s+l+h,c=Math.max(0,u-f-d)):o===ux&&(a=s+l+h,u=c+f+d);t._resizeView(a,u,s,c,[l,f],i.resize)}(t,e,f,n)}(n,e,t)})),function(t){return t&&"legend-entry"!==t.mark.role}(t.mark.group)?e.reflow():e}});var Xx=Object.freeze({__proto__:null,bound:px,identifier:yx,mark:vx,overlap:_x,render:Ex,viewlayout:Vx});function Jx(t){Qa.call(this,null,t)}function Zx(t){Qa.call(this,null,t)}function Qx(){return ba({})}function Kx(t){Qa.call(this,null,t)}function tb(t){Qa.call(this,[],t)}dt(Jx,Qa,{transform(t,e){if(this.value&&!t.modified())return e.StopPropagation;var n=e.dataflow.locale(),r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=this.value,o=t.scale,a=Ep(o,null==t.count?t.values?t.values.length:10:t.count,t.minstep),u=t.format||Fp(n,o,a,t.formatSpecifier,t.formatType,!!t.values),s=t.values?Dp(o,t.values,a):Cp(o,a);return i&&(r.rem=i),i=s.map(((t,e)=>ba({index:e/(s.length-1||1),value:t,label:u(t)}))),t.extra&&i.length&&i.push(ba({index:-1,extra:{value:i[0].value},label:""})),r.source=i,r.add=i,this.value=i,r}}),dt(Zx,Qa,{transform(t,e){var n=e.dataflow,r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=t.item||Qx,o=t.key||_a,a=this.value;return k(r.encode)&&(r.encode=null),a&&(t.modified("key")||e.modified(o))&&u("DataJoin does not support modified key function or fields."),a||(e=e.addAll(),this.value=a=function(t){const e=ft().test((t=>t.exit));return e.lookup=n=>e.get(t(n)),e}(o)),e.visit(e.ADD,(t=>{const e=o(t);let n=a.get(e);n?n.exit?(a.empty--,r.add.push(n)):r.mod.push(n):(n=i(t),a.set(e,n),r.add.push(n)),n.datum=t,n.exit=!1})),e.visit(e.MOD,(t=>{const e=o(t),n=a.get(e);n&&(n.datum=t,r.mod.push(n))})),e.visit(e.REM,(t=>{const e=o(t),n=a.get(e);t!==n.datum||n.exit||(r.rem.push(n),n.exit=!0,++a.empty)})),e.changed(e.ADD_MOD)&&r.modifies("datum"),(e.clean()||t.clean&&a.empty>n.cleanThreshold)&&n.runAfter(a.clean),r}}),dt(Kx,Qa,{transform(t,e){var n=e.fork(e.ADD_REM),r=t.mod||!1,i=t.encoders,o=e.encode;if(k(o)){if(!n.changed()&&!o.every((t=>i[t])))return e.StopPropagation;o=o[0],n.encode=null}var a="enter"===o,u=i.update||g,s=i.enter||g,l=i.exit||g,c=(o&&!a?i[o]:u)||g;if(e.changed(e.ADD)&&(e.visit(e.ADD,(e=>{s(e,t),u(e,t)})),n.modifies(s.output),n.modifies(u.output),c!==g&&c!==u&&(e.visit(e.ADD,(e=>{c(e,t)})),n.modifies(c.output))),e.changed(e.REM)&&l!==g&&(e.visit(e.REM,(e=>{l(e,t)})),n.modifies(l.output)),a||c!==g){const i=e.MOD|(t.modified()?e.REFLOW:0);a?(e.visit(i,(e=>{const i=s(e,t)||r;(c(e,t)||i)&&n.mod.push(e)})),n.mod.length&&n.modifies(s.output)):e.visit(i,(e=>{(c(e,t)||r)&&n.mod.push(e)})),n.mod.length&&n.modifies(c.output)}return n.changed()?n:e.StopPropagation}}),dt(tb,Qa,{transform(t,e){if(null!=this.value&&!t.modified())return e.StopPropagation;var n,r,i,o,a,u=e.dataflow.locale(),s=e.fork(e.NO_SOURCE|e.NO_FIELDS),l=this.value,c=t.type||bp,f=t.scale,h=+t.limit,d=Ep(f,null==t.count?5:t.count,t.minstep),p=!!t.values||c===bp,g=t.format||zp(u,f,d,c,t.formatSpecifier,t.formatType,p),m=t.values||Bp(f,d);return l&&(s.rem=l),c===bp?(h&&m.length>h?(e.dataflow.warn("Symbol legend count exceeds limit, filtering items."),l=m.slice(0,h-1),a=!0):l=m,J(i=t.size)?(t.values||0!==f(l[0])||(l=l.slice(1)),o=l.reduce(((e,n)=>Math.max(e,i(n,t))),0)):i=rt(o=i||8),l=l.map(((e,n)=>ba({index:n,label:g(e,n,l),value:e,offset:o,size:i(e,t)}))),a&&(a=m[l.length],l.push(ba({index:l.length,label:`…${m.length-l.length} entries`,value:a,offset:o,size:i(a,t)})))):"gradient"===c?(n=f.domain(),r=gp(f,n[0],F(n)),m.length<3&&!t.values&&n[0]!==F(n)&&(m=[n[0],F(n)]),l=m.map(((t,e)=>ba({index:e,label:g(t,e,m),value:t,perc:r(t)})))):(i=m.length-1,r=function(t){const e=t.domain(),n=e.length-1;let r=+e[0],i=+F(e),o=i-r;if(t.type===Ld){const t=n?o/n:.1;r-=t,i+=t,o=i-r}return t=>(t-r)/o}(f),l=m.map(((t,e)=>ba({index:e,label:g(t,e,m),value:t,perc:e?r(t):0,perc2:e===i?1:r(m[e+1])})))),s.source=l,s.add=l,this.value=l,s}});const eb=t=>t.source.x,nb=t=>t.source.y,rb=t=>t.target.x,ib=t=>t.target.y;function ob(t){Qa.call(this,{},t)}ob.Definition={type:"LinkPath",metadata:{modifies:!0},params:[{name:"sourceX",type:"field",default:"source.x"},{name:"sourceY",type:"field",default:"source.y"},{name:"targetX",type:"field",default:"target.x"},{name:"targetY",type:"field",default:"target.y"},{name:"orient",type:"enum",default:"vertical",values:["horizontal","vertical","radial"]},{name:"shape",type:"enum",default:"line",values:["line","arc","curve","diagonal","orthogonal"]},{name:"require",type:"signal"},{name:"as",type:"string",default:"path"}]},dt(ob,Qa,{transform(t,e){var n=t.sourceX||eb,r=t.sourceY||nb,i=t.targetX||rb,o=t.targetY||ib,a=t.as||"path",s=t.orient||"vertical",l=t.shape||"line",c=lb.get(l+"-"+s)||lb.get(l);return c||u("LinkPath unsupported type: "+t.shape+(t.orient?"-"+t.orient:"")),e.visit(e.SOURCE,(t=>{t[a]=c(n(t),r(t),i(t),o(t))})),e.reflow(t.modified()).modifies(a)}});const ab=(t,e,n,r)=>"M"+t+","+e+"L"+n+","+r,ub=(t,e,n,r)=>{var i=n-t,o=r-e,a=Math.hypot(i,o)/2;return"M"+t+","+e+"A"+a+","+a+" "+180*Math.atan2(o,i)/Math.PI+" 0 1 "+n+","+r},sb=(t,e,n,r)=>{const i=n-t,o=r-e,a=.2*(i+o),u=.2*(o-i);return"M"+t+","+e+"C"+(t+a)+","+(e+u)+" "+(n+u)+","+(r-a)+" "+n+","+r},lb=ft({line:ab,"line-radial":(t,e,n,r)=>ab(e*Math.cos(t),e*Math.sin(t),r*Math.cos(n),r*Math.sin(n)),arc:ub,"arc-radial":(t,e,n,r)=>ub(e*Math.cos(t),e*Math.sin(t),r*Math.cos(n),r*Math.sin(n)),curve:sb,"curve-radial":(t,e,n,r)=>sb(e*Math.cos(t),e*Math.sin(t),r*Math.cos(n),r*Math.sin(n)),"orthogonal-horizontal":(t,e,n,r)=>"M"+t+","+e+"V"+r+"H"+n,"orthogonal-vertical":(t,e,n,r)=>"M"+t+","+e+"H"+n+"V"+r,"orthogonal-radial":(t,e,n,r)=>{const i=Math.cos(t),o=Math.sin(t),a=Math.cos(n),u=Math.sin(n);return"M"+e*i+","+e*o+"A"+e+","+e+" 0 0,"+((Math.abs(n-t)>Math.PI?n<=t:n>t)?1:0)+" "+e*a+","+e*u+"L"+r*a+","+r*u},"diagonal-horizontal":(t,e,n,r)=>{const i=(t+n)/2;return"M"+t+","+e+"C"+i+","+e+" "+i+","+r+" "+n+","+r},"diagonal-vertical":(t,e,n,r)=>{const i=(e+r)/2;return"M"+t+","+e+"C"+t+","+i+" "+n+","+i+" "+n+","+r},"diagonal-radial":(t,e,n,r)=>{const i=Math.cos(t),o=Math.sin(t),a=Math.cos(n),u=Math.sin(n),s=(e+r)/2;return"M"+e*i+","+e*o+"C"+s*i+","+s*o+" "+s*a+","+s*u+" "+r*a+","+r*u}});function cb(t){Qa.call(this,null,t)}cb.Definition={type:"Pie",metadata:{modifies:!0},params:[{name:"field",type:"field"},{name:"startAngle",type:"number",default:0},{name:"endAngle",type:"number",default:6.283185307179586},{name:"sort",type:"boolean",default:!1},{name:"as",type:"string",array:!0,length:2,default:["startAngle","endAngle"]}]},dt(cb,Qa,{transform(t,e){var n,r,i,o=t.as||["startAngle","endAngle"],a=o[0],u=o[1],s=t.field||d,l=t.startAngle||0,c=null!=t.endAngle?t.endAngle:2*Math.PI,f=e.source,h=f.map(s),p=h.length,g=l,m=(c-l)/Be(h),y=Te(p);for(t.sort&&y.sort(((t,e)=>h[t]-h[e])),n=0;nt+(e<0?-1:e>0?1:0)),0))!==e.length&&n.warn("Log scale domain includes zero: "+Ft(e)));return e}function mb(t,e,n){return J(t)&&(e||n)?hp(t,yb(e||[0,1],n)):t}function yb(t,e){return e?t.slice().reverse():t}function vb(t){Qa.call(this,null,t)}dt(pb,Qa,{transform(t,e){var n=e.dataflow,r=this.value,i=function(t){var e,n=t.type,r="";if(n===zd)return zd+"-"+Cd;(function(t){const e=t.type;return op(e)&&e!==Bd&&e!==Nd&&(t.scheme||t.range&&t.range.length&&t.range.every(xt))})(t)&&(r=2===(e=t.rawDomain?t.rawDomain.length:t.domain?t.domain.length+ +(null!=t.domainMid):0)?zd+"-":3===e?Od+"-":"");return(r+n||Cd).toLowerCase()}(t);for(i in r&&i===r.type||(this.value=r=np(i)()),t)if(!db[i]){if("padding"===i&&hb(r.type))continue;J(r[i])?r[i](t[i]):n.warn("Unsupported scale property: "+i)}return function(t,e,n){var r=t.type,i=e.round||!1,o=e.range;if(null!=e.rangeStep)o=function(t,e,n){t!==jd&&t!==Pd&&u("Only band and point scales support rangeStep.");var r=(null!=e.paddingOuter?e.paddingOuter:e.padding)||0,i=t===Pd?1:(null!=e.paddingInner?e.paddingInner:e.padding)||0;return[0,e.rangeStep*Dd(n,i,r)]}(r,e,n);else if(e.scheme&&(o=function(t,e,n){var r,i=e.schemeExtent;k(e.scheme)?r=dp(e.scheme,e.interpolate,e.interpolateGamma):(r=xp(e.scheme.toLowerCase()))||u(`Unrecognized scheme name: ${e.scheme}`);return n=t===Ld?n+1:t===Id?n-1:t===Rd||t===Ud?+e.schemeCount||fb:n,lp(t)?mb(r,i,e.reverse):J(r)?pp(mb(r,i),n):t===qd?r:r.slice(0,n)}(r,e,n),J(o))){if(t.interpolator)return t.interpolator(o);u(`Scale type ${r} does not support interpolating color schemes.`)}if(o&&lp(r))return t.interpolator(dp(yb(o,e.reverse),e.interpolate,e.interpolateGamma));o&&e.interpolate&&t.interpolate?t.interpolate(mp(e.interpolate,e.interpolateGamma)):J(t.round)?t.round(i):J(t.rangeRound)&&t.interpolate(i?kh:wh);o&&t.range(yb(o,e.reverse))}(r,t,function(t,e,n){let r=e.bins;if(r&&!k(r)){const e=t.domain(),n=e[0],i=F(e),o=r.step;let a=null==r.start?n:r.start,s=null==r.stop?i:r.stop;o||u("Scale bins parameter missing step property."),ai&&(s=o*Math.floor(i/o)),r=Te(a,s+o/2,o)}r?t.bins=r:t.bins&&delete t.bins;t.type===Id&&(r?e.domain||e.domainRaw||(t.domain(r),n=r.length):t.bins=t.domain());return n}(r,t,function(t,e,n){const r=function(t,e,n){return e?(t.domain(gb(t.type,e,n)),e.length):-1}(t,e.domainRaw,n);if(r>-1)return r;var i,o,a=e.domain,u=t.type,s=e.zero||void 0===e.zero&&function(t){const e=t.type;return!t.bins&&(e===Cd||e===Sd||e===$d)}(t);if(!a)return 0;hb(u)&&e.padding&&a[0]!==F(a)&&(a=function(t,e,n,r,i,o){var a=Math.abs(F(n)-n[0]),u=a/(a-2*r),s=t===Fd?I(e,null,u):t===$d?W(e,null,u,.5):t===Sd?W(e,null,u,i||1):t===Td?H(e,null,u,o||1):j(e,null,u);return e=e.slice(),e[0]=s[0],e[e.length-1]=s[1],e}(u,a,e.range,e.padding,e.exponent,e.constant));if((s||null!=e.domainMin||null!=e.domainMax||null!=e.domainMid)&&(i=(a=a.slice()).length-1||1,s&&(a[0]>0&&(a[0]=0),a[i]<0&&(a[i]=0)),null!=e.domainMin&&(a[0]=e.domainMin),null!=e.domainMax&&(a[i]=e.domainMax),null!=e.domainMid)){const t=(o=e.domainMid)>a[i]?i+1:ot(s);if(null==e)d.push(t.slice());else for(i={},o=0,a=t.length;oh&&(h=f),n&&c.sort(n)}return d.max=h,d}(e.source,t.groupby,l,c),r=0,i=n.length,o=n.max;r0?1:t<0?-1:0},Gb=Math.sqrt,Vb=Math.tan;function Xb(t){return t>1?0:t<-1?Sb:Math.acos(t)}function Jb(t){return t>1?$b:t<-1?-$b:Math.asin(t)}function Zb(){}function Qb(t,e){t&&tw.hasOwnProperty(t.type)&&tw[t.type](t,e)}var Kb={Feature:function(t,e){Qb(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r=0?1:-1,i=r*n,o=Lb(e=(e*=zb)/2+Tb),a=Hb(e),u=sw*a,s=uw*o+u*Lb(i),l=u*r*Hb(i);xw.add(Ub(l,s)),aw=t,uw=o,sw=a}function Dw(t){return[Ub(t[1],t[0]),Jb(t[2])]}function Cw(t){var e=t[0],n=t[1],r=Lb(n);return[r*Lb(e),r*Hb(e),Hb(n)]}function Fw(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Sw(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function $w(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function Tw(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function Bw(t){var e=Gb(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}var Nw,zw,Ow,Rw,Uw,Lw,qw,Pw,jw,Iw,Ww,Hw,Yw,Gw,Vw,Xw,Jw={point:Zw,lineStart:Kw,lineEnd:tk,polygonStart:function(){Jw.point=ek,Jw.lineStart=nk,Jw.lineEnd=rk,yw=new le,ww.polygonStart()},polygonEnd:function(){ww.polygonEnd(),Jw.point=Zw,Jw.lineStart=Kw,Jw.lineEnd=tk,xw<0?(lw=-(fw=180),cw=-(hw=90)):yw>Cb?hw=90:yw<-Cb&&(cw=-90),_w[0]=lw,_w[1]=fw},sphere:function(){lw=-(fw=180),cw=-(hw=90)}};function Zw(t,e){vw.push(_w=[lw=t,fw=t]),ehw&&(hw=e)}function Qw(t,e){var n=Cw([t*zb,e*zb]);if(mw){var r=Sw(mw,n),i=Sw([r[1],-r[0],0],r);Bw(i),i=Dw(i);var o,a=t-dw,u=a>0?1:-1,s=i[0]*Nb*u,l=Ob(a)>180;l^(u*dwhw&&(hw=o):l^(u*dw<(s=(s+360)%360-180)&&shw&&(hw=e)),l?tik(lw,fw)&&(fw=t):ik(t,fw)>ik(lw,fw)&&(lw=t):fw>=lw?(tfw&&(fw=t)):t>dw?ik(lw,t)>ik(lw,fw)&&(fw=t):ik(t,fw)>ik(lw,fw)&&(lw=t)}else vw.push(_w=[lw=t,fw=t]);ehw&&(hw=e),mw=n,dw=t}function Kw(){Jw.point=Qw}function tk(){_w[0]=lw,_w[1]=fw,Jw.point=Zw,mw=null}function ek(t,e){if(mw){var n=t-dw;yw.add(Ob(n)>180?n+(n>0?360:-360):n)}else pw=t,gw=e;ww.point(t,e),Qw(t,e)}function nk(){ww.lineStart()}function rk(){ek(pw,gw),ww.lineEnd(),Ob(yw)>Cb&&(lw=-(fw=180)),_w[0]=lw,_w[1]=fw,mw=null}function ik(t,e){return(e-=t)<0?e+360:e}function ok(t,e){return t[0]-e[0]}function ak(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:eSb&&(t-=Math.round(t/Bb)*Bb),[t,e]}function xk(t,e,n){return(t%=Bb)?e||n?vk(wk(t),kk(e,n)):wk(t):e||n?kk(e,n):_k}function bk(t){return function(e,n){return Ob(e+=t)>Sb&&(e-=Math.round(e/Bb)*Bb),[e,n]}}function wk(t){var e=bk(t);return e.invert=bk(-t),e}function kk(t,e){var n=Lb(t),r=Hb(t),i=Lb(e),o=Hb(e);function a(t,e){var a=Lb(e),u=Lb(t)*a,s=Hb(t)*a,l=Hb(e),c=l*n+u*r;return[Ub(s*i-c*o,u*n-l*r),Jb(c*i+s*o)]}return a.invert=function(t,e){var a=Lb(e),u=Lb(t)*a,s=Hb(t)*a,l=Hb(e),c=l*i-s*o;return[Ub(s*i+l*o,u*n+c*r),Jb(c*n-u*r)]},a}function Ak(t,e){(e=Cw(e))[0]-=t,Bw(e);var n=Xb(-e[1]);return((-e[2]<0?-n:n)+Bb-Cb)%Bb}function Mk(){var t,e=[];return{point:function(e,n,r){t.push([e,n,r])},lineStart:function(){e.push(t=[])},lineEnd:Zb,rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))},result:function(){var n=e;return e=[],t=null,n}}}function Ek(t,e){return Ob(t[0]-e[0])=0;--o)i.point((c=l[o])[0],c[1]);else r(h.x,h.p.x,-1,i);h=h.p}l=(h=h.o).z,d=!d}while(!h.v);i.lineEnd()}}}function Fk(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r=0?1:-1,E=M*A,D=E>Sb,C=m*w;if(s.add(Ub(C*M*Hb(E),y*k+C*Lb(E))),a+=D?A+M*Bb:A,D^p>=n^x>=n){var F=Sw(Cw(d),Cw(_));Bw(F);var S=Sw(o,F);Bw(S);var $=(D^A>=0?-1:1)*Jb(S[2]);(r>$||r===$&&(F[0]||F[1]))&&(u+=D^A>=0?1:-1)}}return(a<-Cb||a0){for(f||(i.polygonStart(),f=!0),i.lineStart(),t=0;t1&&2&s&&h.push(h.pop().concat(h.shift())),a.push(h.filter(Tk))}return h}}function Tk(t){return t.length>1}function Bk(t,e){return((t=t.x)[0]<0?t[1]-$b-Cb:$b-t[1])-((e=e.x)[0]<0?e[1]-$b-Cb:$b-e[1])}_k.invert=_k;var Nk=$k((function(){return!0}),(function(t){var e,n=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(o,a){var u=o>0?Sb:-Sb,s=Ob(o-n);Ob(s-Sb)0?$b:-$b),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(u,r),t.point(o,r),e=0):i!==u&&s>=Sb&&(Ob(n-i)Cb?Rb((Hb(e)*(o=Lb(r))*Hb(n)-Hb(r)*(i=Lb(e))*Hb(t))/(i*o*a)):(e+r)/2}(n,r,o,a),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(u,r),e=0),t.point(n=o,r=a),i=u},lineEnd:function(){t.lineEnd(),n=r=NaN},clean:function(){return 2-e}}}),(function(t,e,n,r){var i;if(null==t)i=n*$b,r.point(-Sb,i),r.point(0,i),r.point(Sb,i),r.point(Sb,0),r.point(Sb,-i),r.point(0,-i),r.point(-Sb,-i),r.point(-Sb,0),r.point(-Sb,i);else if(Ob(t[0]-e[0])>Cb){var o=t[0]0,i=Ob(e)>Cb;function o(t,n){return Lb(t)*Lb(n)>e}function a(t,n,r){var i=[1,0,0],o=Sw(Cw(t),Cw(n)),a=Fw(o,o),u=o[0],s=a-u*u;if(!s)return!r&&t;var l=e*a/s,c=-e*u/s,f=Sw(i,o),h=Tw(i,l);$w(h,Tw(o,c));var d=f,p=Fw(h,d),g=Fw(d,d),m=p*p-g*(Fw(h,h)-1);if(!(m<0)){var y=Gb(m),v=Tw(d,(-p-y)/g);if($w(v,h),v=Dw(v),!r)return v;var _,x=t[0],b=n[0],w=t[1],k=n[1];b0^v[1]<(Ob(v[0]-x)Sb^(x<=v[0]&&v[0]<=b)){var E=Tw(d,(-p+y)/g);return $w(E,h),[v,Dw(E)]}}}function u(e,n){var i=r?t:Sb-t,o=0;return e<-i?o|=1:e>i&&(o|=2),n<-i?o|=4:n>i&&(o|=8),o}return $k(o,(function(t){var e,n,s,l,c;return{lineStart:function(){l=s=!1,c=1},point:function(f,h){var d,p=[f,h],g=o(f,h),m=r?g?0:u(f,h):g?u(f+(f<0?Sb:-Sb),h):0;if(!e&&(l=s=g)&&t.lineStart(),g!==s&&(!(d=a(e,p))||Ek(e,d)||Ek(p,d))&&(p[2]=1),g!==s)c=0,g?(t.lineStart(),d=a(p,e),t.point(d[0],d[1])):(d=a(e,p),t.point(d[0],d[1],2),t.lineEnd()),e=d;else if(i&&e&&r^g){var y;m&n||!(y=a(p,e,!0))||(c=0,r?(t.lineStart(),t.point(y[0][0],y[0][1]),t.point(y[1][0],y[1][1]),t.lineEnd()):(t.point(y[1][0],y[1][1]),t.lineEnd(),t.lineStart(),t.point(y[0][0],y[0][1],3)))}!g||e&&Ek(e,p)||t.point(p[0],p[1]),e=p,s=g,n=m},lineEnd:function(){s&&t.lineEnd(),e=null},clean:function(){return c|(l&&s)<<1}}}),(function(e,r,i,o){!function(t,e,n,r,i,o){if(n){var a=Lb(e),u=Hb(e),s=r*n;null==i?(i=e+r*Bb,o=e-s/2):(i=Ak(a,i),o=Ak(a,o),(r>0?io)&&(i+=r*Bb));for(var l,c=i;r>0?c>o:c0)do{l.point(0===c||3===c?t:n,c>1?r:e)}while((c=(c+u+4)%4)!==f);else l.point(o[0],o[1])}function a(r,i){return Ob(r[0]-t)0?0:3:Ob(r[0]-n)0?2:1:Ob(r[1]-e)0?1:0:i>0?3:2}function u(t,e){return s(t.x,e.x)}function s(t,e){var n=a(t,1),r=a(e,1);return n!==r?n-r:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(a){var s,l,c,f,h,d,p,g,m,y,v,_=a,x=Mk(),b={point:w,lineStart:function(){b.point=k,l&&l.push(c=[]);y=!0,m=!1,p=g=NaN},lineEnd:function(){s&&(k(f,h),d&&m&&x.rejoin(),s.push(x.result()));b.point=w,m&&_.lineEnd()},polygonStart:function(){_=x,s=[],l=[],v=!0},polygonEnd:function(){var e=function(){for(var e=0,n=0,i=l.length;nr&&(h-o)*(r-a)>(d-a)*(t-o)&&++e:d<=r&&(h-o)*(r-a)<(d-a)*(t-o)&&--e;return e}(),n=v&&e,i=(s=$e(s)).length;(n||i)&&(a.polygonStart(),n&&(a.lineStart(),o(null,null,1,a),a.lineEnd()),i&&Ck(s,u,e,o,a),a.polygonEnd());_=a,s=l=c=null}};function w(t,e){i(t,e)&&_.point(t,e)}function k(o,a){var u=i(o,a);if(l&&c.push([o,a]),y)f=o,h=a,d=u,y=!1,u&&(_.lineStart(),_.point(o,a));else if(u&&m)_.point(o,a);else{var s=[p=Math.max(Rk,Math.min(Ok,p)),g=Math.max(Rk,Math.min(Ok,g))],x=[o=Math.max(Rk,Math.min(Ok,o)),a=Math.max(Rk,Math.min(Ok,a))];!function(t,e,n,r,i,o){var a,u=t[0],s=t[1],l=0,c=1,f=e[0]-u,h=e[1]-s;if(a=n-u,f||!(a>0)){if(a/=f,f<0){if(a0){if(a>c)return;a>l&&(l=a)}if(a=i-u,f||!(a<0)){if(a/=f,f<0){if(a>c)return;a>l&&(l=a)}else if(f>0){if(a0)){if(a/=h,h<0){if(a0){if(a>c)return;a>l&&(l=a)}if(a=o-s,h||!(a<0)){if(a/=h,h<0){if(a>c)return;a>l&&(l=a)}else if(h>0){if(a0&&(t[0]=u+l*f,t[1]=s+l*h),c<1&&(e[0]=u+c*f,e[1]=s+c*h),!0}}}}}(s,x,t,e,n,r)?u&&(_.lineStart(),_.point(o,a),v=!1):(m||(_.lineStart(),_.point(s[0],s[1])),_.point(x[0],x[1]),u||_.lineEnd(),v=!1)}p=o,g=a,m=u}return b}}function Lk(t,e,n){var r=Te(t,e-Cb,n).concat(e);return function(t){return r.map((function(e){return[t,e]}))}}function qk(t,e,n){var r=Te(t,e-Cb,n).concat(e);return function(t){return r.map((function(e){return[e,t]}))}}var Pk,jk,Ik,Wk,Hk=t=>t,Yk=new le,Gk=new le,Vk={point:Zb,lineStart:Zb,lineEnd:Zb,polygonStart:function(){Vk.lineStart=Xk,Vk.lineEnd=Qk},polygonEnd:function(){Vk.lineStart=Vk.lineEnd=Vk.point=Zb,Yk.add(Ob(Gk)),Gk=new le},result:function(){var t=Yk/2;return Yk=new le,t}};function Xk(){Vk.point=Jk}function Jk(t,e){Vk.point=Zk,Pk=Ik=t,jk=Wk=e}function Zk(t,e){Gk.add(Wk*t-Ik*e),Ik=t,Wk=e}function Qk(){Zk(Pk,jk)}var Kk=Vk,tA=1/0,eA=tA,nA=-tA,rA=nA,iA={point:function(t,e){tnA&&(nA=t);erA&&(rA=e)},lineStart:Zb,lineEnd:Zb,polygonStart:Zb,polygonEnd:Zb,result:function(){var t=[[tA,eA],[nA,rA]];return nA=rA=-(eA=tA=1/0),t}};var oA,aA,uA,sA,lA=iA,cA=0,fA=0,hA=0,dA=0,pA=0,gA=0,mA=0,yA=0,vA=0,_A={point:xA,lineStart:bA,lineEnd:AA,polygonStart:function(){_A.lineStart=MA,_A.lineEnd=EA},polygonEnd:function(){_A.point=xA,_A.lineStart=bA,_A.lineEnd=AA},result:function(){var t=vA?[mA/vA,yA/vA]:gA?[dA/gA,pA/gA]:hA?[cA/hA,fA/hA]:[NaN,NaN];return cA=fA=hA=dA=pA=gA=mA=yA=vA=0,t}};function xA(t,e){cA+=t,fA+=e,++hA}function bA(){_A.point=wA}function wA(t,e){_A.point=kA,xA(uA=t,sA=e)}function kA(t,e){var n=t-uA,r=e-sA,i=Gb(n*n+r*r);dA+=i*(uA+t)/2,pA+=i*(sA+e)/2,gA+=i,xA(uA=t,sA=e)}function AA(){_A.point=xA}function MA(){_A.point=DA}function EA(){CA(oA,aA)}function DA(t,e){_A.point=CA,xA(oA=uA=t,aA=sA=e)}function CA(t,e){var n=t-uA,r=e-sA,i=Gb(n*n+r*r);dA+=i*(uA+t)/2,pA+=i*(sA+e)/2,gA+=i,mA+=(i=sA*t-uA*e)*(uA+t),yA+=i*(sA+e),vA+=3*i,xA(uA=t,sA=e)}var FA=_A;function SA(t){this._context=t}SA.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,Bb)}},result:Zb};var $A,TA,BA,NA,zA,OA=new le,RA={point:Zb,lineStart:function(){RA.point=UA},lineEnd:function(){$A&&LA(TA,BA),RA.point=Zb},polygonStart:function(){$A=!0},polygonEnd:function(){$A=null},result:function(){var t=+OA;return OA=new le,t}};function UA(t,e){RA.point=LA,TA=NA=t,BA=zA=e}function LA(t,e){NA-=t,zA-=e,OA.add(Gb(NA*NA+zA*zA)),NA=t,zA=e}var qA=RA;let PA,jA,IA,WA;class HA{constructor(t){this._append=null==t?YA:function(t){const e=Math.floor(t);if(!(e>=0))throw new RangeError(`invalid digits: ${t}`);if(e>15)return YA;if(e!==PA){const t=10**e;PA=e,jA=function(e){let n=1;this._+=e[0];for(const r=e.length;n=0))throw new RangeError(`invalid digits: ${t}`);i=e}return null===e&&(r=new HA(i)),a},a.projection(t).digits(i).context(e)}function VA(t){return function(e){var n=new XA;for(var r in t)n[r]=t[r];return n.stream=e,n}}function XA(){}function JA(t,e,n){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),rw(n,t.stream(lA)),e(lA.result()),null!=r&&t.clipExtent(r),t}function ZA(t,e,n){return JA(t,(function(n){var r=e[1][0]-e[0][0],i=e[1][1]-e[0][1],o=Math.min(r/(n[1][0]-n[0][0]),i/(n[1][1]-n[0][1])),a=+e[0][0]+(r-o*(n[1][0]+n[0][0]))/2,u=+e[0][1]+(i-o*(n[1][1]+n[0][1]))/2;t.scale(150*o).translate([a,u])}),n)}function QA(t,e,n){return ZA(t,[[0,0],e],n)}function KA(t,e,n){return JA(t,(function(n){var r=+e,i=r/(n[1][0]-n[0][0]),o=(r-i*(n[1][0]+n[0][0]))/2,a=-i*n[0][1];t.scale(150*i).translate([o,a])}),n)}function tM(t,e,n){return JA(t,(function(n){var r=+e,i=r/(n[1][1]-n[0][1]),o=-i*n[0][0],a=(r-i*(n[1][1]+n[0][1]))/2;t.scale(150*i).translate([o,a])}),n)}XA.prototype={constructor:XA,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var eM=16,nM=Lb(30*zb);function rM(t,e){return+e?function(t,e){function n(r,i,o,a,u,s,l,c,f,h,d,p,g,m){var y=l-r,v=c-i,_=y*y+v*v;if(_>4*e&&g--){var x=a+h,b=u+d,w=s+p,k=Gb(x*x+b*b+w*w),A=Jb(w/=k),M=Ob(Ob(w)-1)e||Ob((y*F+v*S)/_-.5)>.3||a*h+u*d+s*p2?t[2]%360*zb:0,F()):[m*Nb,y*Nb,v*Nb]},D.angle=function(t){return arguments.length?(_=t%360*zb,F()):_*Nb},D.reflectX=function(t){return arguments.length?(x=t?-1:1,F()):x<0},D.reflectY=function(t){return arguments.length?(b=t?-1:1,F()):b<0},D.precision=function(t){return arguments.length?(a=rM(u,E=t*t),S()):Gb(E)},D.fitExtent=function(t,e){return ZA(D,t,e)},D.fitSize=function(t,e){return QA(D,t,e)},D.fitWidth=function(t,e){return KA(D,t,e)},D.fitHeight=function(t,e){return tM(D,t,e)},function(){return e=t.apply(this,arguments),D.invert=e.invert&&C,F()}}function sM(t){var e=0,n=Sb/3,r=uM(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*zb,n=t[1]*zb):[e*Nb,n*Nb]},i}function lM(t,e){var n=Hb(t),r=(n+Hb(e))/2;if(Ob(r)2?t[2]*zb:0),e.invert=function(e){return(e=t.invert(e[0]*zb,e[1]*zb))[0]*=Nb,e[1]*=Nb,e},e}(i.rotate()).invert([0,0]));return s(null==l?[[u[0]-o,u[1]-o],[u[0]+o,u[1]+o]]:t===mM?[[Math.max(u[0]-o,l),e],[Math.min(u[0]+o,n),r]]:[[l,Math.max(u[1]-o,e)],[n,Math.min(u[1]+o,r)]])}return i.scale=function(t){return arguments.length?(a(t),c()):a()},i.translate=function(t){return arguments.length?(u(t),c()):u()},i.center=function(t){return arguments.length?(o(t),c()):o()},i.clipExtent=function(t){return arguments.length?(null==t?l=e=n=r=null:(l=+t[0][0],e=+t[0][1],n=+t[1][0],r=+t[1][1]),c()):null==l?null:[[l,e],[n,r]]},c()}function vM(t){return Vb(($b+t)/2)}function _M(t,e){var n=Lb(t),r=t===e?Hb(t):Ib(n/Lb(e))/Ib(vM(e)/vM(t)),i=n*Wb(vM(t),r)/r;if(!r)return mM;function o(t,e){i>0?e<-$b+Cb&&(e=-$b+Cb):e>$b-Cb&&(e=$b-Cb);var n=i/Wb(vM(e),r);return[n*Hb(r*t),i-n*Lb(r*t)]}return o.invert=function(t,e){var n=i-e,o=Yb(r)*Gb(t*t+n*n),a=Ub(t,Ob(n))*Yb(n);return n*r<0&&(a-=Sb*Yb(t)*Yb(n)),[a/r,2*Rb(Wb(i/o,1/r))-$b]},o}function xM(t,e){return[t,e]}function bM(t,e){var n=Lb(t),r=t===e?Hb(t):(n-Lb(e))/(e-t),i=n/r+t;if(Ob(r)Cb&&--i>0);return[t/(.8707+(o=r*r)*(o*(o*o*o*(.003971-.001529*o)-.013791)-.131979)),r]},SM.invert=dM(Jb),$M.invert=dM((function(t){return 2*Rb(t)})),TM.invert=function(t,e){return[-e,2*Rb(Pb(t))-$b]};var BM=Math.abs,NM=Math.cos,zM=Math.sin,OM=1e-6,RM=Math.PI,UM=RM/2,LM=function(t){return t>0?Math.sqrt(t):0}(2);function qM(t){return t>1?UM:t<-1?-UM:Math.asin(t)}function PM(t,e){var n,r=t*zM(e),i=30;do{e-=n=(e+zM(e)-r)/(1+NM(e))}while(BM(n)>OM&&--i>0);return e/2}var jM=function(t,e,n){function r(r,i){return[t*r*NM(i=PM(n,i)),e*zM(i)]}return r.invert=function(r,i){return i=qM(i/e),[r/(t*NM(i)),qM((2*i+zM(2*i))/n)]},r}(LM/UM,LM,RM);const IM=GA(),WM=["clipAngle","clipExtent","scale","translate","center","rotate","parallels","precision","reflectX","reflectY","coefficient","distance","fraction","lobes","parallel","radius","ratio","spacing","tilt"];function HM(t,e){if(!t||"string"!=typeof t)throw new Error("Projection type must be a name string.");return t=t.toLowerCase(),arguments.length>1?(GM[t]=function(t,e){return function n(){const r=e();return r.type=t,r.path=GA().projection(r),r.copy=r.copy||function(){const t=n();return WM.forEach((e=>{r[e]&&t[e](r[e]())})),t.path.pointRadius(r.path.pointRadius()),t},ep(r)}}(t,e),this):GM[t]||null}function YM(t){return t&&t.path||IM}const GM={albers:fM,albersusa:function(){var t,e,n,r,i,o,a=fM(),u=cM().rotate([154,0]).center([-2,58.5]).parallels([55,65]),s=cM().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(t,e){o=[t,e]}};function c(t){var e=t[0],a=t[1];return o=null,n.point(e,a),o||(r.point(e,a),o)||(i.point(e,a),o)}function f(){return t=e=null,c}return c.invert=function(t){var e=a.scale(),n=a.translate(),r=(t[0]-n[0])/e,i=(t[1]-n[1])/e;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?u:i>=.166&&i<.234&&r>=-.214&&r<-.115?s:a).invert(t)},c.stream=function(n){return t&&e===n?t:(r=[a.stream(e=n),u.stream(n),s.stream(n)],i=r.length,t={point:function(t,e){for(var n=-1;++n2?t[2]+90:90]):[(t=n())[0],t[1],t[2]-90]},n([0,0,90]).scale(159.155)}};for(const t in GM)HM(t,GM[t]);function VM(){}const XM=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]];function JM(){var t=1,e=1,n=a;function r(t,e){return e.map((e=>i(t,e)))}function i(r,i){var a=[],u=[];return function(n,r,i){var a,u,s,l,c,f,h=new Array,d=new Array;a=u=-1,l=n[0]>=r,XM[l<<1].forEach(p);for(;++a=r,XM[s|l<<1].forEach(p);XM[l<<0].forEach(p);for(;++u=r,c=n[u*t]>=r,XM[l<<1|c<<2].forEach(p);++a=r,f=c,c=n[u*t+a+1]>=r,XM[s|l<<1|c<<2|f<<3].forEach(p);XM[l|c<<3].forEach(p)}a=-1,c=n[u*t]>=r,XM[c<<2].forEach(p);for(;++a=r,XM[c<<2|f<<3].forEach(p);function p(t){var e,n,r=[t[0][0]+a,t[0][1]+u],s=[t[1][0]+a,t[1][1]+u],l=o(r),c=o(s);(e=d[l])?(n=h[c])?(delete d[e.end],delete h[n.start],e===n?(e.ring.push(s),i(e.ring)):h[e.start]=d[n.end]={start:e.start,end:n.end,ring:e.ring.concat(n.ring)}):(delete d[e.end],e.ring.push(s),d[e.end=c]=e):(e=h[c])?(n=d[l])?(delete h[e.start],delete d[n.end],e===n?(e.ring.push(s),i(e.ring)):h[n.start]=d[e.end]={start:n.start,end:e.end,ring:n.ring.concat(e.ring)}):(delete h[e.start],e.ring.unshift(r),h[e.start=l]=e):h[l]=d[c]={start:l,end:c,ring:[r,s]}}XM[c<<3].forEach(p)}(r,i,(t=>{n(t,r,i),function(t){var e=0,n=t.length,r=t[n-1][1]*t[0][0]-t[n-1][0]*t[0][1];for(;++e0?a.push([t]):u.push(t)})),u.forEach((t=>{for(var e,n=0,r=a.length;n{var o,a=n[0],u=n[1],s=0|a,l=0|u,c=r[l*t+s];a>0&&a0&&u=0&&o>=0||u("invalid size"),t=i,e=o,r},r.smooth=function(t){return arguments.length?(n=t?a:VM,r):n===a},r}function ZM(t,e){for(var n,r=-1,i=e.length;++rr!=d>r&&n<(h-l)*(r-c)/(d-c)+l&&(i=-i)}return i}function KM(t,e,n){var r,i,o,a;return function(t,e,n){return(e[0]-t[0])*(n[1]-t[1])==(n[0]-t[0])*(e[1]-t[1])}(t,e,n)&&(i=t[r=+(t[0]===e[0])],o=n[r],a=e[r],i<=o&&o<=a||a<=o&&o<=i)}function tE(t,e,n){return function(r){var i=at(r),o=n?Math.min(i[0],0):i[0],a=i[1],u=a-o,s=e?ke(o,a,t):u/(t+1);return Te(o+s,a,s)}}function eE(t){Qa.call(this,null,t)}function nE(t,e,n,r,i){const o=t.x1||0,a=t.y1||0,u=e*n<0;function s(t){t.forEach(l)}function l(t){u&&t.reverse(),t.forEach(c)}function c(t){t[0]=(t[0]-o)*e+r,t[1]=(t[1]-a)*n+i}return function(t){return t.coordinates.forEach(s),t}}function rE(t,e,n){const r=t>=0?t:ou(e,n);return Math.round((Math.sqrt(4*r*r+1)-1)/2)}function iE(t){return J(t)?t:rt(+t)}function oE(){var t=t=>t[0],e=t=>t[1],n=d,r=[-1,-1],i=960,o=500,a=2;function s(u,s){const l=rE(r[0],u,t)>>a,c=rE(r[1],u,e)>>a,f=l?l+2:0,h=c?c+2:0,d=2*f+(i>>a),p=2*h+(o>>a),g=new Float32Array(d*p),m=new Float32Array(d*p);let y=g;u.forEach((r=>{const i=f+(+t(r)>>a),o=h+(+e(r)>>a);i>=0&&i=0&&o0&&c>0?(aE(d,p,g,m,l),uE(d,p,m,g,c),aE(d,p,g,m,l),uE(d,p,m,g,c),aE(d,p,g,m,l),uE(d,p,m,g,c)):l>0?(aE(d,p,g,m,l),aE(d,p,m,g,l),aE(d,p,g,m,l),y=m):c>0&&(uE(d,p,g,m,c),uE(d,p,m,g,c),uE(d,p,g,m,c),y=m);const v=s?Math.pow(2,-2*a):1/Be(y);for(let t=0,e=d*p;t>a),y2:h+(o>>a)}}return s.x=function(e){return arguments.length?(t=iE(e),s):t},s.y=function(t){return arguments.length?(e=iE(t),s):e},s.weight=function(t){return arguments.length?(n=iE(t),s):n},s.size=function(t){if(!arguments.length)return[i,o];var e=+t[0],n=+t[1];return e>=0&&n>=0||u("invalid size"),i=e,o=n,s},s.cellSize=function(t){return arguments.length?((t=+t)>=1||u("invalid cell size"),a=Math.floor(Math.log(t)/Math.LN2),s):1<=i&&(e>=o&&(u-=n[e-o+a*t]),r[e-i+a*t]=u/Math.min(e+1,t-1+o-e,o))}function uE(t,e,n,r,i){const o=1+(i<<1);for(let a=0;a=i&&(u>=o&&(s-=n[a+(u-o)*t]),r[a+(u-i)*t]=s/Math.min(u+1,e-1+o-u,o))}function sE(t){Qa.call(this,null,t)}eE.Definition={type:"Isocontour",metadata:{generates:!0},params:[{name:"field",type:"field"},{name:"thresholds",type:"number",array:!0},{name:"levels",type:"number"},{name:"nice",type:"boolean",default:!1},{name:"resolve",type:"enum",values:["shared","independent"],default:"independent"},{name:"zero",type:"boolean",default:!0},{name:"smooth",type:"boolean",default:!0},{name:"scale",type:"number",expr:!0},{name:"translate",type:"number",array:!0,expr:!0},{name:"as",type:"string",null:!0,default:"contour"}]},dt(eE,Qa,{transform(t,e){if(this.value&&!e.changed()&&!t.modified())return e.StopPropagation;var n=e.fork(e.NO_SOURCE|e.NO_FIELDS),r=e.materialize(e.SOURCE).source,i=t.field||f,o=JM().smooth(!1!==t.smooth),a=t.thresholds||function(t,e,n){const r=tE(n.levels||10,n.nice,!1!==n.zero);return"shared"!==n.resolve?r:r(t.map((t=>Ae(e(t).values))))}(r,i,t),u=null===t.as?null:t.as||"contour",s=[];return r.forEach((e=>{const n=i(e),r=o.size([n.width,n.height])(n.values,k(a)?a:a(n.values));!function(t,e,n,r){let i=r.scale||e.scale,o=r.translate||e.translate;J(i)&&(i=i(n,r));J(o)&&(o=o(n,r));if((1===i||null==i)&&!o)return;const a=(vt(i)?i:i[0])||1,u=(vt(i)?i:i[1])||1,s=o&&o[0]||0,l=o&&o[1]||0;t.forEach(nE(e,a,u,s,l))}(r,n,e,t),r.forEach((t=>{s.push(ka(e,ba(null!=u?{[u]:t}:t)))}))})),this.value&&(n.rem=this.value),this.value=n.source=n.add=s,n}}),sE.Definition={type:"KDE2D",metadata:{generates:!0},params:[{name:"size",type:"number",array:!0,length:2,required:!0},{name:"x",type:"field",required:!0},{name:"y",type:"field",required:!0},{name:"weight",type:"field"},{name:"groupby",type:"field",array:!0},{name:"cellSize",type:"number"},{name:"bandwidth",type:"number",array:!0,length:2},{name:"counts",type:"boolean",default:!1},{name:"as",type:"string",default:"grid"}]};const lE=["x","y","weight","size","cellSize","bandwidth"];function cE(t,e){return lE.forEach((n=>null!=e[n]?t[n](e[n]):0)),t}function fE(t){Qa.call(this,null,t)}dt(sE,Qa,{transform(t,e){if(this.value&&!e.changed()&&!t.modified())return e.StopPropagation;var r,i=e.fork(e.NO_SOURCE|e.NO_FIELDS),o=function(t,e){var n,r,i,o,a,u,s=[],l=t=>t(o);if(null==e)s.push(t);else for(n={},r=0,i=t.length;rba(function(t,e){for(let n=0;nCb})).map(s)).concat(Te(qb(o/d)*d,i,d).filter((function(t){return Ob(t%g)>Cb})).map(l))}return y.lines=function(){return v().map((function(t){return{type:"LineString",coordinates:t}}))},y.outline=function(){return{type:"Polygon",coordinates:[c(r).concat(f(a).slice(1),c(n).reverse().slice(1),f(u).reverse().slice(1))]}},y.extent=function(t){return arguments.length?y.extentMajor(t).extentMinor(t):y.extentMinor()},y.extentMajor=function(t){return arguments.length?(r=+t[0][0],n=+t[1][0],u=+t[0][1],a=+t[1][1],r>n&&(t=r,r=n,n=t),u>a&&(t=u,u=a,a=t),y.precision(m)):[[r,u],[n,a]]},y.extentMinor=function(n){return arguments.length?(e=+n[0][0],t=+n[1][0],o=+n[0][1],i=+n[1][1],e>t&&(n=e,e=t,t=n),o>i&&(n=o,o=i,i=n),y.precision(m)):[[e,o],[t,i]]},y.step=function(t){return arguments.length?y.stepMajor(t).stepMinor(t):y.stepMinor()},y.stepMajor=function(t){return arguments.length?(p=+t[0],g=+t[1],y):[p,g]},y.stepMinor=function(t){return arguments.length?(h=+t[0],d=+t[1],y):[h,d]},y.precision=function(h){return arguments.length?(m=+h,s=Lk(o,i,90),l=qk(e,t,m),c=Lk(u,a,90),f=qk(r,n,m),y):m},y.extentMajor([[-180,-90+Cb],[180,90-Cb]]).extentMinor([[-180,-80-Cb],[180,80+Cb]])}()}function _E(t){Qa.call(this,null,t)}function xE(t){if(!J(t))return!1;const e=Nt(r(t));return e.$x||e.$y||e.$value||e.$max}function bE(t){Qa.call(this,null,t),this.modified(!0)}function wE(t,e,n){J(t[e])&&t[e](n)}pE.Definition={type:"GeoJSON",metadata:{},params:[{name:"fields",type:"field",array:!0,length:2},{name:"geojson",type:"field"}]},dt(pE,Qa,{transform(t,e){var n,i=this._features,o=this._points,a=t.fields,u=a&&a[0],s=a&&a[1],l=t.geojson||!a&&f,c=e.ADD;n=t.modified()||e.changed(e.REM)||e.modified(r(l))||u&&e.modified(r(u))||s&&e.modified(r(s)),this.value&&!n||(c=e.SOURCE,this._features=i=[],this._points=o=[]),l&&e.visit(c,(t=>i.push(l(t)))),u&&s&&(e.visit(c,(t=>{var e=u(t),n=s(t);null!=e&&null!=n&&(e=+e)===e&&(n=+n)===n&&o.push([e,n])})),i=i.concat({type:hE,geometry:{type:"MultiPoint",coordinates:o}})),this.value={type:dE,features:i}}}),gE.Definition={type:"GeoPath",metadata:{modifies:!0},params:[{name:"projection",type:"projection"},{name:"field",type:"field"},{name:"pointRadius",type:"number",expr:!0},{name:"as",type:"string",default:"path"}]},dt(gE,Qa,{transform(t,e){var n=e.fork(e.ALL),r=this.value,i=t.field||f,o=t.as||"path",a=n.SOURCE;!r||t.modified()?(this.value=r=YM(t.projection),n.materialize().reflow()):a=i===f||e.modified(i.fields)?n.ADD_MOD:n.ADD;const u=function(t,e){const n=t.pointRadius();t.context(null),null!=e&&t.pointRadius(e);return n}(r,t.pointRadius);return n.visit(a,(t=>t[o]=r(i(t)))),r.pointRadius(u),n.modifies(o)}}),mE.Definition={type:"GeoPoint",metadata:{modifies:!0},params:[{name:"projection",type:"projection",required:!0},{name:"fields",type:"field",array:!0,required:!0,length:2},{name:"as",type:"string",array:!0,length:2,default:["x","y"]}]},dt(mE,Qa,{transform(t,e){var n,r=t.projection,i=t.fields[0],o=t.fields[1],a=t.as||["x","y"],u=a[0],s=a[1];function l(t){const e=r([i(t),o(t)]);e?(t[u]=e[0],t[s]=e[1]):(t[u]=void 0,t[s]=void 0)}return t.modified()?e=e.materialize().reflow(!0).visit(e.SOURCE,l):(n=e.modified(i.fields)||e.modified(o.fields),e.visit(n?e.ADD_MOD:e.ADD,l)),e.modifies(a)}}),yE.Definition={type:"GeoShape",metadata:{modifies:!0,nomod:!0},params:[{name:"projection",type:"projection"},{name:"field",type:"field",default:"datum"},{name:"pointRadius",type:"number",expr:!0},{name:"as",type:"string",default:"shape"}]},dt(yE,Qa,{transform(t,e){var n=e.fork(e.ALL),r=this.value,i=t.as||"shape",o=n.ADD;return r&&!t.modified()||(this.value=r=function(t,e,n){const r=null==n?n=>t(e(n)):r=>{var i=t.pointRadius(),o=t.pointRadius(n)(e(r));return t.pointRadius(i),o};return r.context=e=>(t.context(e),r),r}(YM(t.projection),t.field||l("datum"),t.pointRadius),n.materialize().reflow(),o=n.SOURCE),n.visit(o,(t=>t[i]=r)),n.modifies(i)}}),vE.Definition={type:"Graticule",metadata:{changes:!0,generates:!0},params:[{name:"extent",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"extentMajor",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"extentMinor",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"step",type:"number",array:!0,length:2},{name:"stepMajor",type:"number",array:!0,length:2,default:[90,360]},{name:"stepMinor",type:"number",array:!0,length:2,default:[10,10]},{name:"precision",type:"number",default:2.5}]},dt(vE,Qa,{transform(t,e){var n,r=this.value,i=this.generator;if(!r.length||t.modified())for(const e in t)J(i[e])&&i[e](t[e]);return n=i(),r.length?e.mod.push(Aa(r[0],n)):e.add.push(ba(n)),r[0]=n,e}}),_E.Definition={type:"heatmap",metadata:{modifies:!0},params:[{name:"field",type:"field"},{name:"color",type:"string",expr:!0},{name:"opacity",type:"number",expr:!0},{name:"resolve",type:"enum",values:["shared","independent"],default:"independent"},{name:"as",type:"string",default:"image"}]},dt(_E,Qa,{transform(t,e){if(!e.changed()&&!t.modified())return e.StopPropagation;var n=e.materialize(e.SOURCE).source,r="shared"===t.resolve,i=t.field||f,o=function(t,e){let n;J(t)?(n=n=>t(n,e),n.dep=xE(t)):t?n=rt(t):(n=t=>t.$value/t.$max||0,n.dep=!0);return n}(t.opacity,t),a=function(t,e){let n;J(t)?(n=n=>hf(t(n,e)),n.dep=xE(t)):n=rt(hf(t||"#888"));return n}(t.color,t),u=t.as||"image",s={$x:0,$y:0,$value:0,$max:r?Ae(n.map((t=>Ae(i(t).values)))):0};return n.forEach((t=>{const e=i(t),n=ot({},t,s);r||(n.$max=Ae(e.values||[])),t[u]=function(t,e,n,r){const i=t.width,o=t.height,a=t.x1||0,u=t.y1||0,s=t.x2||i,l=t.y2||o,c=t.values,f=c?t=>c[t]:h,d=Rc(s-a,l-u),p=d.getContext("2d"),g=p.getImageData(0,0,s-a,l-u),m=g.data;for(let t=u,o=0;t{null!=t[e]&&wE(n,e,t[e])}))):WM.forEach((e=>{t.modified(e)&&wE(n,e,t[e])})),null!=t.pointRadius&&n.path.pointRadius(t.pointRadius),t.fit&&function(t,e){const n=function(t){return t=V(t),1===t.length?t[0]:{type:dE,features:t.reduce(((t,e)=>t.concat(function(t){return t.type===dE?t.features:V(t).filter((t=>null!=t)).map((t=>t.type===hE?t:{type:hE,geometry:t}))}(e))),[])}}(e.fit);e.extent?t.fitExtent(e.extent,n):e.size&&t.fitSize(e.size,n)}(n,t),e.fork(e.NO_SOURCE|e.NO_FIELDS)}});var kE=Object.freeze({__proto__:null,contour:fE,geojson:pE,geopath:gE,geopoint:mE,geoshape:yE,graticule:vE,heatmap:_E,isocontour:eE,kde2d:sE,projection:bE});function AE(t,e,n,r){if(isNaN(e)||isNaN(n))return t;var i,o,a,u,s,l,c,f,h,d=t._root,p={data:r},g=t._x0,m=t._y0,y=t._x1,v=t._y1;if(!d)return t._root=p,t;for(;d.length;)if((l=e>=(o=(g+y)/2))?g=o:y=o,(c=n>=(a=(m+v)/2))?m=a:v=a,i=d,!(d=d[f=c<<1|l]))return i[f]=p,t;if(u=+t._x.call(null,d.data),s=+t._y.call(null,d.data),e===u&&n===s)return p.next=d,i?i[f]=p:t._root=p,t;do{i=i?i[f]=new Array(4):t._root=new Array(4),(l=e>=(o=(g+y)/2))?g=o:y=o,(c=n>=(a=(m+v)/2))?m=a:v=a}while((f=c<<1|l)==(h=(s>=a)<<1|u>=o));return i[h]=d,i[f]=p,t}function ME(t,e,n,r,i){this.node=t,this.x0=e,this.y0=n,this.x1=r,this.y1=i}function EE(t){return t[0]}function DE(t){return t[1]}function CE(t,e,n){var r=new FE(null==e?EE:e,null==n?DE:n,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function FE(t,e,n,r,i,o){this._x=t,this._y=e,this._x0=n,this._y0=r,this._x1=i,this._y1=o,this._root=void 0}function SE(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var $E=CE.prototype=FE.prototype;function TE(t){return function(){return t}}function BE(t){return 1e-6*(t()-.5)}function NE(t){return t.x+t.vx}function zE(t){return t.y+t.vy}function OE(t){return t.index}function RE(t,e){var n=t.get(e);if(!n)throw new Error("node not found: "+e);return n}$E.copy=function(){var t,e,n=new FE(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return n;if(!r.length)return n._root=SE(r),n;for(t=[{source:r,target:n._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(e=r.source[i])&&(e.length?t.push({source:e,target:r.target[i]=new Array(4)}):r.target[i]=SE(e));return n},$E.add=function(t){const e=+this._x.call(null,t),n=+this._y.call(null,t);return AE(this.cover(e,n),e,n,t)},$E.addAll=function(t){var e,n,r,i,o=t.length,a=new Array(o),u=new Array(o),s=1/0,l=1/0,c=-1/0,f=-1/0;for(n=0;nc&&(c=r),if&&(f=i));if(s>c||l>f)return this;for(this.cover(s,l).cover(c,f),n=0;nt||t>=i||r>e||e>=o;)switch(u=(eh||(o=s.y0)>d||(a=s.x1)=y)<<1|t>=m)&&(s=p[p.length-1],p[p.length-1]=p[p.length-1-l],p[p.length-1-l]=s)}else{var v=t-+this._x.call(null,g.data),_=e-+this._y.call(null,g.data),x=v*v+_*_;if(x=(u=(p+m)/2))?p=u:m=u,(c=a>=(s=(g+y)/2))?g=s:y=s,e=d,!(d=d[f=c<<1|l]))return this;if(!d.length)break;(e[f+1&3]||e[f+2&3]||e[f+3&3])&&(n=e,h=f)}for(;d.data!==t;)if(r=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,r?(i?r.next=i:delete r.next,this):e?(i?e[f]=i:delete e[f],(d=e[0]||e[1]||e[2]||e[3])&&d===(e[3]||e[2]||e[1]||e[0])&&!d.length&&(n?n[h]=d:this._root=d),this):(this._root=i,this)},$E.removeAll=function(t){for(var e=0,n=t.length;e{}};function LE(){for(var t,e=0,n=arguments.length,r={};e=0&&(e=t.slice(n+1),t=t.slice(0,n)),t&&!r.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}}))),a=-1,u=o.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++a0)for(var n,r,i=new Array(n),o=0;o=0&&e._call.call(void 0,t),e=e._next;--HE}()}finally{HE=0,function(){var t,e,n=IE,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:IE=e);WE=t,aD(r)}(),JE=0}}function oD(){var t=QE.now(),e=t-XE;e>VE&&(ZE-=e,XE=t)}function aD(t){HE||(YE&&(YE=clearTimeout(YE)),t-JE>24?(t<1/0&&(YE=setTimeout(iD,t-QE.now()-ZE)),GE&&(GE=clearInterval(GE))):(GE||(XE=QE.now(),GE=setInterval(oD,VE)),HE=1,KE(iD)))}nD.prototype=rD.prototype={constructor:nD,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?tD():+n)+(null==e?0:+e),this._next||WE===this||(WE?WE._next=this:IE=this,WE=this),this._call=t,this._time=n,aD()},stop:function(){this._call&&(this._call=null,this._time=1/0,aD())}};const uD=1664525,sD=1013904223,lD=4294967296;function cD(t){return t.x}function fD(t){return t.y}var hD=10,dD=Math.PI*(3-Math.sqrt(5));function pD(t){var e,n=1,r=.001,i=1-Math.pow(r,1/300),o=0,a=.6,u=new Map,s=rD(f),l=LE("tick","end"),c=function(){let t=1;return()=>(t=(uD*t+sD)%lD)/lD}();function f(){h(),l.call("tick",e),n1?(null==n?u.delete(t):u.set(t,p(n)),e):u.get(t)},find:function(e,n,r){var i,o,a,u,s,l=0,c=t.length;for(null==r?r=1/0:r*=r,l=0;l1?(l.on(t,n),e):l.on(t)}}}const gD={center:function(t,e){var n,r=1;function i(){var i,o,a=n.length,u=0,s=0;for(i=0;il+p||oc+p||as.index){var g=l-u.x-u.vx,m=c-u.y-u.vy,y=g*g+m*m;yt.r&&(t.r=t[e].r)}function s(){if(e){var r,i,o=e.length;for(n=new Array(o),r=0;r=u)){(t.data!==e||t.next)&&(0===f&&(p+=(f=BE(n))*f),0===h&&(p+=(h=BE(n))*h),p[u(t,e,r),t])));for(a=0,i=new Array(l);ae(t,n):e)}xD.Definition={type:"Force",metadata:{modifies:!0},params:[{name:"static",type:"boolean",default:!1},{name:"restart",type:"boolean",default:!1},{name:"iterations",type:"number",default:300},{name:"alpha",type:"number",default:1},{name:"alphaMin",type:"number",default:.001},{name:"alphaTarget",type:"number",default:0},{name:"velocityDecay",type:"number",default:.4},{name:"forces",type:"param",array:!0,params:[{key:{force:"center"},params:[{name:"x",type:"number",default:0},{name:"y",type:"number",default:0}]},{key:{force:"collide"},params:[{name:"radius",type:"number",expr:!0},{name:"strength",type:"number",default:.7},{name:"iterations",type:"number",default:1}]},{key:{force:"nbody"},params:[{name:"strength",type:"number",default:-30,expr:!0},{name:"theta",type:"number",default:.9},{name:"distanceMin",type:"number",default:1},{name:"distanceMax",type:"number"}]},{key:{force:"link"},params:[{name:"links",type:"data"},{name:"id",type:"field"},{name:"distance",type:"number",default:30,expr:!0},{name:"strength",type:"number",expr:!0},{name:"iterations",type:"number",default:1}]},{key:{force:"x"},params:[{name:"strength",type:"number",default:.1},{name:"x",type:"field"}]},{key:{force:"y"},params:[{name:"strength",type:"number",default:.1},{name:"y",type:"field"}]}]},{name:"as",type:"string",array:!0,modify:!1,default:_D}]},dt(xD,Qa,{transform(t,e){var n,r,i=this.value,o=e.changed(e.ADD_REM),a=t.modified(yD),u=t.iterations||300;if(i?(o&&(e.modifies("index"),i.nodes(e.source)),(a||e.changed(e.MOD))&&bD(i,t,0,e)):(this.value=i=function(t,e){const n=pD(t),r=n.stop,i=n.restart;let o=!1;return n.stopped=()=>o,n.restart=()=>(o=!1,i()),n.stop=()=>(o=!0,r()),bD(n,e,!0).on("end",(()=>o=!0))}(e.source,t),i.on("tick",(n=e.dataflow,r=this,()=>n.touch(r).run())),t.static||(o=!0,i.tick()),e.modifies("index")),a||o||t.modified(vD)||e.changed()&&t.restart)if(i.alpha(Math.max(i.alpha(),t.alpha||1)).alphaDecay(1-Math.pow(i.alphaMin(),1/u)),t.static)for(i.stop();--u>=0;)i.tick();else if(i.stopped()&&i.restart(),!o)return e.StopPropagation;return this.finish(t,e)},finish(t,e){const n=e.dataflow;for(let t,e=this._argops,u=0,s=e.length;u=0;)e+=n[r].value;else e=1;t.value=e}function SD(t,e){t instanceof Map?(t=[void 0,t],void 0===e&&(e=TD)):void 0===e&&(e=$D);for(var n,r,i,o,a,u=new zD(t),s=[u];n=s.pop();)if((i=e(n.data))&&(a=(i=Array.from(i)).length))for(n.children=i,o=a-1;o>=0;--o)s.push(r=i[o]=new zD(i[o])),r.parent=n,r.depth=n.depth+1;return u.eachBefore(ND)}function $D(t){return t.children}function TD(t){return Array.isArray(t)?t[1]:null}function BD(t){void 0!==t.data.value&&(t.value=t.data.value),t.data=t.data.data}function ND(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function zD(t){this.data=t,this.depth=this.height=0,this.parent=null}function OD(t){return null==t?null:RD(t)}function RD(t){if("function"!=typeof t)throw new Error;return t}function UD(){return 0}function LD(t){return function(){return t}}zD.prototype=SD.prototype={constructor:zD,count:function(){return this.eachAfter(FD)},each:function(t,e){let n=-1;for(const r of this)t.call(e,r,++n,this);return this},eachAfter:function(t,e){for(var n,r,i,o=this,a=[o],u=[],s=-1;o=a.pop();)if(u.push(o),n=o.children)for(r=0,i=n.length;r=0;--r)o.push(n[r]);return this},find:function(t,e){let n=-1;for(const r of this)if(t.call(e,r,++n,this))return r},sum:function(t){return this.eachAfter((function(e){for(var n=+t(e.data)||0,r=e.children,i=r&&r.length;--i>=0;)n+=r[i].value;e.value=n}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),i=null;t=n.pop(),e=r.pop();for(;t===e;)i=t,t=n.pop(),e=r.pop();return i}(e,t),r=[e];e!==n;)e=e.parent,r.push(e);for(var i=r.length;t!==n;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){return Array.from(this)},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(n){n!==t&&e.push({source:n.parent,target:n})})),e},copy:function(){return SD(this).eachBefore(BD)},[Symbol.iterator]:function*(){var t,e,n,r,i=this,o=[i];do{for(t=o.reverse(),o=[];i=t.pop();)if(yield i,e=i.children)for(n=0,r=e.length;n0&&n*n>r*r+i*i}function YD(t,e){for(var n=0;n1e-6?(D+Math.sqrt(D*D-4*E*C))/(2*E):C/D);return{x:r+w+k*F,y:i+A+M*F,r:F}}function JD(t,e,n){var r,i,o,a,u=t.x-e.x,s=t.y-e.y,l=u*u+s*s;l?(i=e.r+n.r,i*=i,a=t.r+n.r,i>(a*=a)?(r=(l+a-i)/(2*l),o=Math.sqrt(Math.max(0,a/l-r*r)),n.x=t.x-r*u-o*s,n.y=t.y-r*s+o*u):(r=(l+i-a)/(2*l),o=Math.sqrt(Math.max(0,i/l-r*r)),n.x=e.x+r*u-o*s,n.y=e.y+r*s+o*u)):(n.x=e.x+n.r,n.y=e.y)}function ZD(t,e){var n=t.r+e.r-1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function QD(t){var e=t._,n=t.next._,r=e.r+n.r,i=(e.x*n.r+n.x*e.r)/r,o=(e.y*n.r+n.y*e.r)/r;return i*i+o*o}function KD(t){this._=t,this.next=null,this.previous=null}function tC(t,e){if(!(o=(t=function(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}(t)).length))return 0;var n,r,i,o,a,u,s,l,c,f,h;if((n=t[0]).x=0,n.y=0,!(o>1))return n.r;if(r=t[1],n.x=-r.r,r.x=n.r,r.y=0,!(o>2))return n.r+r.r;JD(r,n,i=t[2]),n=new KD(n),r=new KD(r),i=new KD(i),n.next=i.previous=r,r.next=n.previous=i,i.next=r.previous=n;t:for(s=3;sfunction(t){t=`${t}`;let e=t.length;pC(t,e-1)&&!pC(t,e-2)&&(t=t.slice(0,-1));return"/"===t[0]?t:`/${t}`}(t(e,n,r)))),n=e.map(dC),i=new Set(e).add("");for(const t of n)i.has(t)||(i.add(t),e.push(t),n.push(dC(t)),h.push(lC));d=(t,n)=>e[n],p=(t,e)=>n[e]}for(a=0,i=h.length;a=0&&(l=h[t]).data===lC;--t)l.data=null}if(u.parent=uC,u.eachBefore((function(t){t.depth=t.parent.depth+1,--i})).eachBefore(ND),u.parent=null,i>0)throw new Error("cycle");return u}return r.id=function(t){return arguments.length?(e=OD(t),r):e},r.parentId=function(t){return arguments.length?(n=OD(t),r):n},r.path=function(e){return arguments.length?(t=OD(e),r):t},r}function dC(t){let e=t.length;if(e<2)return"";for(;--e>1&&!pC(t,e););return t.slice(0,e)}function pC(t,e){if("/"===t[e]){let n=0;for(;e>0&&"\\"===t[--e];)++n;if(0==(1&n))return!0}return!1}function gC(t,e){return t.parent===e.parent?1:2}function mC(t){var e=t.children;return e?e[0]:t.t}function yC(t){var e=t.children;return e?e[e.length-1]:t.t}function vC(t,e,n){var r=n/(e.i-t.i);e.c-=r,e.s+=n,t.c+=r,e.z+=n,e.m+=n}function _C(t,e,n){return t.a.parent===e.parent?t.a:n}function xC(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}function bC(t,e,n,r,i){for(var o,a=t.children,u=-1,s=a.length,l=t.value&&(i-n)/t.value;++uh&&(h=u),m=c*c*g,(d=Math.max(h/m,m/f))>p){c-=u;break}p=d}y.push(a={value:c,dice:s1?e:1)},n}(wC);var MC=function t(e){function n(t,n,r,i,o){if((a=t._squarify)&&a.ratio===e)for(var a,u,s,l,c,f=-1,h=a.length,d=t.value;++f1?e:1)},n}(wC);function EC(t,e,n){const r={};return t.each((t=>{const i=t.data;n(i)&&(r[e(i)]=t)})),t.lookup=r,t}function DC(t){Qa.call(this,null,t)}DC.Definition={type:"Nest",metadata:{treesource:!0,changes:!0},params:[{name:"keys",type:"field",array:!0},{name:"generate",type:"boolean"}]};const CC=t=>t.values;function FC(){const t=[],e={entries:t=>r(n(t,0),0),key:n=>(t.push(n),e)};function n(e,r){if(r>=t.length)return e;const i=e.length,o=t[r++],a={},u={};let s,l,c,f=-1;for(;++ft.length)return e;const i=[];for(const t in e)i.push({key:t,values:r(e[t],n)});return i}return e}function SC(t){Qa.call(this,null,t)}dt(DC,Qa,{transform(t,e){e.source||u("Nest transform requires an upstream data source.");var n=t.generate,r=t.modified(),i=e.clone(),o=this.value;return(!o||r||e.changed())&&(o&&o.each((t=>{t.children&&va(t.data)&&i.rem.push(t.data)})),this.value=o=SD({values:V(t.keys).reduce(((t,e)=>(t.key(e),t)),FC()).entries(i.source)},CC),n&&o.each((t=>{t.children&&(t=ba(t.data),i.add.push(t),i.source.push(t))})),EC(o,_a,_a)),i.source.root=o,i}});const $C=(t,e)=>t.parent===e.parent?1:2;dt(SC,Qa,{transform(t,e){e.source&&e.source.root||u(this.constructor.name+" transform requires a backing tree data source.");const n=this.layout(t.method),r=this.fields,i=e.source.root,o=t.as||r;t.field?i.sum(t.field):i.count(),t.sort&&i.sort(Ma(t.sort,(t=>t.data))),function(t,e,n){for(let r,i=0,o=e.length;ifunction(t,e,n){const r=t.data,i=e.length-1;for(let o=0;o(t=(qD*t+PD)%jD)/jD}();return i.x=e/2,i.y=n/2,t?i.eachBefore(nC(t)).eachAfter(rC(r,.5,o)).eachBefore(iC(1)):i.eachBefore(nC(eC)).eachAfter(rC(UD,1,o)).eachAfter(rC(r,i.r/Math.min(e,n),o)).eachBefore(iC(Math.min(e,n)/(2*i.r))),i}return i.radius=function(e){return arguments.length?(t=OD(e),i):t},i.size=function(t){return arguments.length?(e=+t[0],n=+t[1],i):[e,n]},i.padding=function(t){return arguments.length?(r="function"==typeof t?t:LD(+t),i):r},i},params:["radius","size","padding"],fields:TC});const NC=["x0","y0","x1","y1","depth","children"];function zC(t){SC.call(this,t)}function OC(t){Qa.call(this,null,t)}zC.Definition={type:"Partition",metadata:{tree:!0,modifies:!0},params:[{name:"field",type:"field"},{name:"sort",type:"compare"},{name:"padding",type:"number",default:0},{name:"round",type:"boolean",default:!1},{name:"size",type:"number",array:!0,length:2},{name:"as",type:"string",array:!0,length:NC.length,default:NC}]},dt(zC,SC,{layout:function(){var t=1,e=1,n=0,r=!1;function i(i){var o=i.height+1;return i.x0=i.y0=n,i.x1=t,i.y1=e/o,i.eachBefore(function(t,e){return function(r){r.children&&aC(r,r.x0,t*(r.depth+1)/e,r.x1,t*(r.depth+2)/e);var i=r.x0,o=r.y0,a=r.x1-n,u=r.y1-n;a=0;--i)u.push(n=e.children[i]=new xC(r[i],i)),n.parent=e;return(a.parent=new xC(null,0)).children=[a],a}(i);if(s.eachAfter(o),s.parent.m=-s.z,s.eachBefore(a),r)i.eachBefore(u);else{var l=i,c=i,f=i;i.eachBefore((function(t){t.xc.x&&(c=t),t.depth>f.depth&&(f=t)}));var h=l===c?1:t(l,c)/2,d=h-l.x,p=e/(c.x+h+d),g=n/(f.depth||1);i.eachBefore((function(t){t.x=(t.x+d)*p,t.y=t.depth*g}))}return i}function o(e){var n=e.children,r=e.parent.children,i=e.i?r[e.i-1]:null;if(n){!function(t){for(var e,n=0,r=0,i=t.children,o=i.length;--o>=0;)(e=i[o]).z+=n,e.m+=n,n+=e.s+(r+=e.c)}(e);var o=(n[0].z+n[n.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-o):e.z=o}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,n,r){if(n){for(var i,o=e,a=e,u=n,s=o.parent.children[0],l=o.m,c=a.m,f=u.m,h=s.m;u=yC(u),o=mC(o),u&&o;)s=mC(s),(a=yC(a)).a=e,(i=u.z+f-o.z-l+t(u._,o._))>0&&(vC(_C(u,e,r),e,i),l+=i,c+=i),f+=u.m,l+=o.m,h+=s.m,c+=a.m;u&&!yC(a)&&(a.t=u,a.m+=f-c),o&&!mC(s)&&(s.t=o,s.m+=l-h,r=e)}return r}(e,i,e.parent.A||r[0])}function a(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function u(t){t.x*=e,t.y=t.depth*n}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i},cluster:function(){var t=ED,e=1,n=1,r=!1;function i(i){var o,a=0;i.eachAfter((function(e){var n=e.children;n?(e.x=function(t){return t.reduce(DD,0)/t.length}(n),e.y=function(t){return 1+t.reduce(CD,0)}(n)):(e.x=o?a+=t(e,o):0,e.y=0,o=e)}));var u=function(t){for(var e;e=t.children;)t=e[0];return t}(i),s=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(i),l=u.x-t(u,s)/2,c=s.x+t(s,u)/2;return i.eachAfter(r?function(t){t.x=(t.x-i.x)*e,t.y=(i.y-t.y)*n}:function(t){t.x=(t.x-l)/(c-l)*e,t.y=(1-(i.y?t.y/i.y:1))*n})}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i}},UC=["x","y","depth","children"];function LC(t){SC.call(this,t)}function qC(t){Qa.call(this,[],t)}LC.Definition={type:"Tree",metadata:{tree:!0,modifies:!0},params:[{name:"field",type:"field"},{name:"sort",type:"compare"},{name:"method",type:"enum",default:"tidy",values:["tidy","cluster"]},{name:"size",type:"number",array:!0,length:2},{name:"nodeSize",type:"number",array:!0,length:2},{name:"separation",type:"boolean",default:!0},{name:"as",type:"string",array:!0,length:UC.length,default:UC}]},dt(LC,SC,{layout(t){const e=t||"tidy";if(lt(RC,e))return RC[e]();u("Unrecognized Tree layout method: "+e)},params:["size","nodeSize"],fields:UC}),qC.Definition={type:"TreeLinks",metadata:{tree:!0,generates:!0,changes:!0},params:[]},dt(qC,Qa,{transform(t,e){const n=this.value,r=e.source&&e.source.root,i=e.fork(e.NO_SOURCE),o={};return r||u("TreeLinks transform requires a tree data source."),e.changed(e.ADD_REM)?(i.rem=n,e.visit(e.SOURCE,(t=>o[_a(t)]=1)),r.each((t=>{const e=t.data,n=t.parent&&t.parent.data;n&&o[_a(e)]&&o[_a(n)]&&i.add.push(ba({source:n,target:e}))})),this.value=i.add):e.changed(e.MOD)&&(e.visit(e.MOD,(t=>o[_a(t)]=1)),n.forEach((t=>{(o[_a(t.source)]||o[_a(t.target)])&&i.mod.push(t)}))),i}});const PC={binary:function(t,e,n,r,i){var o,a,u=t.children,s=u.length,l=new Array(s+1);for(l[0]=a=o=0;o=n-1){var c=u[e];return c.x0=i,c.y0=o,c.x1=a,void(c.y1=s)}var f=l[e],h=r/2+f,d=e+1,p=n-1;for(;d>>1;l[g]s-o){var v=r?(i*y+a*m)/r:a;t(e,d,m,i,o,v,s),t(d,n,y,v,o,a,s)}else{var _=r?(o*y+s*m)/r:s;t(e,d,m,i,o,a,_),t(d,n,y,i,_,a,s)}}(0,s,t.value,e,n,r,i)},dice:aC,slice:bC,slicedice:function(t,e,n,r,i){(1&t.depth?bC:aC)(t,e,n,r,i)},squarify:AC,resquarify:MC},jC=["x0","y0","x1","y1","depth","children"];function IC(t){SC.call(this,t)}IC.Definition={type:"Treemap",metadata:{tree:!0,modifies:!0},params:[{name:"field",type:"field"},{name:"sort",type:"compare"},{name:"method",type:"enum",default:"squarify",values:["squarify","resquarify","binary","dice","slice","slicedice"]},{name:"padding",type:"number",default:0},{name:"paddingInner",type:"number",default:0},{name:"paddingOuter",type:"number",default:0},{name:"paddingTop",type:"number",default:0},{name:"paddingRight",type:"number",default:0},{name:"paddingBottom",type:"number",default:0},{name:"paddingLeft",type:"number",default:0},{name:"ratio",type:"number",default:1.618033988749895},{name:"round",type:"boolean",default:!1},{name:"size",type:"number",array:!0,length:2},{name:"as",type:"string",array:!0,length:jC.length,default:jC}]},dt(IC,SC,{layout(){const t=function(){var t=AC,e=!1,n=1,r=1,i=[0],o=UD,a=UD,u=UD,s=UD,l=UD;function c(t){return t.x0=t.y0=0,t.x1=n,t.y1=r,t.eachBefore(f),i=[0],e&&t.eachBefore(oC),t}function f(e){var n=i[e.depth],r=e.x0+n,c=e.y0+n,f=e.x1-n,h=e.y1-n;f{const n=t.tile();n.ratio&&t.tile(n.ratio(e))},t.method=e=>{lt(PC,e)?t.tile(PC[e]):u("Unrecognized Treemap layout method: "+e)},t},params:["method","ratio","size","round","padding","paddingInner","paddingOuter","paddingTop","paddingRight","paddingBottom","paddingLeft"],fields:jC});var WC=Object.freeze({__proto__:null,nest:DC,pack:BC,partition:zC,stratify:OC,tree:LC,treelinks:qC,treemap:IC});const HC=4278190080;function YC(t,e,n){return new Uint32Array(t.getImageData(0,0,e,n).data.buffer)}function GC(t,e,n){if(!e.length)return;const r=e[0].mark.marktype;"group"===r?e.forEach((e=>{e.items.forEach((e=>GC(t,e.items,n)))})):jy[r].draw(t,{items:n?e.map(VC):e})}function VC(t){const e=ka(t,{});return e.stroke&&0!==e.strokeOpacity||e.fill&&0!==e.fillOpacity?{...e,strokeOpacity:1,stroke:"#000",fillOpacity:0}:e}const XC=5,JC=31,ZC=32,QC=new Uint32Array(ZC+1),KC=new Uint32Array(ZC+1);KC[0]=0,QC[0]=~KC[0];for(let t=1;t<=ZC;++t)KC[t]=KC[t-1]<<1|1,QC[t]=~KC[t];function tF(t,e,n){const r=Math.max(1,Math.sqrt(t*e/1e6)),i=~~((t+2*n+r)/r),o=~~((e+2*n+r)/r),a=t=>~~((t+n)/r);return a.invert=t=>t*r-n,a.bitmap=()=>function(t,e){const n=new Uint32Array(~~((t*e+ZC)/ZC));function r(t,e){n[t]|=e}function i(t,e){n[t]&=e}return{array:n,get:(e,r)=>{const i=r*t+e;return n[i>>>XC]&1<<(i&JC)},set:(e,n)=>{const i=n*t+e;r(i>>>XC,1<<(i&JC))},clear:(e,n)=>{const r=n*t+e;i(r>>>XC,~(1<<(r&JC)))},getRange:(e,r,i,o)=>{let a,u,s,l,c=o;for(;c>=r;--c)if(a=c*t+e,u=c*t+i,s=a>>>XC,l=u>>>XC,s===l){if(n[s]&QC[a&JC]&KC[1+(u&JC)])return!0}else{if(n[s]&QC[a&JC])return!0;if(n[l]&KC[1+(u&JC)])return!0;for(let t=s+1;t{let a,u,s,l,c;for(;n<=o;++n)if(a=n*t+e,u=n*t+i,s=a>>>XC,l=u>>>XC,s===l)r(s,QC[a&JC]&KC[1+(u&JC)]);else for(r(s,QC[a&JC]),r(l,KC[1+(u&JC)]),c=s+1;c{let a,u,s,l,c;for(;n<=o;++n)if(a=n*t+e,u=n*t+r,s=a>>>XC,l=u>>>XC,s===l)i(s,KC[a&JC]|QC[1+(u&JC)]);else for(i(s,KC[a&JC]),i(l,QC[1+(u&JC)]),c=s+1;cn<0||r<0||o>=e||i>=t}}(i,o),a.ratio=r,a.padding=n,a.width=t,a.height=e,a}function eF(t,e,n,r,i,o){let a=n/2;return t-a<0||t+a>i||e-(a=r/2)<0||e+a>o}function nF(t,e,n,r,i,o,a,u){const s=i*o/(2*r),l=t(e-s),c=t(e+s),f=t(n-(o/=2)),h=t(n+o);return a.outOfBounds(l,f,c,h)||a.getRange(l,f,c,h)||u&&u.getRange(l,f,c,h)}const rF=[-1,-1,1,1],iF=[-1,1,-1,1];const oF=["right","center","left"],aF=["bottom","middle","top"];function uF(t,e,n,r,i,o,a,u,s,l,c,f){return!(i.outOfBounds(t,n,e,r)||(f&&o||i).getRange(t,n,e,r))}const sF={"top-left":0,top:1,"top-right":2,left:4,middle:5,right:6,"bottom-left":8,bottom:9,"bottom-right":10},lF={naive:function(t,e,n,r){const i=t.width,o=t.height;return function(t){const e=t.datum.datum.items[r].items,n=e.length,a=t.datum.fontSize,u=wy.width(t.datum,t.datum.text);let s,l,c,f,h,d,p,g=0;for(let r=0;r=g&&(g=p,t.x=h,t.y=d);return h=u/2,d=a/2,s=t.x-h,l=t.x+h,c=t.y-d,f=t.y+d,t.align="center",s<0&&l<=i?t.align="left":0<=s&&i=1;)h=(d+p)/2,nF(t,c,f,l,s,h,a,u)?p=h:d=h;if(d>r)return[c,f,d,!0]}}return function(e){const u=e.datum.datum.items[r].items,l=u.length,c=e.datum.fontSize,f=wy.width(e.datum,e.datum.text);let h,d,p,g,m,y,v,_,x,b,w,k,A,M,E,D,C,F=n?c:0,S=!1,$=!1,T=0;for(let r=0;rd&&(C=h,h=d,d=C),p>g&&(C=p,p=g,g=C),x=t(h),w=t(d),b=~~((x+w)/2),k=t(p),M=t(g),A=~~((k+M)/2),v=b;v>=x;--v)for(_=A;_>=k;--_)D=s(v,_,F,f,c),D&&([e.x,e.y,F,S]=D);for(v=b;v<=w;++v)for(_=A;_<=M;++_)D=s(v,_,F,f,c),D&&([e.x,e.y,F,S]=D);S||n||(E=Math.abs(d-h+g-p),m=(h+d)/2,y=(p+g)/2,E>=T&&!eF(m,y,f,c,i,o)&&!nF(t,m,y,c,f,c,a,null)&&(T=E,e.x=m,e.y=y,$=!0))}return!(!S&&!$)&&(m=f/2,y=c/2,a.setRange(t(e.x-m),t(e.y-y),t(e.x+m),t(e.y+y)),e.align="center",e.baseline="middle",!0)}},floodfill:function(t,e,n,r){const i=t.width,o=t.height,a=e[0],u=e[1],s=t.bitmap();return function(e){const l=e.datum.datum.items[r].items,c=l.length,f=e.datum.fontSize,h=wy.width(e.datum,e.datum.text),d=[];let p,g,m,y,v,_,x,b,w,k,A,M,E=n?f:0,D=!1,C=!1,F=0;for(let r=0;r=1;)A=(w+k)/2,nF(t,v,_,f,h,A,a,u)?k=A:w=A;w>E&&(e.x=v,e.y=_,E=w,D=!0)}}D||n||(M=Math.abs(g-p+y-m),v=(p+g)/2,_=(m+y)/2,M>=F&&!eF(v,_,h,f,i,o)&&!nF(t,v,_,f,h,f,a,null)&&(F=M,e.x=v,e.y=_,C=!0))}return!(!D&&!C)&&(v=h/2,_=f/2,a.setRange(t(e.x-v),t(e.y-_),t(e.x+v),t(e.y+_)),e.align="center",e.baseline="middle",!0)}}};function cF(t,e,n,r,i,o,a,u,s,l,c){if(!t.length)return t;const f=Math.max(r.length,i.length),h=function(t,e){const n=new Float64Array(e),r=t.length;for(let e=0;e[t.x,t.x,t.x,t.y,t.y,t.y];return t?"line"===t||"area"===t?t=>i(t.datum):"line"===e?t=>{const e=t.datum.items[r].items;return i(e.length?e["start"===n?0:e.length-1]:{x:NaN,y:NaN})}:t=>{const e=t.datum.bounds;return[e.x1,(e.x1+e.x2)/2,e.x2,e.y1,(e.y1+e.y2)/2,e.y2]}:i}(p,g,u,s),v=null===l||l===1/0,_=m&&"naive"===c;var x;let b=-1,w=-1;const k=t.map((t=>{const e=v?wy.width(t,t.text):void 0;return b=Math.max(b,e),w=Math.max(w,t.fontSize),{datum:t,opacity:0,x:void 0,y:void 0,align:void 0,baseline:void 0,boundary:y(t),textWidth:e}}));l=null===l||l===1/0?Math.max(b,w)+Math.max(...r):l;const A=tF(e[0],e[1],l);let M;if(!_){n&&k.sort(((t,e)=>n(t.datum,e.datum)));let e=!1;for(let t=0;tt.datum));M=o.length||r?function(t,e,n,r,i){const o=t.width,a=t.height,u=r||i,s=Rc(o,a).getContext("2d"),l=Rc(o,a).getContext("2d"),c=u&&Rc(o,a).getContext("2d");n.forEach((t=>GC(s,t,!1))),GC(l,e,!1),u&&GC(c,e,!0);const f=YC(s,o,a),h=YC(l,o,a),d=u&&YC(c,o,a),p=t.bitmap(),g=u&&t.bitmap();let m,y,v,_,x,b,w,k;for(y=0;yn.set(t(e.boundary[0]),t(e.boundary[3])))),[n,void 0]}(A,a&&k)}const E=m?lF[c](A,M,a,s):function(t,e,n,r){const i=t.width,o=t.height,a=e[0],u=e[1],s=r.length;return function(e){const l=e.boundary,c=e.datum.fontSize;if(l[2]<0||l[5]<0||l[0]>i||l[3]>o)return!1;let f,h,d,p,g,m,y,v,_,x,b,w,k,A,M,E=e.textWidth??0;for(let i=0;i>>2&3)-1,d=0===f&&0===h||r[i]<0,p=f&&h?Math.SQRT1_2:1,g=r[i]<0?-1:1,m=l[1+f]+r[i]*f*p,b=l[4+h]+g*c*h/2+r[i]*h*p,v=b-c/2,_=b+c/2,w=t(m),A=t(v),M=t(_),!E){if(!uF(w,w,A,M,a,u,0,0,0,0,0,d))continue;E=wy.width(e.datum,e.datum.text)}if(x=m+g*E*f/2,m=x-E/2,y=x+E/2,w=t(m),k=t(y),uF(w,k,A,M,a,u,0,0,0,0,0,d))return e.x=f?f*g<0?y:m:x,e.y=h?h*g<0?_:v:b,e.align=oF[f*g+1],e.baseline=aF[h*g+1],a.setRange(w,A,k,M),!0}return!1}}(A,M,d,h);return k.forEach((t=>t.opacity=+E(t))),k}const fF=["x","y","opacity","align","baseline"],hF=["top-left","left","bottom-left","top","bottom","top-right","right","bottom-right"];function dF(t){Qa.call(this,null,t)}dF.Definition={type:"Label",metadata:{modifies:!0},params:[{name:"size",type:"number",array:!0,length:2,required:!0},{name:"sort",type:"compare"},{name:"anchor",type:"string",array:!0,default:hF},{name:"offset",type:"number",array:!0,default:[1]},{name:"padding",type:"number",default:0,null:!0},{name:"lineAnchor",type:"string",values:["start","end"],default:"end"},{name:"markIndex",type:"number",default:0},{name:"avoidBaseMark",type:"boolean",default:!0},{name:"avoidMarks",type:"data",array:!0},{name:"method",type:"string",default:"naive"},{name:"as",type:"string",array:!0,length:fF.length,default:fF}]},dt(dF,Qa,{transform(t,e){const n=t.modified();if(!(n||e.changed(e.ADD_REM)||function(n){const r=t[n];return J(r)&&e.modified(r.fields)}("sort")))return;t.size&&2===t.size.length||u("Size parameter should be specified as a [width, height] array.");const r=t.as||fF;return cF(e.materialize(e.SOURCE).source||[],t.size,t.sort,V(null==t.offset?1:t.offset),V(t.anchor||hF),t.avoidMarks||[],!1!==t.avoidBaseMark,t.lineAnchor||"end",t.markIndex||0,void 0===t.padding?0:t.padding,t.method||"naive").forEach((t=>{const e=t.datum;e[r[0]]=t.x,e[r[1]]=t.y,e[r[2]]=t.opacity,e[r[3]]=t.align,e[r[4]]=t.baseline})),e.reflow(n).modifies(r)}});var pF=Object.freeze({__proto__:null,label:dF});function gF(t,e){var n,r,i,o,a,u,s=[],l=function(t){return t(o)};if(null==e)s.push(t);else for(n={},r=0,i=t.length;r{Iu(e,t.x,t.y,t.bandwidth||.3).forEach((t=>{const n={};for(let t=0;t"poly"===t?e:"quad"===t?2:1)(a,s),c=t.as||[n(t.x),n(t.y)],f=yF[a],h=[];let d=t.extent;lt(yF,a)||u("Invalid regression method: "+a),null!=d&&"log"===a&&d[0]<=0&&(e.dataflow.warn("Ignoring extent with values <= 0 for log regression."),d=null),i.forEach((n=>{if(n.length<=l)return void e.dataflow.warn("Skipping regression with more parameters than data points.");const r=f(n,t.x,t.y,s);if(t.params)return void h.push(ba({keys:n.dims,coef:r.coef,rSquared:r.rSquared}));const i=d||at(n,t.x),u=t=>{const e={};for(let t=0;tu([t,r.predict(t)]))):Gu(r.predict,i,25,200).forEach(u)})),this.value&&(r.rem=this.value),this.value=r.add=r.source=h}return r}});var _F=Object.freeze({__proto__:null,loess:mF,regression:vF});const xF=134217729,bF=33306690738754706e-32;function wF(t,e,n,r,i){let o,a,u,s,l=e[0],c=r[0],f=0,h=0;c>l==c>-l?(o=l,l=e[++f]):(o=c,c=r[++h]);let d=0;if(fl==c>-l?(a=l+o,u=o-(a-l),l=e[++f]):(a=c+o,u=o-(a-c),c=r[++h]),o=a,0!==u&&(i[d++]=u);fl==c>-l?(a=o+l,s=a-o,u=o-(a-s)+(l-s),l=e[++f]):(a=o+c,s=a-o,u=o-(a-s)+(c-s),c=r[++h]),o=a,0!==u&&(i[d++]=u);for(;f0!=u>0)return s;const l=Math.abs(a+u);return Math.abs(s)>=AF*l?s:-function(t,e,n,r,i,o,a){let u,s,l,c,f,h,d,p,g,m,y,v,_,x,b,w,k,A;const M=t-i,E=n-i,D=e-o,C=r-o;x=M*C,h=xF*M,d=h-(h-M),p=M-d,h=xF*C,g=h-(h-C),m=C-g,b=p*m-(x-d*g-p*g-d*m),w=D*E,h=xF*D,d=h-(h-D),p=D-d,h=xF*E,g=h-(h-E),m=E-g,k=p*m-(w-d*g-p*g-d*m),y=b-k,f=b-y,DF[0]=b-(y+f)+(f-k),v=x+y,f=v-x,_=x-(v-f)+(y-f),y=_-w,f=_-y,DF[1]=_-(y+f)+(f-w),A=v+y,f=A-v,DF[2]=v-(A-f)+(y-f),DF[3]=A;let F=function(t,e){let n=e[0];for(let r=1;r=S||-F>=S)return F;if(f=t-M,u=t-(M+f)+(f-i),f=n-E,l=n-(E+f)+(f-i),f=e-D,s=e-(D+f)+(f-o),f=r-C,c=r-(C+f)+(f-o),0===u&&0===s&&0===l&&0===c)return F;if(S=EF*a+bF*Math.abs(F),F+=M*c+C*u-(D*l+E*s),F>=S||-F>=S)return F;x=u*C,h=xF*u,d=h-(h-u),p=u-d,h=xF*C,g=h-(h-C),m=C-g,b=p*m-(x-d*g-p*g-d*m),w=s*E,h=xF*s,d=h-(h-s),p=s-d,h=xF*E,g=h-(h-E),m=E-g,k=p*m-(w-d*g-p*g-d*m),y=b-k,f=b-y,$F[0]=b-(y+f)+(f-k),v=x+y,f=v-x,_=x-(v-f)+(y-f),y=_-w,f=_-y,$F[1]=_-(y+f)+(f-w),A=v+y,f=A-v,$F[2]=v-(A-f)+(y-f),$F[3]=A;const $=wF(4,DF,4,$F,CF);x=M*c,h=xF*M,d=h-(h-M),p=M-d,h=xF*c,g=h-(h-c),m=c-g,b=p*m-(x-d*g-p*g-d*m),w=D*l,h=xF*D,d=h-(h-D),p=D-d,h=xF*l,g=h-(h-l),m=l-g,k=p*m-(w-d*g-p*g-d*m),y=b-k,f=b-y,$F[0]=b-(y+f)+(f-k),v=x+y,f=v-x,_=x-(v-f)+(y-f),y=_-w,f=_-y,$F[1]=_-(y+f)+(f-w),A=v+y,f=A-v,$F[2]=v-(A-f)+(y-f),$F[3]=A;const T=wF($,CF,4,$F,FF);x=u*c,h=xF*u,d=h-(h-u),p=u-d,h=xF*c,g=h-(h-c),m=c-g,b=p*m-(x-d*g-p*g-d*m),w=s*l,h=xF*s,d=h-(h-s),p=s-d,h=xF*l,g=h-(h-l),m=l-g,k=p*m-(w-d*g-p*g-d*m),y=b-k,f=b-y,$F[0]=b-(y+f)+(f-k),v=x+y,f=v-x,_=x-(v-f)+(y-f),y=_-w,f=_-y,$F[1]=_-(y+f)+(f-w),A=v+y,f=A-v,$F[2]=v-(A-f)+(y-f),$F[3]=A;const B=wF(T,FF,4,$F,SF);return SF[B-1]}(t,e,n,r,i,o,l)}const BF=Math.pow(2,-52),NF=new Uint32Array(512);class zF{static from(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:PF,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:jF;const r=t.length,i=new Float64Array(2*r);for(let o=0;o>1;if(e>0&&"number"!=typeof t[0])throw new Error("Expected coords to contain numbers.");this.coords=t;const n=Math.max(2*e-5,0);this._triangles=new Uint32Array(3*n),this._halfedges=new Int32Array(3*n),this._hashSize=Math.ceil(Math.sqrt(e)),this._hullPrev=new Uint32Array(e),this._hullNext=new Uint32Array(e),this._hullTri=new Uint32Array(e),this._hullHash=new Int32Array(this._hashSize).fill(-1),this._ids=new Uint32Array(e),this._dists=new Float64Array(e),this.update()}update(){const{coords:t,_hullPrev:e,_hullNext:n,_hullTri:r,_hullHash:i}=this,o=t.length>>1;let a=1/0,u=1/0,s=-1/0,l=-1/0;for(let e=0;es&&(s=n),r>l&&(l=r),this._ids[e]=e}const c=(a+s)/2,f=(u+l)/2;let h,d,p,g=1/0;for(let e=0;e0&&(d=e,g=n)}let v=t[2*d],_=t[2*d+1],x=1/0;for(let e=0;er&&(e[n++]=i,r=this._dists[i])}return this.hull=e.subarray(0,n),this.triangles=new Uint32Array(0),void(this.halfedges=new Uint32Array(0))}if(TF(m,y,v,_,b,w)<0){const t=d,e=v,n=_;d=p,v=b,_=w,p=t,b=e,w=n}const k=function(t,e,n,r,i,o){const a=n-t,u=r-e,s=i-t,l=o-e,c=a*a+u*u,f=s*s+l*l,h=.5/(a*l-u*s),d=t+(l*c-u*f)*h,p=e+(a*f-s*c)*h;return{x:d,y:p}}(m,y,v,_,b,w);this._cx=k.x,this._cy=k.y;for(let e=0;e0&&Math.abs(l-o)<=BF&&Math.abs(c-a)<=BF)continue;if(o=l,a=c,s===h||s===d||s===p)continue;let f=0;for(let t=0,e=this._hashKey(l,c);t=0;)if(m=g,m===f){m=-1;break}if(-1===m)continue;let y=this._addTriangle(m,s,n[m],-1,-1,r[m]);r[s]=this._legalize(y+2),r[m]=y,A++;let v=n[m];for(;g=n[v],TF(l,c,t[2*v],t[2*v+1],t[2*g],t[2*g+1])<0;)y=this._addTriangle(v,s,g,r[s],-1,r[v]),r[s]=this._legalize(y+2),n[v]=v,A--,v=g;if(m===f)for(;g=e[m],TF(l,c,t[2*g],t[2*g+1],t[2*m],t[2*m+1])<0;)y=this._addTriangle(g,s,m,-1,r[m],r[g]),this._legalize(y+2),r[g]=y,n[m]=m,A--,m=g;this._hullStart=e[s]=m,n[m]=e[v]=s,n[s]=v,i[this._hashKey(l,c)]=s,i[this._hashKey(t[2*m],t[2*m+1])]=m}this.hull=new Uint32Array(A);for(let t=0,e=this._hullStart;t0?3-n:1+n)/4}(t-this._cx,e-this._cy)*this._hashSize)%this._hashSize}_legalize(t){const{_triangles:e,_halfedges:n,coords:r}=this;let i=0,o=0;for(;;){const a=n[t],u=t-t%3;if(o=u+(t+2)%3,-1===a){if(0===i)break;t=NF[--i];continue}const s=a-a%3,l=u+(t+1)%3,c=s+(a+2)%3,f=e[o],h=e[t],d=e[l],p=e[c];if(RF(r[2*f],r[2*f+1],r[2*h],r[2*h+1],r[2*d],r[2*d+1],r[2*p],r[2*p+1])){e[t]=p,e[a]=f;const r=n[c];if(-1===r){let e=this._hullStart;do{if(this._hullTri[e]===c){this._hullTri[e]=t;break}e=this._hullPrev[e]}while(e!==this._hullStart)}this._link(t,r),this._link(a,n[o]),this._link(o,c);const u=s+(a+1)%3;i=n&&e[t[a]]>o;)t[a+1]=t[a--];t[a+1]=r}else{let i=n+1,o=r;qF(t,n+r>>1,i),e[t[n]]>e[t[r]]&&qF(t,n,r),e[t[i]]>e[t[r]]&&qF(t,i,r),e[t[n]]>e[t[i]]&&qF(t,n,i);const a=t[i],u=e[a];for(;;){do{i++}while(e[t[i]]u);if(o=o-n?(LF(t,e,i,r),LF(t,e,n,o-1)):(LF(t,e,n,o-1),LF(t,e,i,r))}}function qF(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function PF(t){return t[0]}function jF(t){return t[1]}const IF=1e-6;class WF{constructor(){this._x0=this._y0=this._x1=this._y1=null,this._=""}moveTo(t,e){this._+=`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")}lineTo(t,e){this._+=`L${this._x1=+t},${this._y1=+e}`}arc(t,e,n){const r=(t=+t)+(n=+n),i=e=+e;if(n<0)throw new Error("negative radius");null===this._x1?this._+=`M${r},${i}`:(Math.abs(this._x1-r)>IF||Math.abs(this._y1-i)>IF)&&(this._+="L"+r+","+i),n&&(this._+=`A${n},${n},0,1,1,${t-n},${e}A${n},${n},0,1,1,${this._x1=r},${this._y1=i}`)}rect(t,e,n,r){this._+=`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${+n}v${+r}h${-n}Z`}value(){return this._||null}}class HF{constructor(){this._=[]}moveTo(t,e){this._.push([t,e])}closePath(){this._.push(this._[0].slice())}lineTo(t,e){this._.push([t,e])}value(){return this._.length?this._:null}}const YF=2*Math.PI,GF=Math.pow;function VF(t){return t[0]}function XF(t){return t[1]}function JF(t,e,n){return[t+Math.sin(t+e)*n,e+Math.cos(t-e)*n]}class ZF{static from(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:VF,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:XF,r=arguments.length>3?arguments[3]:void 0;return new ZF("length"in t?function(t,e,n,r){const i=t.length,o=new Float64Array(2*i);for(let a=0;a2&&function(t){const{triangles:e,coords:n}=t;for(let t=0;t1e-10)return!1}return!0}(t)){this.collinear=Int32Array.from({length:e.length/2},((t,e)=>e)).sort(((t,n)=>e[2*t]-e[2*n]||e[2*t+1]-e[2*n+1]));const t=this.collinear[0],n=this.collinear[this.collinear.length-1],r=[e[2*t],e[2*t+1],e[2*n],e[2*n+1]],i=1e-8*Math.hypot(r[3]-r[1],r[2]-r[0]);for(let t=0,n=e.length/2;t0&&(this.triangles=new Int32Array(3).fill(-1),this.halfedges=new Int32Array(3).fill(-1),this.triangles[0]=r[0],o[r[0]]=1,2===r.length&&(o[r[1]]=0,this.triangles[1]=r[1],this.triangles[2]=r[1]))}voronoi(t){return new class{constructor(t){let[e,n,r,i]=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,0,960,500];if(!((r=+r)>=(e=+e)&&(i=+i)>=(n=+n)))throw new Error("invalid bounds");this.delaunay=t,this._circumcenters=new Float64Array(2*t.points.length),this.vectors=new Float64Array(2*t.points.length),this.xmax=r,this.xmin=e,this.ymax=i,this.ymin=n,this._init()}update(){return this.delaunay.update(),this._init(),this}_init(){const{delaunay:{points:t,hull:e,triangles:n},vectors:r}=this;let i,o;const a=this.circumcenters=this._circumcenters.subarray(0,n.length/3*2);for(let r,u,s=0,l=0,c=n.length;s1;)i-=2;for(let t=2;t0){if(e>=this.ymax)return null;(i=(this.ymax-e)/r)0){if(t>=this.xmax)return null;(i=(this.xmax-t)/n)this.xmax?2:0)|(ethis.ymax?8:0)}_simplify(t){if(t&&t.length>4){for(let e=0;e0&&(yield a[e-1]),void(e2&&void 0!==arguments[2]?arguments[2]:0;if((t=+t)!=t||(e=+e)!=e)return-1;const r=n;let i;for(;(i=this._step(n,t,e))>=0&&i!==n&&i!==r;)n=i;return i}_step(t,e,n){const{inedges:r,hull:i,_hullIndex:o,halfedges:a,triangles:u,points:s}=this;if(-1===r[t]||!s.length)return(t+1)%(s.length>>1);let l=t,c=GF(e-s[2*t],2)+GF(n-s[2*t+1],2);const f=r[t];let h=f;do{let r=u[h];const f=GF(e-s[2*r],2)+GF(n-s[2*r+1],2);if(f=f));)if(e.x=a+i,e.y=l+o,!(e.x+e.x0<0||e.y+e.y0<0||e.x+e.x1>u[0]||e.y+e.y1>u[1])&&(!n||!uS(e,t,u[0]))&&(!n||lS(e,n))){for(var g,m=e.sprite,y=e.width>>5,v=u[0]>>5,_=e.x-(y<<4),x=127&_,b=32-x,w=e.y1-e.y0,k=(e.y+e.y0)*v+(_>>5),A=0;A>>x:0);k+=v}return e.sprite=null,!0}return!1}return f.layout=function(){for(var s=function(t){t.width=t.height=1;var e=Math.sqrt(t.getContext("2d").getImageData(0,0,1,1).data.length>>2);t.width=(rS<<5)/e,t.height=iS/e;var n=t.getContext("2d");return n.fillStyle=n.strokeStyle="red",n.textAlign="center",{context:n,ratio:e}}(Rc()),f=function(t){var e=[],n=-1;for(;++n>5)*u[1]),d=null,p=l.length,g=-1,m=[],y=l.map((u=>({text:t(u),font:e(u),style:r(u),weight:i(u),rotate:o(u),size:~~(n(u)+1e-14),padding:a(u),xoff:0,yoff:0,x1:0,y1:0,x0:0,y0:0,hasText:!1,sprite:null,datum:u}))).sort(((t,e)=>e.size-t.size));++g>1,v.y=u[1]*(c()+.5)>>1,aS(s,v,y,g),v.hasText&&h(f,v,d)&&(m.push(v),d?sS(d,v):d=[{x:v.x+v.x0,y:v.y+v.y0},{x:v.x+v.x1,y:v.y+v.y1}],v.x-=u[0]>>1,v.y-=u[1]>>1)}return m},f.words=function(t){return arguments.length?(l=t,f):l},f.size=function(t){return arguments.length?(u=[+t[0],+t[1]],f):u},f.font=function(t){return arguments.length?(e=fS(t),f):e},f.fontStyle=function(t){return arguments.length?(r=fS(t),f):r},f.fontWeight=function(t){return arguments.length?(i=fS(t),f):i},f.rotate=function(t){return arguments.length?(o=fS(t),f):o},f.text=function(e){return arguments.length?(t=fS(e),f):t},f.spiral=function(t){return arguments.length?(s=hS[t]||t,f):s},f.fontSize=function(t){return arguments.length?(n=fS(t),f):n},f.padding=function(t){return arguments.length?(a=fS(t),f):a},f.random=function(t){return arguments.length?(c=t,f):c},f}function aS(t,e,n,r){if(!e.sprite){var i=t.context,o=t.ratio;i.clearRect(0,0,(rS<<5)/o,iS/o);var a,u,s,l,c,f=0,h=0,d=0,p=n.length;for(--r;++r>5<<5,s=~~Math.max(Math.abs(v+_),Math.abs(v-_))}else a=a+31>>5<<5;if(s>d&&(d=s),f+a>=rS<<5&&(f=0,h+=d,d=0),h+s>=iS)break;i.translate((f+(a>>1))/o,(h+(s>>1))/o),e.rotate&&i.rotate(e.rotate*nS),i.fillText(e.text,0,0),e.padding&&(i.lineWidth=2*e.padding,i.strokeText(e.text,0,0)),i.restore(),e.width=a,e.height=s,e.xoff=f,e.yoff=h,e.x1=a>>1,e.y1=s>>1,e.x0=-e.x1,e.y0=-e.y1,e.hasText=!0,f+=a}for(var b=i.getImageData(0,0,(rS<<5)/o,iS/o).data,w=[];--r>=0;)if((e=n[r]).hasText){for(u=(a=e.width)>>5,s=e.y1-e.y0,l=0;l>5),E=b[(h+c)*(rS<<5)+(f+l)<<2]?1<<31-l%32:0;w[M]|=E,k|=E}k?A=c:(e.y0++,s--,c--,h++)}e.y1=e.y0+A,e.sprite=w.slice(0,(e.y1-e.y0)*u)}}}function uS(t,e,n){n>>=5;for(var r,i=t.sprite,o=t.width>>5,a=t.x-(o<<4),u=127&a,s=32-u,l=t.y1-t.y0,c=(t.y+t.y0)*n+(a>>5),f=0;f>>u:0))&e[c+h])return!0;c+=n}return!1}function sS(t,e){var n=t[0],r=t[1];e.x+e.x0r.x&&(r.x=e.x+e.x1),e.y+e.y1>r.y&&(r.y=e.y+e.y1)}function lS(t,e){return t.x+t.x1>e[0].x&&t.x+t.x0e[0].y&&t.y+t.y0e(t(n))}i.forEach((t=>{t[a[0]]=NaN,t[a[1]]=NaN,t[a[3]]=0}));const c=o.words(i).text(e.text).size(e.size||[500,500]).padding(e.padding||1).spiral(e.spiral||"archimedean").rotate(e.rotate||0).font(e.font||"sans-serif").fontStyle(e.fontStyle||"normal").fontWeight(e.fontWeight||"normal").fontSize(l).random(t.random).layout(),f=o.size(),h=f[0]>>1,d=f[1]>>1,p=c.length;for(let t,e,n=0;nnew Uint8Array(t),vS=t=>new Uint16Array(t),_S=t=>new Uint32Array(t);function xS(t,e,n){const r=(e<257?yS:e<65537?vS:_S)(t);return n&&r.set(n),r}function bS(t,e,n){const r=1<{const r=t[e],i=t[n];return ri?1:0})),function(t,e){return Array.from(e,(e=>t[e]))}(t,e)}(h,s),a)l=e,c=t,e=Array(a+u),t=_S(a+u),function(t,e,n,r,i,o,a,u,s){let l,c=0,f=0;for(l=0;c0)for(f=0;ft,size:()=>n}}function kS(t){Qa.call(this,function(){let t=8,e=[],n=_S(0),r=xS(0,t),i=xS(0,t);return{data:()=>e,seen:()=>n=function(t,e,n){return t.length>=e?t:((n=n||new t.constructor(e)).set(t),n)}(n,e.length),add(t){for(let n,r=0,i=e.length,o=t.length;re.length,curr:()=>r,prev:()=>i,reset:t=>i[t]=r[t],all:()=>t<257?255:t<65537?65535:4294967295,set(t,e){r[t]|=e},clear(t,e){r[t]&=~e},resize(e,n){(e>r.length||n>t)&&(t=Math.max(n,t),r=xS(e,t,r),i=xS(e,t))}}}(),t),this._indices=null,this._dims=null}function AS(t){Qa.call(this,null,t)}kS.Definition={type:"CrossFilter",metadata:{},params:[{name:"fields",type:"field",array:!0,required:!0},{name:"query",type:"array",array:!0,required:!0,content:{type:"number",array:!0,length:2}}]},dt(kS,Qa,{transform(t,e){return this._dims?t.modified("fields")||t.fields.some((t=>e.modified(t.fields)))?this.reinit(t,e):this.eval(t,e):this.init(t,e)},init(t,e){const n=t.fields,r=t.query,i=this._indices={},o=this._dims=[],a=r.length;let u,s,l=0;for(;l{const t=i.remove(e,n);for(const e in r)r[e].reindex(t)}))},update(t,e,n){const r=this._dims,i=t.query,o=e.stamp,a=r.length;let u,s,l=0;for(n.filters=0,s=0;sd)for(m=d,y=Math.min(f,p);mp)for(m=Math.max(f,p),y=h;mc)for(d=c,p=Math.min(s,f);df)for(d=Math.max(s,f),p=l;du[t]&n?null:a[t];return o.filter(o.MOD,l),i&i-1?(o.filter(o.ADD,(t=>{const e=u[t]&n;return!e&&e^s[t]&n?a[t]:null})),o.filter(o.REM,(t=>{const e=u[t]&n;return e&&!(e^e^s[t]&n)?a[t]:null}))):(o.filter(o.ADD,l),o.filter(o.REM,(t=>(u[t]&n)===i?a[t]:null))),o.filter(o.SOURCE,(t=>l(t._index)))}});var MS=Object.freeze({__proto__:null,crossfilter:kS,resolvefilter:AS});const ES="Literal",DS="Property",CS="ArrayExpression",FS="BinaryExpression",SS="CallExpression",$S="ConditionalExpression",TS="LogicalExpression",BS="MemberExpression",NS="ObjectExpression",zS="UnaryExpression";function OS(t){this.type=t}var RS,US,LS,qS,PS;OS.prototype.visit=function(t){let e,n,r;if(t(this))return 1;for(e=function(t){switch(t.type){case CS:return t.elements;case FS:case TS:return[t.left,t.right];case SS:return[t.callee].concat(t.arguments);case $S:return[t.test,t.consequent,t.alternate];case BS:return[t.object,t.property];case NS:return t.properties;case DS:return[t.key,t.value];case zS:return[t.argument];default:return[]}}(this),n=0,r=e.length;n",RS[WS]="Identifier",RS[HS]="Keyword",RS[YS]="Null",RS[GS]="Numeric",RS[VS]="Punctuator",RS[XS]="String",RS[9]="RegularExpression";var JS="ArrayExpression",ZS="BinaryExpression",QS="CallExpression",KS="ConditionalExpression",t$="Identifier",e$="Literal",n$="LogicalExpression",r$="MemberExpression",i$="ObjectExpression",o$="Property",a$="UnaryExpression",u$="Unexpected token %0",s$="Unexpected number",l$="Unexpected string",c$="Unexpected identifier",f$="Unexpected reserved word",h$="Unexpected end of input",d$="Invalid regular expression",p$="Invalid regular expression: missing /",g$="Octal literals are not allowed in strict mode.",m$="Duplicate data property in object literal not allowed in strict mode",y$="ILLEGAL",v$="Disabled.",_$=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),x$=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]");function b$(t,e){if(!t)throw new Error("ASSERT: "+e)}function w$(t){return t>=48&&t<=57}function k$(t){return"0123456789abcdefABCDEF".indexOf(t)>=0}function A$(t){return"01234567".indexOf(t)>=0}function M$(t){return 32===t||9===t||11===t||12===t||160===t||t>=5760&&[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(t)>=0}function E$(t){return 10===t||13===t||8232===t||8233===t}function D$(t){return 36===t||95===t||t>=65&&t<=90||t>=97&&t<=122||92===t||t>=128&&_$.test(String.fromCharCode(t))}function C$(t){return 36===t||95===t||t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||92===t||t>=128&&x$.test(String.fromCharCode(t))}const F$={if:1,in:1,do:1,var:1,for:1,new:1,try:1,let:1,this:1,else:1,case:1,void:1,with:1,enum:1,while:1,break:1,catch:1,throw:1,const:1,yield:1,class:1,super:1,return:1,typeof:1,delete:1,switch:1,export:1,import:1,public:1,static:1,default:1,finally:1,extends:1,package:1,private:1,function:1,continue:1,debugger:1,interface:1,protected:1,instanceof:1,implements:1};function S$(){for(;LS1114111||"}"!==t)&&G$({},u$,y$),e<=65535?String.fromCharCode(e):(n=55296+(e-65536>>10),r=56320+(e-65536&1023),String.fromCharCode(n,r))}function B$(){var t,e;for(t=US.charCodeAt(LS++),e=String.fromCharCode(t),92===t&&(117!==US.charCodeAt(LS)&&G$({},u$,y$),++LS,(t=$$("u"))&&"\\"!==t&&D$(t.charCodeAt(0))||G$({},u$,y$),e=t);LS>>="===(r=US.substr(LS,4))?{type:VS,value:r,start:i,end:LS+=4}:">>>"===(n=r.substr(0,3))||"<<="===n||">>="===n?{type:VS,value:n,start:i,end:LS+=3}:a===(e=n.substr(0,2))[1]&&"+-<>&|".indexOf(a)>=0||"=>"===e?{type:VS,value:e,start:i,end:LS+=2}:("//"===e&&G$({},u$,y$),"<>=!+-*%&|^/".indexOf(a)>=0?(++LS,{type:VS,value:a,start:i,end:LS}):void G$({},u$,y$))}function O$(){var t,e,n;if(b$(w$((n=US[LS]).charCodeAt(0))||"."===n,"Numeric literal must start with a decimal digit or a decimal point"),e=LS,t="","."!==n){if(t=US[LS++],n=US[LS],"0"===t){if("x"===n||"X"===n)return++LS,function(t){let e="";for(;LS=0&&G$({},d$,n),{value:n,literal:e}}(),r=function(t,e){let n=t;e.indexOf("u")>=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}/g,((t,e)=>{if(parseInt(e,16)<=1114111)return"x";G$({},d$)})).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"x"));try{new RegExp(n)}catch(t){G$({},d$)}try{return new RegExp(t,e)}catch(t){return null}}(e.value,n.value),{literal:e.literal+n.literal,value:r,regex:{pattern:e.value,flags:n.value},start:t,end:LS}}function U$(){if(S$(),LS>=qS)return{type:IS,start:LS,end:LS};const t=US.charCodeAt(LS);return D$(t)?N$():40===t||41===t||59===t?z$():39===t||34===t?function(){var t,e,n,r,i="",o=!1;for(b$("'"===(t=US[LS])||'"'===t,"String literal must starts with a quote"),e=LS,++LS;LS=0&&LS(b$(e":case"<=":case">=":case"instanceof":case"in":e=7;break;case"<<":case">>":case">>>":e=8;break;case"+":case"-":e=9;break;case"*":case"/":case"%":e=11}return e}function cT(){var t,e;return t=function(){var t,e,n,r,i,o,a,u,s,l;if(t=PS,s=sT(),0===(i=lT(r=PS)))return s;for(r.prec=i,L$(),e=[t,PS],o=[s,r,a=sT()];(i=lT(PS))>0;){for(;o.length>2&&i<=o[o.length-2].prec;)a=o.pop(),u=o.pop().value,s=o.pop(),e.pop(),n=P$(u,s,a),o.push(n);(r=L$()).prec=i,o.push(r),e.push(PS),n=sT(),o.push(n)}for(n=o[l=o.length-1],e.pop();l>1;)e.pop(),n=P$(o[l-1].value,o[l-2],n),l-=2;return n}(),J$("?")&&(L$(),e=cT(),X$(":"),t=function(t,e,n){const r=new OS(KS);return r.test=t,r.consequent=e,r.alternate=n,r}(t,e,cT())),t}function fT(){const t=cT();if(J$(","))throw new Error(v$);return t}function hT(t){LS=0,qS=(US=t).length,PS=null,q$();const e=fT();if(PS.type!==IS)throw new Error("Unexpect token after expression.");return e}var dT={NaN:"NaN",E:"Math.E",LN2:"Math.LN2",LN10:"Math.LN10",LOG2E:"Math.LOG2E",LOG10E:"Math.LOG10E",PI:"Math.PI",SQRT1_2:"Math.SQRT1_2",SQRT2:"Math.SQRT2",MIN_VALUE:"Number.MIN_VALUE",MAX_VALUE:"Number.MAX_VALUE"};function pT(t){function e(e,n,r){return i=>function(e,n,r,i){let o=t(n[0]);return r&&(o=r+"("+o+")",0===r.lastIndexOf("new ",0)&&(o="("+o+")")),o+"."+e+(i<0?"":0===i?"()":"("+n.slice(1).map(t).join(",")+")")}(e,i,n,r)}const n="new Date",r="String",i="RegExp";return{isNaN:"Number.isNaN",isFinite:"Number.isFinite",abs:"Math.abs",acos:"Math.acos",asin:"Math.asin",atan:"Math.atan",atan2:"Math.atan2",ceil:"Math.ceil",cos:"Math.cos",exp:"Math.exp",floor:"Math.floor",hypot:"Math.hypot",log:"Math.log",max:"Math.max",min:"Math.min",pow:"Math.pow",random:"Math.random",round:"Math.round",sin:"Math.sin",sqrt:"Math.sqrt",tan:"Math.tan",clamp:function(e){e.length<3&&u("Missing arguments to clamp function."),e.length>3&&u("Too many arguments to clamp function.");const n=e.map(t);return"Math.max("+n[1]+", Math.min("+n[2]+","+n[0]+"))"},now:"Date.now",utc:"Date.UTC",datetime:n,date:e("getDate",n,0),day:e("getDay",n,0),year:e("getFullYear",n,0),month:e("getMonth",n,0),hours:e("getHours",n,0),minutes:e("getMinutes",n,0),seconds:e("getSeconds",n,0),milliseconds:e("getMilliseconds",n,0),time:e("getTime",n,0),timezoneoffset:e("getTimezoneOffset",n,0),utcdate:e("getUTCDate",n,0),utcday:e("getUTCDay",n,0),utcyear:e("getUTCFullYear",n,0),utcmonth:e("getUTCMonth",n,0),utchours:e("getUTCHours",n,0),utcminutes:e("getUTCMinutes",n,0),utcseconds:e("getUTCSeconds",n,0),utcmilliseconds:e("getUTCMilliseconds",n,0),length:e("length",null,-1),parseFloat:"parseFloat",parseInt:"parseInt",upper:e("toUpperCase",r,0),lower:e("toLowerCase",r,0),substring:e("substring",r),split:e("split",r),trim:e("trim",r,0),regexp:i,test:e("test",i),if:function(e){e.length<3&&u("Missing arguments to if function."),e.length>3&&u("Too many arguments to if function.");const n=e.map(t);return"("+n[0]+"?"+n[1]+":"+n[2]+")"}}}function gT(t){const e=(t=t||{}).allowed?Nt(t.allowed):{},n=t.forbidden?Nt(t.forbidden):{},r=t.constants||dT,i=(t.functions||pT)(h),o=t.globalvar,a=t.fieldvar,s=J(o)?o:t=>`${o}["${t}"]`;let l={},c={},f=0;function h(t){if(xt(t))return t;const e=d[t.type];return null==e&&u("Unsupported type: "+t.type),e(t)}const d={Literal:t=>t.raw,Identifier:t=>{const i=t.name;return f>0?i:lt(n,i)?u("Illegal identifier: "+i):lt(r,i)?r[i]:lt(e,i)?i:(l[i]=1,s(i))},MemberExpression:t=>{const e=!t.computed,n=h(t.object);e&&(f+=1);const r=h(t.property);return n===a&&(c[function(t){const e=t&&t.length-1;return e&&('"'===t[0]&&'"'===t[e]||"'"===t[0]&&"'"===t[e])?t.slice(1,-1):t}(r)]=1),e&&(f-=1),n+(e?"."+r:"["+r+"]")},CallExpression:t=>{"Identifier"!==t.callee.type&&u("Illegal callee type: "+t.callee.type);const e=t.callee.name,n=t.arguments,r=lt(i,e)&&i[e];return r||u("Unrecognized function: "+e),J(r)?r(n):r+"("+n.map(h).join(",")+")"},ArrayExpression:t=>"["+t.elements.map(h).join(",")+"]",BinaryExpression:t=>"("+h(t.left)+" "+t.operator+" "+h(t.right)+")",UnaryExpression:t=>"("+t.operator+h(t.argument)+")",ConditionalExpression:t=>"("+h(t.test)+"?"+h(t.consequent)+":"+h(t.alternate)+")",LogicalExpression:t=>"("+h(t.left)+t.operator+h(t.right)+")",ObjectExpression:t=>"{"+t.properties.map(h).join(",")+"}",Property:t=>{f+=1;const e=h(t.key);return f-=1,e+":"+h(t.value)}};function p(t){const e={code:h(t),globals:Object.keys(l),fields:Object.keys(c)};return l={},c={},e}return p.functions=i,p.constants=r,p}const mT="intersect",yT="union",vT="vlMulti",_T="vlPoint",xT="or",bT="and",wT="_vgsid_",kT=l(wT),AT="E",MT="R",ET="R-E",DT="R-LE",CT="R-RE",FT="index:unit";function ST(t,e){for(var n,r,i=e.fields,o=e.values,a=i.length,u=0;u1?e-1:0),r=1;re.indexOf(t)>=0)):e},R_union:function(t,e){var n=S(e[0]),r=S(e[1]);return n>r&&(n=e[1],r=e[0]),t.length?(t[0]>n&&(t[0]=n),t[1]r&&(n=e[1],r=e[0]),t.length?rr&&(t[1]=r),t):[n,r]}};const zT=":",OT="@";function RT(t,e,n,r){e[0].type!==ES&&u("First argument to selection functions must be a string literal.");const i=e[0].value,o=e.length>=2&&F(e).value,a="unit",s=OT+a,l=zT+i;o!==mT||lt(r,s)||(r[s]=n.getData(i).indataRef(n,a)),lt(r,l)||(r[l]=n.getData(i).tuplesRef())}function UT(t){const e=this.context.data[t];return e?e.values.value:[]}const LT=t=>function(e,n){return this.context.dataflow.locale()[t](n)(e)},qT=LT("format"),PT=LT("timeFormat"),jT=LT("utcFormat"),IT=LT("timeParse"),WT=LT("utcParse"),HT=new Date(2e3,0,1);function YT(t,e,n){return Number.isInteger(t)&&Number.isInteger(e)?(HT.setYear(2e3),HT.setMonth(t),HT.setDate(e),PT.call(this,HT,n)):""}const GT=":",VT="@",XT="%",JT="$";function ZT(t,e,n,r){e[0].type!==ES&&u("First argument to data functions must be a string literal.");const i=e[0].value,o=GT+i;if(!lt(o,r))try{r[o]=n.getData(i).tuplesRef()}catch(t){}}function QT(t,e,n,r){if(e[0].type===ES)KT(n,r,e[0].value);else for(t in n.scales)KT(n,r,t)}function KT(t,e,n){const r=XT+n;if(!lt(e,r))try{e[r]=t.scaleRef(n)}catch(t){}}function tB(t,e){if(J(t))return t;if(xt(t)){const n=e.scales[t];return n&&function(t){return t&&!0===t[tp]}(n.value)?n.value:void 0}}function eB(t,e,n){e.__bandwidth=t=>t&&t.bandwidth?t.bandwidth():0,n._bandwidth=QT,n._range=QT,n._scale=QT;const r=e=>"_["+(e.type===ES?Ft(XT+e.value):Ft(XT)+"+"+t(e))+"]";return{_bandwidth:t=>`this.__bandwidth(${r(t[0])})`,_range:t=>`${r(t[0])}.range()`,_scale:e=>`${r(e[0])}(${t(e[1])})`}}function nB(t,e){return function(n,r,i){if(n){const e=tB(n,(i||this).context);return e&&e.path[t](r)}return e(r)}}const rB=nB("area",(function(t){return bw=new le,rw(t,ww),2*bw})),iB=nB("bounds",(function(t){var e,n,r,i,o,a,u;if(hw=fw=-(lw=cw=1/0),vw=[],rw(t,Jw),n=vw.length){for(vw.sort(ok),e=1,o=[r=vw[0]];eik(r[0],r[1])&&(r[1]=i[1]),ik(i[0],r[1])>ik(r[0],r[1])&&(r[0]=i[0])):o.push(r=i);for(a=-1/0,e=0,r=o[n=o.length-1];e<=n;r=i,++e)i=o[e],(u=ik(r[1],i[0]))>a&&(a=u,lw=i[0],fw=r[1])}return vw=_w=null,lw===1/0||cw===1/0?[[NaN,NaN],[NaN,NaN]]:[[lw,cw],[fw,hw]]})),oB=nB("centroid",(function(t){Nw=zw=Ow=Rw=Uw=Lw=qw=Pw=0,jw=new le,Iw=new le,Ww=new le,rw(t,uk);var e=+jw,n=+Iw,r=+Ww,i=jb(e,n,r);return icB(t,e)}const hB={};function dB(t){return k(t)||ArrayBuffer.isView(t)?t:null}function pB(t){return dB(t)||(xt(t)?t:null)}const gB=t=>t.data;function mB(t,e){const n=UT.call(e,t);return n.root&&n.root.lookup||{}}const yB=()=>"undefined"!=typeof window&&window||null;function vB(t,e,n){if(!t)return[];const[r,i]=t,o=(new Hg).set(r[0],r[1],i[0],i[1]);return w_(n||this.context.dataflow.scenegraph().root,o,function(t){let e=null;if(t){const n=V(t.marktype),r=V(t.markname);e=t=>(!n.length||n.some((e=>t.marktype===e)))&&(!r.length||r.some((e=>t.name===e)))}return e}(e))}const _B={random:()=>t.random(),cumulativeNormal:pu,cumulativeLogNormal:xu,cumulativeUniform:Eu,densityNormal:du,densityLogNormal:_u,densityUniform:Mu,quantileNormal:gu,quantileLogNormal:bu,quantileUniform:Du,sampleNormal:hu,sampleLogNormal:vu,sampleUniform:Au,isArray:k,isBoolean:gt,isDate:mt,isDefined:t=>void 0!==t,isNumber:vt,isObject:A,isRegExp:_t,isString:xt,isTuple:va,isValid:t=>null!=t&&t==t,toBoolean:St,toDate:t=>Tt(t),toNumber:S,toString:Bt,indexof:function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r1?e-1:0),r=1;r1?e-1:0),r=1;r1?e-1:0),r=1;rat(t),inScope:function(t){const e=this.context.group;let n=!1;if(e)for(;t;){if(t===e){n=!0;break}t=t.mark.group}return n},intersect:vB,clampRange:X,pinchDistance:function(t){const e=t.touches,n=e[0].clientX-e[1].clientX,r=e[0].clientY-e[1].clientY;return Math.hypot(n,r)},pinchAngle:function(t){const e=t.touches;return Math.atan2(e[0].clientY-e[1].clientY,e[0].clientX-e[1].clientX)},screen:function(){const t=yB();return t?t.screen:{}},containerSize:function(){const t=this.context.dataflow,e=t.container&&t.container();return e?[e.clientWidth,e.clientHeight]:[void 0,void 0]},windowSize:function(){const t=yB();return t?[t.innerWidth,t.innerHeight]:[void 0,void 0]},bandspace:function(t,e,n){return Dd(t||0,e||0,n||0)},setdata:function(t,e){const n=this.context.dataflow,r=this.context.data[t].input;return n.pulse(r,n.changeset().remove(p).insert(e)),1},pathShape:function(t){let e=null;return function(n){return n?pg(n,e=e||ng(t)):t}},panLinear:R,panLog:U,panPow:L,panSymlog:q,zoomLinear:j,zoomLog:I,zoomPow:W,zoomSymlog:H,encode:function(t,e,n){if(t){const n=this.context.dataflow,r=t.mark.source;n.pulse(r,n.changeset().encode(t,e))}return void 0!==n?n:t},modify:function(t,e,n,r,i,o){const a=this.context.dataflow,u=this.context.data[t],s=u.input,l=a.stamp();let c,f,h=u.changes;if(!1===a._trigger||!(s.value.length||e||r))return 0;if((!h||h.stamp{u.modified=!0,a.pulse(s,h).run()}),!0,1)),n&&(c=!0===n?p:k(n)||va(n)?n:fB(n),h.remove(c)),e&&h.insert(e),r&&(c=fB(r),s.value.some(c)?h.remove(c):h.insert(r)),i)for(f in o)h.modify(i,f,o[f]);return 1},lassoAppend:function(t,e,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5;const i=(t=V(t))[t.length-1];return void 0===i||Math.hypot(i[0]-e,i[1]-n)>r?[...t,[e,n]]:t},lassoPath:function(t){return V(t).reduce(((e,n,r)=>{let[i,o]=n;return e+(0==r?`M ${i},${o} `:r===t.length-1?" Z":`L ${i},${o} `)}),"")},intersectLasso:function(t,e,n){const{x:r,y:i,mark:o}=n,a=(new Hg).set(Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER,Number.MIN_SAFE_INTEGER);for(const[t,n]of e)ta.x2&&(a.x2=t),na.y2&&(a.y2=n);return a.translate(r,i),vB([[a.x1,a.y1],[a.x2,a.y2]],t,o).filter((t=>function(t,e,n){let r=0;for(let i=0,o=n.length-1;ie!=u>e&&t<(a-s)*(e-l)/(u-l)+s&&r++}return 1&r}(t.x,t.y,e)))}},xB=["view","item","group","xy","x","y"],bB="event.vega.",wB="this.",kB={},AB={forbidden:["_"],allowed:["datum","event","item"],fieldvar:"datum",globalvar:t=>`_[${Ft(JT+t)}]`,functions:function(t){const e=pT(t);xB.forEach((t=>e[t]=bB+t));for(const t in _B)e[t]=wB+t;return ot(e,eB(t,_B,kB)),e},constants:dT,visitors:kB},MB=gT(AB);function EB(t,e,n){return 1===arguments.length?_B[t]:(_B[t]=e,n&&(kB[t]=n),MB&&(MB.functions[t]=wB+t),this)}function DB(t,e){const n={};let r;try{r=hT(t=xt(t)?t:Ft(t)+"")}catch(e){u("Expression parse error: "+t)}r.visit((t=>{if(t.type!==SS)return;const r=t.callee.name,i=AB.visitors[r];i&&i(r,t.arguments,e,n)}));const i=MB(r);return i.globals.forEach((t=>{const r=JT+t;!lt(n,r)&&e.getSignal(t)&&(n[r]=e.signalRef(t))})),{$expr:ot({code:i.code},e.options.ast?{ast:r}:null),$fields:i.fields,$params:n}}EB("bandwidth",(function(t,e){const n=tB(t,(e||this).context);return n&&n.bandwidth?n.bandwidth():0}),QT),EB("copy",(function(t,e){const n=tB(t,(e||this).context);return n?n.copy():void 0}),QT),EB("domain",(function(t,e){const n=tB(t,(e||this).context);return n?n.domain():[]}),QT),EB("range",(function(t,e){const n=tB(t,(e||this).context);return n&&n.range?n.range():[]}),QT),EB("invert",(function(t,e,n){const r=tB(t,(n||this).context);return r?k(e)?(r.invertRange||r.invert)(e):(r.invert||r.invertExtent)(e):void 0}),QT),EB("scale",(function(t,e,n){const r=tB(t,(n||this).context);return r?r(e):void 0}),QT),EB("gradient",(function(t,e,n,r,i){t=tB(t,(i||this).context);const o=Vp(e,n);let a=t.domain(),u=a[0],s=F(a),l=f;return s-u?l=gp(t,u,s):t=(t.interpolator?np("sequential")().interpolator(t.interpolator()):np("linear")().interpolate(t.interpolate()).range(t.range())).domain([u=0,s=1]),t.ticks&&(a=t.ticks(+r||15),u!==a[0]&&a.unshift(u),s!==F(a)&&a.push(s)),a.forEach((e=>o.stop(l(e),t(e)))),o}),QT),EB("geoArea",rB,QT),EB("geoBounds",iB,QT),EB("geoCentroid",oB,QT),EB("geoShape",(function(t,e,n){const r=tB(t,(n||this).context);return function(t){return r?r.path.context(t)(e):""}}),QT),EB("indata",(function(t,e,n){const r=this.context.data[t]["index:"+e],i=r?r.value.get(n):void 0;return i?i.count:i}),(function(t,e,n,r){e[0].type!==ES&&u("First argument to indata must be a string literal."),e[1].type!==ES&&u("Second argument to indata must be a string literal.");const i=e[0].value,o=e[1].value,a=VT+o;lt(a,r)||(r[a]=n.getData(i).indataRef(n,o))})),EB("data",UT,ZT),EB("treePath",(function(t,e,n){const r=mB(t,this),i=r[e],o=r[n];return i&&o?i.path(o).map(gB):void 0}),ZT),EB("treeAncestors",(function(t,e){const n=mB(t,this)[e];return n?n.ancestors().map(gB):void 0}),ZT),EB("vlSelectionTest",(function(t,e,n){for(var r,i,o,a,u,s=this.context.data[t],l=s?s.values.value:[],c=s?s[FT]&&s[FT].value:void 0,f=n===mT,h=l.length,d=0;d(t[o[n].field]=e,t)),{}))}else s=wT,l=kT(i),(f=(c=v[s]||(v[s]={}))[u]||(c[u]=[])).push(l),n&&(f=_[u]||(_[u]=[])).push({[wT]:l});if(e=e||yT,v[wT]?v[wT]=NT[`${wT}_${e}`](...Object.values(v[wT])):Object.keys(v).forEach((t=>{v[t]=Object.keys(v[t]).map((e=>v[t][e])).reduce(((n,r)=>void 0===n?r:NT[`${x[t]}_${e}`](n,r)))})),y=Object.keys(_),n&&y.length){v[r?_T:vT]=e===yT?{[xT]:y.reduce(((t,e)=>(t.push(..._[e]),t)),[])}:{[bT]:y.map((t=>({[xT]:_[t]})))}}return v}),RT),EB("vlSelectionTuples",(function(t,e){return t.map((t=>ot(e.fields?{values:e.fields.map((e=>(e.getter||(e.getter=l(e.field)))(t.datum)))}:{[wT]:kT(t.datum)},e)))}));const CB=Nt(["rule"]),FB=Nt(["group","image","rect"]);function SB(t){return(t+"").toLowerCase()}function $B(t,e,n){n.endsWith(";")||(n="return("+n+");");const r=Function(...e.concat(n));return t&&t.functions?r.bind(t.functions):r}var TB={operator:(t,e)=>$B(t,["_"],e.code),parameter:(t,e)=>$B(t,["datum","_"],e.code),event:(t,e)=>$B(t,["event"],e.code),handler:(t,e)=>$B(t,["_","event"],`var datum=event.item&&event.item.datum;return ${e.code};`),encode:(t,e)=>{const{marktype:n,channels:r}=e;let i="var o=item,datum=o.datum,m=0,$;";for(const t in r){const e="o["+Ft(t)+"]";i+=`$=${r[t].code};if(${e}!==$)${e}=$,m=1;`}return i+=function(t,e){let n="";return CB[e]||(t.x2&&(t.x?(FB[e]&&(n+="if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;"),n+="o.width=o.x2-o.x;"):n+="o.x=o.x2-(o.width||0);"),t.xc&&(n+="o.x=o.xc-(o.width||0)/2;"),t.y2&&(t.y?(FB[e]&&(n+="if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;"),n+="o.height=o.y2-o.y;"):n+="o.y=o.y2-(o.height||0);"),t.yc&&(n+="o.y=o.yc-(o.height||0)/2;")),n}(r,n),i+="return m;",$B(t,["item","_"],i)},codegen:{get(t){const e=`[${t.map(Ft).join("][")}]`,n=Function("_",`return _${e};`);return n.path=e,n},comparator(t,e){let n;const r=Function("a","b","var u, v; return "+t.map(((t,r)=>{const i=e[r];let o,a;return t.path?(o=`a${t.path}`,a=`b${t.path}`):((n=n||{})["f"+r]=t,o=`this.f${r}(a)`,a=`this.f${r}(b)`),function(t,e,n,r){return`((u = ${t}) < (v = ${e}) || u == null) && v != null ? ${n}\n : (u > v || v == null) && u != null ? ${r}\n : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? ${n}\n : v !== v && u === u ? ${r} : `}(o,a,-i,i)})).join("")+"0;");return n?r.bind(n):r}}};function BB(t,e,n){if(!t||!A(t))return t;for(let r,i=0,o=NB.length;it&&t.$tupleid?_a:t));return e.fn[n]||(e.fn[n]=Q(r,t.$order,e.expr.codegen))}},{key:"$context",parse:function(t,e){return e}},{key:"$subflow",parse:function(t,e){const n=t.$subflow;return function(t,r,i){const o=e.fork().parse(n),a=o.get(n.operators[0].id),u=o.signals.parent;return u&&u.set(i),a.detachSubflow=()=>e.detach(o),a}}},{key:"$tupleid",parse:function(){return _a}}];const zB={skip:!0};function OB(t,e,n,r){return new RB(t,e,n,r)}function RB(t,e,n,r){this.dataflow=t,this.transforms=e,this.events=t.events.bind(t),this.expr=r||TB,this.signals={},this.scales={},this.nodes={},this.data={},this.fn={},n&&(this.functions=Object.create(n),this.functions.context=this)}function UB(t){this.dataflow=t.dataflow,this.transforms=t.transforms,this.events=t.events,this.expr=t.expr,this.signals=Object.create(t.signals),this.scales=Object.create(t.scales),this.nodes=Object.create(t.nodes),this.data=Object.create(t.data),this.fn=Object.create(t.fn),t.functions&&(this.functions=Object.create(t.functions),this.functions.context=this)}function LB(t,e){t&&(null==e?t.removeAttribute("aria-label"):t.setAttribute("aria-label",e))}RB.prototype=UB.prototype={fork(){const t=new UB(this);return(this.subcontext||(this.subcontext=[])).push(t),t},detach(t){this.subcontext=this.subcontext.filter((e=>e!==t));const e=Object.keys(t.nodes);for(const n of e)t.nodes[n]._targets=null;for(const n of e)t.nodes[n].detach();t.nodes=null},get(t){return this.nodes[t]},set(t,e){return this.nodes[t]=e},add(t,e){const n=this,r=n.dataflow,i=t.value;if(n.set(t.id,e),function(t){return"collect"===SB(t)}(t.type)&&i&&(i.$ingest?r.ingest(e,i.$ingest,i.$format):i.$request?r.preload(e,i.$request,i.$format):r.pulse(e,r.changeset().insert(i))),t.root&&(n.root=e),t.parent){let i=n.get(t.parent.$ref);i?(r.connect(i,[e]),e.targets().add(i)):(n.unresolved=n.unresolved||[]).push((()=>{i=n.get(t.parent.$ref),r.connect(i,[e]),e.targets().add(i)}))}if(t.signal&&(n.signals[t.signal]=e),t.scale&&(n.scales[t.scale]=e),t.data)for(const r in t.data){const i=n.data[r]||(n.data[r]={});t.data[r].forEach((t=>i[t]=e))}},resolve(){return(this.unresolved||[]).forEach((t=>t())),delete this.unresolved,this},operator(t,e){this.add(t,this.dataflow.add(t.value,e))},transform(t,e){this.add(t,this.dataflow.add(this.transforms[SB(e)]))},stream(t,e){this.set(t.id,e)},update(t,e,n,r,i){this.dataflow.on(e,n,r,i,t.options)},operatorExpression(t){return this.expr.operator(this,t)},parameterExpression(t){return this.expr.parameter(this,t)},eventExpression(t){return this.expr.event(this,t)},handlerExpression(t){return this.expr.handler(this,t)},encodeExpression(t){return this.expr.encode(this,t)},parse:function(t){const e=this,n=t.operators||[];return t.background&&(e.background=t.background),t.eventConfig&&(e.eventConfig=t.eventConfig),t.locale&&(e.locale=t.locale),n.forEach((t=>e.parseOperator(t))),n.forEach((t=>e.parseOperatorParameters(t))),(t.streams||[]).forEach((t=>e.parseStream(t))),(t.updates||[]).forEach((t=>e.parseUpdate(t))),e.resolve()},parseOperator:function(t){const e=this;!function(t){return"operator"===SB(t)}(t.type)&&t.type?e.transform(t,t.type):e.operator(t,t.update?e.operatorExpression(t.update):null)},parseOperatorParameters:function(t){const e=this;if(t.params){const n=e.get(t.id);n||u("Invalid operator id: "+t.id),e.dataflow.connect(n,n.parameters(e.parseParameters(t.params),t.react,t.initonly))}},parseParameters:function(t,e){e=e||{};const n=this;for(const r in t){const i=t[r];e[r]=k(i)?i.map((t=>BB(t,n,e))):BB(i,n,e)}return e},parseStream:function(t){var e,n=this,r=null!=t.filter?n.eventExpression(t.filter):void 0,i=null!=t.stream?n.get(t.stream):void 0;t.source?i=n.events(t.source,t.type,r):t.merge&&(i=(e=t.merge.map((t=>n.get(t))))[0].merge.apply(e[0],e.slice(1))),t.between&&(e=t.between.map((t=>n.get(t))),i=i.between(e[0],e[1])),t.filter&&(i=i.filter(r)),null!=t.throttle&&(i=i.throttle(+t.throttle)),null!=t.debounce&&(i=i.debounce(+t.debounce)),null==i&&u("Invalid stream definition: "+JSON.stringify(t)),t.consume&&i.consume(!0),n.stream(t,i)},parseUpdate:function(t){var e,n=this,r=A(r=t.source)?r.$ref:r,i=n.get(r),o=t.update,a=void 0;i||u("Source not defined: "+t.source),e=t.target&&t.target.$expr?n.eventExpression(t.target.$expr):n.get(t.target),o&&o.$expr&&(o.$params&&(a=n.parseParameters(o.$params)),o=n.handlerExpression(o.$expr)),n.update(t,i,e,o,a)},getState:function(t){var e=this,n={};if(t.signals){var r=n.signals={};Object.keys(e.signals).forEach((n=>{const i=e.signals[n];t.signals(n,i)&&(r[n]=i.value)}))}if(t.data){var i=n.data={};Object.keys(e.data).forEach((n=>{const r=e.data[n];t.data(n,r)&&(i[n]=r.input.value)}))}return e.subcontext&&!1!==t.recurse&&(n.subcontext=e.subcontext.map((e=>e.getState(t)))),n},setState:function(t){var e=this,n=e.dataflow,r=t.data,i=t.signals;Object.keys(i||{}).forEach((t=>{n.update(e.signals[t],i[t],zB)})),Object.keys(r||{}).forEach((t=>{n.pulse(e.data[t].input,n.changeset().remove(p).insert(r[t]))})),(t.subcontext||[]).forEach(((t,n)=>{const r=e.subcontext[n];r&&r.setState(t)}))}};const qB="default";function PB(t,e){const n=t.globalCursor()?"undefined"!=typeof document&&document.body:t.container();if(n)return null==e?n.style.removeProperty("cursor"):n.style.cursor=e}function jB(t,e){var n=t._runtime.data;return lt(n,e)||u("Unrecognized data set: "+e),n[e]}function IB(t,e){Ea(e)||u("Second argument to changes must be a changeset.");const n=jB(this,t);return n.modified=!0,this.pulse(n.input,e)}function WB(t){var e=t.padding();return Math.max(0,t._viewWidth+e.left+e.right)}function HB(t){var e=t.padding();return Math.max(0,t._viewHeight+e.top+e.bottom)}function YB(t){var e=t.padding(),n=t._origin;return[e.left+n[0],e.top+n[1]]}function GB(t,e,n){var r,i,o=t._renderer,a=o&&o.canvas();return a&&(i=YB(t),(r=rv(e.changedTouches?e.changedTouches[0]:e,a))[0]-=i[0],r[1]-=i[1]),e.dataflow=t,e.item=n,e.vega=function(t,e,n){const r=e?"group"===e.mark.marktype?e:e.mark.group:null;function i(t){var n,i=r;if(t)for(n=e;n;n=n.mark.group)if(n.mark.name===t){i=n;break}return i&&i.mark&&i.mark.interactive?i:{}}function o(t){if(!t)return n;xt(t)&&(t=i(t));const e=n.slice();for(;t;)e[0]-=t.x||0,e[1]-=t.y||0,t=t.mark&&t.mark.group;return e}return{view:rt(t),item:rt(e||{}),group:i,xy:o,x:t=>o(t)[0],y:t=>o(t)[1]}}(t,n,r),e}const VB="view",XB="timer",JB="window",ZB={trap:!1};function QB(t,e,n,r){t._eventListeners.push({type:n,sources:V(e),handler:r})}function KB(t,e,n){const r=t._eventConfig&&t._eventConfig[e];return!(!1===r||A(r)&&!r[n])||(t.warn(`Blocked ${e} ${n} event listener.`),!1)}function tN(t){return t.item}function eN(t){return t.item.mark.source}function nN(t){return function(e,n){return n.vega.view().changeset().encode(n.item,t)}}function rN(t,e,n){const r=document.createElement(t);for(const t in e)r.setAttribute(t,e[t]);return null!=n&&(r.textContent=n),r}const iN="vega-bind",oN="vega-bind-name",aN="vega-bind-radio";function uN(t,e,n,r){const i=n.event||"input",o=()=>t.update(e.value);r.signal(n.signal,e.value),e.addEventListener(i,o),QB(r,e,i,o),t.set=t=>{e.value=t,e.dispatchEvent(function(t){return"undefined"!=typeof Event?new Event(t):{type:t}}(i))}}function sN(t,e,n,r){const i=r.signal(n.signal),o=rN("div",{class:iN}),a="radio"===n.input?o:o.appendChild(rN("label"));a.appendChild(rN("span",{class:oN},n.name||n.signal)),e.appendChild(o);let u=lN;switch(n.input){case"checkbox":u=cN;break;case"select":u=fN;break;case"radio":u=hN;break;case"range":u=dN}u(t,a,n,i)}function lN(t,e,n,r){const i=rN("input");for(const t in n)"signal"!==t&&"element"!==t&&i.setAttribute("input"===t?"type":t,n[t]);i.setAttribute("name",n.signal),i.value=r,e.appendChild(i),i.addEventListener("input",(()=>t.update(i.value))),t.elements=[i],t.set=t=>i.value=t}function cN(t,e,n,r){const i={type:"checkbox",name:n.signal};r&&(i.checked=!0);const o=rN("input",i);e.appendChild(o),o.addEventListener("change",(()=>t.update(o.checked))),t.elements=[o],t.set=t=>o.checked=!!t||null}function fN(t,e,n,r){const i=rN("select",{name:n.signal}),o=n.labels||[];n.options.forEach(((t,e)=>{const n={value:t};pN(t,r)&&(n.selected=!0),i.appendChild(rN("option",n,(o[e]||t)+""))})),e.appendChild(i),i.addEventListener("change",(()=>{t.update(n.options[i.selectedIndex])})),t.elements=[i],t.set=t=>{for(let e=0,r=n.options.length;e{const u={type:"radio",name:n.signal,value:e};pN(e,r)&&(u.checked=!0);const s=rN("input",u);s.addEventListener("change",(()=>t.update(e)));const l=rN("label",{},(o[a]||e)+"");return l.prepend(s),i.appendChild(l),s})),t.set=e=>{const n=t.elements,r=n.length;for(let t=0;t{s.textContent=u.value,t.update(+u.value)};u.addEventListener("input",l),u.addEventListener("change",l),t.elements=[u],t.set=t=>{u.value=t,s.textContent=t}}function pN(t,e){return t===e||t+""==e+""}function gN(t,e,n,r,i,o){return(e=e||new r(t.loader())).initialize(n,WB(t),HB(t),YB(t),i,o).background(t.background())}function mN(t,e){return e?function(){try{e.apply(this,arguments)}catch(e){t.error(e)}}:null}function yN(t,e,n){if("string"==typeof e){if("undefined"==typeof document)return t.error("DOM document instance not found."),null;if(!(e=document.querySelector(e)))return t.error("Signal bind element not found: "+e),null}if(e&&n)try{e.textContent=""}catch(n){e=null,t.error(n)}return e}const vN=t=>+t||0,_N=t=>({top:t,bottom:t,left:t,right:t});function xN(t){return A(t)?{top:vN(t.top),bottom:vN(t.bottom),left:vN(t.left),right:vN(t.right)}:_N(vN(t))}async function bN(t,e,n,r){const i=b_(e),o=i&&i.headless;return o||u("Unrecognized renderer type: "+e),await t.runAsync(),gN(t,null,null,o,n,r).renderAsync(t._scenegraph.root)}var wN="width",kN="height",AN="padding",MN={skip:!0};function EN(t,e){var n=t.autosize(),r=t.padding();return e-(n&&n.contains===AN?r.left+r.right:0)}function DN(t,e){var n=t.autosize(),r=t.padding();return e-(n&&n.contains===AN?r.top+r.bottom:0)}function CN(t,e){return e.modified&&k(e.input.value)&&t.indexOf("_:vega:_")}function FN(t,e){return!("parent"===t||e instanceof Ka.proxy)}function SN(t,e,n,r){const i=t.element();i&&i.setAttribute("title",function(t){return null==t?"":k(t)?$N(t):A(t)&&!mt(t)?(e=t,Object.keys(e).map((t=>{const n=e[t];return t+": "+(k(n)?$N(n):TN(n))})).join("\n")):t+"";var e}(r))}function $N(t){return"["+t.map(TN).join(", ")+"]"}function TN(t){return k(t)?"[…]":A(t)&&!mt(t)?"{…}":t}function BN(t,e){const n=this;if(e=e||{},Ja.call(n),e.loader&&n.loader(e.loader),e.logger&&n.logger(e.logger),null!=e.logLevel&&n.logLevel(e.logLevel),e.locale||t.locale){const r=ot({},t.locale,e.locale);n.locale(Lo(r.number,r.time))}n._el=null,n._elBind=null,n._renderType=e.renderer||__.Canvas,n._scenegraph=new Jy;const r=n._scenegraph.root;n._renderer=null,n._tooltip=e.tooltip||SN,n._redraw=!0,n._handler=(new wv).scene(r),n._globalCursor=!1,n._preventDefault=!1,n._timers=[],n._eventListeners=[],n._resizeListeners=[],n._eventConfig=function(t){const e=ot({defaults:{}},t),n=(t,e)=>{e.forEach((e=>{k(t[e])&&(t[e]=Nt(t[e]))}))};return n(e.defaults,["prevent","allow"]),n(e,["view","window","selector"]),e}(t.eventConfig),n.globalCursor(n._eventConfig.globalCursor);const i=function(t,e,n){return OB(t,Ka,_B,n).parse(e)}(n,t,e.expr);n._runtime=i,n._signals=i.signals,n._bind=(t.bindings||[]).map((t=>({state:null,param:ot({},t)}))),i.root&&i.root.set(r),r.source=i.data.root.input,n.pulse(i.data.root.input,n.changeset().insert(r.items)),n._width=n.width(),n._height=n.height(),n._viewWidth=EN(n,n._width),n._viewHeight=DN(n,n._height),n._origin=[0,0],n._resize=0,n._autosize=1,function(t){var e=t._signals,n=e[wN],r=e[kN],i=e[AN];function o(){t._autosize=t._resize=1}t._resizeWidth=t.add(null,(e=>{t._width=e.size,t._viewWidth=EN(t,e.size),o()}),{size:n}),t._resizeHeight=t.add(null,(e=>{t._height=e.size,t._viewHeight=DN(t,e.size),o()}),{size:r});const a=t.add(null,o,{pad:i});t._resizeWidth.rank=n.rank+1,t._resizeHeight.rank=r.rank+1,a.rank=i.rank+1}(n),function(t){t.add(null,(e=>(t._background=e.bg,t._resize=1,e.bg)),{bg:t._signals.background})}(n),function(t){const e=t._signals.cursor||(t._signals.cursor=t.add({user:qB,item:null}));t.on(t.events("view","mousemove"),e,((t,n)=>{const r=e.value,i=r?xt(r)?r:r.user:qB,o=n.item&&n.item.cursor||null;return r&&i===r.user&&o==r.item?r:{user:i,item:o}})),t.add(null,(function(e){let n=e.cursor,r=this.value;return xt(n)||(r=n.item,n=n.user),PB(t,n&&n!==qB?n:r||n),r}),{cursor:e})}(n),n.description(t.description),e.hover&&n.hover(),e.container&&n.initialize(e.container,e.bind)}function NN(t,e){return lt(t._signals,e)?t._signals[e]:u("Unrecognized signal name: "+Ft(e))}function zN(t,e){const n=(t._targets||[]).filter((t=>t._update&&t._update.handler===e));return n.length?n[0]:null}function ON(t,e,n,r){let i=zN(n,r);return i||(i=mN(t,(()=>r(e,n.value))),i.handler=r,t.on(n,null,i)),t}function RN(t,e,n){const r=zN(e,n);return r&&e._targets.remove(r),t}dt(BN,Ja,{async evaluate(t,e,n){if(await Ja.prototype.evaluate.call(this,t,e),this._redraw||this._resize)try{this._renderer&&(this._resize&&(this._resize=0,function(t){var e=YB(t),n=WB(t),r=HB(t);t._renderer.background(t.background()),t._renderer.resize(n,r,e),t._handler.origin(e),t._resizeListeners.forEach((e=>{try{e(n,r)}catch(e){t.error(e)}}))}(this)),await this._renderer.renderAsync(this._scenegraph.root)),this._redraw=!1}catch(t){this.error(t)}return n&&ga(this,n),this},dirty(t){this._redraw=!0,this._renderer&&this._renderer.dirty(t)},description(t){if(arguments.length){const e=null!=t?t+"":null;return e!==this._desc&&LB(this._el,this._desc=e),this}return this._desc},container(){return this._el},scenegraph(){return this._scenegraph},origin(){return this._origin.slice()},signal(t,e,n){const r=NN(this,t);return 1===arguments.length?r.value:this.update(r,e,n)},width(t){return arguments.length?this.signal("width",t):this.signal("width")},height(t){return arguments.length?this.signal("height",t):this.signal("height")},padding(t){return arguments.length?this.signal("padding",xN(t)):xN(this.signal("padding"))},autosize(t){return arguments.length?this.signal("autosize",t):this.signal("autosize")},background(t){return arguments.length?this.signal("background",t):this.signal("background")},renderer(t){return arguments.length?(b_(t)||u("Unrecognized renderer type: "+t),t!==this._renderType&&(this._renderType=t,this._resetRenderer()),this):this._renderType},tooltip(t){return arguments.length?(t!==this._tooltip&&(this._tooltip=t,this._resetRenderer()),this):this._tooltip},loader(t){return arguments.length?(t!==this._loader&&(Ja.prototype.loader.call(this,t),this._resetRenderer()),this):this._loader},resize(){return this._autosize=1,this.touch(NN(this,"autosize"))},_resetRenderer(){this._renderer&&(this._renderer=null,this.initialize(this._el,this._elBind))},_resizeView:function(t,e,n,r,i,o){this.runAfter((a=>{let u=0;a._autosize=0,a.width()!==n&&(u=1,a.signal(wN,n,MN),a._resizeWidth.skip(!0)),a.height()!==r&&(u=1,a.signal(kN,r,MN),a._resizeHeight.skip(!0)),a._viewWidth!==t&&(a._resize=1,a._viewWidth=t),a._viewHeight!==e&&(a._resize=1,a._viewHeight=e),a._origin[0]===i[0]&&a._origin[1]===i[1]||(a._resize=1,a._origin=i),u&&a.run("enter"),o&&a.runAfter((t=>t.resize()))}),!1,1)},addEventListener(t,e,n){let r=e;return n&&!1===n.trap||(r=mN(this,e),r.raw=e),this._handler.on(t,r),this},removeEventListener(t,e){for(var n,r,i=this._handler.handlers(t),o=i.length;--o>=0;)if(r=i[o].type,n=i[o].handler,t===r&&(e===n||e===n.raw)){this._handler.off(r,n);break}return this},addResizeListener(t){const e=this._resizeListeners;return e.indexOf(t)<0&&e.push(t),this},removeResizeListener(t){var e=this._resizeListeners,n=e.indexOf(t);return n>=0&&e.splice(n,1),this},addSignalListener(t,e){return ON(this,t,NN(this,t),e)},removeSignalListener(t,e){return RN(this,NN(this,t),e)},addDataListener(t,e){return ON(this,t,jB(this,t).values,e)},removeDataListener(t,e){return RN(this,jB(this,t).values,e)},globalCursor(t){if(arguments.length){if(this._globalCursor!==!!t){const e=PB(this,null);this._globalCursor=!!t,e&&PB(this,e)}return this}return this._globalCursor},preventDefault(t){return arguments.length?(this._preventDefault=t,this):this._preventDefault},timer:function(t,e){this._timers.push(function(t,e,n){var r=new nD,i=e;return null==e?(r.restart(t,e,n),r):(r._restart=r.restart,r.restart=function(t,e,n){e=+e,n=null==n?tD():+n,r._restart((function o(a){a+=i,r._restart(o,i+=e,n),t(a)}),e,n)},r.restart(t,e,n),r)}((function(e){t({timestamp:Date.now(),elapsed:e})}),e))},events:function(t,e,n){var r,i=this,o=new za(n),a=function(n,r){i.runAsync(null,(()=>{t===VB&&function(t,e){var n=t._eventConfig.defaults,r=n.prevent,i=n.allow;return!1!==r&&!0!==i&&(!0===r||!1===i||(r?r[e]:i?!i[e]:t.preventDefault()))}(i,e)&&n.preventDefault(),o.receive(GB(i,n,r))}))};if(t===XB)KB(i,"timer",e)&&i.timer(a,e);else if(t===VB)KB(i,"view",e)&&i.addEventListener(e,a,ZB);else if(t===JB?KB(i,"window",e)&&"undefined"!=typeof window&&(r=[window]):"undefined"!=typeof document&&KB(i,"selector",e)&&(r=Array.from(document.querySelectorAll(t))),r){for(var u=0,s=r.length;u=0;)i[t].stop();for(t=o.length;--t>=0;)for(e=(n=o[t]).sources.length;--e>=0;)n.sources[e].removeEventListener(n.type,n.handler);return r&&r.call(this,this._handler,null,null,null),this},hover:function(t,e){return e=[e||"update",(t=[t||"hover"])[0]],this.on(this.events("view","mouseover",tN),eN,nN(t)),this.on(this.events("view","mouseout",tN),eN,nN(e)),this},data:function(t,e){return arguments.length<2?jB(this,t).values.value:IB.call(this,t,Da().remove(p).insert(e))},change:IB,insert:function(t,e){return IB.call(this,t,Da().insert(e))},remove:function(t,e){return IB.call(this,t,Da().remove(e))},scale:function(t){var e=this._runtime.scales;return lt(e,t)||u("Unrecognized scale or projection: "+t),e[t].value},initialize:function(t,e){const n=this,r=n._renderType,i=n._eventConfig.bind,o=b_(r);t=n._el=t?yN(n,t,!0):null,function(t){const e=t.container();e&&(e.setAttribute("role","graphics-document"),e.setAttribute("aria-roleDescription","visualization"),LB(e,t.description()))}(n),o||n.error("Unrecognized renderer type: "+r);const a=o.handler||wv,u=t?o.renderer:o.headless;return n._renderer=u?gN(n,n._renderer,t,u):null,n._handler=function(t,e,n,r){const i=new r(t.loader(),mN(t,t.tooltip())).scene(t.scenegraph().root).initialize(n,YB(t),t);return e&&e.handlers().forEach((t=>{i.on(t.type,t.handler)})),i}(n,n._handler,t,a),n._redraw=!0,t&&"none"!==i&&(e=e?n._elBind=yN(n,e,!0):t.appendChild(rN("form",{class:"vega-bindings"})),n._bind.forEach((t=>{t.param.element&&"container"!==i&&(t.element=yN(n,t.param.element,!!t.param.input))})),n._bind.forEach((t=>{!function(t,e,n){if(!e)return;const r=n.param;let i=n.state;i||(i=n.state={elements:null,active:!1,set:null,update:e=>{e!=t.signal(r.signal)&&t.runAsync(null,(()=>{i.source=!0,t.signal(r.signal,e)}))}},r.debounce&&(i.update=it(r.debounce,i.update))),(null==r.input&&r.element?uN:sN)(i,e,r,t),i.active||(t.on(t._signals[r.signal],null,(()=>{i.source?i.source=!1:i.set(t.signal(r.signal))})),i.active=!0)}(n,t.element||e,t)}))),n},toImageURL:async function(t,e){t!==__.Canvas&&t!==__.SVG&&t!==__.PNG&&u("Unrecognized image type: "+t);const n=await bN(this,t,e);return t===__.SVG?function(t,e){const n=new Blob([t],{type:e});return window.URL.createObjectURL(n)}(n.svg(),"image/svg+xml"):n.canvas().toDataURL("image/png")},toCanvas:async function(t,e){return(await bN(this,__.Canvas,t,e)).canvas()},toSVG:async function(t){return(await bN(this,__.SVG,t)).svg()},getState:function(t){return this._runtime.getState(t||{data:CN,signals:FN,recurse:!0})},setState:function(t){return this.runAsync(null,(e=>{e._trigger=!1,e._runtime.setState(t)}),(t=>{t._trigger=!0})),this}});const UN="view",LN="[",qN="]",PN="{",jN="}",IN=":",WN=",",HN="@",YN=">",GN=/[[\]{}]/,VN={"*":1,arc:1,area:1,group:1,image:1,line:1,path:1,rect:1,rule:1,shape:1,symbol:1,text:1,trail:1};let XN,JN;function ZN(t,e,n){return XN=e||UN,JN=n||VN,KN(t.trim()).map(tz)}function QN(t,e,n,r,i){const o=t.length;let a,u=0;for(;e=0?--u:r&&r.indexOf(a)>=0&&++u}return e}function KN(t){const e=[],n=t.length;let r=0,i=0;for(;i' after between selector: "+t;n=n.map(tz);const i=tz(t.slice(1).trim());if(i.between)return{between:n,stream:i};i.between=n;return i}(t):function(t){const e={source:XN},n=[];let r,i,o=[0,0],a=0,u=0,s=t.length,l=0;if(t[s-1]===jN){if(l=t.lastIndexOf(PN),!(l>=0))throw"Unmatched right brace: "+t;try{o=function(t){const e=t.split(WN);if(!t.length||e.length>2)throw t;return e.map((e=>{const n=+e;if(n!=n)throw t;return n}))}(t.substring(l+1,s-1))}catch(e){throw"Invalid throttle specification: "+t}s=(t=t.slice(0,l).trim()).length,l=0}if(!s)throw t;t[0]===HN&&(a=++l);r=QN(t,l,IN),r1?(e.type=n[1],a?e.markname=n[0].slice(1):!function(t){return JN[t]}(n[0])?e.source=n[0]:e.marktype=n[0]):e.type=n[0];"!"===e.type.slice(-1)&&(e.consume=!0,e.type=e.type.slice(0,-1));null!=i&&(e.filter=i);o[0]&&(e.throttle=o[0]);o[1]&&(e.debounce=o[1]);return e}(t)}function ez(t){return A(t)?t:{type:t||"pad"}}const nz=t=>+t||0,rz=t=>({top:t,bottom:t,left:t,right:t});function iz(t){return A(t)?t.signal?t:{top:nz(t.top),bottom:nz(t.bottom),left:nz(t.left),right:nz(t.right)}:rz(nz(t))}const oz=t=>A(t)&&!k(t)?ot({},t):{value:t};function az(t,e,n,r){if(null!=n){return A(n)&&!k(n)||k(n)&&n.length&&A(n[0])?t.update[e]=n:t[r||"enter"][e]={value:n},1}return 0}function uz(t,e,n){for(const n in e)az(t,n,e[n]);for(const e in n)az(t,e,n[e],"update")}function sz(t,e,n){for(const r in e)n&<(n,r)||(t[r]=ot(t[r]||{},e[r]));return t}function lz(t,e){return e&&(e.enter&&e.enter[t]||e.update&&e.update[t])}const cz="mark",fz="frame",hz="scope",dz="axis",pz="axis-domain",gz="axis-grid",mz="axis-label",yz="axis-tick",vz="axis-title",_z="legend",xz="legend-band",bz="legend-entry",wz="legend-gradient",kz="legend-label",Az="legend-symbol",Mz="legend-title",Ez="title",Dz="title-text",Cz="title-subtitle";function Fz(t,e,n){t[e]=n&&n.signal?{signal:n.signal}:{value:n}}const Sz=t=>xt(t)?Ft(t):t.signal?`(${t.signal})`:Nz(t);function $z(t){if(null!=t.gradient)return function(t){const e=[t.start,t.stop,t.count].map((t=>null==t?null:Ft(t)));for(;e.length&&null==F(e);)e.pop();return e.unshift(Sz(t.gradient)),`gradient(${e.join(",")})`}(t);let e=t.signal?`(${t.signal})`:t.color?function(t){return t.c?Tz("hcl",t.h,t.c,t.l):t.h||t.s?Tz("hsl",t.h,t.s,t.l):t.l||t.a?Tz("lab",t.l,t.a,t.b):t.r||t.g||t.b?Tz("rgb",t.r,t.g,t.b):null}(t.color):null!=t.field?Nz(t.field):void 0!==t.value?Ft(t.value):void 0;return null!=t.scale&&(e=function(t,e){const n=Sz(t.scale);null!=t.range?e=`lerp(_range(${n}), ${+t.range})`:(void 0!==e&&(e=`_scale(${n}, ${e})`),t.band&&(e=(e?e+"+":"")+`_bandwidth(${n})`+(1==+t.band?"":"*"+Bz(t.band)),t.extra&&(e=`(datum.extra ? _scale(${n}, datum.extra.value) : ${e})`)),null==e&&(e="0"));return e}(t,e)),void 0===e&&(e=null),null!=t.exponent&&(e=`pow(${e},${Bz(t.exponent)})`),null!=t.mult&&(e+=`*${Bz(t.mult)}`),null!=t.offset&&(e+=`+${Bz(t.offset)}`),t.round&&(e=`round(${e})`),e}const Tz=(t,e,n,r)=>`(${t}(${[e,n,r].map($z).join(",")})+'')`;function Bz(t){return A(t)?"("+$z(t)+")":t}function Nz(t){return zz(A(t)?t:{datum:t})}function zz(t){let e,n,r;if(t.signal)e="datum",r=t.signal;else if(t.group||t.parent){for(n=Math.max(1,t.level||1),e="item";n-- >0;)e+=".mark.group";t.parent?(r=t.parent,e+=".datum"):r=t.group}else t.datum?(e="datum",r=t.datum):u("Invalid field reference: "+Ft(t));return t.signal||(r=xt(r)?s(r).map(Ft).join("]["):zz(r)),e+"["+r+"]"}function Oz(t,e,n,r,i,o){const a={};(o=o||{}).encoders={$encode:a},t=function(t,e,n,r,i){const o={},a={};let u,s,l,c;for(s in s="lineBreak","text"!==e||null==i[s]||lz(s,t)||Fz(o,s,i[s]),("legend"==n||String(n).startsWith("axis"))&&(n=null),c=n===fz?i.group:n===cz?ot({},i.mark,i[e]):null,c)l=lz(s,t)||("fill"===s||"stroke"===s)&&(lz("fill",t)||lz("stroke",t)),l||Fz(o,s,c[s]);for(s in V(r).forEach((e=>{const n=i.style&&i.style[e];for(const e in n)lz(e,t)||Fz(o,e,n[e])})),t=ot({},t),o)c=o[s],c.signal?(u=u||{})[s]=c:a[s]=c;return t.enter=ot(a,t.enter),u&&(t.update=ot(u,t.update)),t}(t,e,n,r,i.config);for(const n in t)a[n]=Rz(t[n],e,o,i);return o}function Rz(t,e,n,r){const i={},o={};for(const e in t)null!=t[e]&&(i[e]=Uz((a=t[e],k(a)?function(t){let e="";return t.forEach((t=>{const n=$z(t);e+=t.test?`(${t.test})?${n}:`:n})),":"===F(e)&&(e+="null"),e}(a):$z(a)),r,n,o));var a;return{$expr:{marktype:e,channels:i},$fields:Object.keys(o),$output:Object.keys(t)}}function Uz(t,e,n,r){const i=DB(t,e);return i.$fields.forEach((t=>r[t]=1)),ot(n,i.$params),i.$expr}const Lz="outer",qz=["value","update","init","react","bind"];function Pz(t,e){u(t+' for "outer" push: '+Ft(e))}function jz(t,e){const n=t.name;if(t.push===Lz)e.signals[n]||Pz("No prior signal definition",n),qz.forEach((e=>{void 0!==t[e]&&Pz("Invalid property ",e)}));else{const r=e.addSignal(n,t.value);!1===t.react&&(r.react=!1),t.bind&&e.addBinding(n,t.bind)}}function Iz(t,e,n,r){this.id=-1,this.type=t,this.value=e,this.params=n,r&&(this.parent=r)}function Wz(t,e,n,r){return new Iz(t,e,n,r)}function Hz(t,e){return Wz("operator",t,e)}function Yz(t){const e={$ref:t.id};return t.id<0&&(t.refs=t.refs||[]).push(e),e}function Gz(t,e){return e?{$field:t,$name:e}:{$field:t}}const Vz=Gz("key");function Xz(t,e){return{$compare:t,$order:e}}const Jz="descending";function Zz(t,e){return(t&&t.signal?"$"+t.signal:t||"")+(t&&e?"_":"")+(e&&e.signal?"$"+e.signal:e||"")}const Qz="scope",Kz="view";function tO(t){return t&&t.signal}function eO(t){if(tO(t))return!0;if(A(t))for(const e in t)if(eO(t[e]))return!0;return!1}function nO(t,e){return null!=t?t:e}function rO(t){return t&&t.signal||t}const iO="timer";function oO(t,e){return(t.merge?aO:t.stream?uO:t.type?sO:u("Invalid stream specification: "+Ft(t)))(t,e)}function aO(t,e){const n=lO({merge:t.merge.map((t=>oO(t,e)))},t,e);return e.addStream(n).id}function uO(t,e){const n=lO({stream:oO(t.stream,e)},t,e);return e.addStream(n).id}function sO(t,e){let n;t.type===iO?(n=e.event(iO,t.throttle),t={between:t.between,filter:t.filter}):n=e.event(function(t){return t===Qz?Kz:t||Kz}(t.source),t.type);const r=lO({stream:n},t,e);return 1===Object.keys(r).length?n:e.addStream(r).id}function lO(t,e,n){let r=e.between;return r&&(2!==r.length&&u('Stream "between" parameter must have 2 entries: '+Ft(e)),t.between=[oO(r[0],n),oO(r[1],n)]),r=e.filter?[].concat(e.filter):[],(e.marktype||e.markname||e.markrole)&&r.push(function(t,e,n){const r="event.item";return r+(t&&"*"!==t?"&&"+r+".mark.marktype==='"+t+"'":"")+(n?"&&"+r+".mark.role==='"+n+"'":"")+(e?"&&"+r+".mark.name==='"+e+"'":"")}(e.marktype,e.markname,e.markrole)),e.source===Qz&&r.push("inScope(event.item)"),r.length&&(t.filter=DB("("+r.join(")&&(")+")",n).$expr),null!=(r=e.throttle)&&(t.throttle=+r),null!=(r=e.debounce)&&(t.debounce=+r),e.consume&&(t.consume=!0),t}const cO={code:"_.$value",ast:{type:"Identifier",value:"value"}};function fO(t,e,n){const r=t.encode,i={target:n};let o=t.events,a=t.update,s=[];o||u("Signal update missing events specification."),xt(o)&&(o=ZN(o,e.isSubscope()?Qz:Kz)),o=V(o).filter((t=>t.signal||t.scale?(s.push(t),0):1)),s.length>1&&(s=[hO(s)]),o.length&&s.push(o.length>1?{merge:o}:o[0]),null!=r&&(a&&u("Signal encode and update are mutually exclusive."),a="encode(item(),"+Ft(r)+")"),i.update=xt(a)?DB(a,e):null!=a.expr?DB(a.expr,e):null!=a.value?a.value:null!=a.signal?{$expr:cO,$params:{$value:e.signalRef(a.signal)}}:u("Invalid signal update specification."),t.force&&(i.options={force:!0}),s.forEach((t=>e.addUpdate(ot(function(t,e){return{source:t.signal?e.signalRef(t.signal):t.scale?e.scaleRef(t.scale):oO(t,e)}}(t,e),i))))}function hO(t){return{signal:"["+t.map((t=>t.scale?'scale("'+t.scale+'")':t.signal))+"]"}}const dO=t=>(e,n,r)=>Wz(t,n,e||void 0,r),pO=dO("aggregate"),gO=dO("axisticks"),mO=dO("bound"),yO=dO("collect"),vO=dO("compare"),_O=dO("datajoin"),xO=dO("encode"),bO=dO("expression"),wO=dO("facet"),kO=dO("field"),AO=dO("key"),MO=dO("legendentries"),EO=dO("load"),DO=dO("mark"),CO=dO("multiextent"),FO=dO("multivalues"),SO=dO("overlap"),$O=dO("params"),TO=dO("prefacet"),BO=dO("projection"),NO=dO("proxy"),zO=dO("relay"),OO=dO("render"),RO=dO("scale"),UO=dO("sieve"),LO=dO("sortitems"),qO=dO("viewlayout"),PO=dO("values");let jO=0;const IO={min:"min",max:"max",count:"sum"};function WO(t,e){const n=e.getScale(t.name).params;let r;for(r in n.domain=VO(t.domain,t,e),null!=t.range&&(n.range=nR(t,e,n)),null!=t.interpolate&&function(t,e){e.interpolate=HO(t.type||t),null!=t.gamma&&(e.interpolateGamma=HO(t.gamma))}(t.interpolate,n),null!=t.nice&&(n.nice=function(t){return A(t)?{interval:HO(t.interval),step:HO(t.step)}:HO(t)}(t.nice)),null!=t.bins&&(n.bins=function(t,e){return t.signal||k(t)?YO(t,e):e.objectProperty(t)}(t.bins,e)),t)lt(n,r)||"name"===r||(n[r]=HO(t[r],e))}function HO(t,e){return A(t)?t.signal?e.signalRef(t.signal):u("Unsupported object: "+Ft(t)):t}function YO(t,e){return t.signal?e.signalRef(t.signal):t.map((t=>HO(t,e)))}function GO(t){u("Can not find data set: "+Ft(t))}function VO(t,e,n){if(t)return t.signal?n.signalRef(t.signal):(k(t)?XO:t.fields?ZO:JO)(t,e,n);null==e.domainMin&&null==e.domainMax||u("No scale domain defined for domainMin/domainMax to override.")}function XO(t,e,n){return t.map((t=>HO(t,n)))}function JO(t,e,n){const r=n.getData(t.data);return r||GO(t.data),ap(e.type)?r.valuesRef(n,t.field,KO(t.sort,!1)):cp(e.type)?r.domainRef(n,t.field):r.extentRef(n,t.field)}function ZO(t,e,n){const r=t.data,i=t.fields.reduce(((t,e)=>(e=xt(e)?{data:r,field:e}:k(e)||e.signal?function(t,e){const n="_:vega:_"+jO++,r=yO({});if(k(t))r.value={$ingest:t};else if(t.signal){const i="setdata("+Ft(n)+","+t.signal+")";r.params.input=e.signalRef(i)}return e.addDataPipeline(n,[r,UO({})]),{data:n,field:"data"}}(e,n):e,t.push(e),t)),[]);return(ap(e.type)?QO:cp(e.type)?tR:eR)(t,n,i)}function QO(t,e,n){const r=KO(t.sort,!0);let i,o;const a=n.map((t=>{const n=e.getData(t.data);return n||GO(t.data),n.countsRef(e,t.field,r)})),u={groupby:Vz,pulse:a};r&&(i=r.op||"count",o=r.field?Zz(i,r.field):"count",u.ops=[IO[i]],u.fields=[e.fieldRef(o)],u.as=[o]),i=e.add(pO(u));const s=e.add(yO({pulse:Yz(i)}));return o=e.add(PO({field:Vz,sort:e.sortRef(r),pulse:Yz(s)})),Yz(o)}function KO(t,e){return t&&(t.field||t.op?t.field||"count"===t.op?e&&t.field&&t.op&&!IO[t.op]&&u("Multiple domain scales can not be sorted using "+t.op):u("No field provided for sort aggregate op: "+t.op):A(t)?t.field="key":t={field:"key"}),t}function tR(t,e,n){const r=n.map((t=>{const n=e.getData(t.data);return n||GO(t.data),n.domainRef(e,t.field)}));return Yz(e.add(FO({values:r})))}function eR(t,e,n){const r=n.map((t=>{const n=e.getData(t.data);return n||GO(t.data),n.extentRef(e,t.field)}));return Yz(e.add(CO({extents:r})))}function nR(t,e,n){const r=e.config.range;let i=t.range;if(i.signal)return e.signalRef(i.signal);if(xt(i)){if(r&<(r,i))return nR(t=ot({},t,{range:r[i]}),e,n);"width"===i?i=[0,{signal:"width"}]:"height"===i?i=ap(t.type)?[0,{signal:"height"}]:[{signal:"height"},0]:u("Unrecognized scale range value: "+Ft(i))}else{if(i.scheme)return n.scheme=k(i.scheme)?YO(i.scheme,e):HO(i.scheme,e),i.extent&&(n.schemeExtent=YO(i.extent,e)),void(i.count&&(n.schemeCount=HO(i.count,e)));if(i.step)return void(n.rangeStep=HO(i.step,e));if(ap(t.type)&&!k(i))return VO(i,t,e);k(i)||u("Unsupported range type: "+Ft(i))}return i.map((t=>(k(t)?YO:HO)(t,e)))}function rR(t,e,n){return k(t)?t.map((t=>rR(t,e,n))):A(t)?t.signal?n.signalRef(t.signal):"fit"===e?t:u("Unsupported parameter object: "+Ft(t)):t}const iR="top",oR="left",aR="right",uR="bottom",sR="center",lR="vertical",cR="start",fR="end",hR="index",dR="label",pR="offset",gR="perc",mR="perc2",yR="value",vR="guide-label",_R="guide-title",xR="group-title",bR="group-subtitle",wR="symbol",kR="gradient",AR="discrete",MR="size",ER=[MR,"shape","fill","stroke","strokeWidth","strokeDash","opacity"],DR={name:1,style:1,interactive:1},CR={value:0},FR={value:1},SR="group",$R="rect",TR="rule",BR="symbol",NR="text";function zR(t){return t.type=SR,t.interactive=t.interactive||!1,t}function OR(t,e){const n=(n,r)=>nO(t[n],nO(e[n],r));return n.isVertical=n=>lR===nO(t.direction,e.direction||(n?e.symbolDirection:e.gradientDirection)),n.gradientLength=()=>nO(t.gradientLength,e.gradientLength||e.gradientWidth),n.gradientThickness=()=>nO(t.gradientThickness,e.gradientThickness||e.gradientHeight),n.entryColumns=()=>nO(t.columns,nO(e.columns,+n.isVertical(!0))),n}function RR(t,e){const n=e&&(e.update&&e.update[t]||e.enter&&e.enter[t]);return n&&n.signal?n:n?n.value:null}function UR(t,e,n){return`item.anchor === '${cR}' ? ${t} : item.anchor === '${fR}' ? ${e} : ${n}`}const LR=UR(Ft(oR),Ft(aR),Ft(sR));function qR(t,e){return e?t?A(t)?Object.assign({},t,{offset:qR(t.offset,e)}):{value:t,offset:e}:e:t}function PR(t,e){return e?(t.name=e.name,t.style=e.style||t.style,t.interactive=!!e.interactive,t.encode=sz(t.encode,e,DR)):t.interactive=!1,t}function jR(t,e,n,r){const i=OR(t,n),o=i.isVertical(),a=i.gradientThickness(),u=i.gradientLength();let s,l,c,f,h;o?(l=[0,1],c=[0,0],f=a,h=u):(l=[0,0],c=[1,0],f=u,h=a);const d={enter:s={opacity:CR,x:CR,y:CR,width:oz(f),height:oz(h)},update:ot({},s,{opacity:FR,fill:{gradient:e,start:l,stop:c}}),exit:{opacity:CR}};return uz(d,{stroke:i("gradientStrokeColor"),strokeWidth:i("gradientStrokeWidth")},{opacity:i("gradientOpacity")}),PR({type:$R,role:wz,encode:d},r)}function IR(t,e,n,r,i){const o=OR(t,n),a=o.isVertical(),u=o.gradientThickness(),s=o.gradientLength();let l,c,f,h,d="";a?(l="y",f="y2",c="x",h="width",d="1-"):(l="x",f="x2",c="y",h="height");const p={opacity:CR,fill:{scale:e,field:yR}};p[l]={signal:d+"datum."+gR,mult:s},p[c]=CR,p[f]={signal:d+"datum."+mR,mult:s},p[h]=oz(u);const g={enter:p,update:ot({},p,{opacity:FR}),exit:{opacity:CR}};return uz(g,{stroke:o("gradientStrokeColor"),strokeWidth:o("gradientStrokeWidth")},{opacity:o("gradientOpacity")}),PR({type:$R,role:xz,key:yR,from:i,encode:g},r)}const WR=`datum.${gR}<=0?"${oR}":datum.${gR}>=1?"${aR}":"${sR}"`,HR=`datum.${gR}<=0?"${uR}":datum.${gR}>=1?"${iR}":"middle"`;function YR(t,e,n,r){const i=OR(t,e),o=i.isVertical(),a=oz(i.gradientThickness()),u=i.gradientLength();let s,l,c,f,h=i("labelOverlap"),d="";const p={enter:s={opacity:CR},update:l={opacity:FR,text:{field:dR}},exit:{opacity:CR}};return uz(p,{fill:i("labelColor"),fillOpacity:i("labelOpacity"),font:i("labelFont"),fontSize:i("labelFontSize"),fontStyle:i("labelFontStyle"),fontWeight:i("labelFontWeight"),limit:nO(t.labelLimit,e.gradientLabelLimit)}),o?(s.align={value:"left"},s.baseline=l.baseline={signal:HR},c="y",f="x",d="1-"):(s.align=l.align={signal:WR},s.baseline={value:"top"},c="x",f="y"),s[c]=l[c]={signal:d+"datum."+gR,mult:u},s[f]=l[f]=a,a.offset=nO(t.labelOffset,e.gradientLabelOffset)||0,h=h?{separation:i("labelSeparation"),method:h,order:"datum."+hR}:void 0,PR({type:NR,role:kz,style:vR,key:yR,from:r,encode:p,overlap:h},n)}function GR(t,e,n,r,i){const o=OR(t,e),a=n.entries,u=!(!a||!a.interactive),s=a?a.name:void 0,l=o("clipHeight"),c=o("symbolOffset"),f={data:"value"},h=`(${i}) ? datum.${pR} : datum.${MR}`,d=l?oz(l):{field:MR},p=`datum.${hR}`,g=`max(1, ${i})`;let m,y,v,_,x;d.mult=.5,m={enter:y={opacity:CR,x:{signal:h,mult:.5,offset:c},y:d},update:v={opacity:FR,x:y.x,y:y.y},exit:{opacity:CR}};let b=null,w=null;t.fill||(b=e.symbolBaseFillColor,w=e.symbolBaseStrokeColor),uz(m,{fill:o("symbolFillColor",b),shape:o("symbolType"),size:o("symbolSize"),stroke:o("symbolStrokeColor",w),strokeDash:o("symbolDash"),strokeDashOffset:o("symbolDashOffset"),strokeWidth:o("symbolStrokeWidth")},{opacity:o("symbolOpacity")}),ER.forEach((e=>{t[e]&&(v[e]=y[e]={scale:t[e],field:yR})}));const k=PR({type:BR,role:Az,key:yR,from:f,clip:!!l||void 0,encode:m},n.symbols),A=oz(c);A.offset=o("labelOffset"),m={enter:y={opacity:CR,x:{signal:h,offset:A},y:d},update:v={opacity:FR,text:{field:dR},x:y.x,y:y.y},exit:{opacity:CR}},uz(m,{align:o("labelAlign"),baseline:o("labelBaseline"),fill:o("labelColor"),fillOpacity:o("labelOpacity"),font:o("labelFont"),fontSize:o("labelFontSize"),fontStyle:o("labelFontStyle"),fontWeight:o("labelFontWeight"),limit:o("labelLimit")});const M=PR({type:NR,role:kz,style:vR,key:yR,from:f,encode:m},n.labels);return m={enter:{noBound:{value:!l},width:CR,height:l?oz(l):CR,opacity:CR},exit:{opacity:CR},update:v={opacity:FR,row:{signal:null},column:{signal:null}}},o.isVertical(!0)?(_=`ceil(item.mark.items.length / ${g})`,v.row.signal=`${p}%${_}`,v.column.signal=`floor(${p} / ${_})`,x={field:["row",p]}):(v.row.signal=`floor(${p} / ${g})`,v.column.signal=`${p} % ${g}`,x={field:p}),v.column.signal=`(${i})?${v.column.signal}:${p}`,zR({role:hz,from:r={facet:{data:r,name:"value",groupby:hR}},encode:sz(m,a,DR),marks:[k,M],name:s,interactive:u,sort:x})}const VR='item.orient === "left"',XR='item.orient === "right"',JR=`(${VR} || ${XR})`,ZR=`datum.vgrad && ${JR}`,QR=UR('"top"','"bottom"','"middle"'),KR=`datum.vgrad && ${XR} ? (${UR('"right"','"left"','"center"')}) : (${JR} && !(datum.vgrad && ${VR})) ? "left" : ${LR}`,tU=`item._anchor || (${JR} ? "middle" : "start")`,eU=`${ZR} ? (${VR} ? -90 : 90) : 0`,nU=`${JR} ? (datum.vgrad ? (${XR} ? "bottom" : "top") : ${QR}) : "top"`;function rU(t,e){let n;return A(t)&&(t.signal?n=t.signal:t.path?n="pathShape("+iU(t.path)+")":t.sphere&&(n="geoShape("+iU(t.sphere)+', {type: "Sphere"})')),n?e.signalRef(n):!!t}function iU(t){return A(t)&&t.signal?t.signal:Ft(t)}function oU(t){const e=t.role||"";return e.indexOf("axis")&&e.indexOf("legend")&&e.indexOf("title")?t.type===SR?hz:e||cz:e}function aU(t){return{marktype:t.type,name:t.name||void 0,role:t.role||oU(t),zindex:+t.zindex||void 0,aria:t.aria,description:t.description}}function uU(t,e){return t&&t.signal?e.signalRef(t.signal):!1!==t}function sU(t,e){const n=tu(t.type);n||u("Unrecognized transform type: "+Ft(t.type));const r=Wz(n.type.toLowerCase(),null,lU(n,t,e));return t.signal&&e.addSignal(t.signal,e.proxy(r)),r.metadata=n.metadata||{},r}function lU(t,e,n){const r={},i=t.params.length;for(let o=0;ohU(t,e,n)))):hU(t,r,n)}(t,e,n):"projection"===r?n.projectionRef(e[t.name]):t.array&&!tO(i)?i.map((e=>fU(t,e,n))):fU(t,i,n):void(t.required&&u("Missing required "+Ft(e.type)+" parameter: "+Ft(t.name)))}function fU(t,e,n){const r=t.type;if(tO(e))return mU(r)?u("Expression references can not be signals."):yU(r)?n.fieldRef(e):vU(r)?n.compareRef(e):n.signalRef(e.signal);{const i=t.expr||yU(r);return i&&dU(e)?n.exprRef(e.expr,e.as):i&&pU(e)?Gz(e.field,e.as):mU(r)?DB(e,n):gU(r)?Yz(n.getData(e).values):yU(r)?Gz(e):vU(r)?n.compareRef(e):e}}function hU(t,e,n){const r=t.params.length;let i;for(let n=0;nt&&t.expr,pU=t=>t&&t.field,gU=t=>"data"===t,mU=t=>"expr"===t,yU=t=>"field"===t,vU=t=>"compare"===t;function _U(t,e){return t.$ref?t:t.data&&t.data.$ref?t.data:Yz(e.getData(t.data).output)}function xU(t,e,n,r,i){this.scope=t,this.input=e,this.output=n,this.values=r,this.aggregate=i,this.index={}}function bU(t){return xt(t)?t:null}function wU(t,e,n){const r=Zz(n.op,n.field);let i;if(e.ops){for(let t=0,n=e.as.length;tnull==t?"null":t)).join(",")+"),0)",e);s.update=l.$expr,s.params=l.$params}function MU(t,e){const n=oU(t),r=t.type===SR,i=t.from&&t.from.facet,o=t.overlap;let a,s,l,c,f,h,d,p=t.layout||n===hz||n===fz;const g=n===cz||p||i,m=function(t,e,n){let r,i,o,a,s;return t?(r=t.facet)&&(e||u("Only group marks can be faceted."),null!=r.field?a=s=_U(r,n):(t.data?s=Yz(n.getData(t.data).aggregate):(o=sU(ot({type:"aggregate",groupby:V(r.groupby)},r.aggregate),n),o.params.key=n.keyRef(r.groupby),o.params.pulse=_U(r,n),a=s=Yz(n.add(o))),i=n.keyRef(r.groupby,!0))):a=Yz(n.add(yO(null,[{}]))),a||(a=_U(t,n)),{key:i,pulse:a,parent:s}}(t.from,r,e);s=e.add(_O({key:m.key||(t.key?Gz(t.key):void 0),pulse:m.pulse,clean:!r}));const y=Yz(s);s=l=e.add(yO({pulse:y})),s=e.add(DO({markdef:aU(t),interactive:uU(t.interactive,e),clip:rU(t.clip,e),context:{$context:!0},groups:e.lookup(),parent:e.signals.parent?e.signalRef("parent"):null,index:e.markpath(),pulse:Yz(s)}));const v=Yz(s);s=c=e.add(xO(Oz(t.encode,t.type,n,t.style,e,{mod:!1,pulse:v}))),s.params.parent=e.encode(),t.transform&&t.transform.forEach((t=>{const n=sU(t,e),r=n.metadata;(r.generates||r.changes)&&u("Mark transforms should not generate new data."),r.nomod||(c.params.mod=!0),n.params.pulse=Yz(s),e.add(s=n)})),t.sort&&(s=e.add(LO({sort:e.compareRef(t.sort),pulse:Yz(s)})));const _=Yz(s);(i||p)&&(p=e.add(qO({layout:e.objectProperty(t.layout),legends:e.legends,mark:v,pulse:_})),h=Yz(p));const x=e.add(mO({mark:v,pulse:h||_}));d=Yz(x),r&&(g&&(a=e.operators,a.pop(),p&&a.pop()),e.pushState(_,h||d,y),i?function(t,e,n){const r=t.from.facet,i=r.name,o=_U(r,e);let a;r.name||u("Facet must have a name: "+Ft(r)),r.data||u("Facet must reference a data set: "+Ft(r)),r.field?a=e.add(TO({field:e.fieldRef(r.field),pulse:o})):r.groupby?a=e.add(wO({key:e.keyRef(r.groupby),group:Yz(e.proxy(n.parent)),pulse:o})):u("Facet must specify groupby or field: "+Ft(r));const s=e.fork(),l=s.add(yO()),c=s.add(UO({pulse:Yz(l)}));s.addData(i,new xU(s,l,l,c)),s.addSignal("parent",null),a.params.subflow={$subflow:s.parse(t).toRuntime()}}(t,e,m):g?function(t,e,n){const r=e.add(TO({pulse:n.pulse})),i=e.fork();i.add(UO()),i.addSignal("parent",null),r.params.subflow={$subflow:i.parse(t).toRuntime()}}(t,e,m):e.parse(t),e.popState(),g&&(p&&a.push(p),a.push(x))),o&&(d=function(t,e,n){const r=t.method,i=t.bound,o=t.separation,a={separation:tO(o)?n.signalRef(o.signal):o,method:tO(r)?n.signalRef(r.signal):r,pulse:e};t.order&&(a.sort=n.compareRef({field:t.order}));if(i){const t=i.tolerance;a.boundTolerance=tO(t)?n.signalRef(t.signal):+t,a.boundScale=n.scaleRef(i.scale),a.boundOrient=i.orient}return Yz(n.add(SO(a)))}(o,d,e));const b=e.add(OO({pulse:d})),w=e.add(UO({pulse:Yz(b)},void 0,e.parent()));null!=t.name&&(f=t.name,e.addData(f,new xU(e,l,b,w)),t.on&&t.on.forEach((t=>{(t.insert||t.remove||t.toggle)&&u("Marks only support modify triggers."),AU(t,e,f)})))}function EU(t,e){const n=e.config.legend,r=t.encode||{},i=OR(t,n),o=r.legend||{},a=o.name||void 0,s=o.interactive,l=o.style,c={};let f,h,d,p=0;ER.forEach((e=>t[e]?(c[e]=t[e],p=p||t[e]):0)),p||u("Missing valid scale for legend.");const g=function(t,e){let n=t.type||wR;t.type||1!==function(t){return ER.reduce(((e,n)=>e+(t[n]?1:0)),0)}(t)||!t.fill&&!t.stroke||(n=op(e)?kR:up(e)?AR:wR);return n!==kR?n:up(e)?AR:kR}(t,e.scaleType(p)),m={title:null!=t.title,scales:c,type:g,vgrad:"symbol"!==g&&i.isVertical()},y=Yz(e.add(yO(null,[m]))),v=Yz(e.add(MO(h={type:g,scale:e.scaleRef(p),count:e.objectProperty(i("tickCount")),limit:e.property(i("symbolLimit")),values:e.objectProperty(t.values),minstep:e.property(t.tickMinStep),formatType:e.property(t.formatType),formatSpecifier:e.property(t.format)})));return g===kR?(d=[jR(t,p,n,r.gradient),YR(t,n,r.labels,v)],h.count=h.count||e.signalRef(`max(2,2*floor((${rO(i.gradientLength())})/100))`)):g===AR?d=[IR(t,p,n,r.gradient,v),YR(t,n,r.labels,v)]:(f=function(t,e){const n=OR(t,e);return{align:n("gridAlign"),columns:n.entryColumns(),center:{row:!0,column:!1},padding:{row:n("rowPadding"),column:n("columnPadding")}}}(t,n),d=[GR(t,n,r,v,rO(f.columns))],h.size=function(t,e,n){const r=rO(CU("size",t,n)),i=rO(CU("strokeWidth",t,n)),o=rO(function(t,e,n){return RR("fontSize",t)||function(t,e,n){const r=e.config.style[n];return r&&r[t]}("fontSize",e,n)}(n[1].encode,e,vR));return DB(`max(ceil(sqrt(${r})+${i}),${o})`,e)}(t,e,d[0].marks)),d=[zR({role:bz,from:y,encode:{enter:{x:{value:0},y:{value:0}}},marks:d,layout:f,interactive:s})],m.title&&d.push(function(t,e,n,r){const i=OR(t,e),o={enter:{opacity:CR},update:{opacity:FR,x:{field:{group:"padding"}},y:{field:{group:"padding"}}},exit:{opacity:CR}};return uz(o,{orient:i("titleOrient"),_anchor:i("titleAnchor"),anchor:{signal:tU},angle:{signal:eU},align:{signal:KR},baseline:{signal:nU},text:t.title,fill:i("titleColor"),fillOpacity:i("titleOpacity"),font:i("titleFont"),fontSize:i("titleFontSize"),fontStyle:i("titleFontStyle"),fontWeight:i("titleFontWeight"),limit:i("titleLimit"),lineHeight:i("titleLineHeight")},{align:i("titleAlign"),baseline:i("titleBaseline")}),PR({type:NR,role:Mz,style:_R,from:r,encode:o},n)}(t,n,r.title,y)),MU(zR({role:_z,from:y,encode:sz(DU(i,t,n),o,DR),marks:d,aria:i("aria"),description:i("description"),zindex:i("zindex"),name:a,interactive:s,style:l}),e)}function DU(t,e,n){const r={enter:{},update:{}};return uz(r,{orient:t("orient"),offset:t("offset"),padding:t("padding"),titlePadding:t("titlePadding"),cornerRadius:t("cornerRadius"),fill:t("fillColor"),stroke:t("strokeColor"),strokeWidth:n.strokeWidth,strokeDash:n.strokeDash,x:t("legendX"),y:t("legendY"),format:e.format,formatType:e.formatType}),r}function CU(t,e,n){return e[t]?`scale("${e[t]}",datum)`:RR(t,n[0].encode)}xU.fromEntries=function(t,e){const n=e.length,r=e[n-1],i=e[n-2];let o=e[0],a=null,u=1;for(o&&"load"===o.type&&(o=e[1]),t.add(e[0]);u{n.push(sU(t,e))})),t.on&&t.on.forEach((n=>{AU(n,e,t.name)})),e.addDataPipeline(t.name,function(t,e,n){const r=[];let i,o,a,u,s,l=null,c=!1,f=!1;t.values?tO(t.values)||eO(t.format)?(r.push(NU(e,t)),r.push(l=BU())):r.push(l=BU({$ingest:t.values,$format:t.format})):t.url?eO(t.url)||eO(t.format)?(r.push(NU(e,t)),r.push(l=BU())):r.push(l=BU({$request:t.url,$format:t.format})):t.source&&(l=i=V(t.source).map((t=>Yz(e.getData(t).output))),r.push(null));for(o=0,a=n.length;ot===uR||t===iR,OU=(t,e,n)=>tO(t)?IU(t.signal,e,n):t===oR||t===iR?e:n,RU=(t,e,n)=>tO(t)?PU(t.signal,e,n):zU(t)?e:n,UU=(t,e,n)=>tO(t)?jU(t.signal,e,n):zU(t)?n:e,LU=(t,e,n)=>tO(t)?WU(t.signal,e,n):t===iR?{value:e}:{value:n},qU=(t,e,n)=>tO(t)?HU(t.signal,e,n):t===aR?{value:e}:{value:n},PU=(t,e,n)=>YU(`${t} === '${iR}' || ${t} === '${uR}'`,e,n),jU=(t,e,n)=>YU(`${t} !== '${iR}' && ${t} !== '${uR}'`,e,n),IU=(t,e,n)=>VU(`${t} === '${oR}' || ${t} === '${iR}'`,e,n),WU=(t,e,n)=>VU(`${t} === '${iR}'`,e,n),HU=(t,e,n)=>VU(`${t} === '${aR}'`,e,n),YU=(t,e,n)=>(e=null!=e?oz(e):e,n=null!=n?oz(n):n,GU(e)&&GU(n)?{signal:`${t} ? (${e=e?e.signal||Ft(e.value):null}) : (${n=n?n.signal||Ft(n.value):null})`}:[ot({test:t},e)].concat(n||[])),GU=t=>null==t||1===Object.keys(t).length,VU=(t,e,n)=>({signal:`${t} ? (${JU(e)}) : (${JU(n)})`}),XU=(t,e,n,r,i)=>({signal:(null!=r?`${t} === '${oR}' ? (${JU(r)}) : `:"")+(null!=n?`${t} === '${uR}' ? (${JU(n)}) : `:"")+(null!=i?`${t} === '${aR}' ? (${JU(i)}) : `:"")+(null!=e?`${t} === '${iR}' ? (${JU(e)}) : `:"")+"(null)"}),JU=t=>tO(t)?t.signal:null==t?null:Ft(t),ZU=(t,e)=>0===e?0:tO(t)?{signal:`(${t.signal}) * ${e}`}:{value:t*e},QU=(t,e)=>{const n=t.signal;return n&&n.endsWith("(null)")?{signal:n.slice(0,-6)+e.signal}:t};function KU(t,e,n,r){let i;if(e&<(e,t))return e[t];if(lt(n,t))return n[t];if(t.startsWith("title")){switch(t){case"titleColor":i="fill";break;case"titleFont":case"titleFontSize":case"titleFontWeight":i=t[5].toLowerCase()+t.slice(6)}return r[_R][i]}if(t.startsWith("label")){switch(t){case"labelColor":i="fill";break;case"labelFont":case"labelFontSize":i=t[5].toLowerCase()+t.slice(6)}return r[vR][i]}return null}function tL(t){const e={};for(const n of t)if(n)for(const t in n)e[t]=1;return Object.keys(e)}function eL(t,e){return{scale:t.scale,range:e}}function nL(t,e,n,r,i){const o=OR(t,e),a=t.orient,u=t.gridScale,s=OU(a,1,-1),l=function(t,e){if(1===e);else if(A(t)){let n=t=ot({},t);for(;null!=n.mult;){if(!A(n.mult))return n.mult=tO(e)?{signal:`(${n.mult}) * (${e.signal})`}:n.mult*e,t;n=n.mult=ot({},n.mult)}n.mult=e}else t=tO(e)?{signal:`(${e.signal}) * (${t||0})`}:e*(t||0);return t}(t.offset,s);let c,f,h;const d={enter:c={opacity:CR},update:h={opacity:FR},exit:f={opacity:CR}};uz(d,{stroke:o("gridColor"),strokeCap:o("gridCap"),strokeDash:o("gridDash"),strokeDashOffset:o("gridDashOffset"),strokeOpacity:o("gridOpacity"),strokeWidth:o("gridWidth")});const p={scale:t.scale,field:yR,band:i.band,extra:i.extra,offset:i.offset,round:o("tickRound")},g=RU(a,{signal:"height"},{signal:"width"}),m=u?{scale:u,range:0,mult:s,offset:l}:{value:0,offset:l},y=u?{scale:u,range:1,mult:s,offset:l}:ot(g,{mult:s,offset:l});return c.x=h.x=RU(a,p,m),c.y=h.y=UU(a,p,m),c.x2=h.x2=UU(a,y),c.y2=h.y2=RU(a,y),f.x=RU(a,p),f.y=UU(a,p),PR({type:TR,role:gz,key:yR,from:r,encode:d},n)}function rL(t,e,n,r,i){return{signal:'flush(range("'+t+'"), scale("'+t+'", datum.value), '+e+","+n+","+r+","+i+")"}}function iL(t,e,n,r){const i=OR(t,e),o=t.orient,a=OU(o,-1,1);let u,s;const l={enter:u={opacity:CR,anchor:oz(i("titleAnchor",null)),align:{signal:LR}},update:s=ot({},u,{opacity:FR,text:oz(t.title)}),exit:{opacity:CR}},c={signal:`lerp(range("${t.scale}"), ${UR(0,1,.5)})`};return s.x=RU(o,c),s.y=UU(o,c),u.angle=RU(o,CR,ZU(a,90)),u.baseline=RU(o,LU(o,uR,iR),{value:uR}),s.angle=u.angle,s.baseline=u.baseline,uz(l,{fill:i("titleColor"),fillOpacity:i("titleOpacity"),font:i("titleFont"),fontSize:i("titleFontSize"),fontStyle:i("titleFontStyle"),fontWeight:i("titleFontWeight"),limit:i("titleLimit"),lineHeight:i("titleLineHeight")},{align:i("titleAlign"),angle:i("titleAngle"),baseline:i("titleBaseline")}),function(t,e,n,r){const i=(t,e)=>null!=t?(n.update[e]=QU(oz(t),n.update[e]),!1):!lz(e,r),o=i(t("titleX"),"x"),a=i(t("titleY"),"y");n.enter.auto=a===o?oz(a):RU(e,oz(a),oz(o))}(i,o,l,n),l.update.align=QU(l.update.align,u.align),l.update.angle=QU(l.update.angle,u.angle),l.update.baseline=QU(l.update.baseline,u.baseline),PR({type:NR,role:vz,style:_R,from:r,encode:l},n)}function oL(t,e){const n=function(t,e){var n,r,i,o=e.config,a=o.style,u=o.axis,s="band"===e.scaleType(t.scale)&&o.axisBand,l=t.orient;if(tO(l)){const t=tL([o.axisX,o.axisY]),e=tL([o.axisTop,o.axisBottom,o.axisLeft,o.axisRight]);for(i of(n={},t))n[i]=RU(l,KU(i,o.axisX,u,a),KU(i,o.axisY,u,a));for(i of(r={},e))r[i]=XU(l.signal,KU(i,o.axisTop,u,a),KU(i,o.axisBottom,u,a),KU(i,o.axisLeft,u,a),KU(i,o.axisRight,u,a))}else n=l===iR||l===uR?o.axisX:o.axisY,r=o["axis"+l[0].toUpperCase()+l.slice(1)];return n||r||s?ot({},u,n,r,s):u}(t,e),r=t.encode||{},i=r.axis||{},o=i.name||void 0,a=i.interactive,u=i.style,s=OR(t,n),l=function(t){const e=t("tickBand");let n,r,i=t("tickOffset");return e?e.signal?(n={signal:`(${e.signal}) === 'extent' ? 1 : 0.5`},r={signal:`(${e.signal}) === 'extent'`},A(i)||(i={signal:`(${e.signal}) === 'extent' ? 0 : ${i}`})):"extent"===e?(n=1,r=!0,i=0):(n=.5,r=!1):(n=t("bandPosition"),r=t("tickExtra")),{extra:r,band:n,offset:i}}(s),c={scale:t.scale,ticks:!!s("ticks"),labels:!!s("labels"),grid:!!s("grid"),domain:!!s("domain"),title:null!=t.title},f=Yz(e.add(yO({},[c]))),h=Yz(e.add(gO({scale:e.scaleRef(t.scale),extra:e.property(l.extra),count:e.objectProperty(t.tickCount),values:e.objectProperty(t.values),minstep:e.property(t.tickMinStep),formatType:e.property(t.formatType),formatSpecifier:e.property(t.format)}))),d=[];let p;return c.grid&&d.push(nL(t,n,r.grid,h,l)),c.ticks&&(p=s("tickSize"),d.push(function(t,e,n,r,i,o){const a=OR(t,e),u=t.orient,s=OU(u,-1,1);let l,c,f;const h={enter:l={opacity:CR},update:f={opacity:FR},exit:c={opacity:CR}};uz(h,{stroke:a("tickColor"),strokeCap:a("tickCap"),strokeDash:a("tickDash"),strokeDashOffset:a("tickDashOffset"),strokeOpacity:a("tickOpacity"),strokeWidth:a("tickWidth")});const d=oz(i);d.mult=s;const p={scale:t.scale,field:yR,band:o.band,extra:o.extra,offset:o.offset,round:a("tickRound")};return f.y=l.y=RU(u,CR,p),f.y2=l.y2=RU(u,d),c.x=RU(u,p),f.x=l.x=UU(u,CR,p),f.x2=l.x2=UU(u,d),c.y=UU(u,p),PR({type:TR,role:yz,key:yR,from:r,encode:h},n)}(t,n,r.ticks,h,p,l))),c.labels&&(p=c.ticks?p:0,d.push(function(t,e,n,r,i,o){const a=OR(t,e),u=t.orient,s=t.scale,l=OU(u,-1,1),c=rO(a("labelFlush")),f=rO(a("labelFlushOffset")),h=a("labelAlign"),d=a("labelBaseline");let p,g=0===c||!!c;const m=oz(i);m.mult=l,m.offset=oz(a("labelPadding")||0),m.offset.mult=l;const y={scale:s,field:yR,band:.5,offset:qR(o.offset,a("labelOffset"))},v=RU(u,g?rL(s,c,'"left"','"right"','"center"'):{value:"center"},qU(u,"left","right")),_=RU(u,LU(u,"bottom","top"),g?rL(s,c,'"top"','"bottom"','"middle"'):{value:"middle"}),x=rL(s,c,`-(${f})`,f,0);g=g&&f;const b={opacity:CR,x:RU(u,y,m),y:UU(u,y,m)},w={enter:b,update:p={opacity:FR,text:{field:dR},x:b.x,y:b.y,align:v,baseline:_},exit:{opacity:CR,x:b.x,y:b.y}};uz(w,{dx:!h&&g?RU(u,x):null,dy:!d&&g?UU(u,x):null}),uz(w,{angle:a("labelAngle"),fill:a("labelColor"),fillOpacity:a("labelOpacity"),font:a("labelFont"),fontSize:a("labelFontSize"),fontWeight:a("labelFontWeight"),fontStyle:a("labelFontStyle"),limit:a("labelLimit"),lineHeight:a("labelLineHeight")},{align:h,baseline:d});const k=a("labelBound");let A=a("labelOverlap");return A=A||k?{separation:a("labelSeparation"),method:A,order:"datum.index",bound:k?{scale:s,orient:u,tolerance:k}:null}:void 0,p.align!==v&&(p.align=QU(p.align,v)),p.baseline!==_&&(p.baseline=QU(p.baseline,_)),PR({type:NR,role:mz,style:vR,key:yR,from:r,encode:w,overlap:A},n)}(t,n,r.labels,h,p,l))),c.domain&&d.push(function(t,e,n,r){const i=OR(t,e),o=t.orient;let a,u;const s={enter:a={opacity:CR},update:u={opacity:FR},exit:{opacity:CR}};uz(s,{stroke:i("domainColor"),strokeCap:i("domainCap"),strokeDash:i("domainDash"),strokeDashOffset:i("domainDashOffset"),strokeWidth:i("domainWidth"),strokeOpacity:i("domainOpacity")});const l=eL(t,0),c=eL(t,1);return a.x=u.x=RU(o,l,CR),a.x2=u.x2=RU(o,c),a.y=u.y=UU(o,l,CR),a.y2=u.y2=UU(o,c),PR({type:TR,role:pz,from:r,encode:s},n)}(t,n,r.domain,f)),c.title&&d.push(iL(t,n,r.title,f)),MU(zR({role:dz,from:f,encode:sz(aL(s,t),i,DR),marks:d,aria:s("aria"),description:s("description"),zindex:s("zindex"),name:o,interactive:a,style:u}),e)}function aL(t,e){const n={enter:{},update:{}};return uz(n,{orient:t("orient"),offset:t("offset")||0,position:nO(e.position,0),titlePadding:t("titlePadding"),minExtent:t("minExtent"),maxExtent:t("maxExtent"),range:{signal:`abs(span(range("${e.scale}")))`},translate:t("translate"),format:e.format,formatType:e.formatType}),n}function uL(t,e,n){const r=V(t.signals),i=V(t.scales);return n||r.forEach((t=>jz(t,e))),V(t.projections).forEach((t=>function(t,e){const n=e.config.projection||{},r={};for(const n in t)"name"!==n&&(r[n]=rR(t[n],n,e));for(const t in n)null==r[t]&&(r[t]=rR(n[t],t,e));e.addProjection(t.name,r)}(t,e))),i.forEach((t=>function(t,e){const n=t.type||"linear";rp(n)||u("Unrecognized scale type: "+Ft(n)),e.addScale(t.name,{type:n,domain:void 0})}(t,e))),V(t.data).forEach((t=>TU(t,e))),i.forEach((t=>WO(t,e))),(n||r).forEach((t=>function(t,e){const n=e.getSignal(t.name);let r=t.update;t.init&&(r?u("Signals can not include both init and update expressions."):(r=t.init,n.initonly=!0)),r&&(r=DB(r,e),n.update=r.$expr,n.params=r.$params),t.on&&t.on.forEach((t=>fO(t,e,n.id)))}(t,e))),V(t.axes).forEach((t=>oL(t,e))),V(t.marks).forEach((t=>MU(t,e))),V(t.legends).forEach((t=>EU(t,e))),t.title&&SU(t.title,e),e.parseLambdas(),e}const sL=t=>sz({enter:{x:{value:0},y:{value:0}},update:{width:{signal:"width"},height:{signal:"height"}}},t);function lL(t,e){const n=e.config,r=Yz(e.root=e.add(Hz())),i=function(t,e){const n=n=>nO(t[n],e[n]),r=[cL("background",n("background")),cL("autosize",ez(n("autosize"))),cL("padding",iz(n("padding"))),cL("width",n("width")||0),cL("height",n("height")||0)],i=r.reduce(((t,e)=>(t[e.name]=e,t)),{}),o={};return V(t.signals).forEach((t=>{lt(i,t.name)?t=ot(i[t.name],t):r.push(t),o[t.name]=t})),V(e.signals).forEach((t=>{lt(o,t.name)||lt(i,t.name)||r.push(t)})),r}(t,n);i.forEach((t=>jz(t,e))),e.description=t.description||n.description,e.eventConfig=n.events,e.legends=e.objectProperty(n.legend&&n.legend.layout),e.locale=n.locale;const o=e.add(yO()),a=e.add(xO(Oz(sL(t.encode),SR,fz,t.style,e,{pulse:Yz(o)}))),u=e.add(qO({layout:e.objectProperty(t.layout),legends:e.legends,autosize:e.signalRef("autosize"),mark:r,pulse:Yz(a)}));e.operators.pop(),e.pushState(Yz(a),Yz(u),null),uL(t,e,i),e.operators.push(u);let s=e.add(mO({mark:r,pulse:Yz(u)}));return s=e.add(OO({pulse:Yz(s)})),s=e.add(UO({pulse:Yz(s)})),e.addData("root",new xU(e,o,o,s)),e}function cL(t,e){return e&&e.signal?{name:t,update:e.signal}:{name:t,value:e}}function fL(t,e){this.config=t||{},this.options=e||{},this.bindings=[],this.field={},this.signals={},this.lambdas={},this.scales={},this.events={},this.data={},this.streams=[],this.updates=[],this.operators=[],this.eventConfig=null,this.locale=null,this._id=0,this._subid=0,this._nextsub=[0],this._parent=[],this._encode=[],this._lookup=[],this._markpath=[]}function hL(t){this.config=t.config,this.options=t.options,this.legends=t.legends,this.field=Object.create(t.field),this.signals=Object.create(t.signals),this.lambdas=Object.create(t.lambdas),this.scales=Object.create(t.scales),this.events=Object.create(t.events),this.data=Object.create(t.data),this.streams=[],this.updates=[],this.operators=[],this._id=0,this._subid=++t._nextsub[0],this._nextsub=t._nextsub,this._parent=t._parent.slice(),this._encode=t._encode.slice(),this._lookup=t._lookup.slice(),this._markpath=t._markpath}function dL(t){return(k(t)?pL:gL)(t)}function pL(t){const e=t.length;let n="[";for(let r=0;r0?",":"")+(A(e)?e.signal||dL(e):Ft(e))}return n+"]"}function gL(t){let e,n,r="{",i=0;for(e in t)n=t[e],r+=(++i>1?",":"")+Ft(e)+":"+(A(n)?n.signal||dL(n):Ft(n));return r+"}"}fL.prototype=hL.prototype={parse(t){return uL(t,this)},fork(){return new hL(this)},isSubscope(){return this._subid>0},toRuntime(){return this.finish(),{description:this.description,operators:this.operators,streams:this.streams,updates:this.updates,bindings:this.bindings,eventConfig:this.eventConfig,locale:this.locale}},id(){return(this._subid?this._subid+":":0)+this._id++},add(t){return this.operators.push(t),t.id=this.id(),t.refs&&(t.refs.forEach((e=>{e.$ref=t.id})),t.refs=null),t},proxy(t){const e=t instanceof Iz?Yz(t):t;return this.add(NO({value:e}))},addStream(t){return this.streams.push(t),t.id=this.id(),t},addUpdate(t){return this.updates.push(t),t},finish(){let t,e;for(t in this.root&&(this.root.root=!0),this.signals)this.signals[t].signal=t;for(t in this.scales)this.scales[t].scale=t;function n(t,e,n){let r,i;t&&(r=t.data||(t.data={}),i=r[e]||(r[e]=[]),i.push(n))}for(t in this.data){e=this.data[t],n(e.input,t,"input"),n(e.output,t,"output"),n(e.values,t,"values");for(const r in e.index)n(e.index[r],t,"index:"+r)}return this},pushState(t,e,n){this._encode.push(Yz(this.add(UO({pulse:t})))),this._parent.push(e),this._lookup.push(n?Yz(this.proxy(n)):null),this._markpath.push(-1)},popState(){this._encode.pop(),this._parent.pop(),this._lookup.pop(),this._markpath.pop()},parent(){return F(this._parent)},encode(){return F(this._encode)},lookup(){return F(this._lookup)},markpath(){const t=this._markpath;return++t[t.length-1]},fieldRef(t,e){if(xt(t))return Gz(t,e);t.signal||u("Unsupported field reference: "+Ft(t));const n=t.signal;let r=this.field[n];if(!r){const t={name:this.signalRef(n)};e&&(t.as=e),this.field[n]=r=Yz(this.add(kO(t)))}return r},compareRef(t){let e=!1;const n=t=>tO(t)?(e=!0,this.signalRef(t.signal)):function(t){return t&&t.expr}(t)?(e=!0,this.exprRef(t.expr)):t,r=V(t.field).map(n),i=V(t.order).map(n);return e?Yz(this.add(vO({fields:r,orders:i}))):Xz(r,i)},keyRef(t,e){let n=!1;const r=this.signals;return t=V(t).map((t=>tO(t)?(n=!0,Yz(r[t.signal])):t)),n?Yz(this.add(AO({fields:t,flat:e}))):function(t,e){const n={$key:t};return e&&(n.$flat=!0),n}(t,e)},sortRef(t){if(!t)return t;const e=Zz(t.op,t.field),n=t.order||"ascending";return n.signal?Yz(this.add(vO({fields:e,orders:this.signalRef(n.signal)}))):Xz(e,n)},event(t,e){const n=t+":"+e;if(!this.events[n]){const r=this.id();this.streams.push({id:r,source:t,type:e}),this.events[n]=r}return this.events[n]},hasOwnSignal(t){return lt(this.signals,t)},addSignal(t,e){this.hasOwnSignal(t)&&u("Duplicate signal name: "+Ft(t));const n=e instanceof Iz?e:this.add(Hz(e));return this.signals[t]=n},getSignal(t){return this.signals[t]||u("Unrecognized signal name: "+Ft(t)),this.signals[t]},signalRef(t){return this.signals[t]?Yz(this.signals[t]):(lt(this.lambdas,t)||(this.lambdas[t]=this.add(Hz(null))),Yz(this.lambdas[t]))},parseLambdas(){const t=Object.keys(this.lambdas);for(let e=0,n=t.length;er+Math.floor(o*t.random()),pdf:t=>t===Math.floor(t)&&t>=r&&t=i?1:(e-r+1)/o},icdf:t=>t>=0&&t<=1?r-1+Math.floor(t*o):NaN};return a.min(e).max(n)},t.randomKDE=yu,t.randomLCG=function(t){return function(){return(t=(1103515245*t+12345)%2147483647)/2147483647}},t.randomLogNormal=wu,t.randomMixture=ku,t.randomNormal=mu,t.randomUniform=Cu,t.read=ha,t.regressionConstant=Fu,t.regressionExp=Ou,t.regressionLinear=Nu,t.regressionLoess=Iu,t.regressionLog=zu,t.regressionPoly=Lu,t.regressionPow=Ru,t.regressionQuad=Uu,t.renderModule=b_,t.repeat=Et,t.resetDefaultLocale=function(){return So(),zo(),qo()},t.resetSVGClipId=Ig,t.resetSVGDefIds=function(){Ig(),Ip=0},t.responseType=fa,t.runtimeContext=OB,t.sampleCurve=Gu,t.sampleLogNormal=vu,t.sampleNormal=hu,t.sampleUniform=Au,t.scale=np,t.sceneEqual=F_,t.sceneFromJSON=Vy,t.scenePickVisit=Rm,t.sceneToJSON=Gy,t.sceneVisit=Om,t.sceneZOrder=zm,t.scheme=xp,t.serializeXML=Xv,t.setRandom=function(e){t.random=e},t.span=Ct,t.splitAccessPath=s,t.stringValue=Ft,t.textMetrics=wy,t.timeBin=Qr,t.timeFloor=Ar,t.timeFormatLocale=Ro,t.timeInterval=Sr,t.timeOffset=Br,t.timeSequence=Or,t.timeUnitSpecifier=or,t.timeUnits=rr,t.toBoolean=St,t.toDate=Tt,t.toNumber=S,t.toSet=Nt,t.toString=Bt,t.transform=eu,t.transforms=Ka,t.truncate=zt,t.truthy=p,t.tupleid=_a,t.typeParsers=Ko,t.utcFloor=Dr,t.utcInterval=$r,t.utcOffset=Nr,t.utcSequence=Rr,t.utcdayofyear=pr,t.utcquarter=G,t.utcweek=gr,t.version="5.25.0",t.visitArray=Ot,t.week=lr,t.writeConfig=D,t.zero=h,t.zoomLinear=j,t.zoomLog=I,t.zoomPow=W,t.zoomSymlog=H})); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).vega={})}(this,(function(t){"use strict";function e(t,e,n){return t.fields=e||[],t.fname=n,t}function n(t){return null==t?null:t.fname}function r(t){return null==t?null:t.fields}function i(t){return 1===t.length?o(t[0]):a(t)}const o=t=>function(e){return e[t]},a=t=>{const e=t.length;return function(n){for(let r=0;rr&&c(),u=r=i+1):"]"===o&&(u||s("Access path missing open bracket: "+t),u>0&&c(),u=0,r=i+1):i>r?c():r=i+1}return u&&s("Access path missing closing bracket: "+t),a&&s("Access path missing closing quote: "+t),i>r&&(i++,c()),e}function l(t,n,r){const o=u(t);return t=1===o.length?o[0]:t,e((r&&r.get||i)(o),[t],n||t)}const c=l("id"),f=e((t=>t),[],"identity"),h=e((()=>0),[],"zero"),d=e((()=>1),[],"one"),p=e((()=>!0),[],"true"),g=e((()=>!1),[],"false");function m(t,e,n){const r=[e].concat([].slice.call(n));console[t].apply(console,r)}const y=0,v=1,_=2,x=3,b=4;function w(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:m,r=t||y;return{level(t){return arguments.length?(r=+t,this):r},error(){return r>=v&&n(e||"error","ERROR",arguments),this},warn(){return r>=_&&n(e||"warn","WARN",arguments),this},info(){return r>=x&&n(e||"log","INFO",arguments),this},debug(){return r>=b&&n(e||"log","DEBUG",arguments),this}}}var k=Array.isArray;function A(t){return t===Object(t)}const M=t=>"__proto__"!==t;function E(){for(var t=arguments.length,e=new Array(t),n=0;n{for(const n in e)if("signals"===n)t.signals=C(t.signals,e.signals);else{const r="legend"===n?{layout:1}:"style"===n||null;D(t,n,e[n],r)}return t}),{})}function D(t,e,n,r){if(!M(e))return;let i,o;if(A(n)&&!k(n))for(i in o=A(t[e])?t[e]:t[e]={},n)r&&(!0===r||r[i])?D(o,i,n[i]):M(i)&&(o[i]=n[i]);else t[e]=n}function C(t,e){if(null==t)return e;const n={},r=[];function i(t){n[t.name]||(n[t.name]=1,r.push(t))}return e.forEach(i),t.forEach(i),r}function F(t){return t[t.length-1]}function S(t){return null==t||""===t?null:+t}const $=t=>e=>t*Math.exp(e),T=t=>e=>Math.log(t*e),B=t=>e=>Math.sign(e)*Math.log1p(Math.abs(e/t)),z=t=>e=>Math.sign(e)*Math.expm1(Math.abs(e))*t,N=t=>e=>e<0?-Math.pow(-e,t):Math.pow(e,t);function O(t,e,n,r){const i=n(t[0]),o=n(F(t)),a=(o-i)*e;return[r(i-a),r(o-a)]}function R(t,e){return O(t,e,S,f)}function U(t,e){var n=Math.sign(t[0]);return O(t,e,T(n),$(n))}function L(t,e,n){return O(t,e,N(n),N(1/n))}function q(t,e,n){return O(t,e,B(n),z(n))}function P(t,e,n,r,i){const o=r(t[0]),a=r(F(t)),s=null!=e?r(e):(o+a)/2;return[i(s+(o-s)*n),i(s+(a-s)*n)]}function j(t,e,n){return P(t,e,n,S,f)}function I(t,e,n){const r=Math.sign(t[0]);return P(t,e,n,T(r),$(r))}function H(t,e,n,r){return P(t,e,n,N(r),N(1/r))}function W(t,e,n,r){return P(t,e,n,B(r),z(r))}function Y(t){return 1+~~(new Date(t).getMonth()/3)}function G(t){return 1+~~(new Date(t).getUTCMonth()/3)}function V(t){return null!=t?k(t)?t:[t]:[]}function X(t,e,n){let r,i=t[0],o=t[1];return o=n-e?[e,n]:[i=Math.min(Math.max(i,e),n-r),i+r]}function J(t){return"function"==typeof t}const Z="descending";function Q(t,n,i){i=i||{},n=V(n)||[];const o=[],a=[],s={},u=i.comparator||tt;return V(t).forEach(((t,e)=>{null!=t&&(o.push(n[e]===Z?-1:1),a.push(t=J(t)?t:l(t,null,i)),(r(t)||[]).forEach((t=>s[t]=1)))})),0===a.length?null:e(u(a,o),Object.keys(s))}const K=(t,e)=>(te||null==e)&&null!=t?1:(e=e instanceof Date?+e:e,(t=t instanceof Date?+t:t)!==t&&e==e?-1:e!=e&&t==t?1:0),tt=(t,e)=>1===t.length?et(t[0],e[0]):nt(t,e,t.length),et=(t,e)=>function(n,r){return K(t(n),t(r))*e},nt=(t,e,n)=>(e.push(0),function(r,i){let o,a=0,s=-1;for(;0===a&&++st}function it(t,e){let n;return r=>{n&&clearTimeout(n),n=setTimeout((()=>(e(r),n=null)),t)}}function ot(t){for(let e,n,r=1,i=arguments.length;ro&&(o=r))}else{for(r=e(t[a]);ao&&(o=r))}return[i,o]}function st(t,e){const n=t.length;let r,i,o,a,s,u=-1;if(null==e){for(;++u=i){r=o=i;break}if(u===n)return[-1,-1];for(a=s=u;++ui&&(r=i,a=u),o=i){r=o=i;break}if(u===n)return[-1,-1];for(a=s=u;++ui&&(r=i,a=u),or(t)?n[t]:void 0,set(t,e){return r(t)||(++i.size,n[t]===ct&&--i.empty),n[t]=e,this},delete(t){return r(t)&&(--i.size,++i.empty,n[t]=ct),this},clear(){i.size=i.empty=0,i.object=n={}},test(t){return arguments.length?(e=t,i):e},clean(){const t={};let r=0;for(const i in n){const o=n[i];o===ct||e&&e(o)||(t[i]=o,++r)}i.size=r,i.empty=0,i.object=n=t}};return t&&Object.keys(t).forEach((e=>{i.set(e,t[e])})),i}function ht(t,e,n,r,i,o){if(!n&&0!==n)return o;const a=+n;let s,u=t[0],l=F(t);la&&(i=o,o=a,a=i),r=void 0===r||r,((n=void 0===n||n)?o<=t:ot.replace(/\\(.)/g,"$1"))):V(t));const o=t&&t.length,a=r&&r.get||i,s=t=>a(n?[t]:u(t));let l;if(o)if(1===o){const e=s(t[0]);l=function(t){return""+e(t)}}else{const e=t.map(s);l=function(t){let n=""+e[0](t),r=0;for(;++r{e={},n={},r=0},o=(i,o)=>(++r>t&&(n=e,e={},r=1),e[i]=o);return i(),{clear:i,has:t=>lt(e,t)||lt(n,t),get:t=>lt(e,t)?e[t]:lt(n,t)?o(t,n[t]):void 0,set:(t,n)=>lt(e,t)?e[t]=n:o(t,n)}}function At(t,e,n,r){const i=e.length,o=n.length;if(!o)return e;if(!i)return n;const a=r||new e.constructor(i+o);let s=0,u=0,l=0;for(;s0?n[u++]:e[s++];for(;s=0;)n+=t;return n}function Et(t,e,n,r){const i=n||" ",o=t+"",a=e-o.length;return a<=0?o:"left"===r?Mt(i,a)+o:"center"===r?Mt(i,~~(a/2))+o+Mt(i,Math.ceil(a/2)):o+Mt(i,a)}function Dt(t){return t&&F(t)-t[0]||0}function Ct(t){return k(t)?"["+t.map(Ct)+"]":A(t)||xt(t)?JSON.stringify(t).replace("\u2028","\\u2028").replace("\u2029","\\u2029"):t}function Ft(t){return null==t||""===t?null:!(!t||"false"===t||"0"===t)&&!!t}const St=t=>vt(t)||mt(t)?t:Date.parse(t);function $t(t,e){return e=e||St,null==t||""===t?null:e(t)}function Tt(t){return null==t||""===t?null:t+""}function Bt(t){const e={},n=t.length;for(let r=0;r9999?"+"+It(e,6):It(e,4))+"-"+It(t.getUTCMonth()+1,2)+"-"+It(t.getUTCDate(),2)+(o?"T"+It(n,2)+":"+It(r,2)+":"+It(i,2)+"."+It(o,3)+"Z":i?"T"+It(n,2)+":"+It(r,2)+":"+It(i,2)+"Z":r||n?"T"+It(n,2)+":"+It(r,2)+"Z":"")}function Wt(t){var e=new RegExp('["'+t+"\n\r]"),n=t.charCodeAt(0);function r(t,e){var r,i=[],o=t.length,a=0,s=0,u=o<=0,l=!1;function c(){if(u)return Rt;if(l)return l=!1,Ot;var e,r,i=a;if(t.charCodeAt(i)===Ut){for(;a++=o?u=!0:(r=t.charCodeAt(a++))===Lt?l=!0:r===qt&&(l=!0,t.charCodeAt(a)===Lt&&++a),t.slice(i+1,e-1).replace(/""/g,'"')}for(;a1)r=function(t,e,n){var r,i=[],o=[];function a(t){var e=t<0?~t:t;(o[e]||(o[e]=[])).push({i:t,g:r})}function s(t){t.forEach(a)}function u(t){t.forEach(s)}function l(t){t.forEach(u)}function c(t){switch(r=t,t.type){case"GeometryCollection":t.geometries.forEach(c);break;case"LineString":s(t.arcs);break;case"MultiLineString":case"Polygon":u(t.arcs);break;case"MultiPolygon":l(t.arcs)}}return c(e),o.forEach(null==n?function(t){i.push(t[0].i)}:function(t){n(t[0].g,t[t.length-1].g)&&i.push(t[0].i)}),i}(0,e,n);else for(i=0,r=new Array(o=t.arcs.length);ie?1:t>=e?0:NaN}function te(t,e){return null==t||null==e?NaN:et?1:e>=t?0:NaN}function ee(t){let e,n,r;function i(t,r){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.length;if(i>>1;n(t[e],r)<0?i=e+1:o=e}while(iKt(t(e),n),r=(e,n)=>t(e)-n):(e=t===Kt||t===te?t:ne,n=t,r=t),{left:i,center:function(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;const o=i(t,e,n,(arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.length)-1);return o>n&&r(t[o-1],e)>-r(t[o],e)?o-1:o},right:function(t,r){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.length;if(i>>1;n(t[e],r)<=0?i=e+1:o=e}while(i0){for(o=t[--i];i>0&&(e=o,n=t[--i],o=e+n,r=n-(o-e),!r););i>0&&(r<0&&t[i-1]<0||r>0&&t[i-1]>0)&&(n=2*r,e=o+n,n==e-o&&(o=e))}return o}}class le extends Map{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:pe;if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[e,n]of t)this.set(e,n)}get(t){return super.get(fe(this,t))}has(t){return super.has(fe(this,t))}set(t,e){return super.set(he(this,t),e)}delete(t){return super.delete(de(this,t))}}class ce extends Set{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:pe;if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const e of t)this.add(e)}has(t){return super.has(fe(this,t))}add(t){return super.add(he(this,t))}delete(t){return super.delete(de(this,t))}}function fe(t,e){let{_intern:n,_key:r}=t;const i=r(e);return n.has(i)?n.get(i):e}function he(t,e){let{_intern:n,_key:r}=t;const i=r(e);return n.has(i)?n.get(i):(n.set(i,e),e)}function de(t,e){let{_intern:n,_key:r}=t;const i=r(e);return n.has(i)&&(e=n.get(i),n.delete(i)),e}function pe(t){return null!==t&&"object"==typeof t?t.valueOf():t}function ge(t,e){return(null==t||!(t>=t))-(null==e||!(e>=e))||(te?1:0)}const me=Math.sqrt(50),ye=Math.sqrt(10),ve=Math.sqrt(2);function _e(t,e,n){const r=(e-t)/Math.max(0,n),i=Math.floor(Math.log10(r)),o=r/Math.pow(10,i),a=o>=me?10:o>=ye?5:o>=ve?2:1;let s,u,l;return i<0?(l=Math.pow(10,-i)/a,s=Math.round(t*l),u=Math.round(e*l),s/le&&--u,l=-l):(l=Math.pow(10,i)*a,s=Math.round(t/l),u=Math.round(e/l),s*le&&--u),u0))return[];if((t=+t)===(e=+e))return[t];const r=e=i))return[];const s=o-i+1,u=new Array(s);if(r)if(a<0)for(let t=0;t=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n=i)&&(n=i)}return n}function Ae(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n>e||void 0===n&&e>=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}function Me(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1/0,i=arguments.length>4?arguments[4]:void 0;if(e=Math.floor(e),n=Math.floor(Math.max(0,n)),r=Math.floor(Math.min(t.length-1,r)),!(n<=e&&e<=r))return t;for(i=void 0===i?ge:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Kt;if(t===Kt)return ge;if("function"!=typeof t)throw new TypeError("compare is not a function");return(e,n)=>{const r=t(e,n);return r||0===r?r:(0===t(n,n))-(0===t(e,e))}}(i);r>n;){if(r-n>600){const o=r-n+1,a=e-n+1,s=Math.log(o),u=.5*Math.exp(2*s/3),l=.5*Math.sqrt(s*u*(o-u)/o)*(a-o/2<0?-1:1);Me(t,e,Math.max(n,Math.floor(e-a*u/o+l)),Math.min(r,Math.floor(e+(o-a)*u/o+l)),i)}const o=t[e];let a=n,s=r;for(Ee(t,n,e),i(t[r],o)>0&&Ee(t,n,r);a0;)--s}0===i(t[n],o)?Ee(t,n,s):(++s,Ee(t,s,r)),s<=e&&(n=s+1),e<=s&&(r=s-1)}return t}function Ee(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function De(t,e,n){if(t=Float64Array.from(function*(t,e){if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(yield e);else{let n=-1;for(let r of t)null!=(r=e(r,++n,t))&&(r=+r)>=r&&(yield r)}}(t,n)),(r=t.length)&&!isNaN(e=+e)){if(e<=0||r<2)return Ae(t);if(e>=1)return ke(t);var r,i=(r-1)*e,o=Math.floor(i),a=ke(Me(t,o).subarray(0,o+1));return a+(Ae(t.subarray(o+1))-a)*(i-o)}}function Ce(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:re;if((r=t.length)&&!isNaN(e=+e)){if(e<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,o=Math.floor(i),a=+n(t[o],o,t);return a+(+n(t[o+1],o+1,t)-a)*(i-o)}}function Fe(t,e){return De(t,.5,e)}function Se(t){return Array.from(function*(t){for(const e of t)yield*e}(t))}function $e(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((e-t)/n)),o=new Array(i);++r1?r[0]+r.slice(2):r,+t.slice(n+1)]}function Ne(t){return(t=ze(Math.abs(t)))?t[1]:NaN}var Oe,Re=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Ue(t){if(!(e=Re.exec(t)))throw new Error("invalid format: "+t);var e;return new Le({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function Le(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function qe(t,e){var n=ze(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}Ue.prototype=Le.prototype,Le.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var Pe={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>qe(100*t,e),r:qe,s:function(t,e){var n=ze(t,e);if(!n)return t+"";var r=n[0],i=n[1],o=i-(Oe=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,a=r.length;return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+ze(t,Math.max(0,e+o-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function je(t){return t}var Ie,He,We,Ye=Array.prototype.map,Ge=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Ve(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?je:(e=Ye.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,o=[],a=0,s=e[0],u=0;i>0&&s>0&&(u+s+1>r&&(s=Math.max(1,r-u)),o.push(t.substring(i-=s,i+s)),!((u+=s+1)>r));)s=e[a=(a+1)%e.length];return o.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",o=void 0===t.currency?"":t.currency[1]+"",a=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?je:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(Ye.call(t.numerals,String)),u=void 0===t.percent?"%":t.percent+"",l=void 0===t.minus?"−":t.minus+"",c=void 0===t.nan?"NaN":t.nan+"";function f(t){var e=(t=Ue(t)).fill,n=t.align,f=t.sign,h=t.symbol,d=t.zero,p=t.width,g=t.comma,m=t.precision,y=t.trim,v=t.type;"n"===v?(g=!0,v="g"):Pe[v]||(void 0===m&&(m=12),y=!0,v="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var _="$"===h?i:"#"===h&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",x="$"===h?o:/[%p]/.test(v)?u:"",b=Pe[v],w=/[defgprs%]/.test(v);function k(t){var i,o,u,h=_,k=x;if("c"===v)k=b(t)+k,t="";else{var A=(t=+t)<0||1/t<0;if(t=isNaN(t)?c:b(Math.abs(t),m),y&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),A&&0==+t&&"+"!==f&&(A=!1),h=(A?"("===f?f:l:"-"===f||"("===f?"":f)+h,k=("s"===v?Ge[8+Oe/3]:"")+k+(A&&"("===f?")":""),w)for(i=-1,o=t.length;++i(u=t.charCodeAt(i))||u>57){k=(46===u?a+t.slice(i+1):t.slice(i))+k,t=t.slice(0,i);break}}g&&!d&&(t=r(t,1/0));var M=h.length+t.length+k.length,E=M>1)+h+t+k+E.slice(M);break;default:t=E+h+t+k}return s(t)}return m=void 0===m?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,m)):Math.max(0,Math.min(20,m)),k.toString=function(){return t+""},k}return{format:f,formatPrefix:function(t,e){var n=f(((t=Ue(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(Ne(e)/3))),i=Math.pow(10,-r),o=Ge[8+r/3];return function(t){return n(i*t)+o}}}}function Xe(t){return Math.max(0,-Ne(Math.abs(t)))}function Je(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Ne(e)/3)))-Ne(Math.abs(t)))}function Ze(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Ne(e)-Ne(t))+1}!function(t){Ie=Ve(t),He=Ie.format,We=Ie.formatPrefix}({thousands:",",grouping:[3],currency:["$",""]});const Qe=new Date,Ke=new Date;function tn(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=e=>(t(e=new Date(+e)),e),i.ceil=n=>(t(n=new Date(n-1)),e(n,1),t(n),n),i.round=t=>{const e=i(t),n=i.ceil(t);return t-e(e(t=new Date(+t),null==n?1:Math.floor(n)),t),i.range=(n,r,o)=>{const a=[];if(n=i.ceil(n),o=null==o?1:Math.floor(o),!(n0))return a;let s;do{a.push(s=new Date(+n)),e(n,o),t(n)}while(stn((e=>{if(e>=e)for(;t(e),!n(e);)e.setTime(e-1)}),((t,r)=>{if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););})),n&&(i.count=(e,r)=>(Qe.setTime(+e),Ke.setTime(+r),t(Qe),t(Ke),Math.floor(n(Qe,Ke))),i.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?e=>r(e)%t==0:e=>i.count(0,e)%t==0):i:null)),i}const en=tn((()=>{}),((t,e)=>{t.setTime(+t+e)}),((t,e)=>e-t));en.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?tn((e=>{e.setTime(Math.floor(e/t)*t)}),((e,n)=>{e.setTime(+e+n*t)}),((e,n)=>(n-e)/t)):en:null),en.range;const nn=1e3,rn=6e4,on=36e5,an=864e5,sn=6048e5,un=2592e6,ln=31536e6,cn=tn((t=>{t.setTime(t-t.getMilliseconds())}),((t,e)=>{t.setTime(+t+e*nn)}),((t,e)=>(e-t)/nn),(t=>t.getUTCSeconds()));cn.range;const fn=tn((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*nn)}),((t,e)=>{t.setTime(+t+e*rn)}),((t,e)=>(e-t)/rn),(t=>t.getMinutes()));fn.range;const hn=tn((t=>{t.setUTCSeconds(0,0)}),((t,e)=>{t.setTime(+t+e*rn)}),((t,e)=>(e-t)/rn),(t=>t.getUTCMinutes()));hn.range;const dn=tn((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*nn-t.getMinutes()*rn)}),((t,e)=>{t.setTime(+t+e*on)}),((t,e)=>(e-t)/on),(t=>t.getHours()));dn.range;const pn=tn((t=>{t.setUTCMinutes(0,0,0)}),((t,e)=>{t.setTime(+t+e*on)}),((t,e)=>(e-t)/on),(t=>t.getUTCHours()));pn.range;const gn=tn((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*rn)/an),(t=>t.getDate()-1));gn.range;const mn=tn((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/an),(t=>t.getUTCDate()-1));mn.range;const yn=tn((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/an),(t=>Math.floor(t/an)));function vn(t){return tn((e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),((t,e)=>{t.setDate(t.getDate()+7*e)}),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*rn)/sn))}yn.range;const _n=vn(0),xn=vn(1),bn=vn(2),wn=vn(3),kn=vn(4),An=vn(5),Mn=vn(6);function En(t){return tn((e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)}),((t,e)=>(e-t)/sn))}_n.range,xn.range,bn.range,wn.range,kn.range,An.range,Mn.range;const Dn=En(0),Cn=En(1),Fn=En(2),Sn=En(3),$n=En(4),Tn=En(5),Bn=En(6);Dn.range,Cn.range,Fn.range,Sn.range,$n.range,Tn.range,Bn.range;const zn=tn((t=>{t.setDate(1),t.setHours(0,0,0,0)}),((t,e)=>{t.setMonth(t.getMonth()+e)}),((t,e)=>e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())),(t=>t.getMonth()));zn.range;const Nn=tn((t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)}),((t,e)=>e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())),(t=>t.getUTCMonth()));Nn.range;const On=tn((t=>{t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,e)=>{t.setFullYear(t.getFullYear()+e)}),((t,e)=>e.getFullYear()-t.getFullYear()),(t=>t.getFullYear()));On.every=t=>isFinite(t=Math.floor(t))&&t>0?tn((e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,n)=>{e.setFullYear(e.getFullYear()+n*t)})):null,On.range;const Rn=tn((t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)}),((t,e)=>e.getUTCFullYear()-t.getUTCFullYear()),(t=>t.getUTCFullYear()));function Un(t,e,n,r,i,o){const a=[[cn,1,nn],[cn,5,5e3],[cn,15,15e3],[cn,30,3e4],[o,1,rn],[o,5,3e5],[o,15,9e5],[o,30,18e5],[i,1,on],[i,3,108e5],[i,6,216e5],[i,12,432e5],[r,1,an],[r,2,1728e5],[n,1,sn],[e,1,un],[e,3,7776e6],[t,1,ln]];function s(e,n,r){const i=Math.abs(n-e)/r,o=ee((t=>{let[,,e]=t;return e})).right(a,i);if(o===a.length)return t.every(we(e/ln,n/ln,r));if(0===o)return en.every(Math.max(we(e,n,r),1));const[s,u]=a[i/a[o-1][2]isFinite(t=Math.floor(t))&&t>0?tn((e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null,Rn.range;const[Ln,qn]=Un(Rn,Nn,Dn,yn,pn,hn),[Pn,jn]=Un(On,zn,_n,gn,dn,fn),In="year",Hn="quarter",Wn="month",Yn="week",Gn="date",Vn="day",Xn="dayofyear",Jn="hours",Zn="minutes",Qn="seconds",Kn="milliseconds",tr=[In,Hn,Wn,Yn,Gn,Vn,Xn,Jn,Zn,Qn,Kn],er=tr.reduce(((t,e,n)=>(t[e]=1+n,t)),{});function nr(t){const e=V(t).slice(),n={};e.length||s("Missing time unit."),e.forEach((t=>{lt(er,t)?n[t]=1:s(`Invalid time unit: ${t}.`)}));return(n[Yn]||n[Vn]?1:0)+(n[Hn]||n[Wn]||n[Gn]?1:0)+(n[Xn]?1:0)>1&&s(`Incompatible time units: ${t}`),e.sort(((t,e)=>er[t]-er[e])),e}const rr={[In]:"%Y ",[Hn]:"Q%q ",[Wn]:"%b ",[Gn]:"%d ",[Yn]:"W%U ",[Vn]:"%a ",[Xn]:"%j ",[Jn]:"%H:00",[Zn]:"00:%M",[Qn]:":%S",[Kn]:".%L",[`${In}-${Wn}`]:"%Y-%m ",[`${In}-${Wn}-${Gn}`]:"%Y-%m-%d ",[`${Jn}-${Zn}`]:"%H:%M"};function ir(t,e){const n=ot({},rr,e),r=nr(t),i=r.length;let o,a,s="",u=0;for(u=0;uu;--o)if(a=r.slice(u,o).join("-"),null!=n[a]){s+=n[a],u=o;break}return s.trim()}const or=new Date;function ar(t){return or.setFullYear(t),or.setMonth(0),or.setDate(1),or.setHours(0,0,0,0),or}function sr(t){return lr(new Date(t))}function ur(t){return cr(new Date(t))}function lr(t){return gn.count(ar(t.getFullYear())-1,t)}function cr(t){return _n.count(ar(t.getFullYear())-1,t)}function fr(t){return ar(t).getDay()}function hr(t,e,n,r,i,o,a){if(0<=t&&t<100){const s=new Date(-1,e,n,r,i,o,a);return s.setFullYear(t),s}return new Date(t,e,n,r,i,o,a)}function dr(t){return gr(new Date(t))}function pr(t){return mr(new Date(t))}function gr(t){const e=Date.UTC(t.getUTCFullYear(),0,1);return mn.count(e-1,t)}function mr(t){const e=Date.UTC(t.getUTCFullYear(),0,1);return Dn.count(e-1,t)}function yr(t){return or.setTime(Date.UTC(t,0,1)),or.getUTCDay()}function vr(t,e,n,r,i,o,a){if(0<=t&&t<100){const t=new Date(Date.UTC(-1,e,n,r,i,o,a));return t.setUTCFullYear(n.y),t}return new Date(Date.UTC(t,e,n,r,i,o,a))}function _r(t,e,n,r,i){const o=e||1,a=F(t),s=(t,e,i)=>function(t,e,n,r){const i=n<=1?t:r?(e,i)=>r+n*Math.floor((t(e,i)-r)/n):(e,r)=>n*Math.floor(t(e,r)/n);return e?(t,n)=>e(i(t,n),n):i}(n[i=i||t],r[i],t===a&&o,e),u=new Date,l=Bt(t),c=l[In]?s(In):rt(2012),f=l[Wn]?s(Wn):l[Hn]?s(Hn):h,p=l[Yn]&&l[Vn]?s(Vn,1,Yn+Vn):l[Yn]?s(Yn,1):l[Vn]?s(Vn,1):l[Gn]?s(Gn,1):l[Xn]?s(Xn,1):d,g=l[Jn]?s(Jn):h,m=l[Zn]?s(Zn):h,y=l[Qn]?s(Qn):h,v=l[Kn]?s(Kn):h;return function(t){u.setTime(+t);const e=c(u);return i(e,f(u),p(u,e),g(u),m(u),y(u),v(u))}}function xr(t,e,n){return e+7*t-(n+6)%7}const br={[In]:t=>t.getFullYear(),[Hn]:t=>Math.floor(t.getMonth()/3),[Wn]:t=>t.getMonth(),[Gn]:t=>t.getDate(),[Jn]:t=>t.getHours(),[Zn]:t=>t.getMinutes(),[Qn]:t=>t.getSeconds(),[Kn]:t=>t.getMilliseconds(),[Xn]:t=>lr(t),[Yn]:t=>cr(t),[Yn+Vn]:(t,e)=>xr(cr(t),t.getDay(),fr(e)),[Vn]:(t,e)=>xr(1,t.getDay(),fr(e))},wr={[Hn]:t=>3*t,[Yn]:(t,e)=>xr(t,0,fr(e))};function kr(t,e){return _r(t,e||1,br,wr,hr)}const Ar={[In]:t=>t.getUTCFullYear(),[Hn]:t=>Math.floor(t.getUTCMonth()/3),[Wn]:t=>t.getUTCMonth(),[Gn]:t=>t.getUTCDate(),[Jn]:t=>t.getUTCHours(),[Zn]:t=>t.getUTCMinutes(),[Qn]:t=>t.getUTCSeconds(),[Kn]:t=>t.getUTCMilliseconds(),[Xn]:t=>gr(t),[Yn]:t=>mr(t),[Vn]:(t,e)=>xr(1,t.getUTCDay(),yr(e)),[Yn+Vn]:(t,e)=>xr(mr(t),t.getUTCDay(),yr(e))},Mr={[Hn]:t=>3*t,[Yn]:(t,e)=>xr(t,0,yr(e))};function Er(t,e){return _r(t,e||1,Ar,Mr,vr)}const Dr={[In]:On,[Hn]:zn.every(3),[Wn]:zn,[Yn]:_n,[Gn]:gn,[Vn]:gn,[Xn]:gn,[Jn]:dn,[Zn]:fn,[Qn]:cn,[Kn]:en},Cr={[In]:Rn,[Hn]:Nn.every(3),[Wn]:Nn,[Yn]:Dn,[Gn]:mn,[Vn]:mn,[Xn]:mn,[Jn]:pn,[Zn]:hn,[Qn]:cn,[Kn]:en};function Fr(t){return Dr[t]}function Sr(t){return Cr[t]}function $r(t,e,n){return t?t.offset(e,n):void 0}function Tr(t,e,n){return $r(Fr(t),e,n)}function Br(t,e,n){return $r(Sr(t),e,n)}function zr(t,e,n,r){return t?t.range(e,n,r):void 0}function Nr(t,e,n,r){return zr(Fr(t),e,n,r)}function Or(t,e,n,r){return zr(Sr(t),e,n,r)}const Rr=1e3,Ur=6e4,Lr=36e5,qr=864e5,Pr=2592e6,jr=31536e6,Ir=[In,Wn,Gn,Jn,Zn,Qn,Kn],Hr=Ir.slice(0,-1),Wr=Hr.slice(0,-1),Yr=Wr.slice(0,-1),Gr=Yr.slice(0,-1),Vr=[In,Wn],Xr=[In],Jr=[[Hr,1,Rr],[Hr,5,5e3],[Hr,15,15e3],[Hr,30,3e4],[Wr,1,Ur],[Wr,5,3e5],[Wr,15,9e5],[Wr,30,18e5],[Yr,1,Lr],[Yr,3,108e5],[Yr,6,216e5],[Yr,12,432e5],[Gr,1,qr],[[In,Yn],1,6048e5],[Vr,1,Pr],[Vr,3,7776e6],[Xr,1,jr]];function Zr(t){const e=t.extent,n=t.maxbins||40,r=Math.abs(Dt(e))/n;let i,o,a=ee((t=>t[2])).right(Jr,r);return a===Jr.length?(i=Xr,o=we(e[0]/jr,e[1]/jr,n)):a?(a=Jr[r/Jr[a-1][2]=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:ko,s:Ao,S:Ii,u:Hi,U:Wi,V:Gi,w:Vi,W:Xi,x:null,X:null,y:Ji,Y:Qi,Z:to,"%":wo},x={a:function(t){return a[t.getUTCDay()]},A:function(t){return o[t.getUTCDay()]},b:function(t){return u[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:eo,e:eo,f:ao,g:vo,G:xo,H:no,I:ro,j:io,L:oo,m:so,M:uo,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:ko,s:Ao,S:lo,u:co,U:fo,V:po,w:go,W:mo,x:null,X:null,y:yo,Y:_o,Z:bo,"%":wo},b={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=p.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=f.exec(e.slice(n));return r?(t.w=h.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=y.exec(e.slice(n));return r?(t.m=v.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=g.exec(e.slice(n));return r?(t.m=m.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return A(t,e,n,r)},d:Mi,e:Mi,f:$i,g:bi,G:xi,H:Di,I:Di,j:Ei,L:Si,m:Ai,M:Ci,p:function(t,e,n){var r=l.exec(e.slice(n));return r?(t.p=c.get(r[0].toLowerCase()),n+r[0].length):-1},q:ki,Q:Bi,s:zi,S:Fi,u:mi,U:yi,V:vi,w:gi,W:_i,x:function(t,e,r){return A(t,n,e,r)},X:function(t,e,n){return A(t,r,e,n)},y:bi,Y:xi,Z:wi,"%":Ti};function w(t,e){return function(n){var r,i,o,a=[],s=-1,u=0,l=t.length;for(n instanceof Date||(n=new Date(+n));++s53)return null;"w"in o||(o.w=1),"Z"in o?(i=(r=Kr(ti(o.y,0,1))).getUTCDay(),r=i>4||0===i?Cn.ceil(r):Cn(r),r=mn.offset(r,7*(o.V-1)),o.y=r.getUTCFullYear(),o.m=r.getUTCMonth(),o.d=r.getUTCDate()+(o.w+6)%7):(i=(r=Qr(ti(o.y,0,1))).getDay(),r=i>4||0===i?xn.ceil(r):xn(r),r=gn.offset(r,7*(o.V-1)),o.y=r.getFullYear(),o.m=r.getMonth(),o.d=r.getDate()+(o.w+6)%7)}else("W"in o||"U"in o)&&("w"in o||(o.w="u"in o?o.u%7:"W"in o?1:0),i="Z"in o?Kr(ti(o.y,0,1)).getUTCDay():Qr(ti(o.y,0,1)).getDay(),o.m=0,o.d="W"in o?(o.w+6)%7+7*o.W-(i+5)%7:o.w+7*o.U-(i+6)%7);return"Z"in o?(o.H+=o.Z/100|0,o.M+=o.Z%100,Kr(o)):Qr(o)}}function A(t,e,n,r){for(var i,o,a=0,s=e.length,u=n.length;a=u)return-1;if(37===(i=e.charCodeAt(a++))){if(i=e.charAt(a++),!(o=b[i in si?e.charAt(a++):i])||(r=o(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return _.x=w(n,_),_.X=w(r,_),_.c=w(e,_),x.x=w(n,x),x.X=w(r,x),x.c=w(e,x),{format:function(t){var e=w(t+="",_);return e.toString=function(){return t},e},parse:function(t){var e=k(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=w(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=k(t+="",!0);return e.toString=function(){return t},e}}}var ni,ri,ii,oi,ai,si={"-":"",_:" ",0:"0"},ui=/^\s*\d+/,li=/^%/,ci=/[\\^$*+?|[\]().{}]/g;function fi(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o[t.toLowerCase(),e])))}function gi(t,e,n){var r=ui.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function mi(t,e,n){var r=ui.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function yi(t,e,n){var r=ui.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function vi(t,e,n){var r=ui.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function _i(t,e,n){var r=ui.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function xi(t,e,n){var r=ui.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function bi(t,e,n){var r=ui.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function wi(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function ki(t,e,n){var r=ui.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function Ai(t,e,n){var r=ui.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function Mi(t,e,n){var r=ui.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Ei(t,e,n){var r=ui.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function Di(t,e,n){var r=ui.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Ci(t,e,n){var r=ui.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Fi(t,e,n){var r=ui.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Si(t,e,n){var r=ui.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function $i(t,e,n){var r=ui.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Ti(t,e,n){var r=li.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Bi(t,e,n){var r=ui.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function zi(t,e,n){var r=ui.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Ni(t,e){return fi(t.getDate(),e,2)}function Oi(t,e){return fi(t.getHours(),e,2)}function Ri(t,e){return fi(t.getHours()%12||12,e,2)}function Ui(t,e){return fi(1+gn.count(On(t),t),e,3)}function Li(t,e){return fi(t.getMilliseconds(),e,3)}function qi(t,e){return Li(t,e)+"000"}function Pi(t,e){return fi(t.getMonth()+1,e,2)}function ji(t,e){return fi(t.getMinutes(),e,2)}function Ii(t,e){return fi(t.getSeconds(),e,2)}function Hi(t){var e=t.getDay();return 0===e?7:e}function Wi(t,e){return fi(_n.count(On(t)-1,t),e,2)}function Yi(t){var e=t.getDay();return e>=4||0===e?kn(t):kn.ceil(t)}function Gi(t,e){return t=Yi(t),fi(kn.count(On(t),t)+(4===On(t).getDay()),e,2)}function Vi(t){return t.getDay()}function Xi(t,e){return fi(xn.count(On(t)-1,t),e,2)}function Ji(t,e){return fi(t.getFullYear()%100,e,2)}function Zi(t,e){return fi((t=Yi(t)).getFullYear()%100,e,2)}function Qi(t,e){return fi(t.getFullYear()%1e4,e,4)}function Ki(t,e){var n=t.getDay();return fi((t=n>=4||0===n?kn(t):kn.ceil(t)).getFullYear()%1e4,e,4)}function to(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+fi(e/60|0,"0",2)+fi(e%60,"0",2)}function eo(t,e){return fi(t.getUTCDate(),e,2)}function no(t,e){return fi(t.getUTCHours(),e,2)}function ro(t,e){return fi(t.getUTCHours()%12||12,e,2)}function io(t,e){return fi(1+mn.count(Rn(t),t),e,3)}function oo(t,e){return fi(t.getUTCMilliseconds(),e,3)}function ao(t,e){return oo(t,e)+"000"}function so(t,e){return fi(t.getUTCMonth()+1,e,2)}function uo(t,e){return fi(t.getUTCMinutes(),e,2)}function lo(t,e){return fi(t.getUTCSeconds(),e,2)}function co(t){var e=t.getUTCDay();return 0===e?7:e}function fo(t,e){return fi(Dn.count(Rn(t)-1,t),e,2)}function ho(t){var e=t.getUTCDay();return e>=4||0===e?$n(t):$n.ceil(t)}function po(t,e){return t=ho(t),fi($n.count(Rn(t),t)+(4===Rn(t).getUTCDay()),e,2)}function go(t){return t.getUTCDay()}function mo(t,e){return fi(Cn.count(Rn(t)-1,t),e,2)}function yo(t,e){return fi(t.getUTCFullYear()%100,e,2)}function vo(t,e){return fi((t=ho(t)).getUTCFullYear()%100,e,2)}function _o(t,e){return fi(t.getUTCFullYear()%1e4,e,4)}function xo(t,e){var n=t.getUTCDay();return fi((t=n>=4||0===n?$n(t):$n.ceil(t)).getUTCFullYear()%1e4,e,4)}function bo(){return"+0000"}function wo(){return"%"}function ko(t){return+t}function Ao(t){return Math.floor(+t/1e3)}function Mo(t){const e={};return n=>e[n]||(e[n]=t(n))}function Eo(t){const e=Mo(t.format),n=t.formatPrefix;return{format:e,formatPrefix:n,formatFloat(t){const n=Ue(t||",");if(null==n.precision){switch(n.precision=12,n.type){case"%":n.precision-=2;break;case"e":n.precision-=1}return r=e(n),i=e(".1f")(1)[1],t=>{const e=r(t),n=e.indexOf(i);if(n<0)return e;let o=function(t,e){let n,r=t.lastIndexOf("e");if(r>0)return r;for(r=t.length;--r>e;)if(n=t.charCodeAt(r),n>=48&&n<=57)return r+1}(e,n);const a=on;)if("0"!==e[o]){++o;break}return e.slice(0,o)+a}}return e(n);var r,i},formatSpan(t,r,i,o){o=Ue(null==o?",f":o);const a=we(t,r,i),s=Math.max(Math.abs(t),Math.abs(r));let u;if(null==o.precision)switch(o.type){case"s":return isNaN(u=Je(a,s))||(o.precision=u),n(o,s);case"":case"e":case"g":case"p":case"r":isNaN(u=Ze(a,s))||(o.precision=u-("e"===o.type));break;case"f":case"%":isNaN(u=Xe(a))||(o.precision=u-2*("%"===o.type))}return e(o)}}}let Do,Co;function Fo(){return Do=Eo({format:He,formatPrefix:We})}function So(t){return Eo(Ve(t))}function $o(t){return arguments.length?Do=So(t):Do}function To(t,e,n){A(n=n||{})||s(`Invalid time multi-format specifier: ${n}`);const r=e(Qn),i=e(Zn),o=e(Jn),a=e(Gn),u=e(Yn),l=e(Wn),c=e(Hn),f=e(In),h=t(n[Kn]||".%L"),d=t(n[Qn]||":%S"),p=t(n[Zn]||"%I:%M"),g=t(n[Jn]||"%I %p"),m=t(n[Gn]||n[Vn]||"%a %d"),y=t(n[Yn]||"%b %d"),v=t(n[Wn]||"%B"),_=t(n[Hn]||"%B"),x=t(n[In]||"%Y");return t=>(r(t)xt(t)?e(t):To(e,Fr,t),utcFormat:t=>xt(t)?n(t):To(n,Sr,t),timeParse:Mo(t.parse),utcParse:Mo(t.utcParse)}}function zo(){return Co=Bo({format:ri,parse:ii,utcFormat:oi,utcParse:ai})}function No(t){return Bo(ei(t))}function Oo(t){return arguments.length?Co=No(t):Co}!function(t){ni=ei(t),ri=ni.format,ii=ni.parse,oi=ni.utcFormat,ai=ni.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}),Fo(),zo();const Ro=(t,e)=>ot({},t,e);function Uo(t,e){const n=t?So(t):$o(),r=e?No(e):Oo();return Ro(n,r)}function Lo(t,e){const n=arguments.length;return n&&2!==n&&s("defaultLocale expects either zero or two arguments."),n?Ro($o(t),Oo(e)):Ro($o(),Oo())}const qo=/^(data:|([A-Za-z]+:)?\/\/)/,Po=/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,jo=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g,Io="file://";async function Ho(t,e){const n=await this.sanitize(t,e),r=n.href;return n.localFile?this.file(r):this.http(r,e)}async function Wo(t,e){e=ot({},this.options,e);const n=this.fileAccess,r={href:null};let i,o,a;const u=Po.test(t.replace(jo,""));null!=t&&"string"==typeof t&&u||s("Sanitize failure, invalid URI: "+Ct(t));const l=qo.test(t);return(a=e.baseURL)&&!l&&(t.startsWith("/")||a.endsWith("/")||(t="/"+t),t=a+t),o=(i=t.startsWith(Io))||"file"===e.mode||"http"!==e.mode&&!l&&n,i?t=t.slice(Io.length):t.startsWith("//")&&("file"===e.defaultProtocol?(t=t.slice(2),o=!0):t=(e.defaultProtocol||"http")+":"+t),Object.defineProperty(r,"localFile",{value:!!o}),r.href=t,e.target&&(r.target=e.target+""),e.rel&&(r.rel=e.rel+""),"image"===e.context&&e.crossOrigin&&(r.crossOrigin=e.crossOrigin+""),r}function Yo(t){return t?e=>new Promise(((n,r)=>{t.readFile(e,((t,e)=>{t?r(t):n(e)}))})):Go}async function Go(){s("No file system access.")}function Vo(t){return t?async function(e,n){const r=ot({},this.options.http,n),i=n&&n.response,o=await t(e,r);return o.ok?J(o[i])?o[i]():o.text():s(o.status+""+o.statusText)}:Xo}async function Xo(){s("No HTTP fetch method available.")}const Jo=t=>null!=t&&t==t,Zo=t=>!(Number.isNaN(+t)||t instanceof Date),Qo={boolean:Ft,integer:S,number:S,date:$t,string:Tt,unknown:f},Ko=[t=>"true"===t||"false"===t||!0===t||!1===t,t=>Zo(t)&&Number.isInteger(+t),Zo,t=>!Number.isNaN(Date.parse(t))],ta=["boolean","integer","number","date"];function ea(t,e){if(!t||!t.length)return"unknown";const n=t.length,r=Ko.length,i=Ko.map(((t,e)=>e+1));for(let o,a,s=0,u=0;s0===t?e:t),0)-1]}function na(t,e){return e.reduce(((e,n)=>(e[n]=ea(t,n),e)),{})}function ra(t){const e=function(e,n){const r={delimiter:t};return ia(e,n?ot(n,r):r)};return e.responseType="text",e}function ia(t,e){return e.header&&(t=e.header.map(Ct).join(e.delimiter)+"\n"+t),Wt(e.delimiter).parse(t+"")}function oa(t,e){const n=e&&e.property?l(e.property):f;return!A(t)||(r=t,"function"==typeof Buffer&&J(Buffer.isBuffer)&&Buffer.isBuffer(r))?n(JSON.parse(t)):function(t,e){!k(t)&&yt(t)&&(t=[...t]);return e&&e.copy?JSON.parse(JSON.stringify(t)):t}(n(t),e);var r}ia.responseType="text",oa.responseType="json";const aa={interior:(t,e)=>t!==e,exterior:(t,e)=>t===e};function sa(t,e){let n,r,i,o;return t=oa(t,e),e&&e.feature?(n=Gt,i=e.feature):e&&e.mesh?(n=Zt,i=e.mesh,o=aa[e.filter]):s("Missing TopoJSON feature or mesh parameter."),r=(r=t.objects[i])?n(t,r,o):s("Invalid TopoJSON object: "+i),r&&r.features||[r]}sa.responseType="json";const ua={dsv:ia,csv:ra(","),tsv:ra("\t"),json:oa,topojson:sa};function la(t,e){return arguments.length>1?(ua[t]=e,this):lt(ua,t)?ua[t]:null}function ca(t){const e=la(t);return e&&e.responseType||"text"}function fa(t,e,n,r){const i=la((e=e||{}).type||"json");return i||s("Unknown data format type: "+e.type),t=i(t,e),e.parse&&function(t,e,n,r){if(!t.length)return;const i=Oo();n=n||i.timeParse,r=r||i.utcParse;let o,a,s,u,l,c,f=t.columns||Object.keys(t[0]);"auto"===e&&(e=na(t,f));f=Object.keys(e);const h=f.map((t=>{const i=e[t];let o,a;if(i&&(i.startsWith("date:")||i.startsWith("utc:"))){o=i.split(/:(.+)?/,2),a=o[1],("'"===a[0]&&"'"===a[a.length-1]||'"'===a[0]&&'"'===a[a.length-1])&&(a=a.slice(1,-1));return("utc"===o[0]?r:n)(a)}if(!Qo[i])throw Error("Illegal format pattern: "+t+":"+i);return Qo[i]}));for(s=0,l=t.length,c=f.length;s({options:n||{},sanitize:Wo,load:Ho,fileAccess:!!e,file:Yo(e),http:Vo(t)})}("undefined"!=typeof fetch&&fetch,null);function da(t){const e=t||f,n=[],r={};return n.add=t=>{const i=e(t);return r[i]||(r[i]=1,n.push(t)),n},n.remove=t=>{const i=e(t);if(r[i]){r[i]=0;const e=n.indexOf(t);e>=0&&n.splice(e,1)}return n},n}async function pa(t,e){try{await e(t)}catch(e){t.error(e)}}const ga=Symbol("vega_id");let ma=1;function ya(t){return!(!t||!va(t))}function va(t){return t[ga]}function _a(t,e){return t[ga]=e,t}function xa(t){const e=t===Object(t)?t:{data:t};return va(e)?e:_a(e,ma++)}function ba(t){return wa(t,xa({}))}function wa(t,e){for(const n in t)e[n]=t[n];return e}function ka(t,e){return _a(e,va(t))}function Aa(t,e){return t?e?(n,r)=>t(n,r)||va(e(n))-va(e(r)):(e,n)=>t(e,n)||va(e)-va(n):null}function Ma(t){return t&&t.constructor===Ea}function Ea(){const t=[],e=[],n=[],r=[],i=[];let o=null,a=!1;return{constructor:Ea,insert(e){const n=V(e),r=n.length;for(let e=0;e{p(t)&&(l[va(t)]=-1)}));for(f=0,h=t.length;f0&&(y(g,p,d.value),s.modifies(p));for(f=0,h=i.length;f{p(t)&&l[va(t)]>0&&y(t,d.field,d.value)})),s.modifies(d.field);if(a)s.mod=e.length||r.length?u.filter((t=>l[va(t)]>0)):u.slice();else for(m in c)s.mod.push(c[m]);return(o||null==o&&(e.length||r.length))&&s.clean(!0),s}}}const Da="_:mod:_";function Ca(){Object.defineProperty(this,Da,{writable:!0,value:{}})}Ca.prototype={set(t,e,n,r){const i=this,o=i[t],a=i[Da];return null!=e&&e>=0?(o[e]!==n||r)&&(o[e]=n,a[e+":"+t]=-1,a[t]=-1):(o!==n||r)&&(i[t]=n,a[t]=k(n)?1+n.length:-1),i},modified(t,e){const n=this[Da];if(!arguments.length){for(const t in n)if(n[t])return!0;return!1}if(k(t)){for(let e=0;e=0?e+1{a instanceof $a?(a!==this&&(e&&a.targets().add(this),o.push(a)),i.push({op:a,name:t,index:n})):r.set(t,n,a)};for(a in t)if(u=t[a],"pulse"===a)V(u).forEach((t=>{t instanceof $a?t!==this&&(t.targets().add(this),o.push(t)):s("Pulse parameters must be operator instances.")})),this.source=u;else if(k(u))for(r.set(a,-1,Array(l=u.length)),c=0;c{const n=Date.now();return n-e>t?(e=n,1):0}))},debounce(t){const e=Na();return this.targets().add(Na(null,null,it(t,(t=>{const n=t.dataflow;e.receive(t),n&&n.run&&n.run()})))),e},between(t,e){let n=!1;return t.targets().add(Na(null,null,(()=>n=!0))),e.targets().add(Na(null,null,(()=>n=!1))),this.filter((()=>n))},detach(){this._filter=p,this._targets=null}};const Oa={skip:!0};function Ra(t,e,n,r,i,o){const a=ot({},o,Oa);let s,u;J(n)||(n=rt(n)),void 0===r?s=e=>t.touch(n(e)):J(r)?(u=new $a(null,r,i,!1),s=e=>{u.evaluate(e);const r=n(e),i=u.value;Ma(i)?t.pulse(r,i,o):t.update(r,i,a)}):s=e=>t.update(n(e),r,a),e.apply(s)}function Ua(t,e,n,r,i,o){if(void 0===r)e.targets().add(n);else{const a=o||{},s=new $a(null,function(t,e){return e=J(e)?e:rt(e),t?function(n,r){const i=e(n,r);return t.skip()||(t.skip(i!==this.value).value=i),i}:e}(n,r),i,!1);s.modified(a.force),s.rank=e.rank,e.targets().add(s),n&&(s.skip(!0),s.value=n.value,s.targets().add(n),t.connect(n,[s]))}}const La={};function qa(t,e,n){this.dataflow=t,this.stamp=null==e?-1:e,this.add=[],this.rem=[],this.mod=[],this.fields=null,this.encode=n||null}function Pa(t,e){const n=[];return Nt(t,e,(t=>n.push(t))),n}function ja(t,e){const n={};return t.visit(e,(t=>{n[va(t)]=1})),t=>n[va(t)]?null:t}function Ia(t,e){return t?(n,r)=>t(n,r)&&e(n,r):e}function Ha(t,e,n,r){const i=this;let o=0;this.dataflow=t,this.stamp=e,this.fields=null,this.encode=r||null,this.pulses=n;for(const t of n)if(t.stamp===e){if(t.fields){const e=i.fields||(i.fields={});for(const n in t.fields)e[n]=1}t.changed(i.ADD)&&(o|=i.ADD),t.changed(i.REM)&&(o|=i.REM),t.changed(i.MOD)&&(o|=i.MOD)}this.changes=o}function Wa(t){return t.error("Dataflow already running. Use runAsync() to chain invocations."),t}qa.prototype={StopPropagation:La,ADD:1,REM:2,MOD:4,ADD_REM:3,ADD_MOD:5,ALL:7,REFLOW:8,SOURCE:16,NO_SOURCE:32,NO_FIELDS:64,fork(t){return new qa(this.dataflow).init(this,t)},clone(){const t=this.fork(7);return t.add=t.add.slice(),t.rem=t.rem.slice(),t.mod=t.mod.slice(),t.source&&(t.source=t.source.slice()),t.materialize(23)},addAll(){let t=this;return!t.source||t.add===t.rem||!t.rem.length&&t.source.length===t.add.length||(t=new qa(this.dataflow).init(this),t.add=t.source,t.rem=[]),t},init(t,e){const n=this;return n.stamp=t.stamp,n.encode=t.encode,!t.fields||64&e||(n.fields=t.fields),1&e?(n.addF=t.addF,n.add=t.add):(n.addF=null,n.add=[]),2&e?(n.remF=t.remF,n.rem=t.rem):(n.remF=null,n.rem=[]),4&e?(n.modF=t.modF,n.mod=t.mod):(n.modF=null,n.mod=[]),32&e?(n.srcF=null,n.source=null):(n.srcF=t.srcF,n.source=t.source,t.cleans&&(n.cleans=t.cleans)),n},runAfter(t){this.dataflow.runAfter(t)},changed(t){const e=t||7;return 1&e&&this.add.length||2&e&&this.rem.length||4&e&&this.mod.length},reflow(t){if(t)return this.fork(7).reflow();const e=this.add.length,n=this.source&&this.source.length;return n&&n!==e&&(this.mod=this.source,e&&this.filter(4,ja(this,1))),this},clean(t){return arguments.length?(this.cleans=!!t,this):this.cleans},modifies(t){const e=this.fields||(this.fields={});return k(t)?t.forEach((t=>e[t]=!0)):e[t]=!0,this},modified(t,e){const n=this.fields;return!(!e&&!this.mod.length||!n)&&(arguments.length?k(t)?t.some((t=>n[t])):n[t]:!!n)},filter(t,e){const n=this;return 1&t&&(n.addF=Ia(n.addF,e)),2&t&&(n.remF=Ia(n.remF,e)),4&t&&(n.modF=Ia(n.modF,e)),16&t&&(n.srcF=Ia(n.srcF,e)),n},materialize(t){const e=this;return 1&(t=t||7)&&e.addF&&(e.add=Pa(e.add,e.addF),e.addF=null),2&t&&e.remF&&(e.rem=Pa(e.rem,e.remF),e.remF=null),4&t&&e.modF&&(e.mod=Pa(e.mod,e.modF),e.modF=null),16&t&&e.srcF&&(e.source=e.source.filter(e.srcF),e.srcF=null),e},visit(t,e){const n=this,r=e;if(16&t)return Nt(n.source,n.srcF,r),n;1&t&&Nt(n.add,n.addF,r),2&t&&Nt(n.rem,n.remF,r),4&t&&Nt(n.mod,n.modF,r);const i=n.source;if(8&t&&i){const t=n.add.length+n.mod.length;t===i.length||Nt(i,t?ja(n,5):n.srcF,r)}return n}},dt(Ha,qa,{fork(t){const e=new qa(this.dataflow).init(this,t&this.NO_FIELDS);return void 0!==t&&(t&e.ADD&&this.visit(e.ADD,(t=>e.add.push(t))),t&e.REM&&this.visit(e.REM,(t=>e.rem.push(t))),t&e.MOD&&this.visit(e.MOD,(t=>e.mod.push(t)))),e},changed(t){return this.changes&t},modified(t){const e=this,n=e.fields;return n&&e.changes&e.MOD?k(t)?t.some((t=>n[t])):n[t]:0},filter(){s("MultiPulse does not support filtering.")},materialize(){s("MultiPulse does not support materialization.")},visit(t,e){const n=this,r=n.pulses,i=r.length;let o=0;if(t&n.SOURCE)for(;oe=[],size:()=>e.length,peek:()=>e[0],push:n=>(e.push(n),Va(e,0,e.length-1,t)),pop:()=>{const n=e.pop();let r;return e.length?(r=e[0],e[0]=n,function(t,e,n){const r=e,i=t.length,o=t[e];let a,s=1+(e<<1);for(;s=0&&(s=a),t[e]=t[s],s=1+((e=s)<<1);t[e]=o,Va(t,r,e,n)}(e,0,t)):r=n,r}}}function Va(t,e,n,r){let i,o;const a=t[n];for(;n>e&&(o=n-1>>1,i=t[o],r(a,i)<0);)t[n]=i,n=o;return t[n]=a}function Xa(){this.logger(w()),this.logLevel(v),this._clock=0,this._rank=0,this._locale=Lo();try{this._loader=ha()}catch(t){}this._touched=da(c),this._input={},this._pulse=null,this._heap=Ga(((t,e)=>t.qrank-e.qrank)),this._postrun=[]}function Ja(t){return function(){return this._log[t].apply(this,arguments)}}function Za(t,e){$a.call(this,t,null,e)}Xa.prototype={stamp(){return this._clock},loader(t){return arguments.length?(this._loader=t,this):this._loader},locale(t){return arguments.length?(this._locale=t,this):this._locale},logger(t){return arguments.length?(this._log=t,this):this._log},error:Ja("error"),warn:Ja("warn"),info:Ja("info"),debug:Ja("debug"),logLevel:Ja("level"),cleanThreshold:1e4,add:function(t,e,n,r){let i,o=1;return t instanceof $a?i=t:t&&t.prototype instanceof $a?i=new t:J(t)?i=new $a(null,t):(o=0,i=new $a(t,e)),this.rank(i),o&&(r=n,n=e),n&&this.connect(i,i.parameters(n,r)),this.touch(i),i},connect:function(t,e){const n=t.rank,r=e.length;for(let i=0;i=0;)e.push(n=r[i]),n===t&&s("Cycle detected in dataflow graph.")},pulse:function(t,e,n){this.touch(t,n||Ya);const r=new qa(this,this._clock+(this._pulse?0:1)),i=t.pulse&&t.pulse.source||[];return r.target=t,this._input[t.id]=e.pulse(r,i),this},touch:function(t,e){const n=e||Ya;return this._pulse?this._enqueue(t):this._touched.add(t),n.skip&&t.skip(!0),this},update:function(t,e,n){const r=n||Ya;return(t.set(e)||r.force)&&this.touch(t,r),this},changeset:Ea,ingest:function(t,e,n){return e=this.parse(e,n),this.pulse(t,this.changeset().insert(e))},parse:function(t,e){const n=this.locale();return fa(t,e,n.timeParse,n.utcParse)},preload:async function(t,e,n){const r=this,i=r._pending||function(t){let e;const n=new Promise((t=>e=t));return n.requests=0,n.done=()=>{0==--n.requests&&(t._pending=null,e(t))},t._pending=n}(r);i.requests+=1;const o=await r.request(e,n);return r.pulse(t,r.changeset().remove(p).insert(o.data||[])),i.done(),o},request:async function(t,e){const n=this;let r,i=0;try{r=await n.loader().load(t,{context:"dataflow",response:ca(e&&e.type)});try{r=n.parse(r,e)}catch(e){i=-2,n.warn("Data ingestion failed",t,e)}}catch(e){i=-1,n.warn("Loading failed",t,e)}return{data:r,status:i}},events:function(t,e,n,r){const i=this,o=Na(n,r),a=function(t){t.dataflow=i;try{o.receive(t)}catch(t){i.error(t)}finally{i.run()}};let s;s="string"==typeof t&&"undefined"!=typeof document?document.querySelectorAll(t):V(t);const u=s.length;for(let t=0;tr._enqueue(t,!0))),r._touched=da(c);let a,s,u,l=0;try{for(;r._heap.size()>0;)a=r._heap.pop(),a.rank===a.qrank?(s=a.run(r._getPulse(a,t)),s.then?s=await s:s.async&&(i.push(s.async),s=La),s!==La&&a._targets&&a._targets.forEach((t=>r._enqueue(t))),++l):r._enqueue(a,!0)}catch(t){r._heap.clear(),u=t}if(r._input={},r._pulse=null,r.debug(`Pulse ${o}: ${l} operators`),u&&(r._postrun=[],r.error(u)),r._postrun.length){const t=r._postrun.sort(((t,e)=>e.priority-t.priority));r._postrun=[];for(let e=0;er.runAsync(null,(()=>{t.forEach((t=>{try{t(r)}catch(t){r.error(t)}}))})))),r},run:function(t,e,n){return this._pulse?Wa(this):(this.evaluate(t,e,n),this)},runAsync:async function(t,e,n){for(;this._running;)await this._running;const r=()=>this._running=null;return(this._running=this.evaluate(t,e,n)).then(r,r),this._running},runAfter:function(t,e,n){if(this._pulse||e)this._postrun.push({priority:n||0,callback:t});else try{t(this)}catch(t){this.error(t)}},_enqueue:function(t,e){const n=t.stampt.pulse)),e):this._input[t.id]||function(t,e){if(e&&e.stamp===t.stamp)return e;t=t.fork(),e&&e!==La&&(t.source=e.source);return t}(this._pulse,n&&n.pulse)}},dt(Za,$a,{run(t){if(t.stampthis.pulse=t)):e!==t.StopPropagation&&(this.pulse=e),e},evaluate(t){const e=this.marshall(t.stamp),n=this.transform(e,t);return e.clear(),n},transform(){}});const Qa={};function Ka(t){const e=ts(t);return e&&e.Definition||null}function ts(t){return t=t&&t.toLowerCase(),lt(Qa,t)?Qa[t]:null}function*es(t,e){if(null==e)for(let e of t)null!=e&&""!==e&&(e=+e)>=e&&(yield e);else{let n=-1;for(let r of t)r=e(r,++n,t),null!=r&&""!==r&&(r=+r)>=r&&(yield r)}}function ns(t,e,n){const r=Float64Array.from(es(t,n));return r.sort(Kt),e.map((t=>Ce(r,t)))}function rs(t,e){return ns(t,[.25,.5,.75],e)}function is(t,e){const n=t.length,r=function(t,e){const n=function(t,e){let n,r=0,i=0,o=0;if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(n=e-i,i+=n/++r,o+=n*(e-i));else{let a=-1;for(let s of t)null!=(s=e(s,++a,t))&&(s=+s)>=s&&(n=s-i,i+=n/++r,o+=n*(s-i))}if(r>1)return o/(r-1)}(t,e);return n?Math.sqrt(n):n}(t,e),i=rs(t,e),o=(i[2]-i[0])/1.34;return 1.06*(Math.min(r,o)||r||Math.abs(i[0])||1)*Math.pow(n,-.2)}function os(t){const e=t.maxbins||20,n=t.base||10,r=Math.log(n),i=t.divide||[5,2];let o,a,s,u,l,c,f=t.extent[0],h=t.extent[1];const d=t.span||h-f||Math.abs(f)||1;if(t.step)o=t.step;else if(t.steps){for(u=d/e,l=0,c=t.steps.length;le;)o*=n;for(l=0,c=i.length;l=s&&d/u<=e&&(o=u)}u=Math.log(o);const p=u>=0?0:1+~~(-u/r),g=Math.pow(n,-p-1);return(t.nice||void 0===t.nice)&&(u=Math.floor(f/o+g)*o,f=ft);const i=t.length,o=new Float64Array(i);let a,s=0,u=1,l=r(t[0]),c=l,f=l+e;for(;u=f){for(c=(l+c)/2;s>1);ia;)t[i--]=t[o]}o=a,a=r}return t}(o,e+e/4):o}t.random=Math.random;const us=Math.sqrt(2*Math.PI),ls=Math.SQRT2;let cs=NaN;function fs(e,n){e=e||0,n=null==n?1:n;let r,i,o=0,a=0;if(cs==cs)o=cs,cs=NaN;else{do{o=2*t.random()-1,a=2*t.random()-1,r=o*o+a*a}while(0===r||r>1);i=Math.sqrt(-2*Math.log(r)/r),o*=i,cs=a*i}return e+o*n}function hs(t,e,n){const r=(t-(e||0))/(n=null==n?1:n);return Math.exp(-.5*r*r)/(n*us)}function ds(t,e,n){const r=(t-(e=e||0))/(n=null==n?1:n),i=Math.abs(r);let o;if(i>37)o=0;else{const t=Math.exp(-i*i/2);let e;i<7.07106781186547?(e=.0352624965998911*i+.700383064443688,e=e*i+6.37396220353165,e=e*i+33.912866078383,e=e*i+112.079291497871,e=e*i+221.213596169931,e=e*i+220.206867912376,o=t*e,e=.0883883476483184*i+1.75566716318264,e=e*i+16.064177579207,e=e*i+86.7807322029461,e=e*i+296.564248779674,e=e*i+637.333633378831,e=e*i+793.826512519948,e=e*i+440.413735824752,o/=e):(e=i+.65,e=i+4/e,e=i+3/e,e=i+2/e,e=i+1/e,o=t/e/2.506628274631)}return r>0?1-o:o}function ps(t,e,n){return t<0||t>1?NaN:(e||0)+(null==n?1:n)*ls*function(t){let e,n=-Math.log((1-t)*(1+t));n<6.25?(n-=3.125,e=-364441206401782e-35,e=e*n-16850591381820166e-35,e=128584807152564e-32+e*n,e=11157877678025181e-33+e*n,e=e*n-1333171662854621e-31,e=20972767875968562e-33+e*n,e=6637638134358324e-30+e*n,e=e*n-4054566272975207e-29,e=e*n-8151934197605472e-29,e=26335093153082323e-28+e*n,e=e*n-12975133253453532e-27,e=e*n-5415412054294628e-26,e=1.0512122733215323e-9+e*n,e=e*n-4.112633980346984e-9,e=e*n-2.9070369957882005e-8,e=4.2347877827932404e-7+e*n,e=e*n-13654692000834679e-22,e=e*n-13882523362786469e-21,e=.00018673420803405714+e*n,e=e*n-.000740702534166267,e=e*n-.006033670871430149,e=.24015818242558962+e*n,e=1.6536545626831027+e*n):n<16?(n=Math.sqrt(n)-3.25,e=2.2137376921775787e-9,e=9.075656193888539e-8+e*n,e=e*n-2.7517406297064545e-7,e=1.8239629214389228e-8+e*n,e=15027403968909828e-22+e*n,e=e*n-4013867526981546e-21,e=29234449089955446e-22+e*n,e=12475304481671779e-21+e*n,e=e*n-47318229009055734e-21,e=6828485145957318e-20+e*n,e=24031110387097894e-21+e*n,e=e*n-.0003550375203628475,e=.0009532893797373805+e*n,e=e*n-.0016882755560235047,e=.002491442096107851+e*n,e=e*n-.003751208507569241,e=.005370914553590064+e*n,e=1.0052589676941592+e*n,e=3.0838856104922208+e*n):Number.isFinite(n)?(n=Math.sqrt(n)-5,e=-27109920616438573e-27,e=e*n-2.555641816996525e-10,e=1.5076572693500548e-9+e*n,e=e*n-3.789465440126737e-9,e=7.61570120807834e-9+e*n,e=e*n-1.496002662714924e-8,e=2.914795345090108e-8+e*n,e=e*n-6.771199775845234e-8,e=2.2900482228026655e-7+e*n,e=e*n-9.9298272942317e-7,e=4526062597223154e-21+e*n,e=e*n-1968177810553167e-20,e=7599527703001776e-20+e*n,e=e*n-.00021503011930044477,e=e*n-.00013871931833623122,e=1.0103004648645344+e*n,e=4.849906401408584+e*n):e=1/0;return e*t}(2*t-1)}function gs(t,e){let n,r;const i={mean(t){return arguments.length?(n=t||0,i):n},stdev(t){return arguments.length?(r=null==t?1:t,i):r},sample:()=>fs(n,r),pdf:t=>hs(t,n,r),cdf:t=>ds(t,n,r),icdf:t=>ps(t,n,r)};return i.mean(t).stdev(e)}function ms(e,n){const r=gs();let i=0;const o={data(t){return arguments.length?(e=t,i=t?t.length:0,o.bandwidth(n)):e},bandwidth(t){return arguments.length?(!(n=t)&&e&&(n=is(e)),o):n},sample:()=>e[~~(t.random()*i)]+n*r.sample(),pdf(t){let o=0,a=0;for(;ays(n,r),pdf:t=>vs(t,n,r),cdf:t=>_s(t,n,r),icdf:t=>xs(t,n,r)};return i.mean(t).stdev(e)}function ws(e,n){let r,i=0;const o={weights(t){return arguments.length?(r=function(t){const e=[];let n,r=0;for(n=0;n=e&&t<=n?1/(n-e):0}function Ms(t,e,n){return null==n&&(n=null==e?1:e,e=0),tn?1:(t-e)/(n-e)}function Es(t,e,n){return null==n&&(n=null==e?1:e,e=0),t>=0&&t<=1?e+t*(n-e):NaN}function Ds(t,e){let n,r;const i={min(t){return arguments.length?(n=t||0,i):n},max(t){return arguments.length?(r=null==t?1:t,i):r},sample:()=>ks(n,r),pdf:t=>As(t,n,r),cdf:t=>Ms(t,n,r),icdf:t=>Es(t,n,r)};return null==e&&(e=null==t?1:t,t=0),i.min(t).max(e)}function Cs(t,e,n){let r=0,i=0;for(const o of t){const t=n(o);null==e(o)||null==t||isNaN(t)||(r+=(t-r)/++i)}return{coef:[r],predict:()=>r,rSquared:0}}function Fs(t,e,n,r){const i=r-t*t,o=Math.abs(i)<1e-24?0:(n-t*e)/i;return[e-o*t,o]}function Ss(t,e,n,r){t=t.filter((t=>{let r=e(t),i=n(t);return null!=r&&(r=+r)>=r&&null!=i&&(i=+i)>=i})),r&&t.sort(((t,n)=>e(t)-e(n)));const i=t.length,o=new Float64Array(i),a=new Float64Array(i);let s,u,l,c=0,f=0,h=0;for(l of t)o[c]=s=+e(l),a[c]=u=+n(l),++c,f+=(s-f)/c,h+=(u-h)/c;for(c=0;c=i&&null!=o&&(o=+o)>=o&&r(i,o,++a)}function Ts(t,e,n,r,i){let o=0,a=0;return $s(t,e,n,((t,e)=>{const n=e-i(t),s=e-r;o+=n*n,a+=s*s})),1-o/a}function Bs(t,e,n){let r=0,i=0,o=0,a=0,s=0;$s(t,e,n,((t,e)=>{++s,r+=(t-r)/s,i+=(e-i)/s,o+=(t*e-o)/s,a+=(t*t-a)/s}));const u=Fs(r,i,o,a),l=t=>u[0]+u[1]*t;return{coef:u,predict:l,rSquared:Ts(t,e,n,i,l)}}function zs(t,e,n){let r=0,i=0,o=0,a=0,s=0;$s(t,e,n,((t,e)=>{++s,t=Math.log(t),r+=(t-r)/s,i+=(e-i)/s,o+=(t*e-o)/s,a+=(t*t-a)/s}));const u=Fs(r,i,o,a),l=t=>u[0]+u[1]*Math.log(t);return{coef:u,predict:l,rSquared:Ts(t,e,n,i,l)}}function Ns(t,e,n){const[r,i,o,a]=Ss(t,e,n);let s,u,l,c=0,f=0,h=0,d=0,p=0;$s(t,e,n,((t,e)=>{s=r[p++],u=Math.log(e),l=s*e,c+=(e*u-c)/p,f+=(l-f)/p,h+=(l*u-h)/p,d+=(s*l-d)/p}));const[g,m]=Fs(f/a,c/a,h/a,d/a),y=t=>Math.exp(g+m*(t-o));return{coef:[Math.exp(g-m*o),m],predict:y,rSquared:Ts(t,e,n,a,y)}}function Os(t,e,n){let r=0,i=0,o=0,a=0,s=0,u=0;$s(t,e,n,((t,e)=>{const n=Math.log(t),l=Math.log(e);++u,r+=(n-r)/u,i+=(l-i)/u,o+=(n*l-o)/u,a+=(n*n-a)/u,s+=(e-s)/u}));const l=Fs(r,i,o,a),c=t=>l[0]*Math.pow(t,l[1]);return l[0]=Math.exp(l[0]),{coef:l,predict:c,rSquared:Ts(t,e,n,s,c)}}function Rs(t,e,n){const[r,i,o,a]=Ss(t,e,n),s=r.length;let u,l,c,f,h=0,d=0,p=0,g=0,m=0;for(u=0;u_*(t-=o)*t+x*t+b+a;return{coef:[b-x*o+_*o*o+a,x-2*_*o,_],predict:w,rSquared:Ts(t,e,n,a,w)}}function Us(t,e,n,r){if(0===r)return Cs(t,e,n);if(1===r)return Bs(t,e,n);if(2===r)return Rs(t,e,n);const[i,o,a,s]=Ss(t,e,n),u=i.length,l=[],c=[],f=r+1;let h,d,p,g,m;for(h=0;hMath.abs(t[r][a])&&(a=i);for(o=r;o=r;o--)t[o][i]-=t[o][r]*t[r][i]/t[r][r]}for(i=e-1;i>=0;--i){for(s=0,o=i+1;o{t-=a;let e=s+y[0]+y[1]*t+y[2]*t*t;for(h=3;h=0;--o)for(s=e[o],u=1,i[o]+=s,a=1;a<=o;++a)u*=(o+1-a)/a,i[o-a]+=s*Math.pow(n,a)*u;return i[0]+=r,i}function qs(t,e,n,r){const[i,o,a,s]=Ss(t,e,n,!0),u=i.length,l=Math.max(2,~~(r*u)),c=new Float64Array(u),f=new Float64Array(u),h=new Float64Array(u).fill(1);for(let t=-1;++t<=2;){const e=[0,l-1];for(let t=0;ti[a]-n?r:a;let u=0,l=0,d=0,p=0,g=0;const m=1/Math.abs(i[s]-n||1);for(let t=r;t<=a;++t){const e=i[t],r=o[t],a=Ps(Math.abs(n-e)*m)*h[t],s=e*a;u+=a,l+=s,d+=r*a,p+=r*s,g+=e*s}const[y,v]=Fs(l/u,d/u,p/u,g/u);c[t]=y+v*n,f[t]=Math.abs(o[t]-c[t]),js(i,t+1,e)}if(2===t)break;const n=Fe(f);if(Math.abs(n)<1e-12)break;for(let t,e,r=0;r=1?1e-12:(e=1-t*t)*e}return function(t,e,n,r){const i=t.length,o=[];let a,s=0,u=0,l=[];for(;s=t.length))for(;e>i&&t[o]-r<=r-t[i];)n[0]=++i,n[1]=o,++o}const Is=.5*Math.PI/180;function Hs(t,e,n,r){n=n||25,r=Math.max(n,r||200);const i=e=>[e,t(e)],o=e[0],a=e[1],s=a-o,u=s/r,l=[i(o)],c=[];if(n===r){for(let t=1;t0;)c.push(i(o+t/n*s));let f=l[0],h=c[c.length-1];const d=1/s,p=function(t,e){let n=t,r=t;const i=e.length;for(let t=0;tr&&(r=i)}return 1/(r-n)}(f[1],c);for(;h;){const t=i((f[0]+h[0])/2);t[0]-f[0]>=u&&Ws(f,t,h,d,p)>Is?c.push(t):(f=h,l.push(h),c.pop()),h=c[c.length-1]}return l}function Ws(t,e,n,r,i){const o=Math.atan2(i*(n[1]-t[1]),r*(n[0]-t[0])),a=Math.atan2(i*(e[1]-t[1]),r*(e[0]-t[0]));return Math.abs(o-a)}function Ys(t){return t&&t.length?1===t.length?t[0]:(e=t,t=>{const n=e.length;let r=1,i=String(e[0](t));for(;r{},Xs={init:Vs,add:Vs,rem:Vs,idx:0},Js={values:{init:t=>t.cell.store=!0,value:t=>t.cell.data.values(),idx:-1},count:{value:t=>t.cell.num},__count__:{value:t=>t.missing+t.valid},missing:{value:t=>t.missing},valid:{value:t=>t.valid},sum:{init:t=>t.sum=0,value:t=>t.sum,add:(t,e)=>t.sum+=+e,rem:(t,e)=>t.sum-=e},product:{init:t=>t.product=1,value:t=>t.valid?t.product:void 0,add:(t,e)=>t.product*=e,rem:(t,e)=>t.product/=e},mean:{init:t=>t.mean=0,value:t=>t.valid?t.mean:void 0,add:(t,e)=>(t.mean_d=e-t.mean,t.mean+=t.mean_d/t.valid),rem:(t,e)=>(t.mean_d=e-t.mean,t.mean-=t.valid?t.mean_d/t.valid:t.mean)},average:{value:t=>t.valid?t.mean:void 0,req:["mean"],idx:1},variance:{init:t=>t.dev=0,value:t=>t.valid>1?t.dev/(t.valid-1):void 0,add:(t,e)=>t.dev+=t.mean_d*(e-t.mean),rem:(t,e)=>t.dev-=t.mean_d*(e-t.mean),req:["mean"],idx:1},variancep:{value:t=>t.valid>1?t.dev/t.valid:void 0,req:["variance"],idx:2},stdev:{value:t=>t.valid>1?Math.sqrt(t.dev/(t.valid-1)):void 0,req:["variance"],idx:2},stdevp:{value:t=>t.valid>1?Math.sqrt(t.dev/t.valid):void 0,req:["variance"],idx:2},stderr:{value:t=>t.valid>1?Math.sqrt(t.dev/(t.valid*(t.valid-1))):void 0,req:["variance"],idx:2},distinct:{value:t=>t.cell.data.distinct(t.get),req:["values"],idx:3},ci0:{value:t=>t.cell.data.ci0(t.get),req:["values"],idx:3},ci1:{value:t=>t.cell.data.ci1(t.get),req:["values"],idx:3},median:{value:t=>t.cell.data.q2(t.get),req:["values"],idx:3},q1:{value:t=>t.cell.data.q1(t.get),req:["values"],idx:3},q3:{value:t=>t.cell.data.q3(t.get),req:["values"],idx:3},min:{init:t=>t.min=void 0,value:t=>t.min=Number.isNaN(t.min)?t.cell.data.min(t.get):t.min,add:(t,e)=>{(e{e<=t.min&&(t.min=NaN)},req:["values"],idx:4},max:{init:t=>t.max=void 0,value:t=>t.max=Number.isNaN(t.max)?t.cell.data.max(t.get):t.max,add:(t,e)=>{(e>t.max||void 0===t.max)&&(t.max=e)},rem:(t,e)=>{e>=t.max&&(t.max=NaN)},req:["values"],idx:4},argmin:{init:t=>t.argmin=void 0,value:t=>t.argmin||t.cell.data.argmin(t.get),add:(t,e,n)=>{e{e<=t.min&&(t.argmin=void 0)},req:["min","values"],idx:3},argmax:{init:t=>t.argmax=void 0,value:t=>t.argmax||t.cell.data.argmax(t.get),add:(t,e,n)=>{e>t.max&&(t.argmax=n)},rem:(t,e)=>{e>=t.max&&(t.argmax=void 0)},req:["max","values"],idx:3},exponential:{init:(t,e)=>{t.exp=0,t.exp_r=e},value:t=>t.valid?t.exp*(1-t.exp_r)/(1-t.exp_r**t.valid):void 0,add:(t,e)=>t.exp=t.exp_r*t.exp+e,rem:(t,e)=>t.exp=(t.exp-e/t.exp_r**(t.valid-1))/t.exp_r},exponentialb:{value:t=>t.valid?t.exp*(1-t.exp_r):void 0,req:["exponential"],idx:1}},Zs=Object.keys(Js).filter((t=>"__count__"!==t));function Qs(t,e,n){return Js[t](n,e)}function Ks(t,e){return t.idx-e.idx}function tu(){this.valid=0,this.missing=0,this._ops.forEach((t=>null==t.aggregate_param?t.init(this):t.init(this,t.aggregate_param)))}function eu(t,e){null!=t&&""!==t?t==t&&(++this.valid,this._ops.forEach((n=>n.add(this,t,e)))):++this.missing}function nu(t,e){null!=t&&""!==t?t==t&&(--this.valid,this._ops.forEach((n=>n.rem(this,t,e)))):--this.missing}function ru(t){return this._out.forEach((e=>t[e.out]=e.value(this))),t}function iu(t,e){const n=e||f,r=function(t){const e={};t.forEach((t=>e[t.name]=t));const n=t=>{t.req&&t.req.forEach((t=>{e[t]||n(e[t]=Js[t]())}))};return t.forEach(n),Object.values(e).sort(Ks)}(t),i=t.slice().sort(Ks);function o(t){this._ops=r,this._out=i,this.cell=t,this.init()}return o.prototype.init=tu,o.prototype.add=eu,o.prototype.rem=nu,o.prototype.set=ru,o.prototype.get=n,o.fields=t.map((t=>t.out)),o}function ou(t){this._key=t?l(t):va,this.reset()}[...Zs,"__count__"].forEach((t=>{Js[t]=function(t,e){return(n,r)=>ot({name:t,aggregate_param:r,out:n||t},Xs,e)}(t,Js[t])}));const au=ou.prototype;function su(t){Za.call(this,null,t),this._adds=[],this._mods=[],this._alen=0,this._mlen=0,this._drop=!0,this._cross=!1,this._dims=[],this._dnames=[],this._measures=[],this._countOnly=!1,this._counts=null,this._prev=null,this._inputs=null,this._outputs=null}au.reset=function(){this._add=[],this._rem=[],this._ext=null,this._get=null,this._q=null},au.add=function(t){this._add.push(t)},au.rem=function(t){this._rem.push(t)},au.values=function(){if(this._get=null,0===this._rem.length)return this._add;const t=this._add,e=this._rem,n=this._key,r=t.length,i=e.length,o=Array(r-i),a={};let s,u,l;for(s=0;s=0;)r=t(e[i])+"",lt(n,r)||(n[r]=1,++o);return o},au.extent=function(t){if(this._get!==t||!this._ext){const e=this.values(),n=st(e,t);this._ext=[e[n[0]],e[n[1]]],this._get=t}return this._ext},au.argmin=function(t){return this.extent(t)[0]||{}},au.argmax=function(t){return this.extent(t)[1]||{}},au.min=function(t){const e=this.extent(t)[0];return null!=e?t(e):void 0},au.max=function(t){const e=this.extent(t)[1];return null!=e?t(e):void 0},au.quartile=function(t){return this._get===t&&this._q||(this._q=rs(this.values(),t),this._get=t),this._q},au.q1=function(t){return this.quartile(t)[0]},au.q2=function(t){return this.quartile(t)[1]},au.q3=function(t){return this.quartile(t)[2]},au.ci=function(t){return this._get===t&&this._ci||(this._ci=as(this.values(),1e3,.05,t),this._get=t),this._ci},au.ci0=function(t){return this.ci(t)[0]},au.ci1=function(t){return this.ci(t)[1]},su.Definition={type:"Aggregate",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"ops",type:"enum",array:!0,values:Zs},{name:"aggregate_params",type:"field",null:!0,array:!0,default:[null]},{name:"fields",type:"field",null:!0,array:!0},{name:"as",type:"string",null:!0,array:!0},{name:"drop",type:"boolean",default:!0},{name:"cross",type:"boolean",default:!1},{name:"key",type:"field"}]},dt(su,Za,{transform(t,e){const n=this,r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=t.modified();return n.stamp=r.stamp,n.value&&(i||e.modified(n._inputs,!0))?(n._prev=n.value,n.value=i?n.init(t):Object.create(null),e.visit(e.SOURCE,(t=>n.add(t)))):(n.value=n.value||n.init(t),e.visit(e.REM,(t=>n.rem(t))),e.visit(e.ADD,(t=>n.add(t)))),r.modifies(n._outputs),n._drop=!1!==t.drop,t.cross&&n._dims.length>1&&(n._drop=!1,n.cross()),e.clean()&&n._drop&&r.clean(!0).runAfter((()=>this.clean())),n.changes(r)},cross(){const t=this,e=t.value,n=t._dnames,r=n.map((()=>({}))),i=n.length;function o(t){let e,o,a,s;for(e in t)for(a=t[e].tuple,o=0;o{const e=n(t);return a(t),i.push(e),e})),this.cellkey=t.key?t.key:Ys(this._dims),this._countOnly=!0,this._counts=[],this._measures=[];const u=t.fields||[null],l=t.ops||["count"],c=t.aggregate_params||[null],f=t.as||[],h=u.length,d={};let p,g,m,y,v,_,x;for(h!==l.length&&s("Unmatched number of fields and aggregate ops."),x=0;xiu(t,t.field))),Object.create(null)},cellkey:Ys(),cell(t,e){let n=this.value[t];return n?0===n.num&&this._drop&&n.stampo.push(t),remove:t=>a[r(t)]=++s,size:()=>i.length,data:(t,e)=>(s&&(i=i.filter((t=>!a[r(t)])),a={},s=0),e&&t&&i.sort(t),o.length&&(i=t?At(t,i,o.sort(t)):i.concat(o),o=[]),i)}}function cu(t){Za.call(this,[],t)}function fu(t){$a.call(this,null,hu,t)}function hu(t){return this.value&&!t.modified()?this.value:Q(t.fields,t.orders)}function du(t){Za.call(this,null,t)}function pu(t){Za.call(this,null,t)}uu.Definition={type:"Bin",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"interval",type:"boolean",default:!0},{name:"anchor",type:"number"},{name:"maxbins",type:"number",default:20},{name:"base",type:"number",default:10},{name:"divide",type:"number",array:!0,default:[5,2]},{name:"extent",type:"number",array:!0,length:2,required:!0},{name:"span",type:"number"},{name:"step",type:"number"},{name:"steps",type:"number",array:!0},{name:"minstep",type:"number",default:0},{name:"nice",type:"boolean",default:!0},{name:"name",type:"string"},{name:"as",type:"string",array:!0,length:2,default:["bin0","bin1"]}]},dt(uu,Za,{transform(t,e){const n=!1!==t.interval,i=this._bins(t),o=i.start,a=i.step,s=t.as||["bin0","bin1"],u=s[0],l=s[1];let c;return c=t.modified()?(e=e.reflow(!0)).SOURCE:e.modified(r(t.field))?e.ADD_MOD:e.ADD,e.visit(c,n?t=>{const e=i(t);t[u]=e,t[l]=null==e?null:o+a*(1+(e-o)/a)}:t=>t[u]=i(t)),e.modifies(n?s:u)},_bins(t){if(this.value&&!t.modified())return this.value;const i=t.field,o=os(t),a=o.step;let s,u,l=o.start,c=l+Math.ceil((o.stop-l)/a)*a;null!=(s=t.anchor)&&(u=s-(l+a*Math.floor((s-l)/a)),l+=u,c+=u);const f=function(t){let e=S(i(t));return null==e?null:ec?1/0:(e=Math.max(l,Math.min(e,c-a)),l+a*Math.floor(1e-14+(e-l)/a))};return f.start=l,f.stop=o.stop,f.step=a,this.value=e(f,r(i),t.name||"bin_"+n(i))}}),cu.Definition={type:"Collect",metadata:{source:!0},params:[{name:"sort",type:"compare"}]},dt(cu,Za,{transform(t,e){const n=e.fork(e.ALL),r=lu(va,this.value,n.materialize(n.ADD).add),i=t.sort,o=e.changed()||i&&(t.modified("sort")||e.modified(i.fields));return n.visit(n.REM,r.remove),this.modified(o),this.value=n.source=r.data(Aa(i),o),e.source&&e.source.root&&(this.value.root=e.source.root),n}}),dt(fu,$a),du.Definition={type:"CountPattern",metadata:{generates:!0,changes:!0},params:[{name:"field",type:"field",required:!0},{name:"case",type:"enum",values:["upper","lower","mixed"],default:"mixed"},{name:"pattern",type:"string",default:'[\\w"]+'},{name:"stopwords",type:"string",default:""},{name:"as",type:"string",array:!0,length:2,default:["text","count"]}]},dt(du,Za,{transform(t,e){const n=e=>n=>{for(var r,i=function(t,e,n){switch(e){case"upper":t=t.toUpperCase();break;case"lower":t=t.toLowerCase()}return t.match(n)}(s(n),t.case,o)||[],u=0,l=i.length;ui[t]=1+(i[t]||0))),c=n((t=>i[t]-=1));return r?e.visit(e.SOURCE,l):(e.visit(e.ADD,l),e.visit(e.REM,c)),this._finish(e,u)},_parameterCheck(t,e){let n=!1;return!t.modified("stopwords")&&this._stop||(this._stop=new RegExp("^"+(t.stopwords||"")+"$","i"),n=!0),!t.modified("pattern")&&this._match||(this._match=new RegExp(t.pattern||"[\\w']+","g"),n=!0),(t.modified("field")||e.modified(t.field.fields))&&(n=!0),n&&(this._counts={}),n},_finish(t,e){const n=this._counts,r=this._tuples||(this._tuples={}),i=e[0],o=e[1],a=t.fork(t.NO_SOURCE|t.NO_FIELDS);let s,u,l;for(s in n)u=r[s],l=n[s]||0,!u&&l?(r[s]=u=xa({}),u[i]=s,u[o]=l,a.add.push(u)):0===l?(u&&a.rem.push(u),n[s]=null,r[s]=null):u[o]!==l&&(u[o]=l,a.mod.push(u));return a.modifies(e)}}),pu.Definition={type:"Cross",metadata:{generates:!0},params:[{name:"filter",type:"expr"},{name:"as",type:"string",array:!0,length:2,default:["a","b"]}]},dt(pu,Za,{transform(t,e){const n=e.fork(e.NO_SOURCE),r=t.as||["a","b"],i=r[0],o=r[1],a=!this.value||e.changed(e.ADD_REM)||t.modified("as")||t.modified("filter");let s=this.value;return a?(s&&(n.rem=s),s=e.materialize(e.SOURCE).source,n.add=this.value=function(t,e,n,r){for(var i,o,a=[],s={},u=t.length,l=0;lyu(t,e)))):typeof r[n]===mu&&r[n](t[n]);return r}function vu(t){Za.call(this,null,t)}const _u=[{key:{function:"normal"},params:[{name:"mean",type:"number",default:0},{name:"stdev",type:"number",default:1}]},{key:{function:"lognormal"},params:[{name:"mean",type:"number",default:0},{name:"stdev",type:"number",default:1}]},{key:{function:"uniform"},params:[{name:"min",type:"number",default:0},{name:"max",type:"number",default:1}]},{key:{function:"kde"},params:[{name:"field",type:"field",required:!0},{name:"from",type:"data"},{name:"bandwidth",type:"number",default:0}]}],xu={key:{function:"mixture"},params:[{name:"distributions",type:"param",array:!0,params:_u},{name:"weights",type:"number",array:!0}]};function bu(t,e){return t?t.map(((t,r)=>e[r]||n(t))):null}function wu(t,e,n){const r=[],i=t=>t(u);let o,a,s,u,l,c;if(null==e)r.push(t.map(n));else for(o={},a=0,s=t.length;at.materialize(t.SOURCE).source}(e)),i=t.steps||t.minsteps||25,o=t.steps||t.maxsteps||200;let a=t.method||"pdf";"pdf"!==a&&"cdf"!==a&&s("Invalid density method: "+a),t.extent||r.data||s("Missing density extent parameter."),a=r[a];const u=t.as||["value","density"],l=Hs(a,t.extent||at(r.data()),i,o).map((t=>{const e={};return e[u[0]]=t[0],e[u[1]]=t[1],xa(e)}));this.value&&(n.rem=this.value),this.value=n.add=n.source=l}return n}});function ku(t){Za.call(this,null,t)}ku.Definition={type:"DotBin",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"groupby",type:"field",array:!0},{name:"step",type:"number"},{name:"smooth",type:"boolean",default:!1},{name:"as",type:"string",default:"bin"}]};function Au(t){$a.call(this,null,Mu,t),this.modified(!0)}function Mu(t){const i=t.expr;return this.value&&!t.modified("expr")?this.value:e((e=>i(e,t)),r(i),n(i))}function Eu(t){Za.call(this,[void 0,void 0],t)}function Du(t,e){$a.call(this,t),this.parent=e,this.count=0}function Cu(t){Za.call(this,{},t),this._keys=ft();const e=this._targets=[];e.active=0,e.forEach=t=>{for(let n=0,r=e.active;nl(t))):l(t.name,t.as)}function $u(t){Za.call(this,ft(),t)}function Tu(t){Za.call(this,[],t)}function Bu(t){Za.call(this,[],t)}function zu(t){Za.call(this,null,t)}function Nu(t){Za.call(this,[],t)}dt(ku,Za,{transform(t,e){if(this.value&&!t.modified()&&!e.changed())return e;const n=e.materialize(e.SOURCE).source,r=wu(e.source,t.groupby,f),i=t.smooth||!1,o=t.field,a=t.step||((t,e)=>Dt(at(t,e))/30)(n,o),s=Aa(((t,e)=>o(t)-o(e))),u=t.as||"bin",l=r.length;let c,h=1/0,d=-1/0,p=0;for(;pd&&(d=e),t[++c][u]=e}return this.value={start:h,stop:d,step:a},e.reflow(!0).modifies(u)}}),dt(Au,$a),Eu.Definition={type:"Extent",metadata:{},params:[{name:"field",type:"field",required:!0}]},dt(Eu,Za,{transform(t,e){const r=this.value,i=t.field,o=e.changed()||e.modified(i.fields)||t.modified("field");let a=r[0],s=r[1];if((o||null==a)&&(a=1/0,s=-1/0),e.visit(o?e.SOURCE:e.ADD,(t=>{const e=S(i(t));null!=e&&(es&&(s=e))})),!Number.isFinite(a)||!Number.isFinite(s)){let t=n(i);t&&(t=` for field "${t}"`),e.dataflow.warn(`Infinite extent${t}: [${a}, ${s}]`),a=s=void 0}this.value=[a,s]}}),dt(Du,$a,{connect(t){return this.detachSubflow=t.detachSubflow,this.targets().add(t),t.source=this},add(t){this.count+=1,this.value.add.push(t)},rem(t){this.count-=1,this.value.rem.push(t)},mod(t){this.value.mod.push(t)},init(t){this.value.init(t,t.NO_SOURCE)},evaluate(){return this.value}}),dt(Cu,Za,{activate(t){this._targets[this._targets.active++]=t},subflow(t,e,n,r){const i=this.value;let o,a,s=lt(i,t)&&i[t];return s?s.value.stampt&&t.count>0));this.initTargets(t)}},initTargets(t){const e=this._targets,n=e.length,r=t?t.length:0;let i=0;for(;ithis.subflow(t,i,e);return this._group=t.group||{},this.initTargets(),e.visit(e.REM,(t=>{const e=va(t),n=o.get(e);void 0!==n&&(o.delete(e),s(n).rem(t))})),e.visit(e.ADD,(t=>{const e=r(t);o.set(va(t),e),s(e).add(t)})),a||e.modified(r.fields)?e.visit(e.MOD,(t=>{const e=va(t),n=o.get(e),i=r(t);n===i?s(i).mod(t):(o.set(e,i),s(n).rem(t),s(i).add(t))})):e.changed(e.MOD)&&e.visit(e.MOD,(t=>{s(o.get(va(t))).mod(t)})),a&&e.visit(e.REFLOW,(t=>{const e=va(t),n=o.get(e),i=r(t);n!==i&&(o.set(e,i),s(n).rem(t),s(i).add(t))})),e.clean()?n.runAfter((()=>{this.clean(),o.clean()})):o.empty>n.cleanThreshold&&n.runAfter(o.clean),e}}),dt(Fu,$a),$u.Definition={type:"Filter",metadata:{changes:!0},params:[{name:"expr",type:"expr",required:!0}]},dt($u,Za,{transform(t,e){const n=e.dataflow,r=this.value,i=e.fork(),o=i.add,a=i.rem,s=i.mod,u=t.expr;let l=!0;function c(e){const n=va(e),i=u(e,t),c=r.get(n);i&&c?(r.delete(n),o.push(e)):i||c?l&&i&&!c&&s.push(e):(r.set(n,1),a.push(e))}return e.visit(e.REM,(t=>{const e=va(t);r.has(e)?r.delete(e):a.push(t)})),e.visit(e.ADD,(e=>{u(e,t)?o.push(e):r.set(va(e),1)})),e.visit(e.MOD,c),t.modified()&&(l=!1,e.visit(e.REFLOW,c)),r.empty>n.cleanThreshold&&n.runAfter(r.clean),i}}),Tu.Definition={type:"Flatten",metadata:{generates:!0},params:[{name:"fields",type:"field",array:!0,required:!0},{name:"index",type:"string"},{name:"as",type:"string",array:!0}]},dt(Tu,Za,{transform(t,e){const n=e.fork(e.NO_SOURCE),r=t.fields,i=bu(r,t.as||[]),o=t.index||null,a=i.length;return n.rem=this.value,e.visit(e.SOURCE,(t=>{const e=r.map((e=>e(t))),s=e.reduce(((t,e)=>Math.max(t,e.length)),0);let u,l,c,f=0;for(;f{for(let e,n=0;ne[r]=n(e,t)))}}),dt(Nu,Za,{transform(t,e){const n=e.fork(e.ALL),r=t.generator;let i,o,a,s=this.value,u=t.size-s.length;if(u>0){for(i=[];--u>=0;)i.push(a=xa(r(t))),s.push(a);n.add=n.add.length?n.materialize(n.ADD).add.concat(i):i}else o=s.slice(0,-u),n.rem=n.rem.length?n.materialize(n.REM).rem.concat(o):o,s=s.slice(-u);return n.source=this.value=s,n}});const Ou={value:"value",median:Fe,mean:function(t,e){let n=0,r=0;if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(++n,r+=e);else{let i=-1;for(let o of t)null!=(o=e(o,++i,t))&&(o=+o)>=o&&(++n,r+=o)}if(n)return r/n},min:Ae,max:ke},Ru=[];function Uu(t){Za.call(this,[],t)}function Lu(t){su.call(this,t)}function qu(t){Za.call(this,null,t)}function Pu(t){$a.call(this,null,ju,t)}function ju(t){return this.value&&!t.modified()?this.value:bt(t.fields,t.flat)}function Iu(t){Za.call(this,[],t),this._pending=null}function Hu(t,e,n){n.forEach(xa);const r=e.fork(e.NO_FIELDS&e.NO_SOURCE);return r.rem=t.value,t.value=r.source=r.add=n,t._pending=null,r.rem.length&&r.clean(!0),r}function Wu(t){Za.call(this,{},t)}function Yu(t){$a.call(this,null,Gu,t)}function Gu(t){if(this.value&&!t.modified())return this.value;const e=t.extents,n=e.length;let r,i,o=1/0,a=-1/0;for(r=0;ra&&(a=i[1]);return[o,a]}function Vu(t){$a.call(this,null,Xu,t)}function Xu(t){return this.value&&!t.modified()?this.value:t.values.reduce(((t,e)=>t.concat(e)),[])}function Ju(t){Za.call(this,null,t)}function Zu(t){su.call(this,t)}function Qu(t){Cu.call(this,t)}function Ku(t){Za.call(this,null,t)}function tl(t){Za.call(this,null,t)}function el(t){Za.call(this,null,t)}Uu.Definition={type:"Impute",metadata:{changes:!0},params:[{name:"field",type:"field",required:!0},{name:"key",type:"field",required:!0},{name:"keyvals",array:!0},{name:"groupby",type:"field",array:!0},{name:"method",type:"enum",default:"value",values:["value","mean","median","max","min"]},{name:"value",default:0}]},dt(Uu,Za,{transform(t,e){var r,i,o,a,u,l,c,f,h,d,p=e.fork(e.ALL),g=function(t){var e,n=t.method||Ou.value;if(null!=Ou[n])return n===Ou.value?(e=void 0!==t.value?t.value:0,()=>e):Ou[n];s("Unrecognized imputation method: "+n)}(t),m=function(t){const e=t.field;return t=>t?e(t):NaN}(t),y=n(t.field),v=n(t.key),_=(t.groupby||[]).map(n),x=function(t,e,n,r){var i,o,a,s,u,l,c,f,h=t=>t(f),d=[],p=r?r.slice():[],g={},m={};for(p.forEach(((t,e)=>g[t]=e+1)),s=0,c=t.length;sn.add(t)))):(i=n.value=n.value||this.init(t),e.visit(e.REM,(t=>n.rem(t))),e.visit(e.ADD,(t=>n.add(t)))),n.changes(),e.visit(e.SOURCE,(t=>{ot(t,i[n.cellkey(t)].tuple)})),e.reflow(r).modifies(this._outputs)},changes(){const t=this._adds,e=this._mods;let n,r;for(n=0,r=this._alen;n{const n=ms(e,u)[l],r=t.counts?e.length:1;Hs(n,h||at(e),d,p).forEach((t=>{const n={};for(let t=0;t(this._pending=V(t.data),t=>t.touch(this))));return{async:e}}return n.request(t.url,t.format).then((t=>Hu(this,e,V(t.data))))}}),Wu.Definition={type:"Lookup",metadata:{modifies:!0},params:[{name:"index",type:"index",params:[{name:"from",type:"data",required:!0},{name:"key",type:"field",required:!0}]},{name:"values",type:"field",array:!0},{name:"fields",type:"field",array:!0,required:!0},{name:"as",type:"string",array:!0},{name:"default",default:null}]},dt(Wu,Za,{transform(t,e){const r=t.fields,i=t.index,o=t.values,a=null==t.default?null:t.default,u=t.modified(),l=r.length;let c,f,h,d=u?e.SOURCE:e.ADD,p=e,g=t.as;return o?(f=o.length,l>1&&!g&&s('Multi-field lookup requires explicit "as" parameter.'),g&&g.length!==l*f&&s('The "as" parameter has too few output field names.'),g=g||o.map(n),c=function(t){for(var e,n,s=0,u=0;se.modified(t.fields))),d|=h?e.MOD:0),e.visit(d,c),p.modifies(g)}}),dt(Yu,$a),dt(Vu,$a),dt(Ju,Za,{transform(t,e){return this.modified(t.modified()),this.value=t,e.fork(e.NO_SOURCE|e.NO_FIELDS)}}),Zu.Definition={type:"Pivot",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"field",type:"field",required:!0},{name:"value",type:"field",required:!0},{name:"op",type:"enum",values:Zs,default:"sum"},{name:"limit",type:"number",default:0},{name:"key",type:"field"}]},dt(Zu,su,{_transform:su.prototype.transform,transform(t,n){return this._transform(function(t,n){const i=t.field,o=t.value,a=("count"===t.op?"__count__":t.op)||"sum",s=r(i).concat(r(o)),u=function(t,e,n){const r={},i=[];return n.visit(n.SOURCE,(e=>{const n=t(e);r[n]||(r[n]=1,i.push(n))})),i.sort(K),e?i.slice(0,e):i}(i,t.limit||0,n);n.changed()&&t.set("__pivot__",null,null,!0);return{key:t.key,groupby:t.groupby,ops:u.map((()=>a)),fields:u.map((t=>function(t,n,r,i){return e((e=>n(e)===t?r(e):NaN),i,t+"")}(t,i,o,s))),as:u.map((t=>t+"")),modified:t.modified.bind(t)}}(t,n),n)}}),dt(Qu,Cu,{transform(t,e){const n=t.subflow,i=t.field,o=t=>this.subflow(va(t),n,e,t);return(t.modified("field")||i&&e.modified(r(i)))&&s("PreFacet does not support field modification."),this.initTargets(),i?(e.visit(e.MOD,(t=>{const e=o(t);i(t).forEach((t=>e.mod(t)))})),e.visit(e.ADD,(t=>{const e=o(t);i(t).forEach((t=>e.add(xa(t))))})),e.visit(e.REM,(t=>{const e=o(t);i(t).forEach((t=>e.rem(t)))}))):(e.visit(e.MOD,(t=>o(t).mod(t))),e.visit(e.ADD,(t=>o(t).add(t))),e.visit(e.REM,(t=>o(t).rem(t)))),e.clean()&&e.runAfter((()=>this.clean())),e}}),Ku.Definition={type:"Project",metadata:{generates:!0,changes:!0},params:[{name:"fields",type:"field",array:!0},{name:"as",type:"string",null:!0,array:!0}]},dt(Ku,Za,{transform(t,e){const n=e.fork(e.NO_SOURCE),r=t.fields,i=bu(t.fields,t.as||[]),o=r?(t,e)=>function(t,e,n,r){for(let i=0,o=n.length;i{const e=va(t);n.rem.push(a[e]),a[e]=null})),e.visit(e.ADD,(t=>{const e=o(t,xa({}));a[va(t)]=e,n.add.push(e)})),e.visit(e.MOD,(t=>{n.mod.push(o(t,a[va(t)]))})),n}}),dt(tl,Za,{transform(t,e){return this.value=t.value,t.modified("value")?e.fork(e.NO_SOURCE|e.NO_FIELDS):e.StopPropagation}}),el.Definition={type:"Quantile",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"field",type:"field",required:!0},{name:"probs",type:"number",array:!0},{name:"step",type:"number",default:.01},{name:"as",type:"string",array:!0,default:["prob","value"]}]};function nl(t){Za.call(this,null,t)}function rl(t){Za.call(this,[],t),this.count=0}function il(t){Za.call(this,null,t)}function ol(t){Za.call(this,null,t),this.modified(!0)}function al(t){Za.call(this,null,t)}dt(el,Za,{transform(t,e){const r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=t.as||["prob","value"];if(this.value&&!t.modified()&&!e.changed())return r.source=this.value,r;const o=wu(e.materialize(e.SOURCE).source,t.groupby,t.field),a=(t.groupby||[]).map(n),s=[],u=t.step||.01,l=t.probs||$e(u/2,1-1e-14,u),c=l.length;return o.forEach((t=>{const e=ns(t,l);for(let n=0;n{const e=va(t);n.rem.push(r[e]),r[e]=null})),e.visit(e.ADD,(t=>{const e=ba(t);r[va(t)]=e,n.add.push(e)})),e.visit(e.MOD,(t=>{const e=r[va(t)];for(const r in t)e[r]=t[r],n.modifies(r);n.mod.push(e)}))),n}}),rl.Definition={type:"Sample",metadata:{},params:[{name:"size",type:"number",default:1e3}]},dt(rl,Za,{transform(e,n){const r=n.fork(n.NO_SOURCE),i=e.modified("size"),o=e.size,a=this.value.reduce(((t,e)=>(t[va(e)]=1,t)),{});let s=this.value,u=this.count,l=0;function c(e){let n,i;s.length=l&&(n=s[i],a[va(n)]&&r.rem.push(n),s[i]=e)),++u}if(n.rem.length&&(n.visit(n.REM,(t=>{const e=va(t);a[e]&&(a[e]=-1,r.rem.push(t)),--u})),s=s.filter((t=>-1!==a[va(t)]))),(n.rem.length||i)&&s.length{a[va(t)]||c(t)})),l=-1),i&&s.length>o){const t=s.length-o;for(let e=0;e{a[va(t)]&&r.mod.push(t)})),n.add.length&&n.visit(n.ADD,c),(n.add.length||l<0)&&(r.add=s.filter((t=>!a[va(t)]))),this.count=u,this.value=r.source=s,r}}),il.Definition={type:"Sequence",metadata:{generates:!0,changes:!0},params:[{name:"start",type:"number",required:!0},{name:"stop",type:"number",required:!0},{name:"step",type:"number",default:1},{name:"as",type:"string",default:"data"}]},dt(il,Za,{transform(t,e){if(this.value&&!t.modified())return;const n=e.materialize().fork(e.MOD),r=t.as||"data";return n.rem=this.value?e.rem.concat(this.value):e.rem,this.value=$e(t.start,t.stop,t.step||1).map((t=>{const e={};return e[r]=t,xa(e)})),n.add=e.add.concat(this.value),n}}),dt(ol,Za,{transform(t,e){return this.value=e.source,e.changed()?e.fork(e.NO_SOURCE|e.NO_FIELDS):e.StopPropagation}});const sl=["unit0","unit1"];function ul(t){Za.call(this,ft(),t)}function ll(t){Za.call(this,null,t)}al.Definition={type:"TimeUnit",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"interval",type:"boolean",default:!0},{name:"units",type:"enum",values:tr,array:!0},{name:"step",type:"number",default:1},{name:"maxbins",type:"number",default:40},{name:"extent",type:"date",array:!0},{name:"timezone",type:"enum",default:"local",values:["local","utc"]},{name:"as",type:"string",array:!0,length:2,default:sl}]},dt(al,Za,{transform(t,e){const n=t.field,i=!1!==t.interval,o="utc"===t.timezone,a=this._floor(t,e),s=(o?Sr:Fr)(a.unit).offset,u=t.as||sl,l=u[0],c=u[1],f=a.step;let h=a.start||1/0,d=a.stop||-1/0,p=e.ADD;return(t.modified()||e.changed(e.REM)||e.modified(r(n)))&&(p=(e=e.reflow(!0)).SOURCE,h=1/0,d=-1/0),e.visit(p,(t=>{const e=n(t);let r,o;null==e?(t[l]=null,i&&(t[c]=null)):(t[l]=r=o=a(e),i&&(t[c]=o=s(r,f)),rd&&(d=o))})),a.start=h,a.stop=d,e.modifies(i?u:l)},_floor(t,e){const n="utc"===t.timezone,{units:r,step:i}=t.units?{units:t.units,step:t.step||1}:Zr({extent:t.extent||at(e.materialize(e.SOURCE).source,t.field),maxbins:t.maxbins}),o=nr(r),a=this.value||{},s=(n?Er:kr)(o,i);return s.unit=F(o),s.units=o,s.step=i,s.start=a.start,s.stop=a.stop,this.value=s}}),dt(ul,Za,{transform(t,e){const n=e.dataflow,r=t.field,i=this.value,o=t=>i.set(r(t),t);let a=!0;return t.modified("field")||e.modified(r.fields)?(i.clear(),e.visit(e.SOURCE,o)):e.changed()?(e.visit(e.REM,(t=>i.delete(r(t)))),e.visit(e.ADD,o)):a=!1,this.modified(a),i.empty>n.cleanThreshold&&n.runAfter(i.clean),e.fork()}}),dt(ll,Za,{transform(t,e){(!this.value||t.modified("field")||t.modified("sort")||e.changed()||t.sort&&e.modified(t.sort.fields))&&(this.value=(t.sort?e.source.slice().sort(Aa(t.sort)):e.source).map(t.field))}});const cl={row_number:function(){return{next:t=>t.index+1}},rank:function(){let t;return{init:()=>t=1,next:e=>{const n=e.index,r=e.data;return n&&e.compare(r[n-1],r[n])?t=n+1:t}}},dense_rank:function(){let t;return{init:()=>t=1,next:e=>{const n=e.index,r=e.data;return n&&e.compare(r[n-1],r[n])?++t:t}}},percent_rank:function(){const t=cl.rank(),e=t.next;return{init:t.init,next:t=>(e(t)-1)/(t.data.length-1)}},cume_dist:function(){let t;return{init:()=>t=0,next:e=>{const n=e.data,r=e.compare;let i=e.index;if(t0||s("ntile num must be greater than zero.");const n=cl.cume_dist(),r=n.next;return{init:n.init,next:t=>Math.ceil(e*r(t))}},lag:function(t,e){return e=+e||1,{next:n=>{const r=n.index-e;return r>=0?t(n.data[r]):null}}},lead:function(t,e){return e=+e||1,{next:n=>{const r=n.index+e,i=n.data;return rt(e.data[e.i0])}},last_value:function(t){return{next:e=>t(e.data[e.i1-1])}},nth_value:function(t,e){return(e=+e)>0||s("nth_value nth must be greater than zero."),{next:n=>{const r=n.i0+(e-1);return re=null,next:n=>{const r=t(n.data[n.index]);return null!=r?e=r:e}}},next_value:function(t){let e,n;return{init:()=>(e=null,n=-1),next:r=>{const i=r.data;return r.index<=n?e:(n=function(t,e,n){for(let r=e.length;nf[t]=1))}y(t.sort),e.forEach(((t,e)=>{const r=i[e],f=o[e],v=a[e]||null,_=n(r),x=Gs(t,_,u[e]);if(y(r),l.push(x),lt(cl,t))c.push(function(t,e,n,r){const i=cl[t](e,n);return{init:i.init||h,update:function(t,e){e[r]=i.next(t)}}}(t,r,f,x));else{if(null==r&&"count"!==t&&s("Null aggregate field specified."),"count"===t)return void p.push(x);m=!1;let e=d[_];e||(e=d[_]=[],e.field=r,g.push(e)),e.push(Qs(t,v,x))}})),(p.length||g.length)&&(this.cell=function(t,e,n){t=t.map((t=>iu(t,t.field)));const r={num:0,agg:null,store:!1,count:e};if(!n)for(var i=t.length,o=r.agg=Array(i),a=0;a0&&!i(o[n],o[n-1])&&(t.i0=e.left(o,o[n])),rt.init())),this.cell&&this.cell.init()},dl.update=function(t,e){const n=this.cell,r=this.windows,i=t.data,o=r&&r.length;let a;if(n){for(a=t.p0;athis.group(i(t));let a=this.state;a&&!n||(a=this.state=new hl(t)),n||e.modified(a.inputs)?(this.value={},e.visit(e.SOURCE,(t=>o(t).add(t)))):(e.visit(e.REM,(t=>o(t).remove(t))),e.visit(e.ADD,(t=>o(t).add(t))));for(let e=0,n=this._mlen;e=1?Fl:t<=-1?-Fl:Math.asin(t)}const Tl=Math.PI,Bl=2*Tl,zl=1e-6,Nl=Bl-zl;function Ol(t){this._+=t[0];for(let e=1,n=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return Ol;const n=10**e;return function(t){this._+=t[0];for(let e=1,r=t.length;ezl)if(Math.abs(c*s-u*l)>zl&&i){let h=n-o,d=r-a,p=s*s+u*u,g=h*h+d*d,m=Math.sqrt(p),y=Math.sqrt(f),v=i*Math.tan((Tl-Math.acos((p+f-g)/(2*m*y)))/2),_=v/y,x=v/m;Math.abs(_-1)>zl&&this._append`L${t+_*l},${e+_*c}`,this._append`A${i},${i},0,0,${+(c*h>l*d)},${this._x1=t+x*s},${this._y1=e+x*u}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,n,r,i,o){if(t=+t,e=+e,o=!!o,(n=+n)<0)throw new Error(`negative radius: ${n}`);let a=n*Math.cos(r),s=n*Math.sin(r),u=t+a,l=e+s,c=1^o,f=o?r-i:i-r;null===this._x1?this._append`M${u},${l}`:(Math.abs(this._x1-u)>zl||Math.abs(this._y1-l)>zl)&&this._append`L${u},${l}`,n&&(f<0&&(f=f%Bl+Bl),f>Nl?this._append`A${n},${n},0,1,${c},${t-a},${e-s}A${n},${n},0,1,${c},${this._x1=u},${this._y1=l}`:f>zl&&this._append`A${n},${n},0,${+(f>=Tl)},${c},${this._x1=t+n*Math.cos(i)},${this._y1=e+n*Math.sin(i)}`)}rect(t,e,n,r){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${n=+n}v${+r}h${-n}Z`}toString(){return this._}};function Ul(){return new Rl}function Ll(t){let e=3;return t.digits=function(n){if(!arguments.length)return e;if(null==n)e=null;else{const t=Math.floor(n);if(!(t>=0))throw new RangeError(`invalid digits: ${n}`);e=t}return t},()=>new Rl(e)}function ql(t){return t.innerRadius}function Pl(t){return t.outerRadius}function jl(t){return t.startAngle}function Il(t){return t.endAngle}function Hl(t){return t&&t.padAngle}function Wl(t,e,n,r,i,o,a){var s=t-n,u=e-r,l=(a?o:-o)/El(s*s+u*u),c=l*u,f=-l*s,h=t+c,d=e+f,p=n+c,g=r+f,m=(h+p)/2,y=(d+g)/2,v=p-h,_=g-d,x=v*v+_*_,b=i-o,w=h*g-p*d,k=(_<0?-1:1)*El(kl(0,b*b*x-w*w)),A=(w*_-v*k)/x,M=(-w*v-_*k)/x,E=(w*_+v*k)/x,D=(-w*v+_*k)/x,C=A-m,F=M-y,S=E-m,$=D-y;return C*C+F*F>S*S+$*$&&(A=E,M=D),{cx:A,cy:M,x01:-c,y01:-f,x11:A*(i/b-1),y11:M*(i/b-1)}}function Yl(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function Gl(t){this._context=t}function Vl(t){return new Gl(t)}function Xl(t){return t[0]}function Jl(t){return t[1]}function Zl(t,e){var n=_l(!0),r=null,i=Vl,o=null,a=Ll(s);function s(s){var u,l,c,f=(s=Yl(s)).length,h=!1;for(null==r&&(o=i(c=a())),u=0;u<=f;++u)!(u=f;--h)s.point(y[h],v[h]);s.lineEnd(),s.areaEnd()}m&&(y[c]=+t(d,c,l),v[c]=+e(d,c,l),s.point(r?+r(d,c,l):y[c],n?+n(d,c,l):v[c]))}if(p)return s=null,p+""||null}function c(){return Zl().defined(i).curve(a).context(o)}return t="function"==typeof t?t:void 0===t?Xl:_l(+t),e="function"==typeof e?e:_l(void 0===e?0:+e),n="function"==typeof n?n:void 0===n?Jl:_l(+n),l.x=function(e){return arguments.length?(t="function"==typeof e?e:_l(+e),r=null,l):t},l.x0=function(e){return arguments.length?(t="function"==typeof e?e:_l(+e),l):t},l.x1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:_l(+t),l):r},l.y=function(t){return arguments.length?(e="function"==typeof t?t:_l(+t),n=null,l):e},l.y0=function(t){return arguments.length?(e="function"==typeof t?t:_l(+t),l):e},l.y1=function(t){return arguments.length?(n=null==t?null:"function"==typeof t?t:_l(+t),l):n},l.lineX0=l.lineY0=function(){return c().x(t).y(e)},l.lineY1=function(){return c().x(t).y(n)},l.lineX1=function(){return c().x(r).y(e)},l.defined=function(t){return arguments.length?(i="function"==typeof t?t:_l(!!t),l):i},l.curve=function(t){return arguments.length?(a=t,null!=o&&(s=a(o)),l):a},l.context=function(t){return arguments.length?(null==t?o=s=null:s=a(o=t),l):o},l}Ul.prototype=Rl.prototype,Gl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}};var Kl={draw(t,e){const n=El(e/Cl);t.moveTo(n,0),t.arc(0,0,n,0,Sl)}};function tc(){}function ec(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function nc(t){this._context=t}function rc(t){this._context=t}function ic(t){this._context=t}function oc(t,e){this._basis=new nc(t),this._beta=e}nc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:ec(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:ec(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},rc.prototype={areaStart:tc,areaEnd:tc,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:ec(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ic.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:ec(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},oc.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var r,i=t[0],o=e[0],a=t[n]-i,s=e[n]-o,u=-1;++u<=n;)r=u/n,this._basis.point(this._beta*t[u]+(1-this._beta)*(i+r*a),this._beta*e[u]+(1-this._beta)*(o+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var ac=function t(e){function n(t){return 1===e?new nc(t):new oc(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function sc(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function uc(t,e){this._context=t,this._k=(1-e)/6}uc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:sc(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:sc(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var lc=function t(e){function n(t){return new uc(t,e)}return n.tension=function(e){return t(+e)},n}(0);function cc(t,e){this._context=t,this._k=(1-e)/6}cc.prototype={areaStart:tc,areaEnd:tc,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:sc(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var fc=function t(e){function n(t){return new cc(t,e)}return n.tension=function(e){return t(+e)},n}(0);function hc(t,e){this._context=t,this._k=(1-e)/6}hc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:sc(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var dc=function t(e){function n(t){return new hc(t,e)}return n.tension=function(e){return t(+e)},n}(0);function pc(t,e,n){var r=t._x1,i=t._y1,o=t._x2,a=t._y2;if(t._l01_a>Dl){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,u=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/u,i=(i*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/u}if(t._l23_a>Dl){var l=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,c=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*l+t._x1*t._l23_2a-e*t._l12_2a)/c,a=(a*l+t._y1*t._l23_2a-n*t._l12_2a)/c}t._context.bezierCurveTo(r,i,o,a,t._x2,t._y2)}function gc(t,e){this._context=t,this._alpha=e}gc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:pc(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var mc=function t(e){function n(t){return e?new gc(t,e):new uc(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function yc(t,e){this._context=t,this._alpha=e}yc.prototype={areaStart:tc,areaEnd:tc,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:pc(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var vc=function t(e){function n(t){return e?new yc(t,e):new cc(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function _c(t,e){this._context=t,this._alpha=e}_c.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:pc(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var xc=function t(e){function n(t){return e?new _c(t,e):new hc(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function bc(t){this._context=t}function wc(t){return t<0?-1:1}function kc(t,e,n){var r=t._x1-t._x0,i=e-t._x1,o=(t._y1-t._y0)/(r||i<0&&-0),a=(n-t._y1)/(i||r<0&&-0),s=(o*i+a*r)/(r+i);return(wc(o)+wc(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(s))||0}function Ac(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function Mc(t,e,n){var r=t._x0,i=t._y0,o=t._x1,a=t._y1,s=(o-r)/3;t._context.bezierCurveTo(r+s,i+s*e,o-s,a-s*n,o,a)}function Ec(t){this._context=t}function Dc(t){this._context=new Cc(t)}function Cc(t){this._context=t}function Fc(t){this._context=t}function Sc(t){var e,n,r=t.length-1,i=new Array(r),o=new Array(r),a=new Array(r);for(i[0]=0,o[0]=2,a[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(a[e]-i[e+1])/o[e];for(o[r-1]=(t[r]+i[r-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};const Bc=()=>"undefined"!=typeof Image?Image:null;function zc(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}function Nc(t,e){switch(arguments.length){case 0:break;case 1:"function"==typeof t?this.interpolator(t):this.range(t);break;default:this.domain(t),"function"==typeof e?this.interpolator(e):this.range(e)}return this}const Oc=Symbol("implicit");function Rc(){var t=new le,e=[],n=[],r=Oc;function i(i){let o=t.get(i);if(void 0===o){if(r!==Oc)return r;t.set(i,o=e.push(i)-1)}return n[o%n.length]}return i.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new le;for(const r of n)t.has(r)||t.set(r,e.push(r)-1);return i},i.range=function(t){return arguments.length?(n=Array.from(t),i):n.slice()},i.unknown=function(t){return arguments.length?(r=t,i):r},i.copy=function(){return Rc(e,n).unknown(r)},zc.apply(i,arguments),i}function Uc(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function Lc(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function qc(){}var Pc=.7,jc=1/Pc,Ic="\\s*([+-]?\\d+)\\s*",Hc="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",Wc="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Yc=/^#([0-9a-f]{3,8})$/,Gc=new RegExp(`^rgb\\(${Ic},${Ic},${Ic}\\)$`),Vc=new RegExp(`^rgb\\(${Wc},${Wc},${Wc}\\)$`),Xc=new RegExp(`^rgba\\(${Ic},${Ic},${Ic},${Hc}\\)$`),Jc=new RegExp(`^rgba\\(${Wc},${Wc},${Wc},${Hc}\\)$`),Zc=new RegExp(`^hsl\\(${Hc},${Wc},${Wc}\\)$`),Qc=new RegExp(`^hsla\\(${Hc},${Wc},${Wc},${Hc}\\)$`),Kc={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function tf(){return this.rgb().formatHex()}function ef(){return this.rgb().formatRgb()}function nf(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=Yc.exec(t))?(n=e[1].length,e=parseInt(e[1],16),6===n?rf(e):3===n?new uf(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?of(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?of(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Gc.exec(t))?new uf(e[1],e[2],e[3],1):(e=Vc.exec(t))?new uf(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Xc.exec(t))?of(e[1],e[2],e[3],e[4]):(e=Jc.exec(t))?of(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=Zc.exec(t))?pf(e[1],e[2]/100,e[3]/100,1):(e=Qc.exec(t))?pf(e[1],e[2]/100,e[3]/100,e[4]):Kc.hasOwnProperty(t)?rf(Kc[t]):"transparent"===t?new uf(NaN,NaN,NaN,0):null}function rf(t){return new uf(t>>16&255,t>>8&255,255&t,1)}function of(t,e,n,r){return r<=0&&(t=e=n=NaN),new uf(t,e,n,r)}function af(t){return t instanceof qc||(t=nf(t)),t?new uf((t=t.rgb()).r,t.g,t.b,t.opacity):new uf}function sf(t,e,n,r){return 1===arguments.length?af(t):new uf(t,e,n,null==r?1:r)}function uf(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function lf(){return`#${df(this.r)}${df(this.g)}${df(this.b)}`}function cf(){const t=ff(this.opacity);return`${1===t?"rgb(":"rgba("}${hf(this.r)}, ${hf(this.g)}, ${hf(this.b)}${1===t?")":`, ${t})`}`}function ff(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function hf(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function df(t){return((t=hf(t))<16?"0":"")+t.toString(16)}function pf(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new yf(t,e,n,r)}function gf(t){if(t instanceof yf)return new yf(t.h,t.s,t.l,t.opacity);if(t instanceof qc||(t=nf(t)),!t)return new yf;if(t instanceof yf)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),o=Math.max(e,n,r),a=NaN,s=o-i,u=(o+i)/2;return s?(a=e===o?(n-r)/s+6*(n0&&u<1?0:a,new yf(a,s,u,t.opacity)}function mf(t,e,n,r){return 1===arguments.length?gf(t):new yf(t,e,n,null==r?1:r)}function yf(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function vf(t){return(t=(t||0)%360)<0?t+360:t}function _f(t){return Math.max(0,Math.min(1,t||0))}function xf(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}Uc(qc,nf,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:tf,formatHex:tf,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return gf(this).formatHsl()},formatRgb:ef,toString:ef}),Uc(uf,sf,Lc(qc,{brighter(t){return t=null==t?jc:Math.pow(jc,t),new uf(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?Pc:Math.pow(Pc,t),new uf(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new uf(hf(this.r),hf(this.g),hf(this.b),ff(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:lf,formatHex:lf,formatHex8:function(){return`#${df(this.r)}${df(this.g)}${df(this.b)}${df(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:cf,toString:cf})),Uc(yf,mf,Lc(qc,{brighter(t){return t=null==t?jc:Math.pow(jc,t),new yf(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?Pc:Math.pow(Pc,t),new yf(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new uf(xf(t>=240?t-240:t+120,i,r),xf(t,i,r),xf(t<120?t+240:t-120,i,r),this.opacity)},clamp(){return new yf(vf(this.h),_f(this.s),_f(this.l),ff(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=ff(this.opacity);return`${1===t?"hsl(":"hsla("}${vf(this.h)}, ${100*_f(this.s)}%, ${100*_f(this.l)}%${1===t?")":`, ${t})`}`}}));const bf=Math.PI/180,wf=180/Math.PI,kf=.96422,Af=1,Mf=.82521,Ef=4/29,Df=6/29,Cf=3*Df*Df,Ff=Df*Df*Df;function Sf(t){if(t instanceof Tf)return new Tf(t.l,t.a,t.b,t.opacity);if(t instanceof Uf)return Lf(t);t instanceof uf||(t=af(t));var e,n,r=Of(t.r),i=Of(t.g),o=Of(t.b),a=Bf((.2225045*r+.7168786*i+.0606169*o)/Af);return r===i&&i===o?e=n=a:(e=Bf((.4360747*r+.3850649*i+.1430804*o)/kf),n=Bf((.0139322*r+.0971045*i+.7141733*o)/Mf)),new Tf(116*a-16,500*(e-a),200*(a-n),t.opacity)}function $f(t,e,n,r){return 1===arguments.length?Sf(t):new Tf(t,e,n,null==r?1:r)}function Tf(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function Bf(t){return t>Ff?Math.pow(t,1/3):t/Cf+Ef}function zf(t){return t>Df?t*t*t:Cf*(t-Ef)}function Nf(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Of(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Rf(t,e,n,r){return 1===arguments.length?function(t){if(t instanceof Uf)return new Uf(t.h,t.c,t.l,t.opacity);if(t instanceof Tf||(t=Sf(t)),0===t.a&&0===t.b)return new Uf(NaN,0=1?(n=1,e-1):Math.floor(n*e),i=t[r],o=t[r+1],a=r>0?t[r-1]:2*i-o,s=r()=>t;function th(t,e){return function(n){return t+n*e}}function eh(t,e){var n=e-t;return n?th(t,n>180||n<-180?n-360*Math.round(n/360):n):Kf(isNaN(t)?e:t)}function nh(t){return 1==(t=+t)?rh:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):Kf(isNaN(e)?n:e)}}function rh(t,e){var n=e-t;return n?th(t,n):Kf(isNaN(t)?e:t)}var ih=function t(e){var n=nh(e);function r(t,e){var r=n((t=sf(t)).r,(e=sf(e)).r),i=n(t.g,e.g),o=n(t.b,e.b),a=rh(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=o(e),t.opacity=a(e),t+""}}return r.gamma=t,r}(1);function oh(t){return function(e){var n,r,i=e.length,o=new Array(i),a=new Array(i),s=new Array(i);for(n=0;no&&(i=e.slice(o,i),s[a]?s[a]+=i:s[++a]=i),(n=n[0])===(r=r[0])?s[a]?s[a]+=r:s[++a]=r:(s[++a]=null,u.push({i:a,x:hh(n,r)})),o=gh.lastIndex;return o180?e+=360:e-t>180&&(t+=360),o.push({i:n.push(i(n)+"rotate(",null,r)-2,x:hh(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(o.rotate,a.rotate,s,u),function(t,e,n,o){t!==e?o.push({i:n.push(i(n)+"skewX(",null,r)-2,x:hh(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(o.skewX,a.skewX,s,u),function(t,e,n,r,o,a){if(t!==n||e!==r){var s=o.push(i(o)+"scale(",null,",",null,")");a.push({i:s-4,x:hh(t,n)},{i:s-2,x:hh(e,r)})}else 1===n&&1===r||o.push(i(o)+"scale("+n+","+r+")")}(o.scaleX,o.scaleY,a.scaleX,a.scaleY,s,u),o=a=null,function(t){for(var e,n=-1,r=u.length;++ne&&(n=t,t=e,e=n),function(n){return Math.max(t,Math.min(e,n))}}(a[0],a[t-1])),r=t>2?Hh:Ih,i=o=null,f}function f(e){return null==e||isNaN(e=+e)?n:(i||(i=r(a.map(t),s,u)))(t(l(e)))}return f.invert=function(n){return l(e((o||(o=r(s,a.map(t),hh)))(n)))},f.domain=function(t){return arguments.length?(a=Array.from(t,Lh),c()):a.slice()},f.range=function(t){return arguments.length?(s=Array.from(t),c()):s.slice()},f.rangeRound=function(t){return s=Array.from(t),u=vh,c()},f.clamp=function(t){return arguments.length?(l=!!t||Ph,c()):l!==Ph},f.interpolate=function(t){return arguments.length?(u=t,c()):u},f.unknown=function(t){return arguments.length?(n=t,f):n},function(n,r){return t=n,e=r,c()}}function Gh(){return Yh()(Ph,Ph)}function Vh(t,e,n,r){var i,o=we(t,e,n);switch((r=Ue(null==r?",f":r)).type){case"s":var a=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=Je(o,a))||(r.precision=i),We(r,a);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=Ze(o,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=Xe(o))||(r.precision=i-2*("%"===r.type))}return He(r)}function Xh(t){var e=t.domain;return t.ticks=function(t){var n=e();return xe(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return Vh(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i,o=e(),a=0,s=o.length-1,u=o[a],l=o[s],c=10;for(l0;){if((i=be(u,l,n))===r)return o[a]=u,o[s]=l,e(o);if(i>0)u=Math.floor(u/i)*i,l=Math.ceil(l/i)*i;else{if(!(i<0))break;u=Math.ceil(u*i)/i,l=Math.floor(l*i)/i}r=i}return t},t}function Jh(t,e){var n,r=0,i=(t=t.slice()).length-1,o=t[r],a=t[i];return a-t(-e,n)}function rd(t){const e=t(Zh,Qh),n=e.domain;let r,i,o=10;function a(){return r=function(t){return t===Math.E?Math.log:10===t&&Math.log10||2===t&&Math.log2||(t=Math.log(t),e=>Math.log(e)/t)}(o),i=function(t){return 10===t?ed:t===Math.E?Math.exp:e=>Math.pow(t,e)}(o),n()[0]<0?(r=nd(r),i=nd(i),t(Kh,td)):t(Zh,Qh),e}return e.base=function(t){return arguments.length?(o=+t,a()):o},e.domain=function(t){return arguments.length?(n(t),a()):n()},e.ticks=t=>{const e=n();let a=e[0],s=e[e.length-1];const u=s0){for(;f<=h;++f)for(l=1;ls)break;p.push(c)}}else for(;f<=h;++f)for(l=o-1;l>=1;--l)if(c=f>0?l/i(-f):l*i(f),!(cs)break;p.push(c)}2*p.length{if(null==t&&(t=10),null==n&&(n=10===o?"s":","),"function"!=typeof n&&(o%1||null!=(n=Ue(n)).precision||(n.trim=!0),n=He(n)),t===1/0)return n;const a=Math.max(1,o*t/e.ticks().length);return t=>{let e=t/i(Math.round(r(t)));return e*on(Jh(n(),{floor:t=>i(Math.floor(r(t))),ceil:t=>i(Math.ceil(r(t)))})),e}function id(t){return function(e){return Math.sign(e)*Math.log1p(Math.abs(e/t))}}function od(t){return function(e){return Math.sign(e)*Math.expm1(Math.abs(e))*t}}function ad(t){var e=1,n=t(id(e),od(e));return n.constant=function(n){return arguments.length?t(id(e=+n),od(e)):e},Xh(n)}function sd(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function ud(t){return t<0?-Math.sqrt(-t):Math.sqrt(t)}function ld(t){return t<0?-t*t:t*t}function cd(t){var e=t(Ph,Ph),n=1;return e.exponent=function(e){return arguments.length?1===(n=+e)?t(Ph,Ph):.5===n?t(ud,ld):t(sd(n),sd(1/n)):n},Xh(e)}function fd(){var t=cd(Yh());return t.copy=function(){return Wh(t,fd()).exponent(t.exponent())},zc.apply(t,arguments),t}function hd(t){return new Date(t)}function dd(t){return t instanceof Date?+t:+new Date(+t)}function pd(t,e,n,r,i,o,a,s,u,l){var c=Gh(),f=c.invert,h=c.domain,d=l(".%L"),p=l(":%S"),g=l("%I:%M"),m=l("%I %p"),y=l("%a %d"),v=l("%b %d"),_=l("%B"),x=l("%Y");function b(t){return(u(t)0?r:1:0}const wd="linear",kd="log",Ad="pow",Md="sqrt",Ed="symlog",Dd="time",Cd="utc",Fd="sequential",Sd="diverging",$d="quantile",Td="quantize",Bd="threshold",zd="ordinal",Nd="point",Od="band",Rd="bin-ordinal",Ud="continuous",Ld="discrete",qd="discretizing",Pd="interpolating",jd="temporal";function Id(){const t=Rc().unknown(void 0),e=t.domain,n=t.range;let r,i,o=[0,1],a=!1,s=0,u=0,l=.5;function c(){const t=e().length,c=o[1]d+r*t));return n(c?p.reverse():p)}return delete t.unknown,t.domain=function(t){return arguments.length?(e(t),c()):e()},t.range=function(t){return arguments.length?(o=[+t[0],+t[1]],c()):o.slice()},t.rangeRound=function(t){return o=[+t[0],+t[1]],a=!0,c()},t.bandwidth=function(){return i},t.step=function(){return r},t.round=function(t){return arguments.length?(a=!!t,c()):a},t.padding=function(t){return arguments.length?(u=Math.max(0,Math.min(1,t)),s=u,c()):s},t.paddingInner=function(t){return arguments.length?(s=Math.max(0,Math.min(1,t)),c()):s},t.paddingOuter=function(t){return arguments.length?(u=Math.max(0,Math.min(1,t)),c()):u},t.align=function(t){return arguments.length?(l=Math.max(0,Math.min(1,t)),c()):l},t.invertRange=function(t){if(null==t[0]||null==t[1])return;const r=o[1]o[1-r])?void 0:(u=Math.max(0,oe(a,f)-1),l=f===h?u:oe(a,h)-1,f-a[u]>i+1e-10&&++u,r&&(c=u,u=s-l,l=s-c),u>l?void 0:e().slice(u,l+1))},t.invert=function(e){const n=t.invertRange([e,e]);return n?n[0]:n},t.copy=function(){return Id().domain(e()).range(o).round(a).paddingInner(s).paddingOuter(u).align(l)},c()}function Hd(t){const e=t.copy;return t.padding=t.paddingOuter,delete t.paddingInner,t.copy=function(){return Hd(e())},t}var Wd=Array.prototype.map;const Yd=Array.prototype.slice;const Gd=new Map,Vd=Symbol("vega_scale");function Xd(t){return t[Vd]=!0,t}function Jd(t,e,n){return arguments.length>1?(Gd.set(t,function(t,e,n){const r=function(){const n=e();return n.invertRange||(n.invertRange=n.invert?function(t){return function(e){let n,r=e[0],i=e[1];return i=s&&n[o]<=u&&(l<0&&(l=o),r=o);if(!(l<0))return s=t.invertExtent(n[l]),u=t.invertExtent(n[r]),[void 0===s[0]?s[1]:s[0],void 0===u[1]?u[0]:u[1]]}}(n):void 0),n.type=t,Xd(n)};return r.metadata=Bt(V(n)),r}(t,e,n)),this):Zd(t)?Gd.get(t):void 0}function Zd(t){return Gd.has(t)}function Qd(t,e){const n=Gd.get(t);return n&&n.metadata[e]}function Kd(t){return Qd(t,Ud)}function tp(t){return Qd(t,Ld)}function ep(t){return Qd(t,qd)}function np(t){return Qd(t,kd)}function rp(t){return Qd(t,Pd)}function ip(t){return Qd(t,$d)}Jd("identity",(function t(e){var n;function r(t){return null==t||isNaN(t=+t)?n:t}return r.invert=r,r.domain=r.range=function(t){return arguments.length?(e=Array.from(t,Lh),r):e.slice()},r.unknown=function(t){return arguments.length?(n=t,r):n},r.copy=function(){return t(e).unknown(n)},e=arguments.length?Array.from(e,Lh):[0,1],Xh(r)})),Jd(wd,(function t(){var e=Gh();return e.copy=function(){return Wh(e,t())},zc.apply(e,arguments),Xh(e)}),Ud),Jd(kd,(function t(){const e=rd(Yh()).domain([1,10]);return e.copy=()=>Wh(e,t()).base(e.base()),zc.apply(e,arguments),e}),[Ud,kd]),Jd(Ad,fd,Ud),Jd(Md,(function(){return fd.apply(null,arguments).exponent(.5)}),Ud),Jd(Ed,(function t(){var e=ad(Yh());return e.copy=function(){return Wh(e,t()).constant(e.constant())},zc.apply(e,arguments)}),Ud),Jd(Dd,(function(){return zc.apply(pd(Pn,jn,On,zn,_n,gn,dn,fn,cn,ri).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}),[Ud,jd]),Jd(Cd,(function(){return zc.apply(pd(Ln,qn,Rn,Nn,Dn,mn,pn,hn,cn,oi).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}),[Ud,jd]),Jd(Fd,yd,[Ud,Pd]),Jd(`${Fd}-${wd}`,yd,[Ud,Pd]),Jd(`${Fd}-${kd}`,(function t(){var e=rd(gd()).domain([1,10]);return e.copy=function(){return md(e,t()).base(e.base())},Nc.apply(e,arguments)}),[Ud,Pd,kd]),Jd(`${Fd}-${Ad}`,vd,[Ud,Pd]),Jd(`${Fd}-${Md}`,(function(){return vd.apply(null,arguments).exponent(.5)}),[Ud,Pd]),Jd(`${Fd}-${Ed}`,(function t(){var e=ad(gd());return e.copy=function(){return md(e,t()).constant(e.constant())},Nc.apply(e,arguments)}),[Ud,Pd]),Jd(`${Sd}-${wd}`,(function t(){var e=Xh(_d()(Ph));return e.copy=function(){return md(e,t())},Nc.apply(e,arguments)}),[Ud,Pd]),Jd(`${Sd}-${kd}`,(function t(){var e=rd(_d()).domain([.1,1,10]);return e.copy=function(){return md(e,t()).base(e.base())},Nc.apply(e,arguments)}),[Ud,Pd,kd]),Jd(`${Sd}-${Ad}`,xd,[Ud,Pd]),Jd(`${Sd}-${Md}`,(function(){return xd.apply(null,arguments).exponent(.5)}),[Ud,Pd]),Jd(`${Sd}-${Ed}`,(function t(){var e=ad(_d());return e.copy=function(){return md(e,t()).constant(e.constant())},Nc.apply(e,arguments)}),[Ud,Pd]),Jd($d,(function t(){var e,n=[],r=[],i=[];function o(){var t=0,e=Math.max(1,r.length);for(i=new Array(e-1);++t0?i[e-1]:n[0],e=i?[o[i-1],r]:[o[e-1],o[e]]},s.unknown=function(t){return arguments.length?(e=t,s):s},s.thresholds=function(){return o.slice()},s.copy=function(){return t().domain([n,r]).range(a).unknown(e)},zc.apply(Xh(s),arguments)}),qd),Jd(Bd,(function t(){var e,n=[.5],r=[0,1],i=1;function o(t){return null!=t&&t<=t?r[se(n,t,0,i)]:e}return o.domain=function(t){return arguments.length?(n=Array.from(t),i=Math.min(n.length,r.length-1),o):n.slice()},o.range=function(t){return arguments.length?(r=Array.from(t),i=Math.min(n.length,r.length-1),o):r.slice()},o.invertExtent=function(t){var e=r.indexOf(t);return[n[e-1],n[e]]},o.unknown=function(t){return arguments.length?(e=t,o):e},o.copy=function(){return t().domain(n).range(r).unknown(e)},zc.apply(o,arguments)}),qd),Jd(Rd,(function t(){let e=[],n=[];function r(t){return null==t||t!=t?void 0:n[(se(e,t)-1)%n.length]}return r.domain=function(t){return arguments.length?(e=function(t){return Wd.call(t,S)}(t),r):e.slice()},r.range=function(t){return arguments.length?(n=Yd.call(t),r):n.slice()},r.tickFormat=function(t,n){return Vh(e[0],F(e),null==t?10:t,n)},r.copy=function(){return t().domain(r.domain()).range(r.range())},r}),[Ld,qd]),Jd(zd,Rc,Ld),Jd(Od,Id,Ld),Jd(Nd,(function(){return Hd(Id().paddingInner(1))}),Ld);const op=["clamp","base","constant","exponent"];function ap(t,e){const n=e[0],r=F(e)-n;return function(e){return t(n+e*r)}}function sp(t,e,n){return Rh(cp(e||"rgb",n),t)}function up(t,e){const n=new Array(e),r=e+1;for(let i=0;it[e]?a[e](t[e]()):0)),a):rt(.5)}function cp(t,e){const n=Uh[function(t){return"interpolate"+t.toLowerCase().split("-").map((t=>t[0].toUpperCase()+t.slice(1))).join("")}(t)];return null!=e&&n&&n.gamma?n.gamma(e):n}function fp(t){const e=t.length/6|0,n=new Array(e);for(let r=0;r1?(dp[t]=e,this):dp[t]}hp({category10:"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf",category20:"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5",category20b:"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6",category20c:"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9",tableau10:"4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac",tableau20:"4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5",accent:"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666",dark2:"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666",paired:"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928",pastel1:"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2",pastel2:"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc",set1:"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999",set2:"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3",set3:"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"},fp),hp({blues:"cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90",greens:"d3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429",greys:"e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e",oranges:"fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303",purples:"e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c",reds:"fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13",blueGreen:"d5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429",bluePurple:"ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71",greenBlue:"d3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1",orangeRed:"fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403",purpleBlue:"dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281",purpleBlueGreen:"dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353",purpleRed:"dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a",redPurple:"fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174",yellowGreen:"e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034",yellowOrangeBrown:"feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204",yellowOrangeRed:"fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225",blueOrange:"134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07",brownBlueGreen:"704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147",purpleGreen:"5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29",purpleOrange:"4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07",redBlue:"8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85",redGrey:"8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434",yellowGreenBlue:"eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185",redYellowBlue:"a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695",redYellowGreen:"a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837",pinkYellowGreen:"8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419",spectral:"9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2",viridis:"440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725",magma:"0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf",inferno:"0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4",plasma:"0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921",cividis:"00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647",rainbow:"6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa",sinebow:"ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040",turbo:"23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00",browns:"eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632",tealBlues:"bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985",teals:"bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667",warmGreys:"dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e",goldGreen:"f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36",goldOrange:"f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26",goldRed:"f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e",lightGreyRed:"efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b",lightGreyTeal:"e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc",lightMulti:"e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c",lightOrange:"f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b",lightTealBlue:"e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988",darkBlue:"3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff",darkGold:"3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff",darkGreen:"3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa",darkMulti:"3737371f5287197d8c29a86995ce3fffe800ffffff",darkRed:"3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c"},(t=>sp(fp(t))));const gp="symbol",mp="discrete",yp=t=>k(t)?t.map((t=>String(t))):String(t),vp=(t,e)=>t[1]-e[1],_p=(t,e)=>e[1]-t[1];function xp(t,e,n){let r;return vt(e)&&(t.bins&&(e=Math.max(e,t.bins.length)),null!=n&&(e=Math.min(e,Math.floor(Dt(t.domain())/n||1)+1))),A(e)&&(r=e.step,e=e.interval),xt(e)&&(e=t.type===Dd?Fr(e):t.type==Cd?Sr(e):s("Only time and utc scales accept interval strings."),r&&(e=e.every(r))),e}function bp(t,e,n){let r=t.range(),i=r[0],o=F(r),a=vp;if(i>o&&(r=o,o=i,i=r,a=_p),i=Math.floor(i),o=Math.ceil(o),e=e.map((e=>[e,t(e)])).filter((t=>i<=t[1]&&t[1]<=o)).sort(a).map((t=>t[0])),n>0&&e.length>1){const t=[e[0],F(e)];for(;e.length>n&&e.length>=3;)e=e.filter(((t,e)=>!(e%2)));e.length<3&&(e=t)}return e}function wp(t,e){return t.bins?bp(t,t.bins):t.ticks?t.ticks(e):t.domain()}function kp(t,e,n,r,i,o){const a=e.type;let s=yp;if(a===Dd||i===Dd)s=t.timeFormat(r);else if(a===Cd||i===Cd)s=t.utcFormat(r);else if(np(a)){const i=t.formatFloat(r);if(o||e.bins)s=i;else{const t=Ap(e,n,!1);s=e=>t(e)?i(e):""}}else if(e.tickFormat){const i=e.domain();s=t.formatSpan(i[0],i[i.length-1],n,r)}else r&&(s=t.format(r));return s}function Ap(t,e,n){const r=wp(t,e),i=t.base(),o=Math.log(i),a=Math.max(1,i*e/r.length),s=t=>{let e=t/Math.pow(i,Math.round(Math.log(t)/o));return e*iMp[t.type]||t.bins;function Fp(t,e,n,r,i,o,a){const s=Ep[e.type]&&o!==Dd&&o!==Cd?function(t,e,n){const r=e[Ep[e.type]](),i=r.length;let o,a=i>1?r[1]-r[0]:r[0];for(o=1;o(e,n,r)=>{const i=$p(r[n+1],$p(r.max,1/0)),o=zp(e,t),a=zp(i,t);return o&&a?o+" – "+a:a?"< "+a:"≥ "+o},$p=(t,e)=>null!=t?t:e,Tp=t=>(e,n)=>n?t(e):null,Bp=t=>e=>t(e),zp=(t,e)=>Number.isFinite(t)?e(t):null;function Np(t,e,n,r){const i=r||e.type;return xt(n)&&function(t){return Qd(t,jd)}(i)&&(n=n.replace(/%a/g,"%A").replace(/%b/g,"%B")),n||i!==Dd?n||i!==Cd?Fp(t,e,5,null,n,r,!0):t.utcFormat("%A, %d %B %Y, %X UTC"):t.timeFormat("%A, %d %B %Y, %X")}function Op(t,e,n){n=n||{};const r=Math.max(3,n.maxlen||7),i=Np(t,e,n.format,n.formatType);if(ep(e.type)){const t=Dp(e).slice(1).map(i),n=t.length;return`${n} boundar${1===n?"y":"ies"}: ${t.join(", ")}`}if(tp(e.type)){const t=e.domain(),n=t.length;return`${n} value${1===n?"":"s"}: ${n>r?t.slice(0,r-2).map(i).join(", ")+", ending with "+t.slice(-1).map(i):t.map(i).join(", ")}`}{const t=e.domain();return`values from ${i(t[0])} to ${i(F(t))}`}}let Rp=0;const Up="p_";function Lp(t){return t&&t.gradient}function qp(t,e,n){const r=t.gradient;let i=t.id,o="radial"===r?Up:"";return i||(i=t.id="gradient_"+Rp++,"radial"===r?(t.x1=Pp(t.x1,.5),t.y1=Pp(t.y1,.5),t.r1=Pp(t.r1,0),t.x2=Pp(t.x2,.5),t.y2=Pp(t.y2,.5),t.r2=Pp(t.r2,.5),o=Up):(t.x1=Pp(t.x1,0),t.y1=Pp(t.y1,0),t.x2=Pp(t.x2,1),t.y2=Pp(t.y2,0))),e[i]=t,"url("+(n||"")+"#"+o+i+")"}function Pp(t,e){return null!=t?t:e}function jp(t,e){var n,r=[];return n={gradient:"linear",x1:t?t[0]:0,y1:t?t[1]:0,x2:e?e[0]:1,y2:e?e[1]:0,stops:r,stop:function(t,e){return r.push({offset:t,color:e}),n}}}const Ip={basis:{curve:function(t){return new nc(t)}},"basis-closed":{curve:function(t){return new rc(t)}},"basis-open":{curve:function(t){return new ic(t)}},bundle:{curve:ac,tension:"beta",value:.85},cardinal:{curve:lc,tension:"tension",value:0},"cardinal-open":{curve:dc,tension:"tension",value:0},"cardinal-closed":{curve:fc,tension:"tension",value:0},"catmull-rom":{curve:mc,tension:"alpha",value:.5},"catmull-rom-closed":{curve:vc,tension:"alpha",value:.5},"catmull-rom-open":{curve:xc,tension:"alpha",value:.5},linear:{curve:Vl},"linear-closed":{curve:function(t){return new bc(t)}},monotone:{horizontal:function(t){return new Dc(t)},vertical:function(t){return new Ec(t)}},natural:{curve:function(t){return new Fc(t)}},step:{curve:function(t){return new $c(t,.5)}},"step-after":{curve:function(t){return new $c(t,1)}},"step-before":{curve:function(t){return new $c(t,0)}}};function Hp(t,e,n){var r=lt(Ip,t)&&Ip[t],i=null;return r&&(i=r.curve||r[e||"vertical"],r.tension&&null!=n&&(i=i[r.tension](n))),i}const Wp={m:2,l:2,h:1,v:1,z:0,c:6,s:4,q:4,t:2,a:7},Yp=/[mlhvzcsqta]([^mlhvzcsqta]+|$)/gi,Gp=/^[+-]?(([0-9]*\.[0-9]+)|([0-9]+\.)|([0-9]+))([eE][+-]?[0-9]+)?/,Vp=/^((\s+,?\s*)|(,\s*))/,Xp=/^[01]/;function Jp(t){const e=[];return(t.match(Yp)||[]).forEach((t=>{let n=t[0];const r=n.toLowerCase(),i=Wp[r],o=function(t,e,n){const r=[];for(let i=0;e&&i1&&(g=Math.sqrt(g),n*=g,r*=g);const m=h/n,y=f/n,v=-f/r,_=h/r,x=m*s+y*u,b=v*s+_*u,w=m*t+y*e,k=v*t+_*e;let A=1/((w-x)*(w-x)+(k-b)*(k-b))-.25;A<0&&(A=0);let M=Math.sqrt(A);o==i&&(M=-M);const E=.5*(x+w)-M*(k-b),D=.5*(b+k)+M*(w-x),C=Math.atan2(b-D,x-E);let F=Math.atan2(k-D,w-E)-C;F<0&&1===o?F+=Kp:F>0&&0===o&&(F-=Kp);const S=Math.ceil(Math.abs(F/(Qp+.001))),$=[];for(let t=0;t+t}function _g(t,e,n){return Math.max(e,Math.min(t,n))}function xg(){var t=pg,e=gg,n=mg,r=yg,i=vg(0),o=i,a=i,s=i,u=null;function l(l,c,f){var h,d=null!=c?c:+t.call(this,l),p=null!=f?f:+e.call(this,l),g=+n.call(this,l),m=+r.call(this,l),y=Math.min(g,m)/2,v=_g(+i.call(this,l),0,y),_=_g(+o.call(this,l),0,y),x=_g(+a.call(this,l),0,y),b=_g(+s.call(this,l),0,y);if(u||(u=h=Ul()),v<=0&&_<=0&&x<=0&&b<=0)u.rect(d,p,g,m);else{var w=d+g,k=p+m;u.moveTo(d+v,p),u.lineTo(w-_,p),u.bezierCurveTo(w-dg*_,p,w,p+dg*_,w,p+_),u.lineTo(w,k-b),u.bezierCurveTo(w,k-dg*b,w-dg*b,k,w-b,k),u.lineTo(d+x,k),u.bezierCurveTo(d+dg*x,k,d,k-dg*x,d,k-x),u.lineTo(d,p+v),u.bezierCurveTo(d,p+dg*v,d+dg*v,p,d+v,p),u.closePath()}if(h)return u=null,h+""||null}return l.x=function(e){return arguments.length?(t=vg(e),l):t},l.y=function(t){return arguments.length?(e=vg(t),l):e},l.width=function(t){return arguments.length?(n=vg(t),l):n},l.height=function(t){return arguments.length?(r=vg(t),l):r},l.cornerRadius=function(t,e,n,r){return arguments.length?(i=vg(t),o=null!=e?vg(e):i,s=null!=n?vg(n):i,a=null!=r?vg(r):o,l):i},l.context=function(t){return arguments.length?(u=null==t?null:t,l):u},l}function bg(){var t,e,n,r,i,o,a,s,u=null;function l(t,e,n){const r=n/2;if(i){var l=a-e,c=t-o;if(l||c){var f=Math.hypot(l,c),h=(l/=f)*s,d=(c/=f)*s,p=Math.atan2(c,l);u.moveTo(o-h,a-d),u.lineTo(t-l*r,e-c*r),u.arc(t,e,r,p-Math.PI,p),u.lineTo(o+h,a+d),u.arc(o,a,s,p,p+Math.PI)}else u.arc(t,e,r,0,Kp);u.closePath()}else i=1;o=t,a=e,s=r}function c(o){var a,s,c,f=o.length,h=!1;for(null==u&&(u=c=Ul()),a=0;a<=f;++a)!(at.x||0,Ag=t=>t.y||0,Mg=t=>!(!1===t.defined),Eg=function(){var t=ql,e=Pl,n=_l(0),r=null,i=jl,o=Il,a=Hl,s=null,u=Ll(l);function l(){var l,c,f=+t.apply(this,arguments),h=+e.apply(this,arguments),d=i.apply(this,arguments)-Fl,p=o.apply(this,arguments)-Fl,g=xl(p-d),m=p>d;if(s||(s=l=u()),hDl)if(g>Sl-Dl)s.moveTo(h*wl(d),h*Ml(d)),s.arc(0,0,h,d,p,!m),f>Dl&&(s.moveTo(f*wl(p),f*Ml(p)),s.arc(0,0,f,p,d,m));else{var y,v,_=d,x=p,b=d,w=p,k=g,A=g,M=a.apply(this,arguments)/2,E=M>Dl&&(r?+r.apply(this,arguments):El(f*f+h*h)),D=Al(xl(h-f)/2,+n.apply(this,arguments)),C=D,F=D;if(E>Dl){var S=$l(E/f*Ml(M)),$=$l(E/h*Ml(M));(k-=2*S)>Dl?(b+=S*=m?1:-1,w-=S):(k=0,b=w=(d+p)/2),(A-=2*$)>Dl?(_+=$*=m?1:-1,x-=$):(A=0,_=x=(d+p)/2)}var T=h*wl(_),B=h*Ml(_),z=f*wl(w),N=f*Ml(w);if(D>Dl){var O,R=h*wl(x),U=h*Ml(x),L=f*wl(b),q=f*Ml(b);if(g1?0:t<-1?Cl:Math.acos(t)}((P*I+j*H)/(El(P*P+j*j)*El(I*I+H*H)))/2),Y=El(O[0]*O[0]+O[1]*O[1]);C=Al(D,(f-Y)/(W-1)),F=Al(D,(h-Y)/(W+1))}else C=F=0}A>Dl?F>Dl?(y=Wl(L,q,T,B,h,F,m),v=Wl(R,U,z,N,h,F,m),s.moveTo(y.cx+y.x01,y.cy+y.y01),FDl&&k>Dl?C>Dl?(y=Wl(z,N,R,U,f,-C,m),v=Wl(T,B,L,q,f,-C,m),s.lineTo(y.cx+y.x01,y.cy+y.y01),Ct.startAngle||0)).endAngle((t=>t.endAngle||0)).padAngle((t=>t.padAngle||0)).innerRadius((t=>t.innerRadius||0)).outerRadius((t=>t.outerRadius||0)).cornerRadius((t=>t.cornerRadius||0)),Dg=Ql().x(kg).y1(Ag).y0((t=>(t.y||0)+(t.height||0))).defined(Mg),Cg=Ql().y(Ag).x1(kg).x0((t=>(t.x||0)+(t.width||0))).defined(Mg),Fg=Zl().x(kg).y(Ag).defined(Mg),Sg=xg().x(kg).y(Ag).width((t=>t.width||0)).height((t=>t.height||0)).cornerRadius((t=>wg(t.cornerRadiusTopLeft,t.cornerRadius)||0),(t=>wg(t.cornerRadiusTopRight,t.cornerRadius)||0),(t=>wg(t.cornerRadiusBottomRight,t.cornerRadius)||0),(t=>wg(t.cornerRadiusBottomLeft,t.cornerRadius)||0)),$g=function(t,e){let n=null,r=Ll(i);function i(){let i;if(n||(n=i=r()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),i)return n=null,i+""||null}return t="function"==typeof t?t:_l(t||Kl),e="function"==typeof e?e:_l(void 0===e?64:+e),i.type=function(e){return arguments.length?(t="function"==typeof e?e:_l(e),i):t},i.size=function(t){return arguments.length?(e="function"==typeof t?t:_l(+t),i):e},i.context=function(t){return arguments.length?(n=null==t?null:t,i):n},i}().type((t=>fg(t.shape||"circle"))).size((t=>wg(t.size,64))),Tg=bg().x(kg).y(Ag).defined(Mg).size((t=>t.size||1));function Bg(t){return t.cornerRadius||t.cornerRadiusTopLeft||t.cornerRadiusTopRight||t.cornerRadiusBottomRight||t.cornerRadiusBottomLeft}function zg(t,e,n,r){return Sg.context(t)(e,n,r)}var Ng=1;function Og(){Ng=1}function Rg(t,e,n){var r=e.clip,i=t._defs,o=e.clip_id||(e.clip_id="clip"+Ng++),a=i.clipping[o]||(i.clipping[o]={id:o});return J(r)?a.path=r(null):Bg(n)?a.path=zg(null,n,0,0):(a.width=n.width||0,a.height=n.height||0),"url(#"+o+")"}function Ug(t){this.clear(),t&&this.union(t)}function Lg(t){this.mark=t,this.bounds=this.bounds||new Ug}function qg(t){Lg.call(this,t),this.items=this.items||[]}function Pg(t){this._pending=0,this._loader=t||ha()}function jg(t){t._pending+=1}function Ig(t){t._pending-=1}function Hg(t,e,n){if(e.stroke&&0!==e.opacity&&0!==e.strokeOpacity){const r=null!=e.strokeWidth?+e.strokeWidth:1;t.expand(r+(n?function(t,e){return t.strokeJoin&&"miter"!==t.strokeJoin?0:e}(e,r):0))}return t}Ug.prototype={clone(){return new Ug(this)},clear(){return this.x1=+Number.MAX_VALUE,this.y1=+Number.MAX_VALUE,this.x2=-Number.MAX_VALUE,this.y2=-Number.MAX_VALUE,this},empty(){return this.x1===+Number.MAX_VALUE&&this.y1===+Number.MAX_VALUE&&this.x2===-Number.MAX_VALUE&&this.y2===-Number.MAX_VALUE},equals(t){return this.x1===t.x1&&this.y1===t.y1&&this.x2===t.x2&&this.y2===t.y2},set(t,e,n,r){return nthis.x2&&(this.x2=t),e>this.y2&&(this.y2=e),this},expand(t){return this.x1-=t,this.y1-=t,this.x2+=t,this.y2+=t,this},round(){return this.x1=Math.floor(this.x1),this.y1=Math.floor(this.y1),this.x2=Math.ceil(this.x2),this.y2=Math.ceil(this.y2),this},scale(t){return this.x1*=t,this.y1*=t,this.x2*=t,this.y2*=t,this},translate(t,e){return this.x1+=t,this.x2+=t,this.y1+=e,this.y2+=e,this},rotate(t,e,n){const r=this.rotatedPoints(t,e,n);return this.clear().add(r[0],r[1]).add(r[2],r[3]).add(r[4],r[5]).add(r[6],r[7])},rotatedPoints(t,e,n){var{x1:r,y1:i,x2:o,y2:a}=this,s=Math.cos(t),u=Math.sin(t),l=e-e*s+n*u,c=n-e*u-n*s;return[s*r-u*i+l,u*r+s*i+c,s*r-u*a+l,u*r+s*a+c,s*o-u*i+l,u*o+s*i+c,s*o-u*a+l,u*o+s*a+c]},union(t){return t.x1this.x2&&(this.x2=t.x2),t.y2>this.y2&&(this.y2=t.y2),this},intersect(t){return t.x1>this.x1&&(this.x1=t.x1),t.y1>this.y1&&(this.y1=t.y1),t.x2=t.x2&&this.y1<=t.y1&&this.y2>=t.y2},alignsWith(t){return t&&(this.x1==t.x1||this.x2==t.x2||this.y1==t.y1||this.y2==t.y2)},intersects(t){return t&&!(this.x2t.x2||this.y2t.y2)},contains(t,e){return!(tthis.x2||ethis.y2)},width(){return this.x2-this.x1},height(){return this.y2-this.y1}},dt(qg,Lg),Pg.prototype={pending(){return this._pending},sanitizeURL(t){const e=this;return jg(e),e._loader.sanitize(t,{context:"href"}).then((t=>(Ig(e),t))).catch((()=>(Ig(e),null)))},loadImage(t){const e=this,n=Bc();return jg(e),e._loader.sanitize(t,{context:"image"}).then((t=>{const r=t.href;if(!r||!n)throw{url:r};const i=new n,o=lt(t,"crossOrigin")?t.crossOrigin:"anonymous";return null!=o&&(i.crossOrigin=o),i.onload=()=>Ig(e),i.onerror=()=>Ig(e),i.src=r,i})).catch((t=>(Ig(e),{complete:!1,width:0,height:0,src:t&&t.url||""})))},ready(){const t=this;return new Promise((e=>{!function n(r){t.pending()?setTimeout((()=>{n(!0)}),10):e(r)}(!1)}))}};const Wg=Kp-1e-8;let Yg,Gg,Vg,Xg,Jg,Zg,Qg,Kg;const tm=(t,e)=>Yg.add(t,e),em=(t,e)=>tm(Gg=t,Vg=e),nm=t=>tm(t,Yg.y1),rm=t=>tm(Yg.x1,t),im=(t,e)=>Jg*t+Qg*e,om=(t,e)=>Zg*t+Kg*e,am=(t,e)=>tm(im(t,e),om(t,e)),sm=(t,e)=>em(im(t,e),om(t,e));function um(t,e){return Yg=t,e?(Xg=e*Zp,Jg=Kg=Math.cos(Xg),Zg=Math.sin(Xg),Qg=-Zg):(Jg=Kg=1,Xg=Zg=Qg=0),lm}const lm={beginPath(){},closePath(){},moveTo:sm,lineTo:sm,rect(t,e,n,r){Xg?(am(t+n,e),am(t+n,e+r),am(t,e+r),sm(t,e)):(tm(t+n,e+r),em(t,e))},quadraticCurveTo(t,e,n,r){const i=im(t,e),o=om(t,e),a=im(n,r),s=om(n,r);cm(Gg,i,a,nm),cm(Vg,o,s,rm),em(a,s)},bezierCurveTo(t,e,n,r,i,o){const a=im(t,e),s=om(t,e),u=im(n,r),l=om(n,r),c=im(i,o),f=om(i,o);fm(Gg,a,u,c,nm),fm(Vg,s,l,f,rm),em(c,f)},arc(t,e,n,r,i,o){if(r+=Xg,i+=Xg,Gg=n*Math.cos(i)+t,Vg=n*Math.sin(i)+e,Math.abs(i-r)>Wg)tm(t-n,e-n),tm(t+n,e+n);else{const a=r=>tm(n*Math.cos(r)+t,n*Math.sin(r)+e);let s,u;if(a(r),a(i),i!==r)if((r%=Kp)<0&&(r+=Kp),(i%=Kp)<0&&(i+=Kp),ii;++u,s-=Qp)a(s);else for(s=r-r%Qp+Qp,u=0;u<4&&s1e-14?(u=a*a+s*o,u>=0&&(u=Math.sqrt(u),l=(-a+u)/o,c=(-a-u)/o)):l=.5*s/a,0m)return!1;d>g&&(g=d)}else if(f>0){if(d0&&(t.globalAlpha=n,t.fillStyle=km(t,e,e.fill),!0)}var Mm=[];function Em(t,e,n){var r=null!=(r=e.strokeWidth)?r:1;return!(r<=0)&&((n*=null==e.strokeOpacity?1:e.strokeOpacity)>0&&(t.globalAlpha=n,t.strokeStyle=km(t,e,e.stroke),t.lineWidth=r,t.lineCap=e.strokeCap||"butt",t.lineJoin=e.strokeJoin||"miter",t.miterLimit=e.strokeMiterLimit||10,t.setLineDash&&(t.setLineDash(e.strokeDash||Mm),t.lineDashOffset=e.strokeDashOffset||0),!0))}function Dm(t,e){return t.zindex-e.zindex||t.index-e.index}function Cm(t){if(!t.zdirty)return t.zitems;var e,n,r,i=t.items,o=[];for(n=0,r=i.length;n=0;)if(n=e(i[r]))return n;if(i===o)for(r=(i=t.items).length;--r>=0;)if(!i[r].zindex&&(n=e(i[r])))return n;return null}function $m(t){return function(e,n,r){Fm(n,(n=>{r&&!r.intersects(n.bounds)||Bm(t,e,n,n)}))}}function Tm(t){return function(e,n,r){!n.items.length||r&&!r.intersects(n.bounds)||Bm(t,e,n.items[0],n.items)}}function Bm(t,e,n,r){var i=null==n.opacity?1:n.opacity;0!==i&&(t(e,r)||(xm(e,n),n.fill&&Am(e,n,i)&&e.fill(),n.stroke&&Em(e,n,i)&&e.stroke()))}function zm(t){return t=t||p,function(e,n,r,i,o,a){return r*=e.pixelRatio,i*=e.pixelRatio,Sm(n,(n=>{const s=n.bounds;if((!s||s.contains(o,a))&&s)return t(e,n,r,i,o,a)?n:void 0}))}}function Nm(t,e){return function(n,r,i,o){var a,s,u=Array.isArray(r)?r[0]:r,l=null==e?u.fill:e,c=u.stroke&&n.isPointInStroke;return c&&(a=u.strokeWidth,s=u.strokeCap,n.lineWidth=null!=a?a:1,n.lineCap=null!=s?s:"butt"),!t(n,r)&&(l&&n.isPointInPath(i,o)||c&&n.isPointInStroke(i,o))}}function Om(t){return zm(Nm(t))}function Rm(t,e){return"translate("+t+","+e+")"}function Um(t){return"rotate("+t+")"}function Lm(t){return Rm(t.x||0,t.y||0)}function qm(t,e,n){function r(t,n){var r=n.x||0,i=n.y||0,o=n.angle||0;t.translate(r,i),o&&t.rotate(o*=Zp),t.beginPath(),e(t,n),o&&t.rotate(-o),t.translate(-r,-i)}return{type:t,tag:"path",nested:!1,attr:function(t,n){t("transform",function(t){return Rm(t.x||0,t.y||0)+(t.angle?" "+Um(t.angle):"")}(n)),t("d",e(null,n))},bound:function(t,n){return e(um(t,n.angle),n),Hg(t,n).translate(n.x||0,n.y||0)},draw:$m(r),pick:Om(r),isect:n||gm(r)}}var Pm=qm("arc",(function(t,e){return Eg.context(t)(e)}));function jm(t,e,n){function r(t,n){t.beginPath(),e(t,n)}const i=Nm(r);return{type:t,tag:"path",nested:!0,attr:function(t,n){var r=n.mark.items;r.length&&t("d",e(null,r))},bound:function(t,n){var r=n.items;return 0===r.length?t:(e(um(t),r),Hg(t,r[0]))},draw:Tm(r),pick:function(t,e,n,r,o,a){var s=e.items,u=e.bounds;return!s||!s.length||u&&!u.contains(o,a)?null:(n*=t.pixelRatio,r*=t.pixelRatio,i(t,s,n,r)?s[0]:null)},isect:mm,tip:n}}var Im=jm("area",(function(t,e){const n=e[0],r=n.interpolate||"linear";return("horizontal"===n.orient?Cg:Dg).curve(Hp(r,n.orient,n.tension)).context(t)(e)}),(function(t,e){for(var n,r,i="horizontal"===t[0].orient?e[1]:e[0],o="horizontal"===t[0].orient?"y":"x",a=t.length,s=1/0;--a>=0;)!1!==t[a].defined&&(r=Math.abs(t[a][o]-i)).5&&e<1.5?.5-Math.abs(e-1):0}function Ym(t,e){const n=Wm(e);t("d",zg(null,e,n,n))}function Gm(t,e,n,r){const i=Wm(e);t.beginPath(),zg(t,e,(n||0)+i,(r||0)+i)}const Vm=Nm(Gm),Xm=Nm(Gm,!1),Jm=Nm(Gm,!0);var Zm={type:"group",tag:"g",nested:!1,attr:function(t,e){t("transform",Lm(e))},bound:function(t,e){if(!e.clip&&e.items){const n=e.items,r=n.length;for(let e=0;e{const i=e.x||0,o=e.y||0,a=e.strokeForeground,s=null==e.opacity?1:e.opacity;(e.stroke||e.fill)&&s&&(Gm(t,e,i,o),xm(t,e),e.fill&&Am(t,e,s)&&t.fill(),e.stroke&&!a&&Em(t,e,s)&&t.stroke()),t.save(),t.translate(i,o),e.clip&&Hm(t,e),n&&n.translate(-i,-o),Fm(e,(e=>{("group"===e.marktype||null==r||r.includes(e.marktype))&&this.draw(t,e,n,r)})),n&&n.translate(i,o),t.restore(),a&&e.stroke&&s&&(Gm(t,e,i,o),xm(t,e),Em(t,e,s)&&t.stroke())}))},pick:function(t,e,n,r,i,o){if(e.bounds&&!e.bounds.contains(i,o)||!e.items)return null;const a=n*t.pixelRatio,s=r*t.pixelRatio;return Sm(e,(u=>{let l,c,f;const h=u.bounds;if(h&&!h.contains(i,o))return;c=u.x||0,f=u.y||0;const d=c+(u.width||0),p=f+(u.height||0),g=u.clip;if(g&&(id||op))return;if(t.save(),t.translate(c,f),c=i-c,f=o-f,g&&Bg(u)&&!Jm(t,u,a,s))return t.restore(),null;const m=u.strokeForeground,y=!1!==e.interactive;return y&&m&&u.stroke&&Xm(t,u,a,s)?(t.restore(),u):(l=Sm(u,(t=>function(t,e,n){return(!1!==t.interactive||"group"===t.marktype)&&t.bounds&&t.bounds.contains(e,n)}(t,c,f)?this.pick(t,n,r,c,f):null)),!l&&y&&(u.fill||!m&&u.stroke)&&Vm(t,u,a,s)&&(l=u),t.restore(),l||null)}))},isect:ym,content:function(t,e,n){t("clip-path",e.clip?Rg(n,e,e):null)},background:function(t,e){t("class","background"),t("aria-hidden",!0),Ym(t,e)},foreground:function(t,e){t("class","foreground"),t("aria-hidden",!0),e.strokeForeground?Ym(t,e):t("d","")}},Qm={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",version:"1.1"};function Km(t,e){var n=t.image;return(!n||t.url&&t.url!==n.url)&&(n={complete:!1,width:0,height:0},e.loadImage(t.url).then((e=>{t.image=e,t.image.url=t.url}))),n}function ty(t,e){return null!=t.width?t.width:e&&e.width?!1!==t.aspect&&t.height?t.height*e.width/e.height:e.width:0}function ey(t,e){return null!=t.height?t.height:e&&e.height?!1!==t.aspect&&t.width?t.width*e.height/e.width:e.height:0}function ny(t,e){return"center"===t?e/2:"right"===t?e:0}function ry(t,e){return"middle"===t?e/2:"bottom"===t?e:0}var iy={type:"image",tag:"image",nested:!1,attr:function(t,e,n){const r=Km(e,n),i=ty(e,r),o=ey(e,r),a=(e.x||0)-ny(e.align,i),s=(e.y||0)-ry(e.baseline,o);t("href",!r.src&&r.toDataURL?r.toDataURL():r.src||"",Qm["xmlns:xlink"],"xlink:href"),t("transform",Rm(a,s)),t("width",i),t("height",o),t("preserveAspectRatio",!1===e.aspect?"none":"xMidYMid")},bound:function(t,e){const n=e.image,r=ty(e,n),i=ey(e,n),o=(e.x||0)-ny(e.align,r),a=(e.y||0)-ry(e.baseline,i);return t.set(o,a,o+r,a+i)},draw:function(t,e,n){Fm(e,(e=>{if(n&&!n.intersects(e.bounds))return;const r=Km(e,this);let i=ty(e,r),o=ey(e,r);if(0===i||0===o)return;let a,s,u,l,c=(e.x||0)-ny(e.align,i),f=(e.y||0)-ry(e.baseline,o);!1!==e.aspect&&(s=r.width/r.height,u=e.width/e.height,s==s&&u==u&&s!==u&&(u=0;)if(!1!==t[o].defined&&(n=t[o].x-e[0])*n+(r=t[o].y-e[1])*r{if(!n||n.intersects(e.bounds)){var r=null==e.opacity?1:e.opacity;r&&cy(t,e,r)&&(xm(t,e),t.stroke())}}))},pick:zm((function(t,e,n,r){return!!t.isPointInStroke&&(cy(t,e,1)&&t.isPointInStroke(n,r))})),isect:vm},hy=qm("shape",(function(t,e){return(e.mark.shape||e.shape).context(t)(e)})),dy=qm("symbol",(function(t,e){return $g.context(t)(e)}),mm);const py=kt();var gy={height:by,measureWidth:_y,estimateWidth:yy,width:yy,canvas:my};function my(t){gy.width=t&&dm?_y:yy}function yy(t,e){return vy(My(t,e),by(t))}function vy(t,e){return~~(.8*t.length*e)}function _y(t,e){return by(t)<=0||!(e=My(t,e))?0:xy(e,Dy(t))}function xy(t,e){const n=`(${e}) ${t}`;let r=py.get(n);return void 0===r&&(dm.font=e,r=dm.measureText(t).width,py.set(n,r)),r}function by(t){return null!=t.fontSize?+t.fontSize||0:11}function wy(t){return null!=t.lineHeight?t.lineHeight:by(t)+2}function ky(t){return e=t.lineBreak&&t.text&&!k(t.text)?t.text.split(t.lineBreak):t.text,k(e)?e.length>1?e:e[0]:e;var e}function Ay(t){const e=ky(t);return(k(e)?e.length-1:0)*wy(t)}function My(t,e){const n=null==e?"":(e+"").trim();return t.limit>0&&n.length?function(t,e){var n=+t.limit,r=function(t){if(gy.width===_y){const e=Dy(t);return t=>xy(t,e)}if(gy.width===yy){const e=by(t);return t=>vy(t,e)}return e=>gy.width(t,e)}(t);if(r(e)>>1,r(e.slice(i))>n?s=i+1:u=i;return o+e.slice(s)}for(;s>>1),r(e.slice(0,i))Math.max(t,gy.width(e,n))),0)):r=gy.width(e,f),"center"===o?l-=r/2:"right"===o&&(l-=r),t.set(l+=s,c+=u,l+r,c+i),e.angle&&!n)t.rotate(e.angle*Zp,s,u);else if(2===n)return t.rotatedPoints(e.angle*Zp,s,u);return t}var By={type:"text",tag:"text",nested:!1,attr:function(t,e){var n,r=e.dx||0,i=(e.dy||0)+Cy(e),o=$y(e),a=o.x1,s=o.y1,u=e.angle||0;t("text-anchor",Fy[e.align]||"start"),u?(n=Rm(a,s)+" "+Um(u),(r||i)&&(n+=" "+Rm(r,i))):n=Rm(a+r,s+i),t("transform",n)},bound:Ty,draw:function(t,e,n){Fm(e,(e=>{var r,i,o,a,s,u,l,c=null==e.opacity?1:e.opacity;if(!(n&&!n.intersects(e.bounds)||0===c||e.fontSize<=0||null==e.text||0===e.text.length)){if(t.font=Dy(e),t.textAlign=e.align||"left",i=(r=$y(e)).x1,o=r.y1,e.angle&&(t.save(),t.translate(i,o),t.rotate(e.angle*Zp),i=o=0),i+=e.dx||0,o+=(e.dy||0)+Cy(e),u=ky(e),xm(t,e),k(u))for(s=wy(e),a=0;a=0;)if(!1!==t[i].defined&&(n=t[i].x-e[0])*n+(r=t[i].y-e[1])*r<(n=t[i].size||1)*n)return t[i];return null})),Ny={arc:Pm,area:Im,group:Zm,image:iy,line:oy,path:sy,rect:ly,rule:fy,shape:hy,symbol:dy,text:By,trail:zy};function Oy(t,e,n){var r=Ny[t.mark.marktype],i=e||r.bound;return r.nested&&(t=t.mark),i(t.bounds||(t.bounds=new Ug),t,n)}var Ry={mark:null};function Uy(t,e,n){var r,i,o,a,s=Ny[t.marktype],u=s.bound,l=t.items,c=l&&l.length;if(s.nested)return c?o=l[0]:(Ry.mark=t,o=Ry),a=Oy(o,u,n),e=e&&e.union(a)||a;if(e=e||t.bounds&&t.bounds.clear()||new Ug,c)for(r=0,i=l.length;re;)t.removeChild(n[--r]);return t}function Xy(t){return"mark-"+t.marktype+(t.role?" role-"+t.role:"")+(t.name?" "+t.name:"")}function Jy(t,e){const n=e.getBoundingClientRect();return[t.clientX-n.left-(e.clientLeft||0),t.clientY-n.top-(e.clientTop||0)]}function Zy(t,e){this._active=null,this._handlers={},this._loader=t||ha(),this._tooltip=e||Qy}function Qy(t,e,n,r){t.element().setAttribute("title",r||"")}function Ky(t){this._el=null,this._bgcolor=null,this._loader=new Pg(t)}Iy.prototype={toJSON(t){return qy(this.root,t||0)},mark(t,e,n){const r=Hy(t,e=e||this.root.items[0]);return e.items[n]=r,r.zindex&&(r.group.zdirty=!0),r}},Zy.prototype={initialize(t,e,n){return this._el=t,this._obj=n||null,this.origin(e)},element(){return this._el},canvas(){return this._el&&this._el.firstChild},origin(t){return arguments.length?(this._origin=t||[0,0],this):this._origin.slice()},scene(t){return arguments.length?(this._scene=t,this):this._scene},on(){},off(){},_handlerIndex(t,e,n){for(let r=t?t.length:0;--r>=0;)if(t[r].type===e&&(!n||t[r].handler===n))return r;return-1},handlers(t){const e=this._handlers,n=[];if(t)n.push(...e[this.eventName(t)]);else for(const t in e)n.push(...e[t]);return n},eventName(t){const e=t.indexOf(".");return e<0?t:t.slice(0,e)},handleHref(t,e,n){this._loader.sanitize(n,{context:"href"}).then((e=>{const n=new MouseEvent(t.type,t),r=Wy(null,"a");for(const t in e)r.setAttribute(t,e[t]);r.dispatchEvent(n)})).catch((()=>{}))},handleTooltip(t,e,n){if(e&&null!=e.tooltip){e=function(t,e,n,r){var i,o,a=t&&t.mark;if(a&&(i=Ny[a.marktype]).tip){for((o=Jy(e,n))[0]-=r[0],o[1]-=r[1];t=t.mark.group;)o[0]-=t.x||0,o[1]-=t.y||0;t=i.tip(a.items,o)}return t}(e,t,this.canvas(),this._origin);const r=n&&e&&e.tooltip||null;this._tooltip.call(this._obj,this,t,e,r)}},getItemBoundingClientRect(t){const e=this.canvas();if(!e)return;const n=e.getBoundingClientRect(),r=this._origin,i=t.bounds,o=i.width(),a=i.height();let s=i.x1+r[0]+n.left,u=i.y1+r[1]+n.top;for(;t.mark&&(t=t.mark.group);)s+=t.x||0,u+=t.y||0;return{x:s,y:u,width:o,height:a,left:s,top:u,right:s+o,bottom:u+a}}},Ky.prototype={initialize(t,e,n,r,i){return this._el=t,this.resize(e,n,r,i)},element(){return this._el},canvas(){return this._el&&this._el.firstChild},background(t){return 0===arguments.length?this._bgcolor:(this._bgcolor=t,this)},resize(t,e,n,r){return this._width=t,this._height=e,this._origin=n||[0,0],this._scale=r||1,this},dirty(){},render(t,e){const n=this;return n._call=function(){n._render(t,e)},n._call(),n._call=null,n},_render(){},renderAsync(t,e){const n=this.render(t,e);return this._ready?this._ready.then((()=>n)):Promise.resolve(n)},_load(t,e){var n=this,r=n._loader[t](e);if(!n._ready){const t=n._call;n._ready=n._loader.ready().then((e=>{e&&t(),n._ready=null}))}return r},sanitizeURL(t){return this._load("sanitizeURL",t)},loadImage(t){return this._load("loadImage",t)}};const tv="dragenter",ev="dragleave",nv="dragover",rv="pointerdown",iv="pointermove",ov="pointerout",av="pointerover",sv="click",uv="mousewheel",lv="touchstart",cv="touchmove",fv="touchend",hv=iv,dv=ov,pv=sv;function gv(t,e){Zy.call(this,t,e),this._down=null,this._touch=null,this._first=!0,this._events={}}function mv(t,e){(t=>t===lv||t===cv||t===fv?[lv,cv,fv]:[t])(e).forEach((e=>function(t,e){const n=t.canvas();n&&!t._events[e]&&(t._events[e]=1,n.addEventListener(e,t[e]?n=>t[e](n):n=>t.fire(e,n)))}(t,e)))}function yv(t,e,n){return function(r){const i=this._active,o=this.pickEvent(r);o===i||(i&&i.exit||this.fire(n,r),this._active=o,this.fire(e,r)),this.fire(t,r)}}function vv(t){return function(e){this.fire(t,e),this._active=null}}dt(gv,Zy,{initialize(t,e,n){return this._canvas=t&&Yy(t,"canvas"),[sv,rv,iv,ov,ev].forEach((t=>mv(this,t))),Zy.prototype.initialize.call(this,t,e,n)},canvas(){return this._canvas},context(){return this._canvas.getContext("2d")},events:["keydown","keypress","keyup",tv,ev,nv,rv,"pointerup",iv,ov,av,sv,"dblclick","wheel",uv,lv,cv,fv],DOMMouseScroll(t){this.fire(uv,t)},pointermove:yv(iv,av,ov),dragover:yv(nv,tv,ev),pointerout:vv(ov),dragleave:vv(ev),pointerdown(t){this._down=this._active,this.fire(rv,t)},click(t){this._down===this._active&&(this.fire(sv,t),this._down=null)},touchstart(t){this._touch=this.pickEvent(t.changedTouches[0]),this._first&&(this._active=this._touch,this._first=!1),this.fire(lv,t,!0)},touchmove(t){this.fire(cv,t,!0)},touchend(t){this.fire(fv,t,!0),this._touch=null},fire(t,e,n){const r=n?this._touch:this._active,i=this._handlers[t];if(e.vegaType=t,t===pv&&r&&r.href?this.handleHref(e,r,r.href):t!==hv&&t!==dv||this.handleTooltip(e,r,t!==dv),i)for(let t=0,n=i.length;t=0&&r.splice(i,1),this},pickEvent(t){const e=Jy(t,this._canvas),n=this._origin;return this.pick(this._scene,e[0],e[1],e[0]-n[0],e[1]-n[1])},pick(t,e,n,r,i){const o=this.context();return Ny[t.marktype].pick.call(this,o,t,e,n,r,i)}});var _v="undefined"!=typeof window&&window.devicePixelRatio||1;function xv(t){Ky.call(this,t),this._options={},this._redraw=!1,this._dirty=new Ug,this._tempb=new Ug}const bv=Ky.prototype;function wv(t,e){Zy.call(this,t,e);const n=this;n._hrefHandler=kv(n,((t,e)=>{e&&e.href&&n.handleHref(t,e,e.href)})),n._tooltipHandler=kv(n,((t,e)=>{n.handleTooltip(t,e,t.type!==dv)}))}dt(xv,Ky,{initialize(t,e,n,r,i,o){return this._options=o||{},this._canvas=this._options.externalContext?null:Tc(1,1,this._options.type),t&&this._canvas&&(Vy(t,0).appendChild(this._canvas),this._canvas.setAttribute("class","marks")),bv.initialize.call(this,t,e,n,r,i)},resize(t,e,n,r){if(bv.resize.call(this,t,e,n,r),this._canvas)!function(t,e,n,r,i,o){const a="undefined"!=typeof HTMLElement&&t instanceof HTMLElement&&null!=t.parentNode,s=t.getContext("2d"),u=a?_v:i;t.width=e*u,t.height=n*u;for(const t in o)s[t]=o[t];a&&1!==u&&(t.style.width=e+"px",t.style.height=n+"px"),s.pixelRatio=u,s.setTransform(u,0,0,u,u*r[0],u*r[1])}(this._canvas,this._width,this._height,this._origin,this._scale,this._options.context);else{const t=this._options.externalContext;t||s("CanvasRenderer is missing a valid canvas or context"),t.scale(this._scale,this._scale),t.translate(this._origin[0],this._origin[1])}return this._redraw=!0,this},canvas(){return this._canvas},context(){return this._options.externalContext||(this._canvas?this._canvas.getContext("2d"):null)},dirty(t){const e=this._tempb.clear().union(t.bounds);let n=t.mark.group;for(;n;)e.translate(n.x||0,n.y||0),n=n.mark.group;this._dirty.union(e)},_render(t,e){const n=this.context(),r=this._origin,i=this._width,o=this._height,a=this._dirty,s=((t,e,n)=>(new Ug).set(0,0,e,n).translate(-t[0],-t[1]))(r,i,o);n.save();const u=this._redraw||a.empty()?(this._redraw=!1,s.expand(1)):function(t,e,n){return e.expand(1).round(),t.pixelRatio%1&&e.scale(t.pixelRatio).round().scale(1/t.pixelRatio),e.translate(-n[0]%1,-n[1]%1),t.beginPath(),t.rect(e.x1,e.y1,e.width(),e.height()),t.clip(),e}(n,s.intersect(a),r);return this.clear(-r[0],-r[1],i,o),this.draw(n,t,u,e),n.restore(),a.clear(),this},draw(t,e,n,r){if("group"!==e.marktype&&null!=r&&!r.includes(e.marktype))return;const i=Ny[e.marktype];e.clip&&function(t,e){var n=e.clip;t.save(),J(n)?(t.beginPath(),n(t),t.clip()):Hm(t,e.group)}(t,e),i.draw.call(this,t,e,n,r),e.clip&&t.restore()},clear(t,e,n,r){const i=this._options,o=this.context();"pdf"===i.type||i.externalContext||o.clearRect(t,e,n,r),null!=this._bgcolor&&(o.fillStyle=this._bgcolor,o.fillRect(t,e,n,r))}});const kv=(t,e)=>n=>{let r=n.target.__data__;r=Array.isArray(r)?r[0]:r,n.vegaType=n.type,e.call(t._obj,n,r)};dt(wv,Zy,{initialize(t,e,n){let r=this._svg;return r&&(r.removeEventListener(pv,this._hrefHandler),r.removeEventListener(hv,this._tooltipHandler),r.removeEventListener(dv,this._tooltipHandler)),this._svg=r=t&&Yy(t,"svg"),r&&(r.addEventListener(pv,this._hrefHandler),r.addEventListener(hv,this._tooltipHandler),r.addEventListener(dv,this._tooltipHandler)),Zy.prototype.initialize.call(this,t,e,n)},canvas(){return this._svg},on(t,e){const n=this.eventName(t),r=this._handlers;if(this._handlerIndex(r[n],t,e)<0){const i={type:t,handler:e,listener:kv(this,e)};(r[n]||(r[n]=[])).push(i),this._svg&&this._svg.addEventListener(n,i.listener)}return this},off(t,e){const n=this.eventName(t),r=this._handlers[n],i=this._handlerIndex(r,t,e);return i>=0&&(this._svg&&this._svg.removeEventListener(n,r[i].listener),r.splice(i,1)),this}});const Av="aria-hidden",Mv="aria-label",Ev="role",Dv="aria-roledescription",Cv="graphics-object",Fv="graphics-symbol",Sv=(t,e,n)=>({[Ev]:t,[Dv]:e,[Mv]:n||void 0}),$v=Bt(["axis-domain","axis-grid","axis-label","axis-tick","axis-title","legend-band","legend-entry","legend-gradient","legend-label","legend-title","legend-symbol","title"]),Tv={axis:{desc:"axis",caption:function(t){const e=t.datum,n=t.orient,r=e.title?Rv(t):null,i=t.context,o=i.scales[e.scale].value,a=i.dataflow.locale(),s=o.type;return("left"===n||"right"===n?"Y":"X")+"-axis"+(r?` titled '${r}'`:"")+` for a ${tp(s)?"discrete":s} scale`+` with ${Op(a,o,t)}`}},legend:{desc:"legend",caption:function(t){const e=t.datum,n=e.title?Rv(t):null,r=`${e.type||""} legend`.trim(),i=e.scales,o=Object.keys(i),a=t.context,s=a.scales[i[o[0]]].value,u=a.dataflow.locale();return l=r,(l.length?l[0].toUpperCase()+l.slice(1):l)+(n?` titled '${n}'`:"")+` for ${function(t){return t=t.map((t=>t+("fill"===t||"stroke"===t?" color":""))),t.length<2?t[0]:t.slice(0,-1).join(", ")+" and "+F(t)}(o)}`+` with ${Op(u,s,t)}`;var l}},"title-text":{desc:"title",caption:t=>`Title text '${Ov(t)}'`},"title-subtitle":{desc:"subtitle",caption:t=>`Subtitle text '${Ov(t)}'`}},Bv={ariaRole:Ev,ariaRoleDescription:Dv,description:Mv};function zv(t,e){const n=!1===e.aria;if(t(Av,n||void 0),n||null==e.description)for(const e in Bv)t(Bv[e],void 0);else{const n=e.mark.marktype;t(Mv,e.description),t(Ev,e.ariaRole||("group"===n?Cv:Fv)),t(Dv,e.ariaRoleDescription||`${n} mark`)}}function Nv(t){return!1===t.aria?{[Av]:!0}:$v[t.role]?null:Tv[t.role]?function(t,e){try{const n=t.items[0],r=e.caption||(()=>"");return Sv(e.role||Fv,e.desc,n.description||r(n))}catch(t){return null}}(t,Tv[t.role]):function(t){const e=t.marktype,n="group"===e||"text"===e||t.items.some((t=>null!=t.description&&!1!==t.aria));return Sv(n?Cv:Fv,`${e} mark container`,t.description)}(t)}function Ov(t){return V(t.text).join(" ")}function Rv(t){try{return V(F(t.items).items[0].text).join(" ")}catch(t){return null}}const Uv=t=>(t+"").replace(/&/g,"&").replace(//g,">");function Lv(){let t="",e="",n="";const r=[],i=()=>e=n="",o=(t,n)=>{var r;return null!=n&&(e+=` ${t}="${r=n,Uv(r).replace(/"/g,""").replace(/\t/g," ").replace(/\n/g," ").replace(/\r/g," ")}"`),a},a={open(s){(o=>{e&&(t+=`${e}>${n}`,i()),r.push(o)})(s),e="<"+s;for(var u=arguments.length,l=new Array(u>1?u-1:0),c=1;c${n}`:"/>"):``,i(),a},attr:o,text:t=>(n+=Uv(t),a),toString:()=>t};return a}const qv=t=>Pv(Lv(),t)+"";function Pv(t,e){if(t.open(e.tagName),e.hasAttributes()){const n=e.attributes,r=n.length;for(let e=0;e1&&t.previousSibling!=e}(a,n))&&e.insertBefore(a,n?n.nextSibling:e.firstChild),a}dt(Gv,Ky,{initialize(t,e,n,r,i){return this._defs={},this._clearDefs(),t&&(this._svg=Gy(t,0,"svg",Yv),this._svg.setAttributeNS(Wv,"xmlns",Yv),this._svg.setAttributeNS(Wv,"xmlns:xlink",Qm["xmlns:xlink"]),this._svg.setAttribute("version",Qm.version),this._svg.setAttribute("class","marks"),Vy(t,1),this._root=Gy(this._svg,0,"g",Yv),i_(this._root,Hv),Vy(this._svg,1)),this.background(this._bgcolor),Vv.initialize.call(this,t,e,n,r,i)},background(t){return arguments.length&&this._svg&&this._svg.style.setProperty("background-color",t),Vv.background.apply(this,arguments)},resize(t,e,n,r){return Vv.resize.call(this,t,e,n,r),this._svg&&(i_(this._svg,{width:this._width*this._scale,height:this._height*this._scale,viewBox:`0 0 ${this._width} ${this._height}`}),this._root.setAttribute("transform",`translate(${this._origin})`)),this._dirty=[],this},canvas(){return this._svg},svg(){const t=this._svg,e=this._bgcolor;if(!t)return null;let n;e&&(t.removeAttribute("style"),n=Gy(t,0,"rect",Yv),i_(n,{width:this._width,height:this._height,fill:e}));const r=qv(t);return e&&(t.removeChild(n),this._svg.style.setProperty("background-color",e)),r},_render(t,e){return this._dirtyCheck()&&(this._dirtyAll&&this._clearDefs(),this.mark(this._root,t,void 0,e),Vy(this._root,1)),this.defs(),this._dirty=[],++this._dirtyID,this},dirty(t){t.dirty!==this._dirtyID&&(t.dirty=this._dirtyID,this._dirty.push(t))},isDirty(t){return this._dirtyAll||!t._svg||!t._svg.ownerSVGElement||t.dirty===this._dirtyID},_dirtyCheck(){this._dirtyAll=!0;const t=this._dirty;if(!t.length||!this._dirtyID)return!0;const e=++this._dirtyID;let n,r,i,o,a,s,u;for(a=0,s=t.length;a{t.dirty=e}))),r.zdirty||(n.exit?(o.nested&&r.items.length?(u=r.items[0],u._svg&&this._update(o,u._svg,u)):n._svg&&(u=n._svg.parentNode,u&&u.removeChild(n._svg)),n._svg=null):(n=o.nested?r.items[0]:n,n._update!==e&&(n._svg&&n._svg.ownerSVGElement?this._update(o,n._svg,n):(this._dirtyAll=!1,Xv(n,e)),n._update=e)));return!this._dirtyAll},mark(t,e,n,r){if(!this.isDirty(e))return e._svg;const i=this._svg,o=e.marktype,a=Ny[o],s=!1===e.interactive?"none":null,u="g"===a.tag,l=Qv(e,t,n,"g",i);if("group"!==o&&null!=r&&!r.includes(o))return Vy(l,0),e._svg;l.setAttribute("class",Xy(e));const c=Nv(e);for(const t in c)o_(l,t,c[t]);u||o_(l,"pointer-events",s),o_(l,"clip-path",e.clip?Rg(this,e,e.group):null);let f=null,h=0;const d=t=>{const e=this.isDirty(t),n=Qv(t,l,f,a.tag,i);e&&(this._update(a,n,t),u&&function(t,e,n,r){e=e.lastChild.previousSibling;let i,o=0;Fm(n,(n=>{i=t.mark(e,n,i,r),++o})),Vy(e,1+o)}(this,n,t,r)),f=n,++h};return a.nested?e.items.length&&d(e.items[0]):Fm(e,d),Vy(l,h),l},_update(t,e,n){Kv=e,t_=e.__values__,zv(n_,n),t.attr(n_,n,this);const r=e_[t.type];r&&r.call(this,t,e,n),Kv&&this.style(Kv,n)},style(t,e){if(null!=e){for(const n in jv){let r="font"===n?Ey(e):e[n];if(r===t_[n])continue;const i=jv[n];null==r?t.removeAttribute(i):(Lp(r)&&(r=qp(r,this._defs.gradient,a_())),t.setAttribute(i,r+"")),t_[n]=r}for(const n in Iv)r_(t,Iv[n],e[n])}},defs(){const t=this._svg,e=this._defs;let n=e.el,r=0;for(const i in e.gradient)n||(e.el=n=Gy(t,1,"defs",Yv)),r=Jv(n,e.gradient[i],r);for(const i in e.clipping)n||(e.el=n=Gy(t,1,"defs",Yv)),r=Zv(n,e.clipping[i],r);n&&(0===r?(t.removeChild(n),e.el=null):Vy(n,r))},_clearDefs(){const t=this._defs;t.gradient={},t.clipping={}}});let Kv=null,t_=null;const e_={group(t,e,n){const r=Kv=e.childNodes[2];t_=r.__values__,t.foreground(n_,n,this),t_=e.__values__,Kv=e.childNodes[1],t.content(n_,n,this);const i=Kv=e.childNodes[0];t.background(n_,n,this);const o=!1===n.mark.interactive?"none":null;if(o!==t_.events&&(o_(r,"pointer-events",o),o_(i,"pointer-events",o),t_.events=o),n.strokeForeground&&n.stroke){const t=n.fill;o_(r,"display",null),this.style(i,n),o_(i,"stroke",null),t&&(n.fill=null),t_=r.__values__,this.style(r,n),t&&(n.fill=t),Kv=null}else o_(r,"display","none")},image(t,e,n){!1===n.smooth?(r_(e,"image-rendering","optimizeSpeed"),r_(e,"image-rendering","pixelated")):r_(e,"image-rendering",null)},text(t,e,n){const r=ky(n);let i,o,a,s;k(r)?(o=r.map((t=>My(n,t))),i=o.join("\n"),i!==t_.text&&(Vy(e,0),a=e.ownerDocument,s=wy(n),o.forEach(((t,r)=>{const i=Wy(a,"tspan",Yv);i.__data__=n,i.textContent=t,r&&(i.setAttribute("x",0),i.setAttribute("dy",s)),e.appendChild(i)})),t_.text=i)):(o=My(n,r),o!==t_.text&&(e.textContent=o,t_.text=o)),o_(e,"font-family",Ey(n)),o_(e,"font-size",by(n)+"px"),o_(e,"font-style",n.fontStyle),o_(e,"font-variant",n.fontVariant),o_(e,"font-weight",n.fontWeight)}};function n_(t,e,n){e!==t_[t]&&(n?function(t,e,n,r){null!=n?t.setAttributeNS(r,e,n):t.removeAttributeNS(r,e)}(Kv,t,e,n):o_(Kv,t,e),t_[t]=e)}function r_(t,e,n){n!==t_[e]&&(null==n?t.style.removeProperty(e):t.style.setProperty(e,n+""),t_[e]=n)}function i_(t,e){for(const n in e)o_(t,n,e[n])}function o_(t,e,n){null!=n?t.setAttribute(e,n):t.removeAttribute(e)}function a_(){let t;return"undefined"==typeof window?"":(t=window.location).hash?t.href.slice(0,-t.hash.length):t.href}function s_(t){Ky.call(this,t),this._text=null,this._defs={gradient:{},clipping:{}}}dt(s_,Ky,{svg(){return this._text},_render(t){const e=Lv();e.open("svg",ot({},Qm,{class:"marks",width:this._width*this._scale,height:this._height*this._scale,viewBox:`0 0 ${this._width} ${this._height}`}));const n=this._bgcolor;return n&&"transparent"!==n&&"none"!==n&&e.open("rect",{width:this._width,height:this._height,fill:n}).close(),e.open("g",Hv,{transform:"translate("+this._origin+")"}),this.mark(e,t),e.close(),this.defs(e),this._text=e.close()+"",this},mark(t,e){const n=Ny[e.marktype],r=n.tag,i=[zv,n.attr];t.open("g",{class:Xy(e),"clip-path":e.clip?Rg(this,e,e.group):null},Nv(e),{"pointer-events":"g"!==r&&!1===e.interactive?"none":null});const o=o=>{const a=this.href(o);if(a&&t.open("a",a),t.open(r,this.attr(e,o,i,"g"!==r?r:null)),"text"===r){const e=ky(o);if(k(e)){const n={x:0,dy:wy(o)};for(let r=0;rthis.mark(t,e))),t.close(),r&&a?(i&&(o.fill=null),o.stroke=a,t.open("path",this.attr(e,o,n.foreground,"bgrect")).close(),i&&(o.fill=i)):t.open("path",this.attr(e,o,n.foreground,"bgfore")).close()}t.close(),a&&t.close()};return n.nested?e.items&&e.items.length&&o(e.items[0]):Fm(e,o),t.close()},href(t){const e=t.href;let n;if(e){if(n=this._hrefs&&this._hrefs[e])return n;this.sanitizeURL(e).then((t=>{t["xlink:href"]=t.href,t.href=null,(this._hrefs||(this._hrefs={}))[e]=t}))}return null},attr(t,e,n,r){const i={},o=(t,e,n,r)=>{i[r||t]=e};return Array.isArray(n)?n.forEach((t=>t(o,e,this))):n(o,e,this),r&&function(t,e,n,r,i){let o;if(null==e)return t;"bgrect"===r&&!1===n.interactive&&(t["pointer-events"]="none");if("bgfore"===r&&(!1===n.interactive&&(t["pointer-events"]="none"),t.display="none",null!==e.fill))return t;"image"===r&&!1===e.smooth&&(o=["image-rendering: optimizeSpeed;","image-rendering: pixelated;"]);"text"===r&&(t["font-family"]=Ey(e),t["font-size"]=by(e)+"px",t["font-style"]=e.fontStyle,t["font-variant"]=e.fontVariant,t["font-weight"]=e.fontWeight);for(const n in jv){let r=e[n];const o=jv[n];("transparent"!==r||"fill"!==o&&"stroke"!==o)&&null!=r&&(Lp(r)&&(r=qp(r,i.gradient,"")),t[o]=r)}for(const t in Iv){const n=e[t];null!=n&&(o=o||[],o.push(`${Iv[t]}: ${n};`))}o&&(t.style=o.join(" "))}(i,e,t,r,this._defs),i},defs(t){const e=this._defs.gradient,n=this._defs.clipping;if(0!==Object.keys(e).length+Object.keys(n).length){t.open("defs");for(const n in e){const r=e[n],i=r.stops;"radial"===r.gradient?(t.open("pattern",{id:Up+n,viewBox:"0,0,1,1",width:"100%",height:"100%",preserveAspectRatio:"xMidYMid slice"}),t.open("rect",{width:"1",height:"1",fill:"url(#"+n+")"}).close(),t.close(),t.open("radialGradient",{id:n,fx:r.x1,fy:r.y1,fr:r.r1,cx:r.x2,cy:r.y2,r:r.r2})):t.open("linearGradient",{id:n,x1:r.x1,x2:r.x2,y1:r.y1,y2:r.y2});for(let e=0;e!u_.svgMarkTypes.includes(t)));this._svgRenderer.render(t,u_.svgMarkTypes),this._canvasRenderer.render(t,n)},resize(t,e,n,r){return c_.resize.call(this,t,e,n,r),this._svgRenderer.resize(t,e,n,r),this._canvasRenderer.resize(t,e,n,r),this},background(t){return u_.svgOnTop?this._canvasRenderer.background(t):this._svgRenderer.background(t),this}}),dt(f_,gv,{initialize(t,e,n){const r=Gy(Gy(t,0,"div"),u_.svgOnTop?0:1,"div");return gv.prototype.initialize.call(this,r,e,n)}});const h_="canvas",d_="hybrid",p_="none",g_={Canvas:h_,PNG:"png",SVG:"svg",Hybrid:d_,None:p_},m_={};function y_(t,e){return t=String(t||"").toLowerCase(),arguments.length>1?(m_[t]=e,this):m_[t]}function v_(t,e,n){const r=[],i=(new Ug).union(e),o=t.marktype;return o?__(t,i,n,r):"group"===o?x_(t,i,n,r):s("Intersect scene must be mark node or group item.")}function __(t,e,n,r){if(function(t,e,n){return t.bounds&&e.intersects(t.bounds)&&("group"===t.marktype||!1!==t.interactive&&(!n||n(t)))}(t,e,n)){const i=t.items,o=t.marktype,a=i.length;let s=0;if("group"===o)for(;s=0;r--)if(i[r]!=o[r])return!1;for(r=i.length-1;r>=0;r--)if(!M_(t[n=i[r]],e[n],n))return!1;return typeof t==typeof e}(t,e):t==e)}function E_(t,e){return M_(Jp(t),Jp(e))}const D_="top",C_="left",F_="right",S_="bottom",$_="top-left",T_="top-right",B_="bottom-left",z_="bottom-right",N_="start",O_="middle",R_="end",U_="x",L_="y",q_="group",P_="axis",j_="title",I_="frame",H_="scope",W_="legend",Y_="row-header",G_="row-footer",V_="row-title",X_="column-header",J_="column-footer",Z_="column-title",Q_="padding",K_="symbol",tx="fit",ex="fit-x",nx="fit-y",rx="pad",ix="none",ox="all",ax="each",sx="flush",ux="column",lx="row";function cx(t){Za.call(this,null,t)}function fx(t,e,n){return e(t.bounds.clear(),t,n)}dt(cx,Za,{transform(t,e){const n=e.dataflow,r=t.mark,i=r.marktype,o=Ny[i],a=o.bound;let s,u=r.bounds;if(o.nested)r.items.length&&n.dirty(r.items[0]),u=fx(r,a),r.items.forEach((t=>{t.bounds.clear().union(u)}));else if(i===q_||t.modified())switch(e.visit(e.MOD,(t=>n.dirty(t))),u.clear(),r.items.forEach((t=>u.union(fx(t,a)))),r.role){case P_:case W_:case j_:e.reflow()}else s=e.changed(e.REM),e.visit(e.ADD,(t=>{u.union(fx(t,a))})),e.visit(e.MOD,(t=>{s=s||u.alignsWith(t.bounds),n.dirty(t),u.union(fx(t,a))})),s&&(u.clear(),r.items.forEach((t=>u.union(t.bounds))));return k_(r),e.modifies("bounds")}});const hx=":vega_identifier:";function dx(t){Za.call(this,0,t)}function px(t){Za.call(this,null,t)}function gx(t){Za.call(this,null,t)}dx.Definition={type:"Identifier",metadata:{modifies:!0},params:[{name:"as",type:"string",required:!0}]},dt(dx,Za,{transform(t,e){const n=(i=e.dataflow)._signals[hx]||(i._signals[hx]=i.add(0)),r=t.as;var i;let o=n.value;return e.visit(e.ADD,(t=>t[r]=t[r]||++o)),n.set(this.value=o),e}}),dt(px,Za,{transform(t,e){let n=this.value;n||(n=e.dataflow.scenegraph().mark(t.markdef,function(t){const e=t.groups,n=t.parent;return e&&1===e.size?e.get(Object.keys(e.object)[0]):e&&n?e.lookup(n):null}(t),t.index),n.group.context=t.context,t.context.group||(t.context.group=n.group),n.source=this.source,n.clip=t.clip,n.interactive=t.interactive,this.value=n);const r=n.marktype===q_?qg:Lg;return e.visit(e.ADD,(t=>r.call(t,n))),(t.modified("clip")||t.modified("interactive"))&&(n.clip=t.clip,n.interactive=!!t.interactive,n.zdirty=!0,e.reflow()),n.items=e.source,e}});const mx={parity:t=>t.filter(((t,e)=>e%2?t.opacity=0:1)),greedy:(t,e)=>{let n;return t.filter(((t,r)=>r&&yx(n.bounds,t.bounds,e)?t.opacity=0:(n=t,1)))}},yx=(t,e,n)=>n>Math.max(e.x1-t.x2,t.x1-e.x2,e.y1-t.y2,t.y1-e.y2),vx=(t,e)=>{for(var n,r=1,i=t.length,o=t[0].bounds;r{const e=t.bounds;return e.width()>1&&e.height()>1},xx=t=>(t.forEach((t=>t.opacity=1)),t),bx=(t,e)=>t.reflow(e.modified()).modifies("opacity");function wx(t){Za.call(this,null,t)}dt(gx,Za,{transform(t,e){const n=mx[t.method]||mx.parity,r=t.separation||0;let i,o,a=e.materialize(e.SOURCE).source;if(!a||!a.length)return;if(!t.method)return t.modified("method")&&(xx(a),e=bx(e,t)),e;if(a=a.filter(_x),!a.length)return;if(t.sort&&(a=a.slice().sort(t.sort)),i=xx(a),e=bx(e,t),i.length>=3&&vx(i,r)){do{i=n(i,r)}while(i.length>=3&&vx(i,r));i.length<3&&!F(a).opacity&&(i.length>1&&(F(i).opacity=0),F(a).opacity=1)}t.boundScale&&t.boundTolerance>=0&&(o=((t,e,n)=>{var r=t.range(),i=new Ug;return e===D_||e===S_?i.set(r[0],-1/0,r[1],1/0):i.set(-1/0,r[0],1/0,r[1]),i.expand(n||1),t=>i.encloses(t.bounds)})(t.boundScale,t.boundOrient,+t.boundTolerance),a.forEach((t=>{o(t)||(t.opacity=0)})));const s=i[0].mark.bounds.clear();return a.forEach((t=>{t.opacity&&s.union(t.bounds)})),e}}),dt(wx,Za,{transform(t,e){const n=e.dataflow;if(e.visit(e.ALL,(t=>n.dirty(t))),e.fields&&e.fields.zindex){const t=e.source&&e.source[0];t&&(t.mark.zdirty=!0)}}});const kx=new Ug;function Ax(t,e,n){return t[e]===n?0:(t[e]=n,1)}function Mx(t){var e=t.items[0].orient;return e===C_||e===F_}function Ex(t,e,n,r){var i,o,a=e.items[0],s=a.datum,u=null!=a.translate?a.translate:.5,l=a.orient,c=function(t){let e=+t.grid;return[t.ticks?e++:-1,t.labels?e++:-1,e+ +t.domain]}(s),f=a.range,h=a.offset,d=a.position,p=a.minExtent,g=a.maxExtent,m=s.title&&a.items[c[2]].items[0],y=a.titlePadding,v=a.bounds,_=m&&Ay(m),x=0,b=0;switch(kx.clear().union(v),v.clear(),(i=c[0])>-1&&v.union(a.items[i].bounds),(i=c[1])>-1&&v.union(a.items[i].bounds),l){case D_:x=d||0,b=-h,o=Math.max(p,Math.min(g,-v.y1)),v.add(0,-o).add(f,0),m&&Dx(t,m,o,y,_,0,-1,v);break;case C_:x=-h,b=d||0,o=Math.max(p,Math.min(g,-v.x1)),v.add(-o,0).add(0,f),m&&Dx(t,m,o,y,_,1,-1,v);break;case F_:x=n+h,b=d||0,o=Math.max(p,Math.min(g,v.x2)),v.add(0,0).add(o,f),m&&Dx(t,m,o,y,_,1,1,v);break;case S_:x=d||0,b=r+h,o=Math.max(p,Math.min(g,v.y2)),v.add(0,0).add(f,o),m&&Dx(t,m,o,y,0,0,1,v);break;default:x=a.x,b=a.y}return Hg(v.translate(x,b),a),Ax(a,"x",x+u)|Ax(a,"y",b+u)&&(a.bounds=kx,t.dirty(a),a.bounds=v,t.dirty(a)),a.mark.bounds.clear().union(v)}function Dx(t,e,n,r,i,o,a,s){const u=e.bounds;if(e.auto){const s=a*(n+i+r);let l=0,c=0;t.dirty(e),o?l=(e.x||0)-(e.x=s):c=(e.y||0)-(e.y=s),e.mark.bounds.clear().union(u.translate(-l,-c)),t.dirty(e)}s.union(u)}const Cx=(t,e)=>Math.floor(Math.min(t,e)),Fx=(t,e)=>Math.ceil(Math.max(t,e));function Sx(t){return(new Ug).set(0,0,t.width||0,t.height||0)}function $x(t){const e=t.bounds.clone();return e.empty()?e.set(0,0,0,0):e.translate(-(t.x||0),-(t.y||0))}function Tx(t,e,n){const r=A(t)?t[e]:t;return null!=r?r:void 0!==n?n:0}function Bx(t){return t<0?Math.ceil(-t):0}function zx(t,e,n){var r,i,o,a,s,u,l,c,f,h,d,p=!n.nodirty,g=n.bounds===sx?Sx:$x,m=kx.set(0,0,0,0),y=Tx(n.align,ux),v=Tx(n.align,lx),_=Tx(n.padding,ux),x=Tx(n.padding,lx),b=n.columns||e.length,w=b<=0?1:Math.ceil(e.length/b),k=e.length,A=Array(k),M=Array(b),E=0,D=Array(k),C=Array(w),F=0,S=Array(k),$=Array(k),T=Array(k);for(i=0;i1)for(i=0;i0&&(S[i]+=f/2);if(v&&Tx(n.center,lx)&&1!==b)for(i=0;i0&&($[i]+=h/2);for(i=0;ii&&(t.warn("Grid headers exceed limit: "+i),e=e.slice(0,i)),A+=o,g=0,y=e.length;g=0&&null==(x=n[m]);m-=h);s?(b=null==d?x.x:Math.round(x.bounds.x1+d*x.bounds.width()),w=A):(b=A,w=null==d?x.y:Math.round(x.bounds.y1+d*x.bounds.height())),v.union(_.bounds.translate(b-(_.x||0),w-(_.y||0))),_.x=b,_.y=w,t.dirty(_),M=a(M,v[l])}return M}function Lx(t,e,n,r,i,o){if(e){t.dirty(e);var a=n,s=n;r?a=Math.round(i.x1+o*i.width()):s=Math.round(i.y1+o*i.height()),e.bounds.translate(a-(e.x||0),s-(e.y||0)),e.mark.bounds.clear().union(e.bounds),e.x=a,e.y=s,t.dirty(e)}}function qx(t,e,n,r,i,o,a){const s=function(t,e){const n=t[e]||{};return(e,r)=>null!=n[e]?n[e]:null!=t[e]?t[e]:r}(n,e),u=function(t,e){let n=-1/0;return t.forEach((t=>{null!=t.offset&&(n=Math.max(n,t.offset))})),n>-1/0?n:e}(t,s("offset",0)),l=s("anchor",N_),c=l===R_?1:l===O_?.5:0,f={align:ax,bounds:s("bounds",sx),columns:"vertical"===s("direction")?1:t.length,padding:s("margin",8),center:s("center"),nodirty:!0};switch(e){case C_:f.anchor={x:Math.floor(r.x1)-u,column:R_,y:c*(a||r.height()+2*r.y1),row:l};break;case F_:f.anchor={x:Math.ceil(r.x2)+u,y:c*(a||r.height()+2*r.y1),row:l};break;case D_:f.anchor={y:Math.floor(i.y1)-u,row:R_,x:c*(o||i.width()+2*i.x1),column:l};break;case S_:f.anchor={y:Math.ceil(i.y2)+u,x:c*(o||i.width()+2*i.x1),column:l};break;case $_:f.anchor={x:u,y:u};break;case T_:f.anchor={x:o-u,y:u,column:R_};break;case B_:f.anchor={x:u,y:a-u,row:R_};break;case z_:f.anchor={x:o-u,y:a-u,column:R_,row:R_}}return f}function Px(t,e){var n,r,i=e.items[0],o=i.datum,a=i.orient,s=i.bounds,u=i.x,l=i.y;return i._bounds?i._bounds.clear().union(s):i._bounds=s.clone(),s.clear(),function(t,e,n){var r=e.padding,i=r-n.x,o=r-n.y;if(e.datum.title){var a=e.items[1].items[0],s=a.anchor,u=e.titlePadding||0,l=r-a.x,c=r-a.y;switch(a.orient){case C_:i+=Math.ceil(a.bounds.width())+u;break;case F_:case S_:break;default:o+=a.bounds.height()+u}switch((i||o)&&Ix(t,n,i,o),a.orient){case C_:c+=jx(e,n,a,s,1,1);break;case F_:l+=jx(e,n,a,R_,0,0)+u,c+=jx(e,n,a,s,1,1);break;case S_:l+=jx(e,n,a,s,0,0),c+=jx(e,n,a,R_,-1,0,1)+u;break;default:l+=jx(e,n,a,s,0,0)}(l||c)&&Ix(t,a,l,c),(l=Math.round(a.bounds.x1-r))<0&&(Ix(t,n,-l,0),Ix(t,a,-l,0))}else(i||o)&&Ix(t,n,i,o)}(t,i,i.items[0].items[0]),s=function(t,e){return t.items.forEach((t=>e.union(t.bounds))),e.x1=t.padding,e.y1=t.padding,e}(i,s),n=2*i.padding,r=2*i.padding,s.empty()||(n=Math.ceil(s.width()+n),r=Math.ceil(s.height()+r)),o.type===K_&&function(t){const e=t.reduce(((t,e)=>(t[e.column]=Math.max(e.bounds.x2-e.x,t[e.column]||0),t)),{});t.forEach((t=>{t.width=e[t.column],t.height=t.bounds.y2-t.y}))}(i.items[0].items[0].items[0].items),a!==ix&&(i.x=u=0,i.y=l=0),i.width=n,i.height=r,Hg(s.set(u,l,u+n,l+r),i),i.mark.bounds.clear().union(s),i}function jx(t,e,n,r,i,o,a){const s="symbol"!==t.datum.type,u=n.datum.vgrad,l=(!s||!o&&u||a?e:e.items[0]).bounds[i?"y2":"x2"]-t.padding,c=u&&o?l:0,f=u&&o?0:l,h=i<=0?0:Ay(n);return Math.round(r===N_?c:r===R_?f-h:.5*(l-h))}function Ix(t,e,n,r){e.x+=n,e.y+=r,e.bounds.translate(n,r),e.mark.bounds.translate(n,r),t.dirty(e)}function Hx(t){Za.call(this,null,t)}dt(Hx,Za,{transform(t,e){const n=e.dataflow;return t.mark.items.forEach((e=>{t.layout&&Nx(n,e,t.layout),function(t,e,n){var r,i,o,a,s,u=e.items,l=Math.max(0,e.width||0),c=Math.max(0,e.height||0),f=(new Ug).set(0,0,l,c),h=f.clone(),d=f.clone(),p=[];for(a=0,s=u.length;a{(o=t.orient||F_)!==ix&&(e[o]||(e[o]=[])).push(t)}));for(const r in e){const i=e[r];zx(t,i,qx(i,r,n.legends,h,d,l,c))}p.forEach((e=>{const r=e.bounds;if(r.equals(e._bounds)||(e.bounds=e._bounds,t.dirty(e),e.bounds=r,t.dirty(e)),!n.autosize||n.autosize.type!==tx&&n.autosize.type!==ex&&n.autosize.type!==nx)f.union(r);else switch(e.orient){case C_:case F_:f.add(r.x1,0).add(r.x2,0);break;case D_:case S_:f.add(0,r.y1).add(0,r.y2)}}))}f.union(h).union(d),r&&f.union(function(t,e,n,r,i){var o,a=e.items[0],s=a.frame,u=a.orient,l=a.anchor,c=a.offset,f=a.padding,h=a.items[0].items[0],d=a.items[1]&&a.items[1].items[0],p=u===C_||u===F_?r:n,g=0,m=0,y=0,v=0,_=0;if(s!==q_?u===C_?(g=i.y2,p=i.y1):u===F_?(g=i.y1,p=i.y2):(g=i.x1,p=i.x2):u===C_&&(g=r,p=0),o=l===N_?g:l===R_?p:(g+p)/2,d&&d.text){switch(u){case D_:case S_:_=h.bounds.height()+f;break;case C_:v=h.bounds.width()+f;break;case F_:v=-h.bounds.width()-f}kx.clear().union(d.bounds),kx.translate(v-(d.x||0),_-(d.y||0)),Ax(d,"x",v)|Ax(d,"y",_)&&(t.dirty(d),d.bounds.clear().union(kx),d.mark.bounds.clear().union(kx),t.dirty(d)),kx.clear().union(d.bounds)}else kx.clear();switch(kx.union(h.bounds),u){case D_:m=o,y=i.y1-kx.height()-c;break;case C_:m=i.x1-kx.width()-c,y=o;break;case F_:m=i.x2+kx.width()+c,y=o;break;case S_:m=o,y=i.y2+c;break;default:m=a.x,y=a.y}return Ax(a,"x",m)|Ax(a,"y",y)&&(kx.translate(m,y),t.dirty(a),a.bounds.clear().union(kx),e.bounds.clear().union(kx),t.dirty(a)),a.bounds}(t,r,l,c,f));e.clip&&f.set(0,0,e.width||0,e.height||0);!function(t,e,n,r){const i=r.autosize||{},o=i.type;if(t._autosize<1||!o)return;let a=t._width,s=t._height,u=Math.max(0,e.width||0),l=Math.max(0,Math.ceil(-n.x1)),c=Math.max(0,e.height||0),f=Math.max(0,Math.ceil(-n.y1));const h=Math.max(0,Math.ceil(n.x2-u)),d=Math.max(0,Math.ceil(n.y2-c));if(i.contains===Q_){const e=t.padding();a-=e.left+e.right,s-=e.top+e.bottom}o===ix?(l=0,f=0,u=a,c=s):o===tx?(u=Math.max(0,a-l-h),c=Math.max(0,s-f-d)):o===ex?(u=Math.max(0,a-l-h),s=c+f+d):o===nx?(a=u+l+h,c=Math.max(0,s-f-d)):o===rx&&(a=u+l+h,s=c+f+d);t._resizeView(a,s,u,c,[l,f],i.resize)}(t,e,f,n)}(n,e,t)})),function(t){return t&&"legend-entry"!==t.mark.role}(t.mark.group)?e.reflow():e}});var Wx=Object.freeze({__proto__:null,bound:cx,identifier:dx,mark:px,overlap:gx,render:wx,viewlayout:Hx});function Yx(t){Za.call(this,null,t)}function Gx(t){Za.call(this,null,t)}function Vx(){return xa({})}function Xx(t){Za.call(this,null,t)}function Jx(t){Za.call(this,[],t)}dt(Yx,Za,{transform(t,e){if(this.value&&!t.modified())return e.StopPropagation;var n=e.dataflow.locale(),r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=this.value,o=t.scale,a=xp(o,null==t.count?t.values?t.values.length:10:t.count,t.minstep),s=t.format||kp(n,o,a,t.formatSpecifier,t.formatType,!!t.values),u=t.values?bp(o,t.values,a):wp(o,a);return i&&(r.rem=i),i=u.map(((t,e)=>xa({index:e/(u.length-1||1),value:t,label:s(t)}))),t.extra&&i.length&&i.push(xa({index:-1,extra:{value:i[0].value},label:""})),r.source=i,r.add=i,this.value=i,r}}),dt(Gx,Za,{transform(t,e){var n=e.dataflow,r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=t.item||Vx,o=t.key||va,a=this.value;return k(r.encode)&&(r.encode=null),a&&(t.modified("key")||e.modified(o))&&s("DataJoin does not support modified key function or fields."),a||(e=e.addAll(),this.value=a=function(t){const e=ft().test((t=>t.exit));return e.lookup=n=>e.get(t(n)),e}(o)),e.visit(e.ADD,(t=>{const e=o(t);let n=a.get(e);n?n.exit?(a.empty--,r.add.push(n)):r.mod.push(n):(n=i(t),a.set(e,n),r.add.push(n)),n.datum=t,n.exit=!1})),e.visit(e.MOD,(t=>{const e=o(t),n=a.get(e);n&&(n.datum=t,r.mod.push(n))})),e.visit(e.REM,(t=>{const e=o(t),n=a.get(e);t!==n.datum||n.exit||(r.rem.push(n),n.exit=!0,++a.empty)})),e.changed(e.ADD_MOD)&&r.modifies("datum"),(e.clean()||t.clean&&a.empty>n.cleanThreshold)&&n.runAfter(a.clean),r}}),dt(Xx,Za,{transform(t,e){var n=e.fork(e.ADD_REM),r=t.mod||!1,i=t.encoders,o=e.encode;if(k(o)){if(!n.changed()&&!o.every((t=>i[t])))return e.StopPropagation;o=o[0],n.encode=null}var a="enter"===o,s=i.update||g,u=i.enter||g,l=i.exit||g,c=(o&&!a?i[o]:s)||g;if(e.changed(e.ADD)&&(e.visit(e.ADD,(e=>{u(e,t),s(e,t)})),n.modifies(u.output),n.modifies(s.output),c!==g&&c!==s&&(e.visit(e.ADD,(e=>{c(e,t)})),n.modifies(c.output))),e.changed(e.REM)&&l!==g&&(e.visit(e.REM,(e=>{l(e,t)})),n.modifies(l.output)),a||c!==g){const i=e.MOD|(t.modified()?e.REFLOW:0);a?(e.visit(i,(e=>{const i=u(e,t)||r;(c(e,t)||i)&&n.mod.push(e)})),n.mod.length&&n.modifies(u.output)):e.visit(i,(e=>{(c(e,t)||r)&&n.mod.push(e)})),n.mod.length&&n.modifies(c.output)}return n.changed()?n:e.StopPropagation}}),dt(Jx,Za,{transform(t,e){if(null!=this.value&&!t.modified())return e.StopPropagation;var n,r,i,o,a,s=e.dataflow.locale(),u=e.fork(e.NO_SOURCE|e.NO_FIELDS),l=this.value,c=t.type||gp,f=t.scale,h=+t.limit,d=xp(f,null==t.count?5:t.count,t.minstep),p=!!t.values||c===gp,g=t.format||Fp(s,f,d,c,t.formatSpecifier,t.formatType,p),m=t.values||Dp(f,d);return l&&(u.rem=l),c===gp?(h&&m.length>h?(e.dataflow.warn("Symbol legend count exceeds limit, filtering items."),l=m.slice(0,h-1),a=!0):l=m,J(i=t.size)?(t.values||0!==f(l[0])||(l=l.slice(1)),o=l.reduce(((e,n)=>Math.max(e,i(n,t))),0)):i=rt(o=i||8),l=l.map(((e,n)=>xa({index:n,label:g(e,n,l),value:e,offset:o,size:i(e,t)}))),a&&(a=m[l.length],l.push(xa({index:l.length,label:`…${m.length-l.length} entries`,value:a,offset:o,size:i(a,t)})))):"gradient"===c?(n=f.domain(),r=lp(f,n[0],F(n)),m.length<3&&!t.values&&n[0]!==F(n)&&(m=[n[0],F(n)]),l=m.map(((t,e)=>xa({index:e,label:g(t,e,m),value:t,perc:r(t)})))):(i=m.length-1,r=function(t){const e=t.domain(),n=e.length-1;let r=+e[0],i=+F(e),o=i-r;if(t.type===Bd){const t=n?o/n:.1;r-=t,i+=t,o=i-r}return t=>(t-r)/o}(f),l=m.map(((t,e)=>xa({index:e,label:g(t,e,m),value:t,perc:e?r(t):0,perc2:e===i?1:r(m[e+1])})))),u.source=l,u.add=l,this.value=l,u}});const Zx=t=>t.source.x,Qx=t=>t.source.y,Kx=t=>t.target.x,tb=t=>t.target.y;function eb(t){Za.call(this,{},t)}eb.Definition={type:"LinkPath",metadata:{modifies:!0},params:[{name:"sourceX",type:"field",default:"source.x"},{name:"sourceY",type:"field",default:"source.y"},{name:"targetX",type:"field",default:"target.x"},{name:"targetY",type:"field",default:"target.y"},{name:"orient",type:"enum",default:"vertical",values:["horizontal","vertical","radial"]},{name:"shape",type:"enum",default:"line",values:["line","arc","curve","diagonal","orthogonal"]},{name:"require",type:"signal"},{name:"as",type:"string",default:"path"}]},dt(eb,Za,{transform(t,e){var n=t.sourceX||Zx,r=t.sourceY||Qx,i=t.targetX||Kx,o=t.targetY||tb,a=t.as||"path",u=t.orient||"vertical",l=t.shape||"line",c=ob.get(l+"-"+u)||ob.get(l);return c||s("LinkPath unsupported type: "+t.shape+(t.orient?"-"+t.orient:"")),e.visit(e.SOURCE,(t=>{t[a]=c(n(t),r(t),i(t),o(t))})),e.reflow(t.modified()).modifies(a)}});const nb=(t,e,n,r)=>"M"+t+","+e+"L"+n+","+r,rb=(t,e,n,r)=>{var i=n-t,o=r-e,a=Math.hypot(i,o)/2;return"M"+t+","+e+"A"+a+","+a+" "+180*Math.atan2(o,i)/Math.PI+" 0 1 "+n+","+r},ib=(t,e,n,r)=>{const i=n-t,o=r-e,a=.2*(i+o),s=.2*(o-i);return"M"+t+","+e+"C"+(t+a)+","+(e+s)+" "+(n+s)+","+(r-a)+" "+n+","+r},ob=ft({line:nb,"line-radial":(t,e,n,r)=>nb(e*Math.cos(t),e*Math.sin(t),r*Math.cos(n),r*Math.sin(n)),arc:rb,"arc-radial":(t,e,n,r)=>rb(e*Math.cos(t),e*Math.sin(t),r*Math.cos(n),r*Math.sin(n)),curve:ib,"curve-radial":(t,e,n,r)=>ib(e*Math.cos(t),e*Math.sin(t),r*Math.cos(n),r*Math.sin(n)),"orthogonal-horizontal":(t,e,n,r)=>"M"+t+","+e+"V"+r+"H"+n,"orthogonal-vertical":(t,e,n,r)=>"M"+t+","+e+"H"+n+"V"+r,"orthogonal-radial":(t,e,n,r)=>{const i=Math.cos(t),o=Math.sin(t),a=Math.cos(n),s=Math.sin(n);return"M"+e*i+","+e*o+"A"+e+","+e+" 0 0,"+((Math.abs(n-t)>Math.PI?n<=t:n>t)?1:0)+" "+e*a+","+e*s+"L"+r*a+","+r*s},"diagonal-horizontal":(t,e,n,r)=>{const i=(t+n)/2;return"M"+t+","+e+"C"+i+","+e+" "+i+","+r+" "+n+","+r},"diagonal-vertical":(t,e,n,r)=>{const i=(e+r)/2;return"M"+t+","+e+"C"+t+","+i+" "+n+","+i+" "+n+","+r},"diagonal-radial":(t,e,n,r)=>{const i=Math.cos(t),o=Math.sin(t),a=Math.cos(n),s=Math.sin(n),u=(e+r)/2;return"M"+e*i+","+e*o+"C"+u*i+","+u*o+" "+u*a+","+u*s+" "+r*a+","+r*s}});function ab(t){Za.call(this,null,t)}ab.Definition={type:"Pie",metadata:{modifies:!0},params:[{name:"field",type:"field"},{name:"startAngle",type:"number",default:0},{name:"endAngle",type:"number",default:6.283185307179586},{name:"sort",type:"boolean",default:!1},{name:"as",type:"string",array:!0,length:2,default:["startAngle","endAngle"]}]},dt(ab,Za,{transform(t,e){var n,r,i,o=t.as||["startAngle","endAngle"],a=o[0],s=o[1],u=t.field||d,l=t.startAngle||0,c=null!=t.endAngle?t.endAngle:2*Math.PI,f=e.source,h=f.map(u),p=h.length,g=l,m=(c-l)/Te(h),y=$e(p);for(t.sort&&y.sort(((t,e)=>h[t]-h[e])),n=0;nt+(e<0?-1:e>0?1:0)),0))!==e.length&&n.warn("Log scale domain includes zero: "+Ct(e)));return e}function hb(t,e,n){return J(t)&&(e||n)?ap(t,db(e||[0,1],n)):t}function db(t,e){return e?t.slice().reverse():t}function pb(t){Za.call(this,null,t)}dt(cb,Za,{transform(t,e){var n=e.dataflow,r=this.value,i=function(t){var e,n=t.type,r="";if(n===Fd)return Fd+"-"+wd;(function(t){const e=t.type;return Kd(e)&&e!==Dd&&e!==Cd&&(t.scheme||t.range&&t.range.length&&t.range.every(xt))})(t)&&(r=2===(e=t.rawDomain?t.rawDomain.length:t.domain?t.domain.length+ +(null!=t.domainMid):0)?Fd+"-":3===e?Sd+"-":"");return(r+n||wd).toLowerCase()}(t);for(i in r&&i===r.type||(this.value=r=Jd(i)()),t)if(!lb[i]){if("padding"===i&&ub(r.type))continue;J(r[i])?r[i](t[i]):n.warn("Unsupported scale property: "+i)}return function(t,e,n){var r=t.type,i=e.round||!1,o=e.range;if(null!=e.rangeStep)o=function(t,e,n){t!==Od&&t!==Nd&&s("Only band and point scales support rangeStep.");var r=(null!=e.paddingOuter?e.paddingOuter:e.padding)||0,i=t===Nd?1:(null!=e.paddingInner?e.paddingInner:e.padding)||0;return[0,e.rangeStep*bd(n,i,r)]}(r,e,n);else if(e.scheme&&(o=function(t,e,n){var r,i=e.schemeExtent;k(e.scheme)?r=sp(e.scheme,e.interpolate,e.interpolateGamma):(r=pp(e.scheme.toLowerCase()))||s(`Unrecognized scheme name: ${e.scheme}`);return n=t===Bd?n+1:t===Rd?n-1:t===$d||t===Td?+e.schemeCount||sb:n,rp(t)?hb(r,i,e.reverse):J(r)?up(hb(r,i),n):t===zd?r:r.slice(0,n)}(r,e,n),J(o))){if(t.interpolator)return t.interpolator(o);s(`Scale type ${r} does not support interpolating color schemes.`)}if(o&&rp(r))return t.interpolator(sp(db(o,e.reverse),e.interpolate,e.interpolateGamma));o&&e.interpolate&&t.interpolate?t.interpolate(cp(e.interpolate,e.interpolateGamma)):J(t.round)?t.round(i):J(t.rangeRound)&&t.interpolate(i?vh:yh);o&&t.range(db(o,e.reverse))}(r,t,function(t,e,n){let r=e.bins;if(r&&!k(r)){const e=t.domain(),n=e[0],i=F(e),o=r.step;let a=null==r.start?n:r.start,u=null==r.stop?i:r.stop;o||s("Scale bins parameter missing step property."),ai&&(u=o*Math.floor(i/o)),r=$e(a,u+o/2,o)}r?t.bins=r:t.bins&&delete t.bins;t.type===Rd&&(r?e.domain||e.domainRaw||(t.domain(r),n=r.length):t.bins=t.domain());return n}(r,t,function(t,e,n){const r=function(t,e,n){return e?(t.domain(fb(t.type,e,n)),e.length):-1}(t,e.domainRaw,n);if(r>-1)return r;var i,o,a=e.domain,s=t.type,u=e.zero||void 0===e.zero&&function(t){const e=t.type;return!t.bins&&(e===wd||e===Ad||e===Md)}(t);if(!a)return 0;ub(s)&&e.padding&&a[0]!==F(a)&&(a=function(t,e,n,r,i,o){var a=Math.abs(F(n)-n[0]),s=a/(a-2*r),u=t===kd?I(e,null,s):t===Md?H(e,null,s,.5):t===Ad?H(e,null,s,i||1):t===Ed?W(e,null,s,o||1):j(e,null,s);return e=e.slice(),e[0]=u[0],e[e.length-1]=u[1],e}(s,a,e.range,e.padding,e.exponent,e.constant));if((u||null!=e.domainMin||null!=e.domainMax||null!=e.domainMid)&&(i=(a=a.slice()).length-1||1,u&&(a[0]>0&&(a[0]=0),a[i]<0&&(a[i]=0)),null!=e.domainMin&&(a[0]=e.domainMin),null!=e.domainMax&&(a[i]=e.domainMax),null!=e.domainMid)){const t=(o=e.domainMid)>a[i]?i+1:ot(u);if(null==e)d.push(t.slice());else for(i={},o=0,a=t.length;oh&&(h=f),n&&c.sort(n)}return d.max=h,d}(e.source,t.groupby,l,c),r=0,i=n.length,o=n.max;r0?1:t<0?-1:0},Ib=Math.sqrt,Hb=Math.tan;function Wb(t){return t>1?0:t<-1?Eb:Math.acos(t)}function Yb(t){return t>1?Db:t<-1?-Db:Math.asin(t)}function Gb(){}function Vb(t,e){t&&Jb.hasOwnProperty(t.type)&&Jb[t.type](t,e)}var Xb={Feature:function(t,e){Vb(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r=0?1:-1,i=r*n,o=Nb(e=(e*=$b)/2+Cb),a=Pb(e),s=iw*a,u=rw*o+s*Nb(i),l=s*r*Pb(i);mw.add(zb(l,u)),nw=t,rw=o,iw=a}function kw(t){return[zb(t[1],t[0]),Yb(t[2])]}function Aw(t){var e=t[0],n=t[1],r=Nb(n);return[r*Nb(e),r*Pb(e),Pb(n)]}function Mw(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Ew(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function Dw(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function Cw(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function Fw(t){var e=Ib(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}var Sw,$w,Tw,Bw,zw,Nw,Ow,Rw,Uw,Lw,qw,Pw,jw,Iw,Hw,Ww,Yw={point:Gw,lineStart:Xw,lineEnd:Jw,polygonStart:function(){Yw.point=Zw,Yw.lineStart=Qw,Yw.lineEnd=Kw,dw=new ue,vw.polygonStart()},polygonEnd:function(){vw.polygonEnd(),Yw.point=Gw,Yw.lineStart=Xw,Yw.lineEnd=Jw,mw<0?(ow=-(sw=180),aw=-(uw=90)):dw>Ab?uw=90:dw<-Ab&&(aw=-90),gw[0]=ow,gw[1]=sw},sphere:function(){ow=-(sw=180),aw=-(uw=90)}};function Gw(t,e){pw.push(gw=[ow=t,sw=t]),euw&&(uw=e)}function Vw(t,e){var n=Aw([t*$b,e*$b]);if(hw){var r=Ew(hw,n),i=Ew([r[1],-r[0],0],r);Fw(i),i=kw(i);var o,a=t-lw,s=a>0?1:-1,u=i[0]*Sb*s,l=Tb(a)>180;l^(s*lwuw&&(uw=o):l^(s*lw<(u=(u+360)%360-180)&&uuw&&(uw=e)),l?ttk(ow,sw)&&(sw=t):tk(t,sw)>tk(ow,sw)&&(ow=t):sw>=ow?(tsw&&(sw=t)):t>lw?tk(ow,t)>tk(ow,sw)&&(sw=t):tk(t,sw)>tk(ow,sw)&&(ow=t)}else pw.push(gw=[ow=t,sw=t]);euw&&(uw=e),hw=n,lw=t}function Xw(){Yw.point=Vw}function Jw(){gw[0]=ow,gw[1]=sw,Yw.point=Gw,hw=null}function Zw(t,e){if(hw){var n=t-lw;dw.add(Tb(n)>180?n+(n>0?360:-360):n)}else cw=t,fw=e;vw.point(t,e),Vw(t,e)}function Qw(){vw.lineStart()}function Kw(){Zw(cw,fw),vw.lineEnd(),Tb(dw)>Ab&&(ow=-(sw=180)),gw[0]=ow,gw[1]=sw,hw=null}function tk(t,e){return(e-=t)<0?e+360:e}function ek(t,e){return t[0]-e[0]}function nk(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:eEb&&(t-=Math.round(t/Fb)*Fb),[t,e]}function mk(t,e,n){return(t%=Fb)?e||n?pk(vk(t),_k(e,n)):vk(t):e||n?_k(e,n):gk}function yk(t){return function(e,n){return Tb(e+=t)>Eb&&(e-=Math.round(e/Fb)*Fb),[e,n]}}function vk(t){var e=yk(t);return e.invert=yk(-t),e}function _k(t,e){var n=Nb(t),r=Pb(t),i=Nb(e),o=Pb(e);function a(t,e){var a=Nb(e),s=Nb(t)*a,u=Pb(t)*a,l=Pb(e),c=l*n+s*r;return[zb(u*i-c*o,s*n-l*r),Yb(c*i+u*o)]}return a.invert=function(t,e){var a=Nb(e),s=Nb(t)*a,u=Pb(t)*a,l=Pb(e),c=l*i-u*o;return[zb(u*i+l*o,s*n+c*r),Yb(c*n-s*r)]},a}function xk(t,e){(e=Aw(e))[0]-=t,Fw(e);var n=Wb(-e[1]);return((-e[2]<0?-n:n)+Fb-Ab)%Fb}function bk(){var t,e=[];return{point:function(e,n,r){t.push([e,n,r])},lineStart:function(){e.push(t=[])},lineEnd:Gb,rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))},result:function(){var n=e;return e=[],t=null,n}}}function wk(t,e){return Tb(t[0]-e[0])=0;--o)i.point((c=l[o])[0],c[1]);else r(h.x,h.p.x,-1,i);h=h.p}l=(h=h.o).z,d=!d}while(!h.v);i.lineEnd()}}}function Mk(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r=0?1:-1,E=M*A,D=E>Eb,C=m*w;if(u.add(zb(C*M*Pb(E),y*k+C*Nb(E))),a+=D?A+M*Fb:A,D^p>=n^x>=n){var F=Ew(Aw(d),Aw(_));Fw(F);var S=Ew(o,F);Fw(S);var $=(D^A>=0?-1:1)*Yb(S[2]);(r>$||r===$&&(F[0]||F[1]))&&(s+=D^A>=0?1:-1)}}return(a<-Ab||a0){for(f||(i.polygonStart(),f=!0),i.lineStart(),t=0;t1&&2&u&&h.push(h.pop().concat(h.shift())),a.push(h.filter(Ck))}return h}}function Ck(t){return t.length>1}function Fk(t,e){return((t=t.x)[0]<0?t[1]-Db-Ab:Db-t[1])-((e=e.x)[0]<0?e[1]-Db-Ab:Db-e[1])}gk.invert=gk;var Sk=Dk((function(){return!0}),(function(t){var e,n=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(o,a){var s=o>0?Eb:-Eb,u=Tb(o-n);Tb(u-Eb)0?Db:-Db),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),t.point(o,r),e=0):i!==s&&u>=Eb&&(Tb(n-i)Ab?Bb((Pb(e)*(o=Nb(r))*Pb(n)-Pb(r)*(i=Nb(e))*Pb(t))/(i*o*a)):(e+r)/2}(n,r,o,a),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),e=0),t.point(n=o,r=a),i=s},lineEnd:function(){t.lineEnd(),n=r=NaN},clean:function(){return 2-e}}}),(function(t,e,n,r){var i;if(null==t)i=n*Db,r.point(-Eb,i),r.point(0,i),r.point(Eb,i),r.point(Eb,0),r.point(Eb,-i),r.point(0,-i),r.point(-Eb,-i),r.point(-Eb,0),r.point(-Eb,i);else if(Tb(t[0]-e[0])>Ab){var o=t[0]0,i=Tb(e)>Ab;function o(t,n){return Nb(t)*Nb(n)>e}function a(t,n,r){var i=[1,0,0],o=Ew(Aw(t),Aw(n)),a=Mw(o,o),s=o[0],u=a-s*s;if(!u)return!r&&t;var l=e*a/u,c=-e*s/u,f=Ew(i,o),h=Cw(i,l);Dw(h,Cw(o,c));var d=f,p=Mw(h,d),g=Mw(d,d),m=p*p-g*(Mw(h,h)-1);if(!(m<0)){var y=Ib(m),v=Cw(d,(-p-y)/g);if(Dw(v,h),v=kw(v),!r)return v;var _,x=t[0],b=n[0],w=t[1],k=n[1];b0^v[1]<(Tb(v[0]-x)Eb^(x<=v[0]&&v[0]<=b)){var E=Cw(d,(-p+y)/g);return Dw(E,h),[v,kw(E)]}}}function s(e,n){var i=r?t:Eb-t,o=0;return e<-i?o|=1:e>i&&(o|=2),n<-i?o|=4:n>i&&(o|=8),o}return Dk(o,(function(t){var e,n,u,l,c;return{lineStart:function(){l=u=!1,c=1},point:function(f,h){var d,p=[f,h],g=o(f,h),m=r?g?0:s(f,h):g?s(f+(f<0?Eb:-Eb),h):0;if(!e&&(l=u=g)&&t.lineStart(),g!==u&&(!(d=a(e,p))||wk(e,d)||wk(p,d))&&(p[2]=1),g!==u)c=0,g?(t.lineStart(),d=a(p,e),t.point(d[0],d[1])):(d=a(e,p),t.point(d[0],d[1],2),t.lineEnd()),e=d;else if(i&&e&&r^g){var y;m&n||!(y=a(p,e,!0))||(c=0,r?(t.lineStart(),t.point(y[0][0],y[0][1]),t.point(y[1][0],y[1][1]),t.lineEnd()):(t.point(y[1][0],y[1][1]),t.lineEnd(),t.lineStart(),t.point(y[0][0],y[0][1],3)))}!g||e&&wk(e,p)||t.point(p[0],p[1]),e=p,u=g,n=m},lineEnd:function(){u&&t.lineEnd(),e=null},clean:function(){return c|(l&&u)<<1}}}),(function(e,r,i,o){!function(t,e,n,r,i,o){if(n){var a=Nb(e),s=Pb(e),u=r*n;null==i?(i=e+r*Fb,o=e-u/2):(i=xk(a,i),o=xk(a,o),(r>0?io)&&(i+=r*Fb));for(var l,c=i;r>0?c>o:c0)do{l.point(0===c||3===c?t:n,c>1?r:e)}while((c=(c+s+4)%4)!==f);else l.point(o[0],o[1])}function a(r,i){return Tb(r[0]-t)0?0:3:Tb(r[0]-n)0?2:1:Tb(r[1]-e)0?1:0:i>0?3:2}function s(t,e){return u(t.x,e.x)}function u(t,e){var n=a(t,1),r=a(e,1);return n!==r?n-r:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(a){var u,l,c,f,h,d,p,g,m,y,v,_=a,x=bk(),b={point:w,lineStart:function(){b.point=k,l&&l.push(c=[]);y=!0,m=!1,p=g=NaN},lineEnd:function(){u&&(k(f,h),d&&m&&x.rejoin(),u.push(x.result()));b.point=w,m&&_.lineEnd()},polygonStart:function(){_=x,u=[],l=[],v=!0},polygonEnd:function(){var e=function(){for(var e=0,n=0,i=l.length;nr&&(h-o)*(r-a)>(d-a)*(t-o)&&++e:d<=r&&(h-o)*(r-a)<(d-a)*(t-o)&&--e;return e}(),n=v&&e,i=(u=Se(u)).length;(n||i)&&(a.polygonStart(),n&&(a.lineStart(),o(null,null,1,a),a.lineEnd()),i&&Ak(u,s,e,o,a),a.polygonEnd());_=a,u=l=c=null}};function w(t,e){i(t,e)&&_.point(t,e)}function k(o,a){var s=i(o,a);if(l&&c.push([o,a]),y)f=o,h=a,d=s,y=!1,s&&(_.lineStart(),_.point(o,a));else if(s&&m)_.point(o,a);else{var u=[p=Math.max(Bk,Math.min(Tk,p)),g=Math.max(Bk,Math.min(Tk,g))],x=[o=Math.max(Bk,Math.min(Tk,o)),a=Math.max(Bk,Math.min(Tk,a))];!function(t,e,n,r,i,o){var a,s=t[0],u=t[1],l=0,c=1,f=e[0]-s,h=e[1]-u;if(a=n-s,f||!(a>0)){if(a/=f,f<0){if(a0){if(a>c)return;a>l&&(l=a)}if(a=i-s,f||!(a<0)){if(a/=f,f<0){if(a>c)return;a>l&&(l=a)}else if(f>0){if(a0)){if(a/=h,h<0){if(a0){if(a>c)return;a>l&&(l=a)}if(a=o-u,h||!(a<0)){if(a/=h,h<0){if(a>c)return;a>l&&(l=a)}else if(h>0){if(a0&&(t[0]=s+l*f,t[1]=u+l*h),c<1&&(e[0]=s+c*f,e[1]=u+c*h),!0}}}}}(u,x,t,e,n,r)?s&&(_.lineStart(),_.point(o,a),v=!1):(m||(_.lineStart(),_.point(u[0],u[1])),_.point(x[0],x[1]),s||_.lineEnd(),v=!1)}p=o,g=a,m=s}return b}}function Nk(t,e,n){var r=$e(t,e-Ab,n).concat(e);return function(t){return r.map((function(e){return[t,e]}))}}function Ok(t,e,n){var r=$e(t,e-Ab,n).concat(e);return function(t){return r.map((function(e){return[e,t]}))}}var Rk,Uk,Lk,qk,Pk=t=>t,jk=new ue,Ik=new ue,Hk={point:Gb,lineStart:Gb,lineEnd:Gb,polygonStart:function(){Hk.lineStart=Wk,Hk.lineEnd=Vk},polygonEnd:function(){Hk.lineStart=Hk.lineEnd=Hk.point=Gb,jk.add(Tb(Ik)),Ik=new ue},result:function(){var t=jk/2;return jk=new ue,t}};function Wk(){Hk.point=Yk}function Yk(t,e){Hk.point=Gk,Rk=Lk=t,Uk=qk=e}function Gk(t,e){Ik.add(qk*t-Lk*e),Lk=t,qk=e}function Vk(){Gk(Rk,Uk)}var Xk=Hk,Jk=1/0,Zk=Jk,Qk=-Jk,Kk=Qk,tA={point:function(t,e){tQk&&(Qk=t);eKk&&(Kk=e)},lineStart:Gb,lineEnd:Gb,polygonStart:Gb,polygonEnd:Gb,result:function(){var t=[[Jk,Zk],[Qk,Kk]];return Qk=Kk=-(Zk=Jk=1/0),t}};var eA,nA,rA,iA,oA=tA,aA=0,sA=0,uA=0,lA=0,cA=0,fA=0,hA=0,dA=0,pA=0,gA={point:mA,lineStart:yA,lineEnd:xA,polygonStart:function(){gA.lineStart=bA,gA.lineEnd=wA},polygonEnd:function(){gA.point=mA,gA.lineStart=yA,gA.lineEnd=xA},result:function(){var t=pA?[hA/pA,dA/pA]:fA?[lA/fA,cA/fA]:uA?[aA/uA,sA/uA]:[NaN,NaN];return aA=sA=uA=lA=cA=fA=hA=dA=pA=0,t}};function mA(t,e){aA+=t,sA+=e,++uA}function yA(){gA.point=vA}function vA(t,e){gA.point=_A,mA(rA=t,iA=e)}function _A(t,e){var n=t-rA,r=e-iA,i=Ib(n*n+r*r);lA+=i*(rA+t)/2,cA+=i*(iA+e)/2,fA+=i,mA(rA=t,iA=e)}function xA(){gA.point=mA}function bA(){gA.point=kA}function wA(){AA(eA,nA)}function kA(t,e){gA.point=AA,mA(eA=rA=t,nA=iA=e)}function AA(t,e){var n=t-rA,r=e-iA,i=Ib(n*n+r*r);lA+=i*(rA+t)/2,cA+=i*(iA+e)/2,fA+=i,hA+=(i=iA*t-rA*e)*(rA+t),dA+=i*(iA+e),pA+=3*i,mA(rA=t,iA=e)}var MA=gA;function EA(t){this._context=t}EA.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,Fb)}},result:Gb};var DA,CA,FA,SA,$A,TA=new ue,BA={point:Gb,lineStart:function(){BA.point=zA},lineEnd:function(){DA&&NA(CA,FA),BA.point=Gb},polygonStart:function(){DA=!0},polygonEnd:function(){DA=null},result:function(){var t=+TA;return TA=new ue,t}};function zA(t,e){BA.point=NA,CA=SA=t,FA=$A=e}function NA(t,e){SA-=t,$A-=e,TA.add(Ib(SA*SA+$A*$A)),SA=t,$A=e}var OA=BA;let RA,UA,LA,qA;class PA{constructor(t){this._append=null==t?jA:function(t){const e=Math.floor(t);if(!(e>=0))throw new RangeError(`invalid digits: ${t}`);if(e>15)return jA;if(e!==RA){const t=10**e;RA=e,UA=function(e){let n=1;this._+=e[0];for(const r=e.length;n=0))throw new RangeError(`invalid digits: ${t}`);i=e}return null===e&&(r=new PA(i)),a},a.projection(t).digits(i).context(e)}function HA(t){return function(e){var n=new WA;for(var r in t)n[r]=t[r];return n.stream=e,n}}function WA(){}function YA(t,e,n){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),Kb(n,t.stream(oA)),e(oA.result()),null!=r&&t.clipExtent(r),t}function GA(t,e,n){return YA(t,(function(n){var r=e[1][0]-e[0][0],i=e[1][1]-e[0][1],o=Math.min(r/(n[1][0]-n[0][0]),i/(n[1][1]-n[0][1])),a=+e[0][0]+(r-o*(n[1][0]+n[0][0]))/2,s=+e[0][1]+(i-o*(n[1][1]+n[0][1]))/2;t.scale(150*o).translate([a,s])}),n)}function VA(t,e,n){return GA(t,[[0,0],e],n)}function XA(t,e,n){return YA(t,(function(n){var r=+e,i=r/(n[1][0]-n[0][0]),o=(r-i*(n[1][0]+n[0][0]))/2,a=-i*n[0][1];t.scale(150*i).translate([o,a])}),n)}function JA(t,e,n){return YA(t,(function(n){var r=+e,i=r/(n[1][1]-n[0][1]),o=-i*n[0][0],a=(r-i*(n[1][1]+n[0][1]))/2;t.scale(150*i).translate([o,a])}),n)}WA.prototype={constructor:WA,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var ZA=16,QA=Nb(30*$b);function KA(t,e){return+e?function(t,e){function n(r,i,o,a,s,u,l,c,f,h,d,p,g,m){var y=l-r,v=c-i,_=y*y+v*v;if(_>4*e&&g--){var x=a+h,b=s+d,w=u+p,k=Ib(x*x+b*b+w*w),A=Yb(w/=k),M=Tb(Tb(w)-1)e||Tb((y*F+v*S)/_-.5)>.3||a*h+s*d+u*p2?t[2]%360*$b:0,F()):[m*Sb,y*Sb,v*Sb]},D.angle=function(t){return arguments.length?(_=t%360*$b,F()):_*Sb},D.reflectX=function(t){return arguments.length?(x=t?-1:1,F()):x<0},D.reflectY=function(t){return arguments.length?(b=t?-1:1,F()):b<0},D.precision=function(t){return arguments.length?(a=KA(s,E=t*t),S()):Ib(E)},D.fitExtent=function(t,e){return GA(D,t,e)},D.fitSize=function(t,e){return VA(D,t,e)},D.fitWidth=function(t,e){return XA(D,t,e)},D.fitHeight=function(t,e){return JA(D,t,e)},function(){return e=t.apply(this,arguments),D.invert=e.invert&&C,F()}}function iM(t){var e=0,n=Eb/3,r=rM(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*$b,n=t[1]*$b):[e*Sb,n*Sb]},i}function oM(t,e){var n=Pb(t),r=(n+Pb(e))/2;if(Tb(r)2?t[2]*$b:0),e.invert=function(e){return(e=t.invert(e[0]*$b,e[1]*$b))[0]*=Sb,e[1]*=Sb,e},e}(i.rotate()).invert([0,0]));return u(null==l?[[s[0]-o,s[1]-o],[s[0]+o,s[1]+o]]:t===hM?[[Math.max(s[0]-o,l),e],[Math.min(s[0]+o,n),r]]:[[l,Math.max(s[1]-o,e)],[n,Math.min(s[1]+o,r)]])}return i.scale=function(t){return arguments.length?(a(t),c()):a()},i.translate=function(t){return arguments.length?(s(t),c()):s()},i.center=function(t){return arguments.length?(o(t),c()):o()},i.clipExtent=function(t){return arguments.length?(null==t?l=e=n=r=null:(l=+t[0][0],e=+t[0][1],n=+t[1][0],r=+t[1][1]),c()):null==l?null:[[l,e],[n,r]]},c()}function pM(t){return Hb((Db+t)/2)}function gM(t,e){var n=Nb(t),r=t===e?Pb(t):Lb(n/Nb(e))/Lb(pM(e)/pM(t)),i=n*qb(pM(t),r)/r;if(!r)return hM;function o(t,e){i>0?e<-Db+Ab&&(e=-Db+Ab):e>Db-Ab&&(e=Db-Ab);var n=i/qb(pM(e),r);return[n*Pb(r*t),i-n*Nb(r*t)]}return o.invert=function(t,e){var n=i-e,o=jb(r)*Ib(t*t+n*n),a=zb(t,Tb(n))*jb(n);return n*r<0&&(a-=Eb*jb(t)*jb(n)),[a/r,2*Bb(qb(i/o,1/r))-Db]},o}function mM(t,e){return[t,e]}function yM(t,e){var n=Nb(t),r=t===e?Pb(t):(n-Nb(e))/(e-t),i=n/r+t;if(Tb(r)Ab&&--i>0);return[t/(.8707+(o=r*r)*(o*(o*o*o*(.003971-.001529*o)-.013791)-.131979)),r]},EM.invert=lM(Yb),DM.invert=lM((function(t){return 2*Bb(t)})),CM.invert=function(t,e){return[-e,2*Bb(Rb(t))-Db]};var FM=Math.abs,SM=Math.cos,$M=Math.sin,TM=1e-6,BM=Math.PI,zM=BM/2,NM=function(t){return t>0?Math.sqrt(t):0}(2);function OM(t){return t>1?zM:t<-1?-zM:Math.asin(t)}function RM(t,e){var n,r=t*$M(e),i=30;do{e-=n=(e+$M(e)-r)/(1+SM(e))}while(FM(n)>TM&&--i>0);return e/2}var UM=function(t,e,n){function r(r,i){return[t*r*SM(i=RM(n,i)),e*$M(i)]}return r.invert=function(r,i){return i=OM(i/e),[r/(t*SM(i)),OM((2*i+$M(2*i))/n)]},r}(NM/zM,NM,BM);const LM=IA(),qM=["clipAngle","clipExtent","scale","translate","center","rotate","parallels","precision","reflectX","reflectY","coefficient","distance","fraction","lobes","parallel","radius","ratio","spacing","tilt"];function PM(t,e){if(!t||"string"!=typeof t)throw new Error("Projection type must be a name string.");return t=t.toLowerCase(),arguments.length>1?(IM[t]=function(t,e){return function n(){const r=e();return r.type=t,r.path=IA().projection(r),r.copy=r.copy||function(){const t=n();return qM.forEach((e=>{r[e]&&t[e](r[e]())})),t.path.pointRadius(r.path.pointRadius()),t},Xd(r)}}(t,e),this):IM[t]||null}function jM(t){return t&&t.path||LM}const IM={albers:sM,albersusa:function(){var t,e,n,r,i,o,a=sM(),s=aM().rotate([154,0]).center([-2,58.5]).parallels([55,65]),u=aM().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(t,e){o=[t,e]}};function c(t){var e=t[0],a=t[1];return o=null,n.point(e,a),o||(r.point(e,a),o)||(i.point(e,a),o)}function f(){return t=e=null,c}return c.invert=function(t){var e=a.scale(),n=a.translate(),r=(t[0]-n[0])/e,i=(t[1]-n[1])/e;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?s:i>=.166&&i<.234&&r>=-.214&&r<-.115?u:a).invert(t)},c.stream=function(n){return t&&e===n?t:(r=[a.stream(e=n),s.stream(n),u.stream(n)],i=r.length,t={point:function(t,e){for(var n=-1;++n2?t[2]+90:90]):[(t=n())[0],t[1],t[2]-90]},n([0,0,90]).scale(159.155)}};for(const t in IM)PM(t,IM[t]);function HM(){}const WM=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]];function YM(){var t=1,e=1,n=a;function r(t,e){return e.map((e=>i(t,e)))}function i(r,i){var a=[],s=[];return function(n,r,i){var a,s,u,l,c,f,h=new Array,d=new Array;a=s=-1,l=n[0]>=r,WM[l<<1].forEach(p);for(;++a=r,WM[u|l<<1].forEach(p);WM[l<<0].forEach(p);for(;++s=r,c=n[s*t]>=r,WM[l<<1|c<<2].forEach(p);++a=r,f=c,c=n[s*t+a+1]>=r,WM[u|l<<1|c<<2|f<<3].forEach(p);WM[l|c<<3].forEach(p)}a=-1,c=n[s*t]>=r,WM[c<<2].forEach(p);for(;++a=r,WM[c<<2|f<<3].forEach(p);function p(t){var e,n,r=[t[0][0]+a,t[0][1]+s],u=[t[1][0]+a,t[1][1]+s],l=o(r),c=o(u);(e=d[l])?(n=h[c])?(delete d[e.end],delete h[n.start],e===n?(e.ring.push(u),i(e.ring)):h[e.start]=d[n.end]={start:e.start,end:n.end,ring:e.ring.concat(n.ring)}):(delete d[e.end],e.ring.push(u),d[e.end=c]=e):(e=h[c])?(n=d[l])?(delete h[e.start],delete d[n.end],e===n?(e.ring.push(u),i(e.ring)):h[n.start]=d[e.end]={start:n.start,end:e.end,ring:n.ring.concat(e.ring)}):(delete h[e.start],e.ring.unshift(r),h[e.start=l]=e):h[l]=d[c]={start:l,end:c,ring:[r,u]}}WM[c<<3].forEach(p)}(r,i,(t=>{n(t,r,i),function(t){var e=0,n=t.length,r=t[n-1][1]*t[0][0]-t[n-1][0]*t[0][1];for(;++e0?a.push([t]):s.push(t)})),s.forEach((t=>{for(var e,n=0,r=a.length;n{var o,a=n[0],s=n[1],u=0|a,l=0|s,c=r[l*t+u];a>0&&a0&&s=0&&o>=0||s("invalid size"),t=i,e=o,r},r.smooth=function(t){return arguments.length?(n=t?a:HM,r):n===a},r}function GM(t,e){for(var n,r=-1,i=e.length;++rr!=d>r&&n<(h-l)*(r-c)/(d-c)+l&&(i=-i)}return i}function XM(t,e,n){var r,i,o,a;return function(t,e,n){return(e[0]-t[0])*(n[1]-t[1])==(n[0]-t[0])*(e[1]-t[1])}(t,e,n)&&(i=t[r=+(t[0]===e[0])],o=n[r],a=e[r],i<=o&&o<=a||a<=o&&o<=i)}function JM(t,e,n){return function(r){var i=at(r),o=n?Math.min(i[0],0):i[0],a=i[1],s=a-o,u=e?we(o,a,t):s/(t+1);return $e(o+u,a,u)}}function ZM(t){Za.call(this,null,t)}function QM(t,e,n,r,i){const o=t.x1||0,a=t.y1||0,s=e*n<0;function u(t){t.forEach(l)}function l(t){s&&t.reverse(),t.forEach(c)}function c(t){t[0]=(t[0]-o)*e+r,t[1]=(t[1]-a)*n+i}return function(t){return t.coordinates.forEach(u),t}}function KM(t,e,n){const r=t>=0?t:is(e,n);return Math.round((Math.sqrt(4*r*r+1)-1)/2)}function tE(t){return J(t)?t:rt(+t)}function eE(){var t=t=>t[0],e=t=>t[1],n=d,r=[-1,-1],i=960,o=500,a=2;function u(s,u){const l=KM(r[0],s,t)>>a,c=KM(r[1],s,e)>>a,f=l?l+2:0,h=c?c+2:0,d=2*f+(i>>a),p=2*h+(o>>a),g=new Float32Array(d*p),m=new Float32Array(d*p);let y=g;s.forEach((r=>{const i=f+(+t(r)>>a),o=h+(+e(r)>>a);i>=0&&i=0&&o0&&c>0?(nE(d,p,g,m,l),rE(d,p,m,g,c),nE(d,p,g,m,l),rE(d,p,m,g,c),nE(d,p,g,m,l),rE(d,p,m,g,c)):l>0?(nE(d,p,g,m,l),nE(d,p,m,g,l),nE(d,p,g,m,l),y=m):c>0&&(rE(d,p,g,m,c),rE(d,p,m,g,c),rE(d,p,g,m,c),y=m);const v=u?Math.pow(2,-2*a):1/Te(y);for(let t=0,e=d*p;t>a),y2:h+(o>>a)}}return u.x=function(e){return arguments.length?(t=tE(e),u):t},u.y=function(t){return arguments.length?(e=tE(t),u):e},u.weight=function(t){return arguments.length?(n=tE(t),u):n},u.size=function(t){if(!arguments.length)return[i,o];var e=+t[0],n=+t[1];return e>=0&&n>=0||s("invalid size"),i=e,o=n,u},u.cellSize=function(t){return arguments.length?((t=+t)>=1||s("invalid cell size"),a=Math.floor(Math.log(t)/Math.LN2),u):1<=i&&(e>=o&&(s-=n[e-o+a*t]),r[e-i+a*t]=s/Math.min(e+1,t-1+o-e,o))}function rE(t,e,n,r,i){const o=1+(i<<1);for(let a=0;a=i&&(s>=o&&(u-=n[a+(s-o)*t]),r[a+(s-i)*t]=u/Math.min(s+1,e-1+o-s,o))}function iE(t){Za.call(this,null,t)}ZM.Definition={type:"Isocontour",metadata:{generates:!0},params:[{name:"field",type:"field"},{name:"thresholds",type:"number",array:!0},{name:"levels",type:"number"},{name:"nice",type:"boolean",default:!1},{name:"resolve",type:"enum",values:["shared","independent"],default:"independent"},{name:"zero",type:"boolean",default:!0},{name:"smooth",type:"boolean",default:!0},{name:"scale",type:"number",expr:!0},{name:"translate",type:"number",array:!0,expr:!0},{name:"as",type:"string",null:!0,default:"contour"}]},dt(ZM,Za,{transform(t,e){if(this.value&&!e.changed()&&!t.modified())return e.StopPropagation;var n=e.fork(e.NO_SOURCE|e.NO_FIELDS),r=e.materialize(e.SOURCE).source,i=t.field||f,o=YM().smooth(!1!==t.smooth),a=t.thresholds||function(t,e,n){const r=JM(n.levels||10,n.nice,!1!==n.zero);return"shared"!==n.resolve?r:r(t.map((t=>ke(e(t).values))))}(r,i,t),s=null===t.as?null:t.as||"contour",u=[];return r.forEach((e=>{const n=i(e),r=o.size([n.width,n.height])(n.values,k(a)?a:a(n.values));!function(t,e,n,r){let i=r.scale||e.scale,o=r.translate||e.translate;J(i)&&(i=i(n,r));J(o)&&(o=o(n,r));if((1===i||null==i)&&!o)return;const a=(vt(i)?i:i[0])||1,s=(vt(i)?i:i[1])||1,u=o&&o[0]||0,l=o&&o[1]||0;t.forEach(QM(e,a,s,u,l))}(r,n,e,t),r.forEach((t=>{u.push(wa(e,xa(null!=s?{[s]:t}:t)))}))})),this.value&&(n.rem=this.value),this.value=n.source=n.add=u,n}}),iE.Definition={type:"KDE2D",metadata:{generates:!0},params:[{name:"size",type:"number",array:!0,length:2,required:!0},{name:"x",type:"field",required:!0},{name:"y",type:"field",required:!0},{name:"weight",type:"field"},{name:"groupby",type:"field",array:!0},{name:"cellSize",type:"number"},{name:"bandwidth",type:"number",array:!0,length:2},{name:"counts",type:"boolean",default:!1},{name:"as",type:"string",default:"grid"}]};const oE=["x","y","weight","size","cellSize","bandwidth"];function aE(t,e){return oE.forEach((n=>null!=e[n]?t[n](e[n]):0)),t}function sE(t){Za.call(this,null,t)}dt(iE,Za,{transform(t,e){if(this.value&&!e.changed()&&!t.modified())return e.StopPropagation;var r,i=e.fork(e.NO_SOURCE|e.NO_FIELDS),o=function(t,e){var n,r,i,o,a,s,u=[],l=t=>t(o);if(null==e)u.push(t);else for(n={},r=0,i=t.length;rxa(function(t,e){for(let n=0;nAb})).map(u)).concat($e(Ob(o/d)*d,i,d).filter((function(t){return Tb(t%g)>Ab})).map(l))}return y.lines=function(){return v().map((function(t){return{type:"LineString",coordinates:t}}))},y.outline=function(){return{type:"Polygon",coordinates:[c(r).concat(f(a).slice(1),c(n).reverse().slice(1),f(s).reverse().slice(1))]}},y.extent=function(t){return arguments.length?y.extentMajor(t).extentMinor(t):y.extentMinor()},y.extentMajor=function(t){return arguments.length?(r=+t[0][0],n=+t[1][0],s=+t[0][1],a=+t[1][1],r>n&&(t=r,r=n,n=t),s>a&&(t=s,s=a,a=t),y.precision(m)):[[r,s],[n,a]]},y.extentMinor=function(n){return arguments.length?(e=+n[0][0],t=+n[1][0],o=+n[0][1],i=+n[1][1],e>t&&(n=e,e=t,t=n),o>i&&(n=o,o=i,i=n),y.precision(m)):[[e,o],[t,i]]},y.step=function(t){return arguments.length?y.stepMajor(t).stepMinor(t):y.stepMinor()},y.stepMajor=function(t){return arguments.length?(p=+t[0],g=+t[1],y):[p,g]},y.stepMinor=function(t){return arguments.length?(h=+t[0],d=+t[1],y):[h,d]},y.precision=function(h){return arguments.length?(m=+h,u=Nk(o,i,90),l=Ok(e,t,m),c=Nk(s,a,90),f=Ok(r,n,m),y):m},y.extentMajor([[-180,-90+Ab],[180,90-Ab]]).extentMinor([[-180,-80-Ab],[180,80+Ab]])}()}function gE(t){Za.call(this,null,t)}function mE(t){if(!J(t))return!1;const e=Bt(r(t));return e.$x||e.$y||e.$value||e.$max}function yE(t){Za.call(this,null,t),this.modified(!0)}function vE(t,e,n){J(t[e])&&t[e](n)}cE.Definition={type:"GeoJSON",metadata:{},params:[{name:"fields",type:"field",array:!0,length:2},{name:"geojson",type:"field"}]},dt(cE,Za,{transform(t,e){var n,i=this._features,o=this._points,a=t.fields,s=a&&a[0],u=a&&a[1],l=t.geojson||!a&&f,c=e.ADD;n=t.modified()||e.changed(e.REM)||e.modified(r(l))||s&&e.modified(r(s))||u&&e.modified(r(u)),this.value&&!n||(c=e.SOURCE,this._features=i=[],this._points=o=[]),l&&e.visit(c,(t=>i.push(l(t)))),s&&u&&(e.visit(c,(t=>{var e=s(t),n=u(t);null!=e&&null!=n&&(e=+e)===e&&(n=+n)===n&&o.push([e,n])})),i=i.concat({type:uE,geometry:{type:"MultiPoint",coordinates:o}})),this.value={type:lE,features:i}}}),fE.Definition={type:"GeoPath",metadata:{modifies:!0},params:[{name:"projection",type:"projection"},{name:"field",type:"field"},{name:"pointRadius",type:"number",expr:!0},{name:"as",type:"string",default:"path"}]},dt(fE,Za,{transform(t,e){var n=e.fork(e.ALL),r=this.value,i=t.field||f,o=t.as||"path",a=n.SOURCE;!r||t.modified()?(this.value=r=jM(t.projection),n.materialize().reflow()):a=i===f||e.modified(i.fields)?n.ADD_MOD:n.ADD;const s=function(t,e){const n=t.pointRadius();t.context(null),null!=e&&t.pointRadius(e);return n}(r,t.pointRadius);return n.visit(a,(t=>t[o]=r(i(t)))),r.pointRadius(s),n.modifies(o)}}),hE.Definition={type:"GeoPoint",metadata:{modifies:!0},params:[{name:"projection",type:"projection",required:!0},{name:"fields",type:"field",array:!0,required:!0,length:2},{name:"as",type:"string",array:!0,length:2,default:["x","y"]}]},dt(hE,Za,{transform(t,e){var n,r=t.projection,i=t.fields[0],o=t.fields[1],a=t.as||["x","y"],s=a[0],u=a[1];function l(t){const e=r([i(t),o(t)]);e?(t[s]=e[0],t[u]=e[1]):(t[s]=void 0,t[u]=void 0)}return t.modified()?e=e.materialize().reflow(!0).visit(e.SOURCE,l):(n=e.modified(i.fields)||e.modified(o.fields),e.visit(n?e.ADD_MOD:e.ADD,l)),e.modifies(a)}}),dE.Definition={type:"GeoShape",metadata:{modifies:!0,nomod:!0},params:[{name:"projection",type:"projection"},{name:"field",type:"field",default:"datum"},{name:"pointRadius",type:"number",expr:!0},{name:"as",type:"string",default:"shape"}]},dt(dE,Za,{transform(t,e){var n=e.fork(e.ALL),r=this.value,i=t.as||"shape",o=n.ADD;return r&&!t.modified()||(this.value=r=function(t,e,n){const r=null==n?n=>t(e(n)):r=>{var i=t.pointRadius(),o=t.pointRadius(n)(e(r));return t.pointRadius(i),o};return r.context=e=>(t.context(e),r),r}(jM(t.projection),t.field||l("datum"),t.pointRadius),n.materialize().reflow(),o=n.SOURCE),n.visit(o,(t=>t[i]=r)),n.modifies(i)}}),pE.Definition={type:"Graticule",metadata:{changes:!0,generates:!0},params:[{name:"extent",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"extentMajor",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"extentMinor",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"step",type:"number",array:!0,length:2},{name:"stepMajor",type:"number",array:!0,length:2,default:[90,360]},{name:"stepMinor",type:"number",array:!0,length:2,default:[10,10]},{name:"precision",type:"number",default:2.5}]},dt(pE,Za,{transform(t,e){var n,r=this.value,i=this.generator;if(!r.length||t.modified())for(const e in t)J(i[e])&&i[e](t[e]);return n=i(),r.length?e.mod.push(ka(r[0],n)):e.add.push(xa(n)),r[0]=n,e}}),gE.Definition={type:"heatmap",metadata:{modifies:!0},params:[{name:"field",type:"field"},{name:"color",type:"string",expr:!0},{name:"opacity",type:"number",expr:!0},{name:"resolve",type:"enum",values:["shared","independent"],default:"independent"},{name:"as",type:"string",default:"image"}]},dt(gE,Za,{transform(t,e){if(!e.changed()&&!t.modified())return e.StopPropagation;var n=e.materialize(e.SOURCE).source,r="shared"===t.resolve,i=t.field||f,o=function(t,e){let n;J(t)?(n=n=>t(n,e),n.dep=mE(t)):t?n=rt(t):(n=t=>t.$value/t.$max||0,n.dep=!0);return n}(t.opacity,t),a=function(t,e){let n;J(t)?(n=n=>sf(t(n,e)),n.dep=mE(t)):n=rt(sf(t||"#888"));return n}(t.color,t),s=t.as||"image",u={$x:0,$y:0,$value:0,$max:r?ke(n.map((t=>ke(i(t).values)))):0};return n.forEach((t=>{const e=i(t),n=ot({},t,u);r||(n.$max=ke(e.values||[])),t[s]=function(t,e,n,r){const i=t.width,o=t.height,a=t.x1||0,s=t.y1||0,u=t.x2||i,l=t.y2||o,c=t.values,f=c?t=>c[t]:h,d=Tc(u-a,l-s),p=d.getContext("2d"),g=p.getImageData(0,0,u-a,l-s),m=g.data;for(let t=s,o=0;t{null!=t[e]&&vE(n,e,t[e])}))):qM.forEach((e=>{t.modified(e)&&vE(n,e,t[e])})),null!=t.pointRadius&&n.path.pointRadius(t.pointRadius),t.fit&&function(t,e){const n=function(t){return t=V(t),1===t.length?t[0]:{type:lE,features:t.reduce(((t,e)=>t.concat(function(t){return t.type===lE?t.features:V(t).filter((t=>null!=t)).map((t=>t.type===uE?t:{type:uE,geometry:t}))}(e))),[])}}(e.fit);e.extent?t.fitExtent(e.extent,n):e.size&&t.fitSize(e.size,n)}(n,t),e.fork(e.NO_SOURCE|e.NO_FIELDS)}});var _E=Object.freeze({__proto__:null,contour:sE,geojson:cE,geopath:fE,geopoint:hE,geoshape:dE,graticule:pE,heatmap:gE,isocontour:ZM,kde2d:iE,projection:yE});function xE(t,e,n,r){if(isNaN(e)||isNaN(n))return t;var i,o,a,s,u,l,c,f,h,d=t._root,p={data:r},g=t._x0,m=t._y0,y=t._x1,v=t._y1;if(!d)return t._root=p,t;for(;d.length;)if((l=e>=(o=(g+y)/2))?g=o:y=o,(c=n>=(a=(m+v)/2))?m=a:v=a,i=d,!(d=d[f=c<<1|l]))return i[f]=p,t;if(s=+t._x.call(null,d.data),u=+t._y.call(null,d.data),e===s&&n===u)return p.next=d,i?i[f]=p:t._root=p,t;do{i=i?i[f]=new Array(4):t._root=new Array(4),(l=e>=(o=(g+y)/2))?g=o:y=o,(c=n>=(a=(m+v)/2))?m=a:v=a}while((f=c<<1|l)==(h=(u>=a)<<1|s>=o));return i[h]=d,i[f]=p,t}function bE(t,e,n,r,i){this.node=t,this.x0=e,this.y0=n,this.x1=r,this.y1=i}function wE(t){return t[0]}function kE(t){return t[1]}function AE(t,e,n){var r=new ME(null==e?wE:e,null==n?kE:n,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function ME(t,e,n,r,i,o){this._x=t,this._y=e,this._x0=n,this._y0=r,this._x1=i,this._y1=o,this._root=void 0}function EE(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var DE=AE.prototype=ME.prototype;function CE(t){return function(){return t}}function FE(t){return 1e-6*(t()-.5)}function SE(t){return t.x+t.vx}function $E(t){return t.y+t.vy}function TE(t){return t.index}function BE(t,e){var n=t.get(e);if(!n)throw new Error("node not found: "+e);return n}DE.copy=function(){var t,e,n=new ME(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return n;if(!r.length)return n._root=EE(r),n;for(t=[{source:r,target:n._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(e=r.source[i])&&(e.length?t.push({source:e,target:r.target[i]=new Array(4)}):r.target[i]=EE(e));return n},DE.add=function(t){const e=+this._x.call(null,t),n=+this._y.call(null,t);return xE(this.cover(e,n),e,n,t)},DE.addAll=function(t){var e,n,r,i,o=t.length,a=new Array(o),s=new Array(o),u=1/0,l=1/0,c=-1/0,f=-1/0;for(n=0;nc&&(c=r),if&&(f=i));if(u>c||l>f)return this;for(this.cover(u,l).cover(c,f),n=0;nt||t>=i||r>e||e>=o;)switch(s=(eh||(o=u.y0)>d||(a=u.x1)=y)<<1|t>=m)&&(u=p[p.length-1],p[p.length-1]=p[p.length-1-l],p[p.length-1-l]=u)}else{var v=t-+this._x.call(null,g.data),_=e-+this._y.call(null,g.data),x=v*v+_*_;if(x=(s=(p+m)/2))?p=s:m=s,(c=a>=(u=(g+y)/2))?g=u:y=u,e=d,!(d=d[f=c<<1|l]))return this;if(!d.length)break;(e[f+1&3]||e[f+2&3]||e[f+3&3])&&(n=e,h=f)}for(;d.data!==t;)if(r=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,r?(i?r.next=i:delete r.next,this):e?(i?e[f]=i:delete e[f],(d=e[0]||e[1]||e[2]||e[3])&&d===(e[3]||e[2]||e[1]||e[0])&&!d.length&&(n?n[h]=d:this._root=d),this):(this._root=i,this)},DE.removeAll=function(t){for(var e=0,n=t.length;e{}};function NE(){for(var t,e=0,n=arguments.length,r={};e=0&&(e=t.slice(n+1),t=t.slice(0,n)),t&&!r.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}}))),a=-1,s=o.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++a0)for(var n,r,i=new Array(n),o=0;o=0&&e._call.call(void 0,t),e=e._next;--PE}()}finally{PE=0,function(){var t,e,n=LE,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:LE=e);qE=t,nD(r)}(),YE=0}}function eD(){var t=VE.now(),e=t-WE;e>HE&&(GE-=e,WE=t)}function nD(t){PE||(jE&&(jE=clearTimeout(jE)),t-YE>24?(t<1/0&&(jE=setTimeout(tD,t-VE.now()-GE)),IE&&(IE=clearInterval(IE))):(IE||(WE=VE.now(),IE=setInterval(eD,HE)),PE=1,XE(tD)))}QE.prototype=KE.prototype={constructor:QE,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?JE():+n)+(null==e?0:+e),this._next||qE===this||(qE?qE._next=this:LE=this,qE=this),this._call=t,this._time=n,nD()},stop:function(){this._call&&(this._call=null,this._time=1/0,nD())}};const rD=1664525,iD=1013904223,oD=4294967296;function aD(t){return t.x}function sD(t){return t.y}var uD=10,lD=Math.PI*(3-Math.sqrt(5));function cD(t){var e,n=1,r=.001,i=1-Math.pow(r,1/300),o=0,a=.6,s=new Map,u=KE(f),l=NE("tick","end"),c=function(){let t=1;return()=>(t=(rD*t+iD)%oD)/oD}();function f(){h(),l.call("tick",e),n1?(null==n?s.delete(t):s.set(t,p(n)),e):s.get(t)},find:function(e,n,r){var i,o,a,s,u,l=0,c=t.length;for(null==r?r=1/0:r*=r,l=0;l1?(l.on(t,n),e):l.on(t)}}}const fD={center:function(t,e){var n,r=1;function i(){var i,o,a=n.length,s=0,u=0;for(i=0;il+p||oc+p||au.index){var g=l-s.x-s.vx,m=c-s.y-s.vy,y=g*g+m*m;yt.r&&(t.r=t[e].r)}function u(){if(e){var r,i,o=e.length;for(n=new Array(o),r=0;r=s)){(t.data!==e||t.next)&&(0===f&&(p+=(f=FE(n))*f),0===h&&(p+=(h=FE(n))*h),p[s(t,e,r),t])));for(a=0,i=new Array(l);ae(t,n):e)}mD.Definition={type:"Force",metadata:{modifies:!0},params:[{name:"static",type:"boolean",default:!1},{name:"restart",type:"boolean",default:!1},{name:"iterations",type:"number",default:300},{name:"alpha",type:"number",default:1},{name:"alphaMin",type:"number",default:.001},{name:"alphaTarget",type:"number",default:0},{name:"velocityDecay",type:"number",default:.4},{name:"forces",type:"param",array:!0,params:[{key:{force:"center"},params:[{name:"x",type:"number",default:0},{name:"y",type:"number",default:0}]},{key:{force:"collide"},params:[{name:"radius",type:"number",expr:!0},{name:"strength",type:"number",default:.7},{name:"iterations",type:"number",default:1}]},{key:{force:"nbody"},params:[{name:"strength",type:"number",default:-30,expr:!0},{name:"theta",type:"number",default:.9},{name:"distanceMin",type:"number",default:1},{name:"distanceMax",type:"number"}]},{key:{force:"link"},params:[{name:"links",type:"data"},{name:"id",type:"field"},{name:"distance",type:"number",default:30,expr:!0},{name:"strength",type:"number",expr:!0},{name:"iterations",type:"number",default:1}]},{key:{force:"x"},params:[{name:"strength",type:"number",default:.1},{name:"x",type:"field"}]},{key:{force:"y"},params:[{name:"strength",type:"number",default:.1},{name:"y",type:"field"}]}]},{name:"as",type:"string",array:!0,modify:!1,default:gD}]},dt(mD,Za,{transform(t,e){var n,r,i=this.value,o=e.changed(e.ADD_REM),a=t.modified(dD),s=t.iterations||300;if(i?(o&&(e.modifies("index"),i.nodes(e.source)),(a||e.changed(e.MOD))&&yD(i,t,0,e)):(this.value=i=function(t,e){const n=cD(t),r=n.stop,i=n.restart;let o=!1;return n.stopped=()=>o,n.restart=()=>(o=!1,i()),n.stop=()=>(o=!0,r()),yD(n,e,!0).on("end",(()=>o=!0))}(e.source,t),i.on("tick",(n=e.dataflow,r=this,()=>n.touch(r).run())),t.static||(o=!0,i.tick()),e.modifies("index")),a||o||t.modified(pD)||e.changed()&&t.restart)if(i.alpha(Math.max(i.alpha(),t.alpha||1)).alphaDecay(1-Math.pow(i.alphaMin(),1/s)),t.static)for(i.stop();--s>=0;)i.tick();else if(i.stopped()&&i.restart(),!o)return e.StopPropagation;return this.finish(t,e)},finish(t,e){const n=e.dataflow;for(let t,e=this._argops,s=0,u=e.length;s=0;)e+=n[r].value;else e=1;t.value=e}function ED(t,e){t instanceof Map?(t=[void 0,t],void 0===e&&(e=CD)):void 0===e&&(e=DD);for(var n,r,i,o,a,s=new $D(t),u=[s];n=u.pop();)if((i=e(n.data))&&(a=(i=Array.from(i)).length))for(n.children=i,o=a-1;o>=0;--o)u.push(r=i[o]=new $D(i[o])),r.parent=n,r.depth=n.depth+1;return s.eachBefore(SD)}function DD(t){return t.children}function CD(t){return Array.isArray(t)?t[1]:null}function FD(t){void 0!==t.data.value&&(t.value=t.data.value),t.data=t.data.data}function SD(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function $D(t){this.data=t,this.depth=this.height=0,this.parent=null}function TD(t){return null==t?null:BD(t)}function BD(t){if("function"!=typeof t)throw new Error;return t}function zD(){return 0}function ND(t){return function(){return t}}$D.prototype=ED.prototype={constructor:$D,count:function(){return this.eachAfter(MD)},each:function(t,e){let n=-1;for(const r of this)t.call(e,r,++n,this);return this},eachAfter:function(t,e){for(var n,r,i,o=this,a=[o],s=[],u=-1;o=a.pop();)if(s.push(o),n=o.children)for(r=0,i=n.length;r=0;--r)o.push(n[r]);return this},find:function(t,e){let n=-1;for(const r of this)if(t.call(e,r,++n,this))return r},sum:function(t){return this.eachAfter((function(e){for(var n=+t(e.data)||0,r=e.children,i=r&&r.length;--i>=0;)n+=r[i].value;e.value=n}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),i=null;t=n.pop(),e=r.pop();for(;t===e;)i=t,t=n.pop(),e=r.pop();return i}(e,t),r=[e];e!==n;)e=e.parent,r.push(e);for(var i=r.length;t!==n;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){return Array.from(this)},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(n){n!==t&&e.push({source:n.parent,target:n})})),e},copy:function(){return ED(this).eachBefore(FD)},[Symbol.iterator]:function*(){var t,e,n,r,i=this,o=[i];do{for(t=o.reverse(),o=[];i=t.pop();)if(yield i,e=i.children)for(n=0,r=e.length;n0&&n*n>r*r+i*i}function jD(t,e){for(var n=0;n1e-6?(D+Math.sqrt(D*D-4*E*C))/(2*E):C/D);return{x:r+w+k*F,y:i+A+M*F,r:F}}function YD(t,e,n){var r,i,o,a,s=t.x-e.x,u=t.y-e.y,l=s*s+u*u;l?(i=e.r+n.r,i*=i,a=t.r+n.r,i>(a*=a)?(r=(l+a-i)/(2*l),o=Math.sqrt(Math.max(0,a/l-r*r)),n.x=t.x-r*s-o*u,n.y=t.y-r*u+o*s):(r=(l+i-a)/(2*l),o=Math.sqrt(Math.max(0,i/l-r*r)),n.x=e.x+r*s-o*u,n.y=e.y+r*u+o*s)):(n.x=e.x+n.r,n.y=e.y)}function GD(t,e){var n=t.r+e.r-1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function VD(t){var e=t._,n=t.next._,r=e.r+n.r,i=(e.x*n.r+n.x*e.r)/r,o=(e.y*n.r+n.y*e.r)/r;return i*i+o*o}function XD(t){this._=t,this.next=null,this.previous=null}function JD(t,e){if(!(o=(t=function(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}(t)).length))return 0;var n,r,i,o,a,s,u,l,c,f,h;if((n=t[0]).x=0,n.y=0,!(o>1))return n.r;if(r=t[1],n.x=-r.r,r.x=n.r,r.y=0,!(o>2))return n.r+r.r;YD(r,n,i=t[2]),n=new XD(n),r=new XD(r),i=new XD(i),n.next=i.previous=r,r.next=n.previous=i,i.next=r.previous=n;t:for(u=3;ufunction(t){t=`${t}`;let e=t.length;cC(t,e-1)&&!cC(t,e-2)&&(t=t.slice(0,-1));return"/"===t[0]?t:`/${t}`}(t(e,n,r)))),n=e.map(lC),i=new Set(e).add("");for(const t of n)i.has(t)||(i.add(t),e.push(t),n.push(lC(t)),h.push(oC));d=(t,n)=>e[n],p=(t,e)=>n[e]}for(a=0,i=h.length;a=0&&(l=h[t]).data===oC;--t)l.data=null}if(s.parent=rC,s.eachBefore((function(t){t.depth=t.parent.depth+1,--i})).eachBefore(SD),s.parent=null,i>0)throw new Error("cycle");return s}return r.id=function(t){return arguments.length?(e=TD(t),r):e},r.parentId=function(t){return arguments.length?(n=TD(t),r):n},r.path=function(e){return arguments.length?(t=TD(e),r):t},r}function lC(t){let e=t.length;if(e<2)return"";for(;--e>1&&!cC(t,e););return t.slice(0,e)}function cC(t,e){if("/"===t[e]){let n=0;for(;e>0&&"\\"===t[--e];)++n;if(0==(1&n))return!0}return!1}function fC(t,e){return t.parent===e.parent?1:2}function hC(t){var e=t.children;return e?e[0]:t.t}function dC(t){var e=t.children;return e?e[e.length-1]:t.t}function pC(t,e,n){var r=n/(e.i-t.i);e.c-=r,e.s+=n,t.c+=r,e.z+=n,e.m+=n}function gC(t,e,n){return t.a.parent===e.parent?t.a:n}function mC(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}function yC(t,e,n,r,i){for(var o,a=t.children,s=-1,u=a.length,l=t.value&&(i-n)/t.value;++sh&&(h=s),m=c*c*g,(d=Math.max(h/m,m/f))>p){c-=s;break}p=d}y.push(a={value:c,dice:u1?e:1)},n}(vC);var bC=function t(e){function n(t,n,r,i,o){if((a=t._squarify)&&a.ratio===e)for(var a,s,u,l,c,f=-1,h=a.length,d=t.value;++f1?e:1)},n}(vC);function wC(t,e,n){const r={};return t.each((t=>{const i=t.data;n(i)&&(r[e(i)]=t)})),t.lookup=r,t}function kC(t){Za.call(this,null,t)}kC.Definition={type:"Nest",metadata:{treesource:!0,changes:!0},params:[{name:"keys",type:"field",array:!0},{name:"generate",type:"boolean"}]};const AC=t=>t.values;function MC(){const t=[],e={entries:t=>r(n(t,0),0),key:n=>(t.push(n),e)};function n(e,r){if(r>=t.length)return e;const i=e.length,o=t[r++],a={},s={};let u,l,c,f=-1;for(;++ft.length)return e;const i=[];for(const t in e)i.push({key:t,values:r(e[t],n)});return i}return e}function EC(t){Za.call(this,null,t)}dt(kC,Za,{transform(t,e){e.source||s("Nest transform requires an upstream data source.");var n=t.generate,r=t.modified(),i=e.clone(),o=this.value;return(!o||r||e.changed())&&(o&&o.each((t=>{t.children&&ya(t.data)&&i.rem.push(t.data)})),this.value=o=ED({values:V(t.keys).reduce(((t,e)=>(t.key(e),t)),MC()).entries(i.source)},AC),n&&o.each((t=>{t.children&&(t=xa(t.data),i.add.push(t),i.source.push(t))})),wC(o,va,va)),i.source.root=o,i}});const DC=(t,e)=>t.parent===e.parent?1:2;dt(EC,Za,{transform(t,e){e.source&&e.source.root||s(this.constructor.name+" transform requires a backing tree data source.");const n=this.layout(t.method),r=this.fields,i=e.source.root,o=t.as||r;t.field?i.sum(t.field):i.count(),t.sort&&i.sort(Aa(t.sort,(t=>t.data))),function(t,e,n){for(let r,i=0,o=e.length;ifunction(t,e,n){const r=t.data,i=e.length-1;for(let o=0;o(t=(OD*t+RD)%UD)/UD}();return i.x=e/2,i.y=n/2,t?i.eachBefore(QD(t)).eachAfter(KD(r,.5,o)).eachBefore(tC(1)):i.eachBefore(QD(ZD)).eachAfter(KD(zD,1,o)).eachAfter(KD(r,i.r/Math.min(e,n),o)).eachBefore(tC(Math.min(e,n)/(2*i.r))),i}return i.radius=function(e){return arguments.length?(t=TD(e),i):t},i.size=function(t){return arguments.length?(e=+t[0],n=+t[1],i):[e,n]},i.padding=function(t){return arguments.length?(r="function"==typeof t?t:ND(+t),i):r},i},params:["radius","size","padding"],fields:CC});const SC=["x0","y0","x1","y1","depth","children"];function $C(t){EC.call(this,t)}function TC(t){Za.call(this,null,t)}$C.Definition={type:"Partition",metadata:{tree:!0,modifies:!0},params:[{name:"field",type:"field"},{name:"sort",type:"compare"},{name:"padding",type:"number",default:0},{name:"round",type:"boolean",default:!1},{name:"size",type:"number",array:!0,length:2},{name:"as",type:"string",array:!0,length:SC.length,default:SC}]},dt($C,EC,{layout:function(){var t=1,e=1,n=0,r=!1;function i(i){var o=i.height+1;return i.x0=i.y0=n,i.x1=t,i.y1=e/o,i.eachBefore(function(t,e){return function(r){r.children&&nC(r,r.x0,t*(r.depth+1)/e,r.x1,t*(r.depth+2)/e);var i=r.x0,o=r.y0,a=r.x1-n,s=r.y1-n;a=0;--i)s.push(n=e.children[i]=new mC(r[i],i)),n.parent=e;return(a.parent=new mC(null,0)).children=[a],a}(i);if(u.eachAfter(o),u.parent.m=-u.z,u.eachBefore(a),r)i.eachBefore(s);else{var l=i,c=i,f=i;i.eachBefore((function(t){t.xc.x&&(c=t),t.depth>f.depth&&(f=t)}));var h=l===c?1:t(l,c)/2,d=h-l.x,p=e/(c.x+h+d),g=n/(f.depth||1);i.eachBefore((function(t){t.x=(t.x+d)*p,t.y=t.depth*g}))}return i}function o(e){var n=e.children,r=e.parent.children,i=e.i?r[e.i-1]:null;if(n){!function(t){for(var e,n=0,r=0,i=t.children,o=i.length;--o>=0;)(e=i[o]).z+=n,e.m+=n,n+=e.s+(r+=e.c)}(e);var o=(n[0].z+n[n.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-o):e.z=o}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,n,r){if(n){for(var i,o=e,a=e,s=n,u=o.parent.children[0],l=o.m,c=a.m,f=s.m,h=u.m;s=dC(s),o=hC(o),s&&o;)u=hC(u),(a=dC(a)).a=e,(i=s.z+f-o.z-l+t(s._,o._))>0&&(pC(gC(s,e,r),e,i),l+=i,c+=i),f+=s.m,l+=o.m,h+=u.m,c+=a.m;s&&!dC(a)&&(a.t=s,a.m+=f-c),o&&!hC(u)&&(u.t=o,u.m+=l-h,r=e)}return r}(e,i,e.parent.A||r[0])}function a(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e,t.y=t.depth*n}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i},cluster:function(){var t=wD,e=1,n=1,r=!1;function i(i){var o,a=0;i.eachAfter((function(e){var n=e.children;n?(e.x=function(t){return t.reduce(kD,0)/t.length}(n),e.y=function(t){return 1+t.reduce(AD,0)}(n)):(e.x=o?a+=t(e,o):0,e.y=0,o=e)}));var s=function(t){for(var e;e=t.children;)t=e[0];return t}(i),u=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(i),l=s.x-t(s,u)/2,c=u.x+t(u,s)/2;return i.eachAfter(r?function(t){t.x=(t.x-i.x)*e,t.y=(i.y-t.y)*n}:function(t){t.x=(t.x-l)/(c-l)*e,t.y=(1-(i.y?t.y/i.y:1))*n})}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i}},zC=["x","y","depth","children"];function NC(t){EC.call(this,t)}function OC(t){Za.call(this,[],t)}NC.Definition={type:"Tree",metadata:{tree:!0,modifies:!0},params:[{name:"field",type:"field"},{name:"sort",type:"compare"},{name:"method",type:"enum",default:"tidy",values:["tidy","cluster"]},{name:"size",type:"number",array:!0,length:2},{name:"nodeSize",type:"number",array:!0,length:2},{name:"separation",type:"boolean",default:!0},{name:"as",type:"string",array:!0,length:zC.length,default:zC}]},dt(NC,EC,{layout(t){const e=t||"tidy";if(lt(BC,e))return BC[e]();s("Unrecognized Tree layout method: "+e)},params:["size","nodeSize"],fields:zC}),OC.Definition={type:"TreeLinks",metadata:{tree:!0,generates:!0,changes:!0},params:[]},dt(OC,Za,{transform(t,e){const n=this.value,r=e.source&&e.source.root,i=e.fork(e.NO_SOURCE),o={};return r||s("TreeLinks transform requires a tree data source."),e.changed(e.ADD_REM)?(i.rem=n,e.visit(e.SOURCE,(t=>o[va(t)]=1)),r.each((t=>{const e=t.data,n=t.parent&&t.parent.data;n&&o[va(e)]&&o[va(n)]&&i.add.push(xa({source:n,target:e}))})),this.value=i.add):e.changed(e.MOD)&&(e.visit(e.MOD,(t=>o[va(t)]=1)),n.forEach((t=>{(o[va(t.source)]||o[va(t.target)])&&i.mod.push(t)}))),i}});const RC={binary:function(t,e,n,r,i){var o,a,s=t.children,u=s.length,l=new Array(u+1);for(l[0]=a=o=0;o=n-1){var c=s[e];return c.x0=i,c.y0=o,c.x1=a,void(c.y1=u)}var f=l[e],h=r/2+f,d=e+1,p=n-1;for(;d>>1;l[g]u-o){var v=r?(i*y+a*m)/r:a;t(e,d,m,i,o,v,u),t(d,n,y,v,o,a,u)}else{var _=r?(o*y+u*m)/r:u;t(e,d,m,i,o,a,_),t(d,n,y,i,_,a,u)}}(0,u,t.value,e,n,r,i)},dice:nC,slice:yC,slicedice:function(t,e,n,r,i){(1&t.depth?yC:nC)(t,e,n,r,i)},squarify:xC,resquarify:bC},UC=["x0","y0","x1","y1","depth","children"];function LC(t){EC.call(this,t)}LC.Definition={type:"Treemap",metadata:{tree:!0,modifies:!0},params:[{name:"field",type:"field"},{name:"sort",type:"compare"},{name:"method",type:"enum",default:"squarify",values:["squarify","resquarify","binary","dice","slice","slicedice"]},{name:"padding",type:"number",default:0},{name:"paddingInner",type:"number",default:0},{name:"paddingOuter",type:"number",default:0},{name:"paddingTop",type:"number",default:0},{name:"paddingRight",type:"number",default:0},{name:"paddingBottom",type:"number",default:0},{name:"paddingLeft",type:"number",default:0},{name:"ratio",type:"number",default:1.618033988749895},{name:"round",type:"boolean",default:!1},{name:"size",type:"number",array:!0,length:2},{name:"as",type:"string",array:!0,length:UC.length,default:UC}]},dt(LC,EC,{layout(){const t=function(){var t=xC,e=!1,n=1,r=1,i=[0],o=zD,a=zD,s=zD,u=zD,l=zD;function c(t){return t.x0=t.y0=0,t.x1=n,t.y1=r,t.eachBefore(f),i=[0],e&&t.eachBefore(eC),t}function f(e){var n=i[e.depth],r=e.x0+n,c=e.y0+n,f=e.x1-n,h=e.y1-n;f{const n=t.tile();n.ratio&&t.tile(n.ratio(e))},t.method=e=>{lt(RC,e)?t.tile(RC[e]):s("Unrecognized Treemap layout method: "+e)},t},params:["method","ratio","size","round","padding","paddingInner","paddingOuter","paddingTop","paddingRight","paddingBottom","paddingLeft"],fields:UC});var qC=Object.freeze({__proto__:null,nest:kC,pack:FC,partition:$C,stratify:TC,tree:NC,treelinks:OC,treemap:LC});const PC=4278190080;function jC(t,e,n){return new Uint32Array(t.getImageData(0,0,e,n).data.buffer)}function IC(t,e,n){if(!e.length)return;const r=e[0].mark.marktype;"group"===r?e.forEach((e=>{e.items.forEach((e=>IC(t,e.items,n)))})):Ny[r].draw(t,{items:n?e.map(HC):e})}function HC(t){const e=wa(t,{});return e.stroke&&0!==e.strokeOpacity||e.fill&&0!==e.fillOpacity?{...e,strokeOpacity:1,stroke:"#000",fillOpacity:0}:e}const WC=5,YC=31,GC=32,VC=new Uint32Array(GC+1),XC=new Uint32Array(GC+1);XC[0]=0,VC[0]=~XC[0];for(let t=1;t<=GC;++t)XC[t]=XC[t-1]<<1|1,VC[t]=~XC[t];function JC(t,e,n){const r=Math.max(1,Math.sqrt(t*e/1e6)),i=~~((t+2*n+r)/r),o=~~((e+2*n+r)/r),a=t=>~~((t+n)/r);return a.invert=t=>t*r-n,a.bitmap=()=>function(t,e){const n=new Uint32Array(~~((t*e+GC)/GC));function r(t,e){n[t]|=e}function i(t,e){n[t]&=e}return{array:n,get:(e,r)=>{const i=r*t+e;return n[i>>>WC]&1<<(i&YC)},set:(e,n)=>{const i=n*t+e;r(i>>>WC,1<<(i&YC))},clear:(e,n)=>{const r=n*t+e;i(r>>>WC,~(1<<(r&YC)))},getRange:(e,r,i,o)=>{let a,s,u,l,c=o;for(;c>=r;--c)if(a=c*t+e,s=c*t+i,u=a>>>WC,l=s>>>WC,u===l){if(n[u]&VC[a&YC]&XC[1+(s&YC)])return!0}else{if(n[u]&VC[a&YC])return!0;if(n[l]&XC[1+(s&YC)])return!0;for(let t=u+1;t{let a,s,u,l,c;for(;n<=o;++n)if(a=n*t+e,s=n*t+i,u=a>>>WC,l=s>>>WC,u===l)r(u,VC[a&YC]&XC[1+(s&YC)]);else for(r(u,VC[a&YC]),r(l,XC[1+(s&YC)]),c=u+1;c{let a,s,u,l,c;for(;n<=o;++n)if(a=n*t+e,s=n*t+r,u=a>>>WC,l=s>>>WC,u===l)i(u,XC[a&YC]|VC[1+(s&YC)]);else for(i(u,XC[a&YC]),i(l,VC[1+(s&YC)]),c=u+1;cn<0||r<0||o>=e||i>=t}}(i,o),a.ratio=r,a.padding=n,a.width=t,a.height=e,a}function ZC(t,e,n,r,i,o){let a=n/2;return t-a<0||t+a>i||e-(a=r/2)<0||e+a>o}function QC(t,e,n,r,i,o,a,s){const u=i*o/(2*r),l=t(e-u),c=t(e+u),f=t(n-(o/=2)),h=t(n+o);return a.outOfBounds(l,f,c,h)||a.getRange(l,f,c,h)||s&&s.getRange(l,f,c,h)}const KC=[-1,-1,1,1],tF=[-1,1,-1,1];const eF=["right","center","left"],nF=["bottom","middle","top"];function rF(t,e,n,r,i,o,a,s,u,l,c,f){return!(i.outOfBounds(t,n,e,r)||(f&&o||i).getRange(t,n,e,r))}const iF={"top-left":0,top:1,"top-right":2,left:4,middle:5,right:6,"bottom-left":8,bottom:9,"bottom-right":10},oF={naive:function(t,e,n,r){const i=t.width,o=t.height;return function(t){const e=t.datum.datum.items[r].items,n=e.length,a=t.datum.fontSize,s=gy.width(t.datum,t.datum.text);let u,l,c,f,h,d,p,g=0;for(let r=0;r=g&&(g=p,t.x=h,t.y=d);return h=s/2,d=a/2,u=t.x-h,l=t.x+h,c=t.y-d,f=t.y+d,t.align="center",u<0&&l<=i?t.align="left":0<=u&&i=1;)h=(d+p)/2,QC(t,c,f,l,u,h,a,s)?p=h:d=h;if(d>r)return[c,f,d,!0]}}return function(e){const s=e.datum.datum.items[r].items,l=s.length,c=e.datum.fontSize,f=gy.width(e.datum,e.datum.text);let h,d,p,g,m,y,v,_,x,b,w,k,A,M,E,D,C,F=n?c:0,S=!1,$=!1,T=0;for(let r=0;rd&&(C=h,h=d,d=C),p>g&&(C=p,p=g,g=C),x=t(h),w=t(d),b=~~((x+w)/2),k=t(p),M=t(g),A=~~((k+M)/2),v=b;v>=x;--v)for(_=A;_>=k;--_)D=u(v,_,F,f,c),D&&([e.x,e.y,F,S]=D);for(v=b;v<=w;++v)for(_=A;_<=M;++_)D=u(v,_,F,f,c),D&&([e.x,e.y,F,S]=D);S||n||(E=Math.abs(d-h+g-p),m=(h+d)/2,y=(p+g)/2,E>=T&&!ZC(m,y,f,c,i,o)&&!QC(t,m,y,c,f,c,a,null)&&(T=E,e.x=m,e.y=y,$=!0))}return!(!S&&!$)&&(m=f/2,y=c/2,a.setRange(t(e.x-m),t(e.y-y),t(e.x+m),t(e.y+y)),e.align="center",e.baseline="middle",!0)}},floodfill:function(t,e,n,r){const i=t.width,o=t.height,a=e[0],s=e[1],u=t.bitmap();return function(e){const l=e.datum.datum.items[r].items,c=l.length,f=e.datum.fontSize,h=gy.width(e.datum,e.datum.text),d=[];let p,g,m,y,v,_,x,b,w,k,A,M,E=n?f:0,D=!1,C=!1,F=0;for(let r=0;r=1;)A=(w+k)/2,QC(t,v,_,f,h,A,a,s)?k=A:w=A;w>E&&(e.x=v,e.y=_,E=w,D=!0)}}D||n||(M=Math.abs(g-p+y-m),v=(p+g)/2,_=(m+y)/2,M>=F&&!ZC(v,_,h,f,i,o)&&!QC(t,v,_,f,h,f,a,null)&&(F=M,e.x=v,e.y=_,C=!0))}return!(!D&&!C)&&(v=h/2,_=f/2,a.setRange(t(e.x-v),t(e.y-_),t(e.x+v),t(e.y+_)),e.align="center",e.baseline="middle",!0)}}};function aF(t,e,n,r,i,o,a,s,u,l,c){if(!t.length)return t;const f=Math.max(r.length,i.length),h=function(t,e){const n=new Float64Array(e),r=t.length;for(let e=0;e[t.x,t.x,t.x,t.y,t.y,t.y];return t?"line"===t||"area"===t?t=>i(t.datum):"line"===e?t=>{const e=t.datum.items[r].items;return i(e.length?e["start"===n?0:e.length-1]:{x:NaN,y:NaN})}:t=>{const e=t.datum.bounds;return[e.x1,(e.x1+e.x2)/2,e.x2,e.y1,(e.y1+e.y2)/2,e.y2]}:i}(p,g,s,u),v=null===l||l===1/0,_=m&&"naive"===c;var x;let b=-1,w=-1;const k=t.map((t=>{const e=v?gy.width(t,t.text):void 0;return b=Math.max(b,e),w=Math.max(w,t.fontSize),{datum:t,opacity:0,x:void 0,y:void 0,align:void 0,baseline:void 0,boundary:y(t),textWidth:e}}));l=null===l||l===1/0?Math.max(b,w)+Math.max(...r):l;const A=JC(e[0],e[1],l);let M;if(!_){n&&k.sort(((t,e)=>n(t.datum,e.datum)));let e=!1;for(let t=0;tt.datum));M=o.length||r?function(t,e,n,r,i){const o=t.width,a=t.height,s=r||i,u=Tc(o,a).getContext("2d"),l=Tc(o,a).getContext("2d"),c=s&&Tc(o,a).getContext("2d");n.forEach((t=>IC(u,t,!1))),IC(l,e,!1),s&&IC(c,e,!0);const f=jC(u,o,a),h=jC(l,o,a),d=s&&jC(c,o,a),p=t.bitmap(),g=s&&t.bitmap();let m,y,v,_,x,b,w,k;for(y=0;yn.set(t(e.boundary[0]),t(e.boundary[3])))),[n,void 0]}(A,a&&k)}const E=m?oF[c](A,M,a,u):function(t,e,n,r){const i=t.width,o=t.height,a=e[0],s=e[1],u=r.length;return function(e){const l=e.boundary,c=e.datum.fontSize;if(l[2]<0||l[5]<0||l[0]>i||l[3]>o)return!1;let f,h,d,p,g,m,y,v,_,x,b,w,k,A,M,E=e.textWidth??0;for(let i=0;i>>2&3)-1,d=0===f&&0===h||r[i]<0,p=f&&h?Math.SQRT1_2:1,g=r[i]<0?-1:1,m=l[1+f]+r[i]*f*p,b=l[4+h]+g*c*h/2+r[i]*h*p,v=b-c/2,_=b+c/2,w=t(m),A=t(v),M=t(_),!E){if(!rF(w,w,A,M,a,s,0,0,0,0,0,d))continue;E=gy.width(e.datum,e.datum.text)}if(x=m+g*E*f/2,m=x-E/2,y=x+E/2,w=t(m),k=t(y),rF(w,k,A,M,a,s,0,0,0,0,0,d))return e.x=f?f*g<0?y:m:x,e.y=h?h*g<0?_:v:b,e.align=eF[f*g+1],e.baseline=nF[h*g+1],a.setRange(w,A,k,M),!0}return!1}}(A,M,d,h);return k.forEach((t=>t.opacity=+E(t))),k}const sF=["x","y","opacity","align","baseline"],uF=["top-left","left","bottom-left","top","bottom","top-right","right","bottom-right"];function lF(t){Za.call(this,null,t)}lF.Definition={type:"Label",metadata:{modifies:!0},params:[{name:"size",type:"number",array:!0,length:2,required:!0},{name:"sort",type:"compare"},{name:"anchor",type:"string",array:!0,default:uF},{name:"offset",type:"number",array:!0,default:[1]},{name:"padding",type:"number",default:0,null:!0},{name:"lineAnchor",type:"string",values:["start","end"],default:"end"},{name:"markIndex",type:"number",default:0},{name:"avoidBaseMark",type:"boolean",default:!0},{name:"avoidMarks",type:"data",array:!0},{name:"method",type:"string",default:"naive"},{name:"as",type:"string",array:!0,length:sF.length,default:sF}]},dt(lF,Za,{transform(t,e){const n=t.modified();if(!(n||e.changed(e.ADD_REM)||function(n){const r=t[n];return J(r)&&e.modified(r.fields)}("sort")))return;t.size&&2===t.size.length||s("Size parameter should be specified as a [width, height] array.");const r=t.as||sF;return aF(e.materialize(e.SOURCE).source||[],t.size,t.sort,V(null==t.offset?1:t.offset),V(t.anchor||uF),t.avoidMarks||[],!1!==t.avoidBaseMark,t.lineAnchor||"end",t.markIndex||0,void 0===t.padding?0:t.padding,t.method||"naive").forEach((t=>{const e=t.datum;e[r[0]]=t.x,e[r[1]]=t.y,e[r[2]]=t.opacity,e[r[3]]=t.align,e[r[4]]=t.baseline})),e.reflow(n).modifies(r)}});var cF=Object.freeze({__proto__:null,label:lF});function fF(t,e){var n,r,i,o,a,s,u=[],l=function(t){return t(o)};if(null==e)u.push(t);else for(n={},r=0,i=t.length;r{qs(e,t.x,t.y,t.bandwidth||.3).forEach((t=>{const n={};for(let t=0;t"poly"===t?e:"quad"===t?2:1)(a,u),c=t.as||[n(t.x),n(t.y)],f=dF[a],h=[];let d=t.extent;lt(dF,a)||s("Invalid regression method: "+a),null!=d&&"log"===a&&d[0]<=0&&(e.dataflow.warn("Ignoring extent with values <= 0 for log regression."),d=null),i.forEach((n=>{if(n.length<=l)return void e.dataflow.warn("Skipping regression with more parameters than data points.");const r=f(n,t.x,t.y,u);if(t.params)return void h.push(xa({keys:n.dims,coef:r.coef,rSquared:r.rSquared}));const i=d||at(n,t.x),s=t=>{const e={};for(let t=0;ts([t,r.predict(t)]))):Hs(r.predict,i,25,200).forEach(s)})),this.value&&(r.rem=this.value),this.value=r.add=r.source=h}return r}});var gF=Object.freeze({__proto__:null,loess:hF,regression:pF});const mF=134217729,yF=33306690738754706e-32;function vF(t,e,n,r,i){let o,a,s,u,l=e[0],c=r[0],f=0,h=0;c>l==c>-l?(o=l,l=e[++f]):(o=c,c=r[++h]);let d=0;if(fl==c>-l?(a=l+o,s=o-(a-l),l=e[++f]):(a=c+o,s=o-(a-c),c=r[++h]),o=a,0!==s&&(i[d++]=s);fl==c>-l?(a=o+l,u=a-o,s=o-(a-u)+(l-u),l=e[++f]):(a=o+c,u=a-o,s=o-(a-u)+(c-u),c=r[++h]),o=a,0!==s&&(i[d++]=s);for(;f0!=s>0)return u;const l=Math.abs(a+s);return Math.abs(u)>=33306690738754716e-32*l?u:-function(t,e,n,r,i,o,a){let s,u,l,c,f,h,d,p,g,m,y,v,_,x,b,w,k,A;const M=t-i,E=n-i,D=e-o,C=r-o;x=M*C,h=mF*M,d=h-(h-M),p=M-d,h=mF*C,g=h-(h-C),m=C-g,b=p*m-(x-d*g-p*g-d*m),w=D*E,h=mF*D,d=h-(h-D),p=D-d,h=mF*E,g=h-(h-E),m=E-g,k=p*m-(w-d*g-p*g-d*m),y=b-k,f=b-y,wF[0]=b-(y+f)+(f-k),v=x+y,f=v-x,_=x-(v-f)+(y-f),y=_-w,f=_-y,wF[1]=_-(y+f)+(f-w),A=v+y,f=A-v,wF[2]=v-(A-f)+(y-f),wF[3]=A;let F=function(t,e){let n=e[0];for(let r=1;r=S||-F>=S)return F;if(f=t-M,s=t-(M+f)+(f-i),f=n-E,l=n-(E+f)+(f-i),f=e-D,u=e-(D+f)+(f-o),f=r-C,c=r-(C+f)+(f-o),0===s&&0===u&&0===l&&0===c)return F;if(S=bF*a+yF*Math.abs(F),F+=M*c+C*s-(D*l+E*u),F>=S||-F>=S)return F;x=s*C,h=mF*s,d=h-(h-s),p=s-d,h=mF*C,g=h-(h-C),m=C-g,b=p*m-(x-d*g-p*g-d*m),w=u*E,h=mF*u,d=h-(h-u),p=u-d,h=mF*E,g=h-(h-E),m=E-g,k=p*m-(w-d*g-p*g-d*m),y=b-k,f=b-y,EF[0]=b-(y+f)+(f-k),v=x+y,f=v-x,_=x-(v-f)+(y-f),y=_-w,f=_-y,EF[1]=_-(y+f)+(f-w),A=v+y,f=A-v,EF[2]=v-(A-f)+(y-f),EF[3]=A;const $=vF(4,wF,4,EF,kF);x=M*c,h=mF*M,d=h-(h-M),p=M-d,h=mF*c,g=h-(h-c),m=c-g,b=p*m-(x-d*g-p*g-d*m),w=D*l,h=mF*D,d=h-(h-D),p=D-d,h=mF*l,g=h-(h-l),m=l-g,k=p*m-(w-d*g-p*g-d*m),y=b-k,f=b-y,EF[0]=b-(y+f)+(f-k),v=x+y,f=v-x,_=x-(v-f)+(y-f),y=_-w,f=_-y,EF[1]=_-(y+f)+(f-w),A=v+y,f=A-v,EF[2]=v-(A-f)+(y-f),EF[3]=A;const T=vF($,kF,4,EF,AF);x=s*c,h=mF*s,d=h-(h-s),p=s-d,h=mF*c,g=h-(h-c),m=c-g,b=p*m-(x-d*g-p*g-d*m),w=u*l,h=mF*u,d=h-(h-u),p=u-d,h=mF*l,g=h-(h-l),m=l-g,k=p*m-(w-d*g-p*g-d*m),y=b-k,f=b-y,EF[0]=b-(y+f)+(f-k),v=x+y,f=v-x,_=x-(v-f)+(y-f),y=_-w,f=_-y,EF[1]=_-(y+f)+(f-w),A=v+y,f=A-v,EF[2]=v-(A-f)+(y-f),EF[3]=A;const B=vF(T,AF,4,EF,MF);return MF[B-1]}(t,e,n,r,i,o,l)}const CF=Math.pow(2,-52),FF=new Uint32Array(512);class SF{static from(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:OF,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:RF;const r=t.length,i=new Float64Array(2*r);for(let o=0;o>1;if(e>0&&"number"!=typeof t[0])throw new Error("Expected coords to contain numbers.");this.coords=t;const n=Math.max(2*e-5,0);this._triangles=new Uint32Array(3*n),this._halfedges=new Int32Array(3*n),this._hashSize=Math.ceil(Math.sqrt(e)),this._hullPrev=new Uint32Array(e),this._hullNext=new Uint32Array(e),this._hullTri=new Uint32Array(e),this._hullHash=new Int32Array(this._hashSize).fill(-1),this._ids=new Uint32Array(e),this._dists=new Float64Array(e),this.update()}update(){const{coords:t,_hullPrev:e,_hullNext:n,_hullTri:r,_hullHash:i}=this,o=t.length>>1;let a=1/0,s=1/0,u=-1/0,l=-1/0;for(let e=0;eu&&(u=n),r>l&&(l=r),this._ids[e]=e}const c=(a+u)/2,f=(s+l)/2;let h,d,p,g=1/0;for(let e=0;e0&&(d=e,g=n)}let v=t[2*d],_=t[2*d+1],x=1/0;for(let e=0;er&&(e[n++]=i,r=this._dists[i])}return this.hull=e.subarray(0,n),this.triangles=new Uint32Array(0),void(this.halfedges=new Uint32Array(0))}if(DF(m,y,v,_,b,w)<0){const t=d,e=v,n=_;d=p,v=b,_=w,p=t,b=e,w=n}const k=function(t,e,n,r,i,o){const a=n-t,s=r-e,u=i-t,l=o-e,c=a*a+s*s,f=u*u+l*l,h=.5/(a*l-s*u),d=t+(l*c-s*f)*h,p=e+(a*f-u*c)*h;return{x:d,y:p}}(m,y,v,_,b,w);this._cx=k.x,this._cy=k.y;for(let e=0;e0&&Math.abs(l-o)<=CF&&Math.abs(c-a)<=CF)continue;if(o=l,a=c,u===h||u===d||u===p)continue;let f=0;for(let t=0,e=this._hashKey(l,c);t=0;)if(m=g,m===f){m=-1;break}if(-1===m)continue;let y=this._addTriangle(m,u,n[m],-1,-1,r[m]);r[u]=this._legalize(y+2),r[m]=y,A++;let v=n[m];for(;g=n[v],DF(l,c,t[2*v],t[2*v+1],t[2*g],t[2*g+1])<0;)y=this._addTriangle(v,u,g,r[u],-1,r[v]),r[u]=this._legalize(y+2),n[v]=v,A--,v=g;if(m===f)for(;g=e[m],DF(l,c,t[2*g],t[2*g+1],t[2*m],t[2*m+1])<0;)y=this._addTriangle(g,u,m,-1,r[m],r[g]),this._legalize(y+2),r[g]=y,n[m]=m,A--,m=g;this._hullStart=e[u]=m,n[m]=e[v]=u,n[u]=v,i[this._hashKey(l,c)]=u,i[this._hashKey(t[2*m],t[2*m+1])]=m}this.hull=new Uint32Array(A);for(let t=0,e=this._hullStart;t0?3-n:1+n)/4}(t-this._cx,e-this._cy)*this._hashSize)%this._hashSize}_legalize(t){const{_triangles:e,_halfedges:n,coords:r}=this;let i=0,o=0;for(;;){const a=n[t],s=t-t%3;if(o=s+(t+2)%3,-1===a){if(0===i)break;t=FF[--i];continue}const u=a-a%3,l=s+(t+1)%3,c=u+(a+2)%3,f=e[o],h=e[t],d=e[l],p=e[c];if(TF(r[2*f],r[2*f+1],r[2*h],r[2*h+1],r[2*d],r[2*d+1],r[2*p],r[2*p+1])){e[t]=p,e[a]=f;const r=n[c];if(-1===r){let e=this._hullStart;do{if(this._hullTri[e]===c){this._hullTri[e]=t;break}e=this._hullPrev[e]}while(e!==this._hullStart)}this._link(t,r),this._link(a,n[o]),this._link(o,c);const s=u+(a+1)%3;i=n&&e[t[a]]>o;)t[a+1]=t[a--];t[a+1]=r}else{let i=n+1,o=r;NF(t,n+r>>1,i),e[t[n]]>e[t[r]]&&NF(t,n,r),e[t[i]]>e[t[r]]&&NF(t,i,r),e[t[n]]>e[t[i]]&&NF(t,n,i);const a=t[i],s=e[a];for(;;){do{i++}while(e[t[i]]s);if(o=o-n?(zF(t,e,i,r),zF(t,e,n,o-1)):(zF(t,e,n,o-1),zF(t,e,i,r))}}function NF(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function OF(t){return t[0]}function RF(t){return t[1]}const UF=1e-6;class LF{constructor(){this._x0=this._y0=this._x1=this._y1=null,this._=""}moveTo(t,e){this._+=`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")}lineTo(t,e){this._+=`L${this._x1=+t},${this._y1=+e}`}arc(t,e,n){const r=(t=+t)+(n=+n),i=e=+e;if(n<0)throw new Error("negative radius");null===this._x1?this._+=`M${r},${i}`:(Math.abs(this._x1-r)>UF||Math.abs(this._y1-i)>UF)&&(this._+="L"+r+","+i),n&&(this._+=`A${n},${n},0,1,1,${t-n},${e}A${n},${n},0,1,1,${this._x1=r},${this._y1=i}`)}rect(t,e,n,r){this._+=`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${+n}v${+r}h${-n}Z`}value(){return this._||null}}class qF{constructor(){this._=[]}moveTo(t,e){this._.push([t,e])}closePath(){this._.push(this._[0].slice())}lineTo(t,e){this._.push([t,e])}value(){return this._.length?this._:null}}let PF=class{constructor(t){let[e,n,r,i]=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,0,960,500];if(!((r=+r)>=(e=+e)&&(i=+i)>=(n=+n)))throw new Error("invalid bounds");this.delaunay=t,this._circumcenters=new Float64Array(2*t.points.length),this.vectors=new Float64Array(2*t.points.length),this.xmax=r,this.xmin=e,this.ymax=i,this.ymin=n,this._init()}update(){return this.delaunay.update(),this._init(),this}_init(){const{delaunay:{points:t,hull:e,triangles:n},vectors:r}=this;let i,o;const a=this.circumcenters=this._circumcenters.subarray(0,n.length/3*2);for(let r,s,u=0,l=0,c=n.length;u1;)i-=2;for(let t=2;t0){if(e>=this.ymax)return null;(i=(this.ymax-e)/r)0){if(t>=this.xmax)return null;(i=(this.xmax-t)/n)this.xmax?2:0)|(ethis.ymax?8:0)}_simplify(t){if(t&&t.length>4){for(let e=0;e1&&void 0!==arguments[1]?arguments[1]:HF,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:WF,r=arguments.length>3?arguments[3]:void 0;return new GF("length"in t?function(t,e,n,r){const i=t.length,o=new Float64Array(2*i);for(let a=0;a2&&function(t){const{triangles:e,coords:n}=t;for(let t=0;t1e-10)return!1}return!0}(t)){this.collinear=Int32Array.from({length:e.length/2},((t,e)=>e)).sort(((t,n)=>e[2*t]-e[2*n]||e[2*t+1]-e[2*n+1]));const t=this.collinear[0],n=this.collinear[this.collinear.length-1],r=[e[2*t],e[2*t+1],e[2*n],e[2*n+1]],i=1e-8*Math.hypot(r[3]-r[1],r[2]-r[0]);for(let t=0,n=e.length/2;t0&&(this.triangles=new Int32Array(3).fill(-1),this.halfedges=new Int32Array(3).fill(-1),this.triangles[0]=r[0],o[r[0]]=1,2===r.length&&(o[r[1]]=0,this.triangles[1]=r[1],this.triangles[2]=r[1]))}voronoi(t){return new PF(this,t)}*neighbors(t){const{inedges:e,hull:n,_hullIndex:r,halfedges:i,triangles:o,collinear:a}=this;if(a){const e=a.indexOf(t);return e>0&&(yield a[e-1]),void(e2&&void 0!==arguments[2]?arguments[2]:0;if((t=+t)!=t||(e=+e)!=e)return-1;const r=n;let i;for(;(i=this._step(n,t,e))>=0&&i!==n&&i!==r;)n=i;return i}_step(t,e,n){const{inedges:r,hull:i,_hullIndex:o,halfedges:a,triangles:s,points:u}=this;if(-1===r[t]||!u.length)return(t+1)%(u.length>>1);let l=t,c=IF(e-u[2*t],2)+IF(n-u[2*t+1],2);const f=r[t];let h=f;do{let r=s[h];const f=IF(e-u[2*r],2)+IF(n-u[2*r+1],2);if(f=f));)if(e.x=a+i,e.y=l+o,!(e.x+e.x0<0||e.y+e.y0<0||e.x+e.x1>s[0]||e.y+e.y1>s[1])&&(!n||!rS(e,t,s[0]))&&(!n||oS(e,n))){for(var g,m=e.sprite,y=e.width>>5,v=s[0]>>5,_=e.x-(y<<4),x=127&_,b=32-x,w=e.y1-e.y0,k=(e.y+e.y0)*v+(_>>5),A=0;A>>x:0);k+=v}return e.sprite=null,!0}return!1}return f.layout=function(){for(var u=function(t){t.width=t.height=1;var e=Math.sqrt(t.getContext("2d").getImageData(0,0,1,1).data.length>>2);t.width=(KF<<5)/e,t.height=tS/e;var n=t.getContext("2d");return n.fillStyle=n.strokeStyle="red",n.textAlign="center",{context:n,ratio:e}}(Tc()),f=function(t){var e=[],n=-1;for(;++n>5)*s[1]),d=null,p=l.length,g=-1,m=[],y=l.map((s=>({text:t(s),font:e(s),style:r(s),weight:i(s),rotate:o(s),size:~~(n(s)+1e-14),padding:a(s),xoff:0,yoff:0,x1:0,y1:0,x0:0,y0:0,hasText:!1,sprite:null,datum:s}))).sort(((t,e)=>e.size-t.size));++g>1,v.y=s[1]*(c()+.5)>>1,nS(u,v,y,g),v.hasText&&h(f,v,d)&&(m.push(v),d?iS(d,v):d=[{x:v.x+v.x0,y:v.y+v.y0},{x:v.x+v.x1,y:v.y+v.y1}],v.x-=s[0]>>1,v.y-=s[1]>>1)}return m},f.words=function(t){return arguments.length?(l=t,f):l},f.size=function(t){return arguments.length?(s=[+t[0],+t[1]],f):s},f.font=function(t){return arguments.length?(e=sS(t),f):e},f.fontStyle=function(t){return arguments.length?(r=sS(t),f):r},f.fontWeight=function(t){return arguments.length?(i=sS(t),f):i},f.rotate=function(t){return arguments.length?(o=sS(t),f):o},f.text=function(e){return arguments.length?(t=sS(e),f):t},f.spiral=function(t){return arguments.length?(u=uS[t]||t,f):u},f.fontSize=function(t){return arguments.length?(n=sS(t),f):n},f.padding=function(t){return arguments.length?(a=sS(t),f):a},f.random=function(t){return arguments.length?(c=t,f):c},f}function nS(t,e,n,r){if(!e.sprite){var i=t.context,o=t.ratio;i.clearRect(0,0,(KF<<5)/o,tS/o);var a,s,u,l,c,f=0,h=0,d=0,p=n.length;for(--r;++r>5<<5,u=~~Math.max(Math.abs(v+_),Math.abs(v-_))}else a=a+31>>5<<5;if(u>d&&(d=u),f+a>=KF<<5&&(f=0,h+=d,d=0),h+u>=tS)break;i.translate((f+(a>>1))/o,(h+(u>>1))/o),e.rotate&&i.rotate(e.rotate*QF),i.fillText(e.text,0,0),e.padding&&(i.lineWidth=2*e.padding,i.strokeText(e.text,0,0)),i.restore(),e.width=a,e.height=u,e.xoff=f,e.yoff=h,e.x1=a>>1,e.y1=u>>1,e.x0=-e.x1,e.y0=-e.y1,e.hasText=!0,f+=a}for(var b=i.getImageData(0,0,(KF<<5)/o,tS/o).data,w=[];--r>=0;)if((e=n[r]).hasText){for(s=(a=e.width)>>5,u=e.y1-e.y0,l=0;l>5),E=b[(h+c)*(KF<<5)+(f+l)<<2]?1<<31-l%32:0;w[M]|=E,k|=E}k?A=c:(e.y0++,u--,c--,h++)}e.y1=e.y0+A,e.sprite=w.slice(0,(e.y1-e.y0)*s)}}}function rS(t,e,n){n>>=5;for(var r,i=t.sprite,o=t.width>>5,a=t.x-(o<<4),s=127&a,u=32-s,l=t.y1-t.y0,c=(t.y+t.y0)*n+(a>>5),f=0;f>>s:0))&e[c+h])return!0;c+=n}return!1}function iS(t,e){var n=t[0],r=t[1];e.x+e.x0r.x&&(r.x=e.x+e.x1),e.y+e.y1>r.y&&(r.y=e.y+e.y1)}function oS(t,e){return t.x+t.x1>e[0].x&&t.x+t.x0e[0].y&&t.y+t.y0e(t(n))}i.forEach((t=>{t[a[0]]=NaN,t[a[1]]=NaN,t[a[3]]=0}));const c=o.words(i).text(e.text).size(e.size||[500,500]).padding(e.padding||1).spiral(e.spiral||"archimedean").rotate(e.rotate||0).font(e.font||"sans-serif").fontStyle(e.fontStyle||"normal").fontWeight(e.fontWeight||"normal").fontSize(l).random(t.random).layout(),f=o.size(),h=f[0]>>1,d=f[1]>>1,p=c.length;for(let t,e,n=0;nnew Uint8Array(t),pS=t=>new Uint16Array(t),gS=t=>new Uint32Array(t);function mS(t,e,n){const r=(e<257?dS:e<65537?pS:gS)(t);return n&&r.set(n),r}function yS(t,e,n){const r=1<{const r=t[e],i=t[n];return ri?1:0})),function(t,e){return Array.from(e,(e=>t[e]))}(t,e)}(h,u),a)l=e,c=t,e=Array(a+s),t=gS(a+s),function(t,e,n,r,i,o,a,s,u){let l,c=0,f=0;for(l=0;c0)for(f=0;ft,size:()=>n}}function _S(t){Za.call(this,function(){let t=8,e=[],n=gS(0),r=mS(0,t),i=mS(0,t);return{data:()=>e,seen:()=>n=function(t,e,n){return t.length>=e?t:((n=n||new t.constructor(e)).set(t),n)}(n,e.length),add(t){for(let n,r=0,i=e.length,o=t.length;re.length,curr:()=>r,prev:()=>i,reset:t=>i[t]=r[t],all:()=>t<257?255:t<65537?65535:4294967295,set(t,e){r[t]|=e},clear(t,e){r[t]&=~e},resize(e,n){(e>r.length||n>t)&&(t=Math.max(n,t),r=mS(e,t,r),i=mS(e,t))}}}(),t),this._indices=null,this._dims=null}function xS(t){Za.call(this,null,t)}_S.Definition={type:"CrossFilter",metadata:{},params:[{name:"fields",type:"field",array:!0,required:!0},{name:"query",type:"array",array:!0,required:!0,content:{type:"number",array:!0,length:2}}]},dt(_S,Za,{transform(t,e){return this._dims?t.modified("fields")||t.fields.some((t=>e.modified(t.fields)))?this.reinit(t,e):this.eval(t,e):this.init(t,e)},init(t,e){const n=t.fields,r=t.query,i=this._indices={},o=this._dims=[],a=r.length;let s,u,l=0;for(;l{const t=i.remove(e,n);for(const e in r)r[e].reindex(t)}))},update(t,e,n){const r=this._dims,i=t.query,o=e.stamp,a=r.length;let s,u,l=0;for(n.filters=0,u=0;ud)for(m=d,y=Math.min(f,p);mp)for(m=Math.max(f,p),y=h;mc)for(d=c,p=Math.min(u,f);df)for(d=Math.max(u,f),p=l;ds[t]&n?null:a[t];return o.filter(o.MOD,l),i&i-1?(o.filter(o.ADD,(t=>{const e=s[t]&n;return!e&&e^u[t]&n?a[t]:null})),o.filter(o.REM,(t=>{const e=s[t]&n;return e&&!(e^e^u[t]&n)?a[t]:null}))):(o.filter(o.ADD,l),o.filter(o.REM,(t=>(s[t]&n)===i?a[t]:null))),o.filter(o.SOURCE,(t=>l(t._index)))}});var bS=Object.freeze({__proto__:null,crossfilter:_S,resolvefilter:xS});const wS="Literal",kS="Property",AS="ArrayExpression",MS="BinaryExpression",ES="CallExpression",DS="ConditionalExpression",CS="LogicalExpression",FS="MemberExpression",SS="ObjectExpression",$S="UnaryExpression";function TS(t){this.type=t}var BS,zS,NS,OS,RS;TS.prototype.visit=function(t){let e,n,r;if(t(this))return 1;for(e=function(t){switch(t.type){case AS:return t.elements;case MS:case CS:return[t.left,t.right];case ES:return[t.callee].concat(t.arguments);case DS:return[t.test,t.consequent,t.alternate];case FS:return[t.object,t.property];case SS:return t.properties;case kS:return[t.key,t.value];case $S:return[t.argument];default:return[]}}(this),n=0,r=e.length;n",BS[qS]="Identifier",BS[PS]="Keyword",BS[jS]="Null",BS[IS]="Numeric",BS[HS]="Punctuator",BS[WS]="String",BS[9]="RegularExpression";var YS="ArrayExpression",GS="BinaryExpression",VS="CallExpression",XS="ConditionalExpression",JS="Identifier",ZS="Literal",QS="LogicalExpression",KS="MemberExpression",t$="ObjectExpression",e$="Property",n$="UnaryExpression",r$="Unexpected token %0",i$="Unexpected number",o$="Unexpected string",a$="Unexpected identifier",s$="Unexpected reserved word",u$="Unexpected end of input",l$="Invalid regular expression",c$="Invalid regular expression: missing /",f$="Octal literals are not allowed in strict mode.",h$="Duplicate data property in object literal not allowed in strict mode",d$="ILLEGAL",p$="Disabled.",g$=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),m$=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]");function y$(t,e){if(!t)throw new Error("ASSERT: "+e)}function v$(t){return t>=48&&t<=57}function _$(t){return"0123456789abcdefABCDEF".indexOf(t)>=0}function x$(t){return"01234567".indexOf(t)>=0}function b$(t){return 32===t||9===t||11===t||12===t||160===t||t>=5760&&[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(t)>=0}function w$(t){return 10===t||13===t||8232===t||8233===t}function k$(t){return 36===t||95===t||t>=65&&t<=90||t>=97&&t<=122||92===t||t>=128&&g$.test(String.fromCharCode(t))}function A$(t){return 36===t||95===t||t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||92===t||t>=128&&m$.test(String.fromCharCode(t))}const M$={if:1,in:1,do:1,var:1,for:1,new:1,try:1,let:1,this:1,else:1,case:1,void:1,with:1,enum:1,while:1,break:1,catch:1,throw:1,const:1,yield:1,class:1,super:1,return:1,typeof:1,delete:1,switch:1,export:1,import:1,public:1,static:1,default:1,finally:1,extends:1,package:1,private:1,function:1,continue:1,debugger:1,interface:1,protected:1,instanceof:1,implements:1};function E$(){for(;NS1114111||"}"!==t)&&I$({},r$,d$),e<=65535?String.fromCharCode(e):(n=55296+(e-65536>>10),r=56320+(e-65536&1023),String.fromCharCode(n,r))}function F$(){var t,e;for(t=zS.charCodeAt(NS++),e=String.fromCharCode(t),92===t&&(117!==zS.charCodeAt(NS)&&I$({},r$,d$),++NS,(t=D$("u"))&&"\\"!==t&&k$(t.charCodeAt(0))||I$({},r$,d$),e=t);NS>>="===(r=zS.substr(NS,4))?{type:HS,value:r,start:i,end:NS+=4}:">>>"===(n=r.substr(0,3))||"<<="===n||">>="===n?{type:HS,value:n,start:i,end:NS+=3}:a===(e=n.substr(0,2))[1]&&"+-<>&|".indexOf(a)>=0||"=>"===e?{type:HS,value:e,start:i,end:NS+=2}:("//"===e&&I$({},r$,d$),"<>=!+-*%&|^/".indexOf(a)>=0?(++NS,{type:HS,value:a,start:i,end:NS}):void I$({},r$,d$))}function T$(){var t,e,n;if(y$(v$((n=zS[NS]).charCodeAt(0))||"."===n,"Numeric literal must start with a decimal digit or a decimal point"),e=NS,t="","."!==n){if(t=zS[NS++],n=zS[NS],"0"===t){if("x"===n||"X"===n)return++NS,function(t){let e="";for(;NS=0&&I$({},l$,n),{value:n,literal:e}}(),r=function(t,e){let n=t;e.indexOf("u")>=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}/g,((t,e)=>{if(parseInt(e,16)<=1114111)return"x";I$({},l$)})).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"x"));try{new RegExp(n)}catch(t){I$({},l$)}try{return new RegExp(t,e)}catch(t){return null}}(e.value,n.value),{literal:e.literal+n.literal,value:r,regex:{pattern:e.value,flags:n.value},start:t,end:NS}}function z$(){if(E$(),NS>=OS)return{type:LS,start:NS,end:NS};const t=zS.charCodeAt(NS);return k$(t)?S$():40===t||41===t||59===t?$$():39===t||34===t?function(){var t,e,n,r,i="",o=!1;for(y$("'"===(t=zS[NS])||'"'===t,"String literal must starts with a quote"),e=NS,++NS;NS=0&&NS(y$(e":case"<=":case">=":case"instanceof":case"in":e=7;break;case"<<":case">>":case">>>":e=8;break;case"+":case"-":e=9;break;case"*":case"/":case"%":e=11}return e}function aT(){var t,e;return t=function(){var t,e,n,r,i,o,a,s,u,l;if(t=RS,u=iT(),0===(i=oT(r=RS)))return u;for(r.prec=i,N$(),e=[t,RS],o=[u,r,a=iT()];(i=oT(RS))>0;){for(;o.length>2&&i<=o[o.length-2].prec;)a=o.pop(),s=o.pop().value,u=o.pop(),e.pop(),n=R$(s,u,a),o.push(n);(r=N$()).prec=i,o.push(r),e.push(RS),n=iT(),o.push(n)}for(n=o[l=o.length-1],e.pop();l>1;)e.pop(),n=R$(o[l-1].value,o[l-2],n),l-=2;return n}(),Y$("?")&&(N$(),e=aT(),W$(":"),t=function(t,e,n){const r=new TS(XS);return r.test=t,r.consequent=e,r.alternate=n,r}(t,e,aT())),t}function sT(){const t=aT();if(Y$(","))throw new Error(p$);return t}function uT(t){NS=0,OS=(zS=t).length,RS=null,O$();const e=sT();if(RS.type!==LS)throw new Error("Unexpect token after expression.");return e}var lT={NaN:"NaN",E:"Math.E",LN2:"Math.LN2",LN10:"Math.LN10",LOG2E:"Math.LOG2E",LOG10E:"Math.LOG10E",PI:"Math.PI",SQRT1_2:"Math.SQRT1_2",SQRT2:"Math.SQRT2",MIN_VALUE:"Number.MIN_VALUE",MAX_VALUE:"Number.MAX_VALUE"};function cT(t){function e(e,n,r){return i=>function(e,n,r,i){let o=t(n[0]);return r&&(o=r+"("+o+")",0===r.lastIndexOf("new ",0)&&(o="("+o+")")),o+"."+e+(i<0?"":0===i?"()":"("+n.slice(1).map(t).join(",")+")")}(e,i,n,r)}const n="new Date",r="String",i="RegExp";return{isNaN:"Number.isNaN",isFinite:"Number.isFinite",abs:"Math.abs",acos:"Math.acos",asin:"Math.asin",atan:"Math.atan",atan2:"Math.atan2",ceil:"Math.ceil",cos:"Math.cos",exp:"Math.exp",floor:"Math.floor",hypot:"Math.hypot",log:"Math.log",max:"Math.max",min:"Math.min",pow:"Math.pow",random:"Math.random",round:"Math.round",sin:"Math.sin",sqrt:"Math.sqrt",tan:"Math.tan",clamp:function(e){e.length<3&&s("Missing arguments to clamp function."),e.length>3&&s("Too many arguments to clamp function.");const n=e.map(t);return"Math.max("+n[1]+", Math.min("+n[2]+","+n[0]+"))"},now:"Date.now",utc:"Date.UTC",datetime:n,date:e("getDate",n,0),day:e("getDay",n,0),year:e("getFullYear",n,0),month:e("getMonth",n,0),hours:e("getHours",n,0),minutes:e("getMinutes",n,0),seconds:e("getSeconds",n,0),milliseconds:e("getMilliseconds",n,0),time:e("getTime",n,0),timezoneoffset:e("getTimezoneOffset",n,0),utcdate:e("getUTCDate",n,0),utcday:e("getUTCDay",n,0),utcyear:e("getUTCFullYear",n,0),utcmonth:e("getUTCMonth",n,0),utchours:e("getUTCHours",n,0),utcminutes:e("getUTCMinutes",n,0),utcseconds:e("getUTCSeconds",n,0),utcmilliseconds:e("getUTCMilliseconds",n,0),length:e("length",null,-1),parseFloat:"parseFloat",parseInt:"parseInt",upper:e("toUpperCase",r,0),lower:e("toLowerCase",r,0),substring:e("substring",r),split:e("split",r),trim:e("trim",r,0),regexp:i,test:e("test",i),if:function(e){e.length<3&&s("Missing arguments to if function."),e.length>3&&s("Too many arguments to if function.");const n=e.map(t);return"("+n[0]+"?"+n[1]+":"+n[2]+")"}}}function fT(t){const e=(t=t||{}).allowed?Bt(t.allowed):{},n=t.forbidden?Bt(t.forbidden):{},r=t.constants||lT,i=(t.functions||cT)(h),o=t.globalvar,a=t.fieldvar,u=J(o)?o:t=>`${o}["${t}"]`;let l={},c={},f=0;function h(t){if(xt(t))return t;const e=d[t.type];return null==e&&s("Unsupported type: "+t.type),e(t)}const d={Literal:t=>t.raw,Identifier:t=>{const i=t.name;return f>0?i:lt(n,i)?s("Illegal identifier: "+i):lt(r,i)?r[i]:lt(e,i)?i:(l[i]=1,u(i))},MemberExpression:t=>{const e=!t.computed,n=h(t.object);e&&(f+=1);const r=h(t.property);return n===a&&(c[function(t){const e=t&&t.length-1;return e&&('"'===t[0]&&'"'===t[e]||"'"===t[0]&&"'"===t[e])?t.slice(1,-1):t}(r)]=1),e&&(f-=1),n+(e?"."+r:"["+r+"]")},CallExpression:t=>{"Identifier"!==t.callee.type&&s("Illegal callee type: "+t.callee.type);const e=t.callee.name,n=t.arguments,r=lt(i,e)&&i[e];return r||s("Unrecognized function: "+e),J(r)?r(n):r+"("+n.map(h).join(",")+")"},ArrayExpression:t=>"["+t.elements.map(h).join(",")+"]",BinaryExpression:t=>"("+h(t.left)+" "+t.operator+" "+h(t.right)+")",UnaryExpression:t=>"("+t.operator+h(t.argument)+")",ConditionalExpression:t=>"("+h(t.test)+"?"+h(t.consequent)+":"+h(t.alternate)+")",LogicalExpression:t=>"("+h(t.left)+t.operator+h(t.right)+")",ObjectExpression:t=>"{"+t.properties.map(h).join(",")+"}",Property:t=>{f+=1;const e=h(t.key);return f-=1,e+":"+h(t.value)}};function p(t){const e={code:h(t),globals:Object.keys(l),fields:Object.keys(c)};return l={},c={},e}return p.functions=i,p.constants=r,p}const hT=Symbol("vega_selection_getter");function dT(t){return t.getter&&t.getter[hT]||(t.getter=l(t.field),t.getter[hT]=!0),t.getter}const pT="intersect",gT="union",mT="_vgsid_",yT=l(mT),vT="E",_T="R",xT="R-E",bT="R-LE",wT="R-RE",kT="index:unit";function AT(t,e){for(var n,r,i=e.fields,o=e.values,a=i.length,s=0;s1?e-1:0),r=1;re.indexOf(t)>=0)):e},R_union:function(t,e){var n=S(e[0]),r=S(e[1]);return n>r&&(n=e[1],r=e[0]),t.length?(t[0]>n&&(t[0]=n),t[1]r&&(n=e[1],r=e[0]),t.length?rr&&(t[1]=r),t):[n,r]}};function FT(t,e,n,r){e[0].type!==wS&&s("First argument to selection functions must be a string literal.");const i=e[0].value,o="unit",a="@"+o,u=":"+i;(e.length>=2&&F(e).value)!==pT||lt(r,a)||(r[a]=n.getData(i).indataRef(n,o)),lt(r,u)||(r[u]=n.getData(i).tuplesRef())}function ST(t){const e=this.context.data[t];return e?e.values.value:[]}const $T=t=>function(e,n){return this.context.dataflow.locale()[t](n)(e)},TT=$T("format"),BT=$T("timeFormat"),zT=$T("utcFormat"),NT=$T("timeParse"),OT=$T("utcParse"),RT=new Date(2e3,0,1);function UT(t,e,n){return Number.isInteger(t)&&Number.isInteger(e)?(RT.setYear(2e3),RT.setMonth(t),RT.setDate(e),BT.call(this,RT,n)):""}const LT="%",qT="$";function PT(t,e,n,r){e[0].type!==wS&&s("First argument to data functions must be a string literal.");const i=e[0].value,o=":"+i;if(!lt(o,r))try{r[o]=n.getData(i).tuplesRef()}catch(t){}}function jT(t,e,n,r){if(e[0].type===wS)IT(n,r,e[0].value);else for(t in n.scales)IT(n,r,t)}function IT(t,e,n){const r=LT+n;if(!lt(e,r))try{e[r]=t.scaleRef(n)}catch(t){}}function HT(t,e){if(J(t))return t;if(xt(t)){const n=e.scales[t];return n&&function(t){return t&&!0===t[Vd]}(n.value)?n.value:void 0}}function WT(t,e,n){e.__bandwidth=t=>t&&t.bandwidth?t.bandwidth():0,n._bandwidth=jT,n._range=jT,n._scale=jT;const r=e=>"_["+(e.type===wS?Ct(LT+e.value):Ct(LT)+"+"+t(e))+"]";return{_bandwidth:t=>`this.__bandwidth(${r(t[0])})`,_range:t=>`${r(t[0])}.range()`,_scale:e=>`${r(e[0])}(${t(e[1])})`}}function YT(t,e){return function(n,r,i){if(n){const e=HT(n,(i||this).context);return e&&e.path[t](r)}return e(r)}}const GT=YT("area",(function(t){return yw=new ue,Kb(t,vw),2*yw})),VT=YT("bounds",(function(t){var e,n,r,i,o,a,s;if(uw=sw=-(ow=aw=1/0),pw=[],Kb(t,Yw),n=pw.length){for(pw.sort(ek),e=1,o=[r=pw[0]];etk(r[0],r[1])&&(r[1]=i[1]),tk(i[0],r[1])>tk(r[0],r[1])&&(r[0]=i[0])):o.push(r=i);for(a=-1/0,e=0,r=o[n=o.length-1];e<=n;r=i,++e)i=o[e],(s=tk(r[1],i[0]))>a&&(a=s,ow=i[0],sw=r[1])}return pw=gw=null,ow===1/0||aw===1/0?[[NaN,NaN],[NaN,NaN]]:[[ow,aw],[sw,uw]]})),XT=YT("centroid",(function(t){Sw=$w=Tw=Bw=zw=Nw=Ow=Rw=0,Uw=new ue,Lw=new ue,qw=new ue,Kb(t,rk);var e=+Uw,n=+Lw,r=+qw,i=Ub(e,n,r);return itB(t,e)}const nB={};function rB(t){return k(t)||ArrayBuffer.isView(t)?t:null}function iB(t){return rB(t)||(xt(t)?t:null)}const oB=t=>t.data;function aB(t,e){const n=ST.call(e,t);return n.root&&n.root.lookup||{}}const sB=()=>"undefined"!=typeof window&&window||null;function uB(t,e,n){if(!t)return[];const[r,i]=t,o=(new Ug).set(r[0],r[1],i[0],i[1]);return v_(n||this.context.dataflow.scenegraph().root,o,function(t){let e=null;if(t){const n=V(t.marktype),r=V(t.markname);e=t=>(!n.length||n.some((e=>t.marktype===e)))&&(!r.length||r.some((e=>t.name===e)))}return e}(e))}const lB={random:()=>t.random(),cumulativeNormal:ds,cumulativeLogNormal:_s,cumulativeUniform:Ms,densityNormal:hs,densityLogNormal:vs,densityUniform:As,quantileNormal:ps,quantileLogNormal:xs,quantileUniform:Es,sampleNormal:fs,sampleLogNormal:ys,sampleUniform:ks,isArray:k,isBoolean:gt,isDate:mt,isDefined:t=>void 0!==t,isNumber:vt,isObject:A,isRegExp:_t,isString:xt,isTuple:ya,isValid:t=>null!=t&&t==t,toBoolean:Ft,toDate:t=>$t(t),toNumber:S,toString:Tt,indexof:function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r1?e-1:0),r=1;r1?e-1:0),r=1;r1?e-1:0),r=1;rat(t),inScope:function(t){const e=this.context.group;let n=!1;if(e)for(;t;){if(t===e){n=!0;break}t=t.mark.group}return n},intersect:uB,clampRange:X,pinchDistance:function(t){const e=t.touches,n=e[0].clientX-e[1].clientX,r=e[0].clientY-e[1].clientY;return Math.hypot(n,r)},pinchAngle:function(t){const e=t.touches;return Math.atan2(e[0].clientY-e[1].clientY,e[0].clientX-e[1].clientX)},screen:function(){const t=sB();return t?t.screen:{}},containerSize:function(){const t=this.context.dataflow,e=t.container&&t.container();return e?[e.clientWidth,e.clientHeight]:[void 0,void 0]},windowSize:function(){const t=sB();return t?[t.innerWidth,t.innerHeight]:[void 0,void 0]},bandspace:function(t,e,n){return bd(t||0,e||0,n||0)},setdata:function(t,e){const n=this.context.dataflow,r=this.context.data[t].input;return n.pulse(r,n.changeset().remove(p).insert(e)),1},pathShape:function(t){let e=null;return function(n){return n?sg(n,e=e||Jp(t)):t}},panLinear:R,panLog:U,panPow:L,panSymlog:q,zoomLinear:j,zoomLog:I,zoomPow:H,zoomSymlog:W,encode:function(t,e,n){if(t){const n=this.context.dataflow,r=t.mark.source;n.pulse(r,n.changeset().encode(t,e))}return void 0!==n?n:t},modify:function(t,e,n,r,i,o){const a=this.context.dataflow,s=this.context.data[t],u=s.input,l=a.stamp();let c,f,h=s.changes;if(!1===a._trigger||!(u.value.length||e||r))return 0;if((!h||h.stamp{s.modified=!0,a.pulse(u,h).run()}),!0,1)),n&&(c=!0===n?p:k(n)||ya(n)?n:eB(n),h.remove(c)),e&&h.insert(e),r&&(c=eB(r),u.value.some(c)?h.remove(c):h.insert(r)),i)for(f in o)h.modify(i,f,o[f]);return 1},lassoAppend:function(t,e,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5;const i=(t=V(t))[t.length-1];return void 0===i||Math.hypot(i[0]-e,i[1]-n)>r?[...t,[e,n]]:t},lassoPath:function(t){return V(t).reduce(((e,n,r)=>{let[i,o]=n;return e+(0==r?`M ${i},${o} `:r===t.length-1?" Z":`L ${i},${o} `)}),"")},intersectLasso:function(t,e,n){const{x:r,y:i,mark:o}=n,a=(new Ug).set(Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER,Number.MIN_SAFE_INTEGER);for(const[t,n]of e)ta.x2&&(a.x2=t),na.y2&&(a.y2=n);return a.translate(r,i),uB([[a.x1,a.y1],[a.x2,a.y2]],t,o).filter((t=>function(t,e,n){let r=0;for(let i=0,o=n.length-1;ie!=s>e&&t<(a-u)*(e-l)/(s-l)+u&&r++}return 1&r}(t.x,t.y,e)))}},cB=["view","item","group","xy","x","y"],fB="this.",hB={},dB={forbidden:["_"],allowed:["datum","event","item"],fieldvar:"datum",globalvar:t=>`_[${Ct(qT+t)}]`,functions:function(t){const e=cT(t);cB.forEach((t=>e[t]="event.vega."+t));for(const t in lB)e[t]=fB+t;return ot(e,WT(t,lB,hB)),e},constants:lT,visitors:hB},pB=fT(dB);function gB(t,e,n){return 1===arguments.length?lB[t]:(lB[t]=e,n&&(hB[t]=n),pB&&(pB.functions[t]=fB+t),this)}function mB(t,e){const n={};let r;try{r=uT(t=xt(t)?t:Ct(t)+"")}catch(e){s("Expression parse error: "+t)}r.visit((t=>{if(t.type!==ES)return;const r=t.callee.name,i=dB.visitors[r];i&&i(r,t.arguments,e,n)}));const i=pB(r);return i.globals.forEach((t=>{const r=qT+t;!lt(n,r)&&e.getSignal(t)&&(n[r]=e.signalRef(t))})),{$expr:ot({code:i.code},e.options.ast?{ast:r}:null),$fields:i.fields,$params:n}}gB("bandwidth",(function(t,e){const n=HT(t,(e||this).context);return n&&n.bandwidth?n.bandwidth():0}),jT),gB("copy",(function(t,e){const n=HT(t,(e||this).context);return n?n.copy():void 0}),jT),gB("domain",(function(t,e){const n=HT(t,(e||this).context);return n?n.domain():[]}),jT),gB("range",(function(t,e){const n=HT(t,(e||this).context);return n&&n.range?n.range():[]}),jT),gB("invert",(function(t,e,n){const r=HT(t,(n||this).context);return r?k(e)?(r.invertRange||r.invert)(e):(r.invert||r.invertExtent)(e):void 0}),jT),gB("scale",(function(t,e,n){const r=HT(t,(n||this).context);return r?r(e):void 0}),jT),gB("gradient",(function(t,e,n,r,i){t=HT(t,(i||this).context);const o=jp(e,n);let a=t.domain(),s=a[0],u=F(a),l=f;return u-s?l=lp(t,s,u):t=(t.interpolator?Jd("sequential")().interpolator(t.interpolator()):Jd("linear")().interpolate(t.interpolate()).range(t.range())).domain([s=0,u=1]),t.ticks&&(a=t.ticks(+r||15),s!==a[0]&&a.unshift(s),u!==F(a)&&a.push(u)),a.forEach((e=>o.stop(l(e),t(e)))),o}),jT),gB("geoArea",GT,jT),gB("geoBounds",VT,jT),gB("geoCentroid",XT,jT),gB("geoShape",(function(t,e,n){const r=HT(t,(n||this).context);return function(t){return r?r.path.context(t)(e):""}}),jT),gB("geoScale",(function(t,e){const n=HT(t,(e||this).context);return n&&n.scale()}),jT),gB("indata",(function(t,e,n){const r=this.context.data[t]["index:"+e],i=r?r.value.get(n):void 0;return i?i.count:i}),(function(t,e,n,r){e[0].type!==wS&&s("First argument to indata must be a string literal."),e[1].type!==wS&&s("Second argument to indata must be a string literal.");const i=e[0].value,o=e[1].value,a="@"+o;lt(a,r)||(r[a]=n.getData(i).indataRef(n,o))})),gB("data",ST,PT),gB("treePath",(function(t,e,n){const r=aB(t,this),i=r[e],o=r[n];return i&&o?i.path(o).map(oB):void 0}),PT),gB("treeAncestors",(function(t,e){const n=aB(t,this)[e];return n?n.ancestors().map(oB):void 0}),PT),gB("vlSelectionTest",(function(t,e,n){for(var r,i,o,a,s,u=this.context.data[t],l=u?u.values.value:[],c=u?u[kT]&&u[kT].value:void 0,f=n===pT,h=l.length,d=0;d(t[o[n].field]=e,t)),{}))}else u=mT,l=yT(i),(f=(c=v[u]||(v[u]={}))[s]||(c[s]=[])).push(l),n&&(f=_[s]||(_[s]=[])).push({[mT]:l});if(e=e||gT,v[mT]?v[mT]=CT[`${mT}_${e}`](...Object.values(v[mT])):Object.keys(v).forEach((t=>{v[t]=Object.keys(v[t]).map((e=>v[t][e])).reduce(((n,r)=>void 0===n?r:CT[`${x[t]}_${e}`](n,r)))})),y=Object.keys(_),n&&y.length){v[r?"vlPoint":"vlMulti"]=e===gT?{or:y.reduce(((t,e)=>(t.push(..._[e]),t)),[])}:{and:y.map((t=>({or:_[t]})))}}return v}),FT),gB("vlSelectionTuples",(function(t,e){return t.map((t=>ot(e.fields?{values:e.fields.map((e=>dT(e)(t.datum)))}:{[mT]:yT(t.datum)},e)))}));const yB=Bt(["rule"]),vB=Bt(["group","image","rect"]);function _B(t){return(t+"").toLowerCase()}function xB(t,e,n){n.endsWith(";")||(n="return("+n+");");const r=Function(...e.concat(n));return t&&t.functions?r.bind(t.functions):r}var bB={operator:(t,e)=>xB(t,["_"],e.code),parameter:(t,e)=>xB(t,["datum","_"],e.code),event:(t,e)=>xB(t,["event"],e.code),handler:(t,e)=>xB(t,["_","event"],`var datum=event.item&&event.item.datum;return ${e.code};`),encode:(t,e)=>{const{marktype:n,channels:r}=e;let i="var o=item,datum=o.datum,m=0,$;";for(const t in r){const e="o["+Ct(t)+"]";i+=`$=${r[t].code};if(${e}!==$)${e}=$,m=1;`}return i+=function(t,e){let n="";return yB[e]||(t.x2&&(t.x?(vB[e]&&(n+="if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;"),n+="o.width=o.x2-o.x;"):n+="o.x=o.x2-(o.width||0);"),t.xc&&(n+="o.x=o.xc-(o.width||0)/2;"),t.y2&&(t.y?(vB[e]&&(n+="if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;"),n+="o.height=o.y2-o.y;"):n+="o.y=o.y2-(o.height||0);"),t.yc&&(n+="o.y=o.yc-(o.height||0)/2;")),n}(r,n),i+="return m;",xB(t,["item","_"],i)},codegen:{get(t){const e=`[${t.map(Ct).join("][")}]`,n=Function("_",`return _${e};`);return n.path=e,n},comparator(t,e){let n;const r=Function("a","b","var u, v; return "+t.map(((t,r)=>{const i=e[r];let o,a;return t.path?(o=`a${t.path}`,a=`b${t.path}`):((n=n||{})["f"+r]=t,o=`this.f${r}(a)`,a=`this.f${r}(b)`),function(t,e,n,r){return`((u = ${t}) < (v = ${e}) || u == null) && v != null ? ${n}\n : (u > v || v == null) && u != null ? ${r}\n : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? ${n}\n : v !== v && u === u ? ${r} : `}(o,a,-i,i)})).join("")+"0;");return n?r.bind(n):r}}};function wB(t,e,n){if(!t||!A(t))return t;for(let r,i=0,o=kB.length;it&&t.$tupleid?va:t));return e.fn[n]||(e.fn[n]=Q(r,t.$order,e.expr.codegen))}},{key:"$context",parse:function(t,e){return e}},{key:"$subflow",parse:function(t,e){const n=t.$subflow;return function(t,r,i){const o=e.fork().parse(n),a=o.get(n.operators[0].id),s=o.signals.parent;return s&&s.set(i),a.detachSubflow=()=>e.detach(o),a}}},{key:"$tupleid",parse:function(){return va}}];const AB={skip:!0};function MB(t,e,n,r){return new EB(t,e,n,r)}function EB(t,e,n,r){this.dataflow=t,this.transforms=e,this.events=t.events.bind(t),this.expr=r||bB,this.signals={},this.scales={},this.nodes={},this.data={},this.fn={},n&&(this.functions=Object.create(n),this.functions.context=this)}function DB(t){this.dataflow=t.dataflow,this.transforms=t.transforms,this.events=t.events,this.expr=t.expr,this.signals=Object.create(t.signals),this.scales=Object.create(t.scales),this.nodes=Object.create(t.nodes),this.data=Object.create(t.data),this.fn=Object.create(t.fn),t.functions&&(this.functions=Object.create(t.functions),this.functions.context=this)}function CB(t,e){t&&(null==e?t.removeAttribute("aria-label"):t.setAttribute("aria-label",e))}EB.prototype=DB.prototype={fork(){const t=new DB(this);return(this.subcontext||(this.subcontext=[])).push(t),t},detach(t){this.subcontext=this.subcontext.filter((e=>e!==t));const e=Object.keys(t.nodes);for(const n of e)t.nodes[n]._targets=null;for(const n of e)t.nodes[n].detach();t.nodes=null},get(t){return this.nodes[t]},set(t,e){return this.nodes[t]=e},add(t,e){const n=this,r=n.dataflow,i=t.value;if(n.set(t.id,e),function(t){return"collect"===_B(t)}(t.type)&&i&&(i.$ingest?r.ingest(e,i.$ingest,i.$format):i.$request?r.preload(e,i.$request,i.$format):r.pulse(e,r.changeset().insert(i))),t.root&&(n.root=e),t.parent){let i=n.get(t.parent.$ref);i?(r.connect(i,[e]),e.targets().add(i)):(n.unresolved=n.unresolved||[]).push((()=>{i=n.get(t.parent.$ref),r.connect(i,[e]),e.targets().add(i)}))}if(t.signal&&(n.signals[t.signal]=e),t.scale&&(n.scales[t.scale]=e),t.data)for(const r in t.data){const i=n.data[r]||(n.data[r]={});t.data[r].forEach((t=>i[t]=e))}},resolve(){return(this.unresolved||[]).forEach((t=>t())),delete this.unresolved,this},operator(t,e){this.add(t,this.dataflow.add(t.value,e))},transform(t,e){this.add(t,this.dataflow.add(this.transforms[_B(e)]))},stream(t,e){this.set(t.id,e)},update(t,e,n,r,i){this.dataflow.on(e,n,r,i,t.options)},operatorExpression(t){return this.expr.operator(this,t)},parameterExpression(t){return this.expr.parameter(this,t)},eventExpression(t){return this.expr.event(this,t)},handlerExpression(t){return this.expr.handler(this,t)},encodeExpression(t){return this.expr.encode(this,t)},parse:function(t){const e=this,n=t.operators||[];return t.background&&(e.background=t.background),t.eventConfig&&(e.eventConfig=t.eventConfig),t.locale&&(e.locale=t.locale),n.forEach((t=>e.parseOperator(t))),n.forEach((t=>e.parseOperatorParameters(t))),(t.streams||[]).forEach((t=>e.parseStream(t))),(t.updates||[]).forEach((t=>e.parseUpdate(t))),e.resolve()},parseOperator:function(t){const e=this;!function(t){return"operator"===_B(t)}(t.type)&&t.type?e.transform(t,t.type):e.operator(t,t.update?e.operatorExpression(t.update):null)},parseOperatorParameters:function(t){const e=this;if(t.params){const n=e.get(t.id);n||s("Invalid operator id: "+t.id),e.dataflow.connect(n,n.parameters(e.parseParameters(t.params),t.react,t.initonly))}},parseParameters:function(t,e){e=e||{};const n=this;for(const r in t){const i=t[r];e[r]=k(i)?i.map((t=>wB(t,n,e))):wB(i,n,e)}return e},parseStream:function(t){var e,n=this,r=null!=t.filter?n.eventExpression(t.filter):void 0,i=null!=t.stream?n.get(t.stream):void 0;t.source?i=n.events(t.source,t.type,r):t.merge&&(i=(e=t.merge.map((t=>n.get(t))))[0].merge.apply(e[0],e.slice(1))),t.between&&(e=t.between.map((t=>n.get(t))),i=i.between(e[0],e[1])),t.filter&&(i=i.filter(r)),null!=t.throttle&&(i=i.throttle(+t.throttle)),null!=t.debounce&&(i=i.debounce(+t.debounce)),null==i&&s("Invalid stream definition: "+JSON.stringify(t)),t.consume&&i.consume(!0),n.stream(t,i)},parseUpdate:function(t){var e,n=this,r=A(r=t.source)?r.$ref:r,i=n.get(r),o=t.update,a=void 0;i||s("Source not defined: "+t.source),e=t.target&&t.target.$expr?n.eventExpression(t.target.$expr):n.get(t.target),o&&o.$expr&&(o.$params&&(a=n.parseParameters(o.$params)),o=n.handlerExpression(o.$expr)),n.update(t,i,e,o,a)},getState:function(t){var e=this,n={};if(t.signals){var r=n.signals={};Object.keys(e.signals).forEach((n=>{const i=e.signals[n];t.signals(n,i)&&(r[n]=i.value)}))}if(t.data){var i=n.data={};Object.keys(e.data).forEach((n=>{const r=e.data[n];t.data(n,r)&&(i[n]=r.input.value)}))}return e.subcontext&&!1!==t.recurse&&(n.subcontext=e.subcontext.map((e=>e.getState(t)))),n},setState:function(t){var e=this,n=e.dataflow,r=t.data,i=t.signals;Object.keys(i||{}).forEach((t=>{n.update(e.signals[t],i[t],AB)})),Object.keys(r||{}).forEach((t=>{n.pulse(e.data[t].input,n.changeset().remove(p).insert(r[t]))})),(t.subcontext||[]).forEach(((t,n)=>{const r=e.subcontext[n];r&&r.setState(t)}))}};const FB="default";function SB(t,e){const n=t.globalCursor()?"undefined"!=typeof document&&document.body:t.container();if(n)return null==e?n.style.removeProperty("cursor"):n.style.cursor=e}function $B(t,e){var n=t._runtime.data;return lt(n,e)||s("Unrecognized data set: "+e),n[e]}function TB(t,e){Ma(e)||s("Second argument to changes must be a changeset.");const n=$B(this,t);return n.modified=!0,this.pulse(n.input,e)}function BB(t){var e=t.padding();return Math.max(0,t._viewWidth+e.left+e.right)}function zB(t){var e=t.padding();return Math.max(0,t._viewHeight+e.top+e.bottom)}function NB(t){var e=t.padding(),n=t._origin;return[e.left+n[0],e.top+n[1]]}function OB(t,e,n){var r,i,o=t._renderer,a=o&&o.canvas();return a&&(i=NB(t),(r=Jy(e.changedTouches?e.changedTouches[0]:e,a))[0]-=i[0],r[1]-=i[1]),e.dataflow=t,e.item=n,e.vega=function(t,e,n){const r=e?"group"===e.mark.marktype?e:e.mark.group:null;function i(t){var n,i=r;if(t)for(n=e;n;n=n.mark.group)if(n.mark.name===t){i=n;break}return i&&i.mark&&i.mark.interactive?i:{}}function o(t){if(!t)return n;xt(t)&&(t=i(t));const e=n.slice();for(;t;)e[0]-=t.x||0,e[1]-=t.y||0,t=t.mark&&t.mark.group;return e}return{view:rt(t),item:rt(e||{}),group:i,xy:o,x:t=>o(t)[0],y:t=>o(t)[1]}}(t,n,r),e}const RB="view",UB={trap:!1};function LB(t,e,n,r){t._eventListeners.push({type:n,sources:V(e),handler:r})}function qB(t,e,n){const r=t._eventConfig&&t._eventConfig[e];return!(!1===r||A(r)&&!r[n])||(t.warn(`Blocked ${e} ${n} event listener.`),!1)}function PB(t){return t.item}function jB(t){return t.item.mark.source}function IB(t){return function(e,n){return n.vega.view().changeset().encode(n.item,t)}}function HB(t,e,n){const r=document.createElement(t);for(const t in e)r.setAttribute(t,e[t]);return null!=n&&(r.textContent=n),r}const WB="vega-bind",YB="vega-bind-name",GB="vega-bind-radio";function VB(t,e,n,r){const i=n.event||"input",o=()=>t.update(e.value);r.signal(n.signal,e.value),e.addEventListener(i,o),LB(r,e,i,o),t.set=t=>{e.value=t,e.dispatchEvent(function(t){return"undefined"!=typeof Event?new Event(t):{type:t}}(i))}}function XB(t,e,n,r){const i=r.signal(n.signal),o=HB("div",{class:WB}),a="radio"===n.input?o:o.appendChild(HB("label"));a.appendChild(HB("span",{class:YB},n.name||n.signal)),e.appendChild(o);let s=JB;switch(n.input){case"checkbox":s=ZB;break;case"select":s=QB;break;case"radio":s=KB;break;case"range":s=tz}s(t,a,n,i)}function JB(t,e,n,r){const i=HB("input");for(const t in n)"signal"!==t&&"element"!==t&&i.setAttribute("input"===t?"type":t,n[t]);i.setAttribute("name",n.signal),i.value=r,e.appendChild(i),i.addEventListener("input",(()=>t.update(i.value))),t.elements=[i],t.set=t=>i.value=t}function ZB(t,e,n,r){const i={type:"checkbox",name:n.signal};r&&(i.checked=!0);const o=HB("input",i);e.appendChild(o),o.addEventListener("change",(()=>t.update(o.checked))),t.elements=[o],t.set=t=>o.checked=!!t||null}function QB(t,e,n,r){const i=HB("select",{name:n.signal}),o=n.labels||[];n.options.forEach(((t,e)=>{const n={value:t};ez(t,r)&&(n.selected=!0),i.appendChild(HB("option",n,(o[e]||t)+""))})),e.appendChild(i),i.addEventListener("change",(()=>{t.update(n.options[i.selectedIndex])})),t.elements=[i],t.set=t=>{for(let e=0,r=n.options.length;e{const s={type:"radio",name:n.signal,value:e};ez(e,r)&&(s.checked=!0);const u=HB("input",s);u.addEventListener("change",(()=>t.update(e)));const l=HB("label",{},(o[a]||e)+"");return l.prepend(u),i.appendChild(l),u})),t.set=e=>{const n=t.elements,r=n.length;for(let t=0;t{u.textContent=s.value,t.update(+s.value)};s.addEventListener("input",l),s.addEventListener("change",l),t.elements=[s],t.set=t=>{s.value=t,u.textContent=t}}function ez(t,e){return t===e||t+""==e+""}function nz(t,e,n,r,i,o){return(e=e||new r(t.loader())).initialize(n,BB(t),zB(t),NB(t),i,o).background(t.background())}function rz(t,e){return e?function(){try{e.apply(this,arguments)}catch(e){t.error(e)}}:null}function iz(t,e,n){if("string"==typeof e){if("undefined"==typeof document)return t.error("DOM document instance not found."),null;if(!(e=document.querySelector(e)))return t.error("Signal bind element not found: "+e),null}if(e&&n)try{e.textContent=""}catch(n){e=null,t.error(n)}return e}const oz=t=>+t||0;function az(t){return A(t)?{top:oz(t.top),bottom:oz(t.bottom),left:oz(t.left),right:oz(t.right)}:(t=>({top:t,bottom:t,left:t,right:t}))(oz(t))}async function sz(t,e,n,r){const i=y_(e),o=i&&i.headless;return o||s("Unrecognized renderer type: "+e),await t.runAsync(),nz(t,null,null,o,n,r).renderAsync(t._scenegraph.root)}var uz="width",lz="height",cz="padding",fz={skip:!0};function hz(t,e){var n=t.autosize(),r=t.padding();return e-(n&&n.contains===cz?r.left+r.right:0)}function dz(t,e){var n=t.autosize(),r=t.padding();return e-(n&&n.contains===cz?r.top+r.bottom:0)}function pz(t,e){return e.modified&&k(e.input.value)&&t.indexOf("_:vega:_")}function gz(t,e){return!("parent"===t||e instanceof Qa.proxy)}function mz(t,e,n,r){const i=t.element();i&&i.setAttribute("title",function(t){return null==t?"":k(t)?yz(t):A(t)&&!mt(t)?(e=t,Object.keys(e).map((t=>{const n=e[t];return t+": "+(k(n)?yz(n):vz(n))})).join("\n")):t+"";var e}(r))}function yz(t){return"["+t.map(vz).join(", ")+"]"}function vz(t){return k(t)?"[…]":A(t)&&!mt(t)?"{…}":t}function _z(t,e){const n=this;if(e=e||{},Xa.call(n),e.loader&&n.loader(e.loader),e.logger&&n.logger(e.logger),null!=e.logLevel&&n.logLevel(e.logLevel),e.locale||t.locale){const r=ot({},t.locale,e.locale);n.locale(Uo(r.number,r.time))}n._el=null,n._elBind=null,n._renderType=e.renderer||g_.Canvas,n._scenegraph=new Iy;const r=n._scenegraph.root;n._renderer=null,n._tooltip=e.tooltip||mz,n._redraw=!0,n._handler=(new gv).scene(r),n._globalCursor=!1,n._preventDefault=!1,n._timers=[],n._eventListeners=[],n._resizeListeners=[],n._eventConfig=function(t){const e=ot({defaults:{}},t),n=(t,e)=>{e.forEach((e=>{k(t[e])&&(t[e]=Bt(t[e]))}))};return n(e.defaults,["prevent","allow"]),n(e,["view","window","selector"]),e}(t.eventConfig),n.globalCursor(n._eventConfig.globalCursor);const i=function(t,e,n){return MB(t,Qa,lB,n).parse(e)}(n,t,e.expr);n._runtime=i,n._signals=i.signals,n._bind=(t.bindings||[]).map((t=>({state:null,param:ot({},t)}))),i.root&&i.root.set(r),r.source=i.data.root.input,n.pulse(i.data.root.input,n.changeset().insert(r.items)),n._width=n.width(),n._height=n.height(),n._viewWidth=hz(n,n._width),n._viewHeight=dz(n,n._height),n._origin=[0,0],n._resize=0,n._autosize=1,function(t){var e=t._signals,n=e[uz],r=e[lz],i=e[cz];function o(){t._autosize=t._resize=1}t._resizeWidth=t.add(null,(e=>{t._width=e.size,t._viewWidth=hz(t,e.size),o()}),{size:n}),t._resizeHeight=t.add(null,(e=>{t._height=e.size,t._viewHeight=dz(t,e.size),o()}),{size:r});const a=t.add(null,o,{pad:i});t._resizeWidth.rank=n.rank+1,t._resizeHeight.rank=r.rank+1,a.rank=i.rank+1}(n),function(t){t.add(null,(e=>(t._background=e.bg,t._resize=1,e.bg)),{bg:t._signals.background})}(n),function(t){const e=t._signals.cursor||(t._signals.cursor=t.add({user:FB,item:null}));t.on(t.events("view","pointermove"),e,((t,n)=>{const r=e.value,i=r?xt(r)?r:r.user:FB,o=n.item&&n.item.cursor||null;return r&&i===r.user&&o==r.item?r:{user:i,item:o}})),t.add(null,(function(e){let n=e.cursor,r=this.value;return xt(n)||(r=n.item,n=n.user),SB(t,n&&n!==FB?n:r||n),r}),{cursor:e})}(n),n.description(t.description),e.hover&&n.hover(),e.container&&n.initialize(e.container,e.bind)}function xz(t,e){return lt(t._signals,e)?t._signals[e]:s("Unrecognized signal name: "+Ct(e))}function bz(t,e){const n=(t._targets||[]).filter((t=>t._update&&t._update.handler===e));return n.length?n[0]:null}function wz(t,e,n,r){let i=bz(n,r);return i||(i=rz(t,(()=>r(e,n.value))),i.handler=r,t.on(n,null,i)),t}function kz(t,e,n){const r=bz(e,n);return r&&e._targets.remove(r),t}dt(_z,Xa,{async evaluate(t,e,n){if(await Xa.prototype.evaluate.call(this,t,e),this._redraw||this._resize)try{this._renderer&&(this._resize&&(this._resize=0,function(t){var e=NB(t),n=BB(t),r=zB(t);t._renderer.background(t.background()),t._renderer.resize(n,r,e),t._handler.origin(e),t._resizeListeners.forEach((e=>{try{e(n,r)}catch(e){t.error(e)}}))}(this)),await this._renderer.renderAsync(this._scenegraph.root)),this._redraw=!1}catch(t){this.error(t)}return n&&pa(this,n),this},dirty(t){this._redraw=!0,this._renderer&&this._renderer.dirty(t)},description(t){if(arguments.length){const e=null!=t?t+"":null;return e!==this._desc&&CB(this._el,this._desc=e),this}return this._desc},container(){return this._el},scenegraph(){return this._scenegraph},origin(){return this._origin.slice()},signal(t,e,n){const r=xz(this,t);return 1===arguments.length?r.value:this.update(r,e,n)},width(t){return arguments.length?this.signal("width",t):this.signal("width")},height(t){return arguments.length?this.signal("height",t):this.signal("height")},padding(t){return arguments.length?this.signal("padding",az(t)):az(this.signal("padding"))},autosize(t){return arguments.length?this.signal("autosize",t):this.signal("autosize")},background(t){return arguments.length?this.signal("background",t):this.signal("background")},renderer(t){return arguments.length?(y_(t)||s("Unrecognized renderer type: "+t),t!==this._renderType&&(this._renderType=t,this._resetRenderer()),this):this._renderType},tooltip(t){return arguments.length?(t!==this._tooltip&&(this._tooltip=t,this._resetRenderer()),this):this._tooltip},loader(t){return arguments.length?(t!==this._loader&&(Xa.prototype.loader.call(this,t),this._resetRenderer()),this):this._loader},resize(){return this._autosize=1,this.touch(xz(this,"autosize"))},_resetRenderer(){this._renderer&&(this._renderer=null,this.initialize(this._el,this._elBind))},_resizeView:function(t,e,n,r,i,o){this.runAfter((a=>{let s=0;a._autosize=0,a.width()!==n&&(s=1,a.signal(uz,n,fz),a._resizeWidth.skip(!0)),a.height()!==r&&(s=1,a.signal(lz,r,fz),a._resizeHeight.skip(!0)),a._viewWidth!==t&&(a._resize=1,a._viewWidth=t),a._viewHeight!==e&&(a._resize=1,a._viewHeight=e),a._origin[0]===i[0]&&a._origin[1]===i[1]||(a._resize=1,a._origin=i),s&&a.run("enter"),o&&a.runAfter((t=>t.resize()))}),!1,1)},addEventListener(t,e,n){let r=e;return n&&!1===n.trap||(r=rz(this,e),r.raw=e),this._handler.on(t,r),this},removeEventListener(t,e){for(var n,r,i=this._handler.handlers(t),o=i.length;--o>=0;)if(r=i[o].type,n=i[o].handler,t===r&&(e===n||e===n.raw)){this._handler.off(r,n);break}return this},addResizeListener(t){const e=this._resizeListeners;return e.indexOf(t)<0&&e.push(t),this},removeResizeListener(t){var e=this._resizeListeners,n=e.indexOf(t);return n>=0&&e.splice(n,1),this},addSignalListener(t,e){return wz(this,t,xz(this,t),e)},removeSignalListener(t,e){return kz(this,xz(this,t),e)},addDataListener(t,e){return wz(this,t,$B(this,t).values,e)},removeDataListener(t,e){return kz(this,$B(this,t).values,e)},globalCursor(t){if(arguments.length){if(this._globalCursor!==!!t){const e=SB(this,null);this._globalCursor=!!t,e&&SB(this,e)}return this}return this._globalCursor},preventDefault(t){return arguments.length?(this._preventDefault=t,this):this._preventDefault},timer:function(t,e){this._timers.push(function(t,e,n){var r=new QE,i=e;return null==e?(r.restart(t,e,n),r):(r._restart=r.restart,r.restart=function(t,e,n){e=+e,n=null==n?JE():+n,r._restart((function o(a){a+=i,r._restart(o,i+=e,n),t(a)}),e,n)},r.restart(t,e,n),r)}((function(e){t({timestamp:Date.now(),elapsed:e})}),e))},events:function(t,e,n){var r,i=this,o=new za(n),a=function(n,r){i.runAsync(null,(()=>{t===RB&&function(t,e){var n=t._eventConfig.defaults,r=n.prevent,i=n.allow;return!1!==r&&!0!==i&&(!0===r||!1===i||(r?r[e]:i?!i[e]:t.preventDefault()))}(i,e)&&n.preventDefault(),o.receive(OB(i,n,r))}))};if("timer"===t)qB(i,"timer",e)&&i.timer(a,e);else if(t===RB)qB(i,"view",e)&&i.addEventListener(e,a,UB);else if("window"===t?qB(i,"window",e)&&"undefined"!=typeof window&&(r=[window]):"undefined"!=typeof document&&qB(i,"selector",e)&&(r=Array.from(document.querySelectorAll(t))),r){for(var s=0,u=r.length;s=0;)i[t].stop();for(t=o.length;--t>=0;)for(e=(n=o[t]).sources.length;--e>=0;)n.sources[e].removeEventListener(n.type,n.handler);return r&&r.call(this,this._handler,null,null,null),this},hover:function(t,e){return e=[e||"update",(t=[t||"hover"])[0]],this.on(this.events("view","pointerover",PB),jB,IB(t)),this.on(this.events("view","pointerout",PB),jB,IB(e)),this},data:function(t,e){return arguments.length<2?$B(this,t).values.value:TB.call(this,t,Ea().remove(p).insert(e))},change:TB,insert:function(t,e){return TB.call(this,t,Ea().insert(e))},remove:function(t,e){return TB.call(this,t,Ea().remove(e))},scale:function(t){var e=this._runtime.scales;return lt(e,t)||s("Unrecognized scale or projection: "+t),e[t].value},initialize:function(t,e){const n=this,r=n._renderType,i=n._eventConfig.bind,o=y_(r);t=n._el=t?iz(n,t,!0):null,function(t){const e=t.container();e&&(e.setAttribute("role","graphics-document"),e.setAttribute("aria-roleDescription","visualization"),CB(e,t.description()))}(n),o||n.error("Unrecognized renderer type: "+r);const a=o.handler||gv,s=t?o.renderer:o.headless;return n._renderer=s?nz(n,n._renderer,t,s):null,n._handler=function(t,e,n,r){const i=new r(t.loader(),rz(t,t.tooltip())).scene(t.scenegraph().root).initialize(n,NB(t),t);return e&&e.handlers().forEach((t=>{i.on(t.type,t.handler)})),i}(n,n._handler,t,a),n._redraw=!0,t&&"none"!==i&&(e=e?n._elBind=iz(n,e,!0):t.appendChild(HB("form",{class:"vega-bindings"})),n._bind.forEach((t=>{t.param.element&&"container"!==i&&(t.element=iz(n,t.param.element,!!t.param.input))})),n._bind.forEach((t=>{!function(t,e,n){if(!e)return;const r=n.param;let i=n.state;i||(i=n.state={elements:null,active:!1,set:null,update:e=>{e!=t.signal(r.signal)&&t.runAsync(null,(()=>{i.source=!0,t.signal(r.signal,e)}))}},r.debounce&&(i.update=it(r.debounce,i.update))),(null==r.input&&r.element?VB:XB)(i,e,r,t),i.active||(t.on(t._signals[r.signal],null,(()=>{i.source?i.source=!1:i.set(t.signal(r.signal))})),i.active=!0)}(n,t.element||e,t)}))),n},toImageURL:async function(t,e){t!==g_.Canvas&&t!==g_.SVG&&t!==g_.PNG&&s("Unrecognized image type: "+t);const n=await sz(this,t,e);return t===g_.SVG?function(t,e){const n=new Blob([t],{type:e});return window.URL.createObjectURL(n)}(n.svg(),"image/svg+xml"):n.canvas().toDataURL("image/png")},toCanvas:async function(t,e){return(await sz(this,g_.Canvas,t,e)).canvas()},toSVG:async function(t){return(await sz(this,g_.SVG,t)).svg()},getState:function(t){return this._runtime.getState(t||{data:pz,signals:gz,recurse:!0})},setState:function(t){return this.runAsync(null,(e=>{e._trigger=!1,e._runtime.setState(t)}),(t=>{t._trigger=!0})),this}});const Az="view",Mz="[",Ez="]",Dz="{",Cz="}",Fz=":",Sz=",",$z="@",Tz=">",Bz=/[[\]{}]/,zz={"*":1,arc:1,area:1,group:1,image:1,line:1,path:1,rect:1,rule:1,shape:1,symbol:1,text:1,trail:1};let Nz,Oz;function Rz(t,e,n){return Nz=e||Az,Oz=n||zz,Lz(t.trim()).map(qz)}function Uz(t,e,n,r,i){const o=t.length;let a,s=0;for(;e=0?--s:r&&r.indexOf(a)>=0&&++s}return e}function Lz(t){const e=[],n=t.length;let r=0,i=0;for(;i' after between selector: "+t;n=n.map(qz);const i=qz(t.slice(1).trim());if(i.between)return{between:n,stream:i};i.between=n;return i}(t):function(t){const e={source:Nz},n=[];let r,i,o=[0,0],a=0,s=0,u=t.length,l=0;if(t[u-1]===Cz){if(l=t.lastIndexOf(Dz),!(l>=0))throw"Unmatched right brace: "+t;try{o=function(t){const e=t.split(Sz);if(!t.length||e.length>2)throw t;return e.map((e=>{const n=+e;if(n!=n)throw t;return n}))}(t.substring(l+1,u-1))}catch(e){throw"Invalid throttle specification: "+t}u=(t=t.slice(0,l).trim()).length,l=0}if(!u)throw t;t[0]===$z&&(a=++l);r=Uz(t,l,Fz),r1?(e.type=n[1],a?e.markname=n[0].slice(1):!function(t){return Oz[t]}(n[0])?e.source=n[0]:e.marktype=n[0]):e.type=n[0];"!"===e.type.slice(-1)&&(e.consume=!0,e.type=e.type.slice(0,-1));null!=i&&(e.filter=i);o[0]&&(e.throttle=o[0]);o[1]&&(e.debounce=o[1]);return e}(t)}function Pz(t){return A(t)?t:{type:t||"pad"}}const jz=t=>+t||0,Iz=t=>({top:t,bottom:t,left:t,right:t});function Hz(t){return A(t)?t.signal?t:{top:jz(t.top),bottom:jz(t.bottom),left:jz(t.left),right:jz(t.right)}:Iz(jz(t))}const Wz=t=>A(t)&&!k(t)?ot({},t):{value:t};function Yz(t,e,n,r){if(null!=n){return A(n)&&!k(n)||k(n)&&n.length&&A(n[0])?t.update[e]=n:t[r||"enter"][e]={value:n},1}return 0}function Gz(t,e,n){for(const n in e)Yz(t,n,e[n]);for(const e in n)Yz(t,e,n[e],"update")}function Vz(t,e,n){for(const r in e)n&<(n,r)||(t[r]=ot(t[r]||{},e[r]));return t}function Xz(t,e){return e&&(e.enter&&e.enter[t]||e.update&&e.update[t])}const Jz="mark",Zz="frame",Qz="scope",Kz="axis",tN="axis-domain",eN="axis-grid",nN="axis-label",rN="axis-tick",iN="axis-title",oN="legend",aN="legend-band",sN="legend-entry",uN="legend-gradient",lN="legend-label",cN="legend-symbol",fN="legend-title",hN="title",dN="title-text",pN="title-subtitle";function gN(t,e,n){t[e]=n&&n.signal?{signal:n.signal}:{value:n}}const mN=t=>xt(t)?Ct(t):t.signal?`(${t.signal})`:xN(t);function yN(t){if(null!=t.gradient)return function(t){const e=[t.start,t.stop,t.count].map((t=>null==t?null:Ct(t)));for(;e.length&&null==F(e);)e.pop();return e.unshift(mN(t.gradient)),`gradient(${e.join(",")})`}(t);let e=t.signal?`(${t.signal})`:t.color?function(t){return t.c?vN("hcl",t.h,t.c,t.l):t.h||t.s?vN("hsl",t.h,t.s,t.l):t.l||t.a?vN("lab",t.l,t.a,t.b):t.r||t.g||t.b?vN("rgb",t.r,t.g,t.b):null}(t.color):null!=t.field?xN(t.field):void 0!==t.value?Ct(t.value):void 0;return null!=t.scale&&(e=function(t,e){const n=mN(t.scale);null!=t.range?e=`lerp(_range(${n}), ${+t.range})`:(void 0!==e&&(e=`_scale(${n}, ${e})`),t.band&&(e=(e?e+"+":"")+`_bandwidth(${n})`+(1==+t.band?"":"*"+_N(t.band)),t.extra&&(e=`(datum.extra ? _scale(${n}, datum.extra.value) : ${e})`)),null==e&&(e="0"));return e}(t,e)),void 0===e&&(e=null),null!=t.exponent&&(e=`pow(${e},${_N(t.exponent)})`),null!=t.mult&&(e+=`*${_N(t.mult)}`),null!=t.offset&&(e+=`+${_N(t.offset)}`),t.round&&(e=`round(${e})`),e}const vN=(t,e,n,r)=>`(${t}(${[e,n,r].map(yN).join(",")})+'')`;function _N(t){return A(t)?"("+yN(t)+")":t}function xN(t){return bN(A(t)?t:{datum:t})}function bN(t){let e,n,r;if(t.signal)e="datum",r=t.signal;else if(t.group||t.parent){for(n=Math.max(1,t.level||1),e="item";n-- >0;)e+=".mark.group";t.parent?(r=t.parent,e+=".datum"):r=t.group}else t.datum?(e="datum",r=t.datum):s("Invalid field reference: "+Ct(t));return t.signal||(r=xt(r)?u(r).map(Ct).join("]["):bN(r)),e+"["+r+"]"}function wN(t,e,n,r,i,o){const a={};(o=o||{}).encoders={$encode:a},t=function(t,e,n,r,i){const o={},a={};let s,u,l,c;for(u in u="lineBreak","text"!==e||null==i[u]||Xz(u,t)||gN(o,u,i[u]),("legend"==n||String(n).startsWith("axis"))&&(n=null),c=n===Zz?i.group:n===Jz?ot({},i.mark,i[e]):null,c)l=Xz(u,t)||("fill"===u||"stroke"===u)&&(Xz("fill",t)||Xz("stroke",t)),l||gN(o,u,c[u]);for(u in V(r).forEach((e=>{const n=i.style&&i.style[e];for(const e in n)Xz(e,t)||gN(o,e,n[e])})),t=ot({},t),o)c=o[u],c.signal?(s=s||{})[u]=c:a[u]=c;return t.enter=ot(a,t.enter),s&&(t.update=ot(s,t.update)),t}(t,e,n,r,i.config);for(const n in t)a[n]=kN(t[n],e,o,i);return o}function kN(t,e,n,r){const i={},o={};for(const e in t)null!=t[e]&&(i[e]=AN((a=t[e],k(a)?function(t){let e="";return t.forEach((t=>{const n=yN(t);e+=t.test?`(${t.test})?${n}:`:n})),":"===F(e)&&(e+="null"),e}(a):yN(a)),r,n,o));var a;return{$expr:{marktype:e,channels:i},$fields:Object.keys(o),$output:Object.keys(t)}}function AN(t,e,n,r){const i=mB(t,e);return i.$fields.forEach((t=>r[t]=1)),ot(n,i.$params),i.$expr}const MN="outer",EN=["value","update","init","react","bind"];function DN(t,e){s(t+' for "outer" push: '+Ct(e))}function CN(t,e){const n=t.name;if(t.push===MN)e.signals[n]||DN("No prior signal definition",n),EN.forEach((e=>{void 0!==t[e]&&DN("Invalid property ",e)}));else{const r=e.addSignal(n,t.value);!1===t.react&&(r.react=!1),t.bind&&e.addBinding(n,t.bind)}}function FN(t,e,n,r){this.id=-1,this.type=t,this.value=e,this.params=n,r&&(this.parent=r)}function SN(t,e,n,r){return new FN(t,e,n,r)}function $N(t,e){return SN("operator",t,e)}function TN(t){const e={$ref:t.id};return t.id<0&&(t.refs=t.refs||[]).push(e),e}function BN(t,e){return e?{$field:t,$name:e}:{$field:t}}const zN=BN("key");function NN(t,e){return{$compare:t,$order:e}}const ON="descending";function RN(t,e){return(t&&t.signal?"$"+t.signal:t||"")+(t&&e?"_":"")+(e&&e.signal?"$"+e.signal:e||"")}const UN="scope",LN="view";function qN(t){return t&&t.signal}function PN(t){if(qN(t))return!0;if(A(t))for(const e in t)if(PN(t[e]))return!0;return!1}function jN(t,e){return null!=t?t:e}function IN(t){return t&&t.signal||t}const HN="timer";function WN(t,e){return(t.merge?YN:t.stream?GN:t.type?VN:s("Invalid stream specification: "+Ct(t)))(t,e)}function YN(t,e){const n=XN({merge:t.merge.map((t=>WN(t,e)))},t,e);return e.addStream(n).id}function GN(t,e){const n=XN({stream:WN(t.stream,e)},t,e);return e.addStream(n).id}function VN(t,e){let n;t.type===HN?(n=e.event(HN,t.throttle),t={between:t.between,filter:t.filter}):n=e.event(function(t){return t===UN?LN:t||LN}(t.source),t.type);const r=XN({stream:n},t,e);return 1===Object.keys(r).length?n:e.addStream(r).id}function XN(t,e,n){let r=e.between;return r&&(2!==r.length&&s('Stream "between" parameter must have 2 entries: '+Ct(e)),t.between=[WN(r[0],n),WN(r[1],n)]),r=e.filter?[].concat(e.filter):[],(e.marktype||e.markname||e.markrole)&&r.push(function(t,e,n){const r="event.item";return r+(t&&"*"!==t?"&&"+r+".mark.marktype==='"+t+"'":"")+(n?"&&"+r+".mark.role==='"+n+"'":"")+(e?"&&"+r+".mark.name==='"+e+"'":"")}(e.marktype,e.markname,e.markrole)),e.source===UN&&r.push("inScope(event.item)"),r.length&&(t.filter=mB("("+r.join(")&&(")+")",n).$expr),null!=(r=e.throttle)&&(t.throttle=+r),null!=(r=e.debounce)&&(t.debounce=+r),e.consume&&(t.consume=!0),t}const JN={code:"_.$value",ast:{type:"Identifier",value:"value"}};function ZN(t,e,n){const r=t.encode,i={target:n};let o=t.events,a=t.update,u=[];o||s("Signal update missing events specification."),xt(o)&&(o=Rz(o,e.isSubscope()?UN:LN)),o=V(o).filter((t=>t.signal||t.scale?(u.push(t),0):1)),u.length>1&&(u=[QN(u)]),o.length&&u.push(o.length>1?{merge:o}:o[0]),null!=r&&(a&&s("Signal encode and update are mutually exclusive."),a="encode(item(),"+Ct(r)+")"),i.update=xt(a)?mB(a,e):null!=a.expr?mB(a.expr,e):null!=a.value?a.value:null!=a.signal?{$expr:JN,$params:{$value:e.signalRef(a.signal)}}:s("Invalid signal update specification."),t.force&&(i.options={force:!0}),u.forEach((t=>e.addUpdate(ot(function(t,e){return{source:t.signal?e.signalRef(t.signal):t.scale?e.scaleRef(t.scale):WN(t,e)}}(t,e),i))))}function QN(t){return{signal:"["+t.map((t=>t.scale?'scale("'+t.scale+'")':t.signal))+"]"}}const KN=t=>(e,n,r)=>SN(t,n,e||void 0,r),tO=KN("aggregate"),eO=KN("axisticks"),nO=KN("bound"),rO=KN("collect"),iO=KN("compare"),oO=KN("datajoin"),aO=KN("encode"),sO=KN("expression"),uO=KN("facet"),lO=KN("field"),cO=KN("key"),fO=KN("legendentries"),hO=KN("load"),dO=KN("mark"),pO=KN("multiextent"),gO=KN("multivalues"),mO=KN("overlap"),yO=KN("params"),vO=KN("prefacet"),_O=KN("projection"),xO=KN("proxy"),bO=KN("relay"),wO=KN("render"),kO=KN("scale"),AO=KN("sieve"),MO=KN("sortitems"),EO=KN("viewlayout"),DO=KN("values");let CO=0;const FO={min:"min",max:"max",count:"sum"};function SO(t,e){const n=e.getScale(t.name).params;let r;for(r in n.domain=zO(t.domain,t,e),null!=t.range&&(n.range=jO(t,e,n)),null!=t.interpolate&&function(t,e){e.interpolate=$O(t.type||t),null!=t.gamma&&(e.interpolateGamma=$O(t.gamma))}(t.interpolate,n),null!=t.nice&&(n.nice=function(t){return A(t)?{interval:$O(t.interval),step:$O(t.step)}:$O(t)}(t.nice)),null!=t.bins&&(n.bins=function(t,e){return t.signal||k(t)?TO(t,e):e.objectProperty(t)}(t.bins,e)),t)lt(n,r)||"name"===r||(n[r]=$O(t[r],e))}function $O(t,e){return A(t)?t.signal?e.signalRef(t.signal):s("Unsupported object: "+Ct(t)):t}function TO(t,e){return t.signal?e.signalRef(t.signal):t.map((t=>$O(t,e)))}function BO(t){s("Can not find data set: "+Ct(t))}function zO(t,e,n){if(t)return t.signal?n.signalRef(t.signal):(k(t)?NO:t.fields?RO:OO)(t,e,n);null==e.domainMin&&null==e.domainMax||s("No scale domain defined for domainMin/domainMax to override.")}function NO(t,e,n){return t.map((t=>$O(t,n)))}function OO(t,e,n){const r=n.getData(t.data);return r||BO(t.data),tp(e.type)?r.valuesRef(n,t.field,LO(t.sort,!1)):ip(e.type)?r.domainRef(n,t.field):r.extentRef(n,t.field)}function RO(t,e,n){const r=t.data,i=t.fields.reduce(((t,e)=>(e=xt(e)?{data:r,field:e}:k(e)||e.signal?function(t,e){const n="_:vega:_"+CO++,r=rO({});if(k(t))r.value={$ingest:t};else if(t.signal){const i="setdata("+Ct(n)+","+t.signal+")";r.params.input=e.signalRef(i)}return e.addDataPipeline(n,[r,AO({})]),{data:n,field:"data"}}(e,n):e,t.push(e),t)),[]);return(tp(e.type)?UO:ip(e.type)?qO:PO)(t,n,i)}function UO(t,e,n){const r=LO(t.sort,!0);let i,o;const a=n.map((t=>{const n=e.getData(t.data);return n||BO(t.data),n.countsRef(e,t.field,r)})),s={groupby:zN,pulse:a};r&&(i=r.op||"count",o=r.field?RN(i,r.field):"count",s.ops=[FO[i]],s.fields=[e.fieldRef(o)],s.as=[o]),i=e.add(tO(s));const u=e.add(rO({pulse:TN(i)}));return o=e.add(DO({field:zN,sort:e.sortRef(r),pulse:TN(u)})),TN(o)}function LO(t,e){return t&&(t.field||t.op?t.field||"count"===t.op?e&&t.field&&t.op&&!FO[t.op]&&s("Multiple domain scales can not be sorted using "+t.op):s("No field provided for sort aggregate op: "+t.op):A(t)?t.field="key":t={field:"key"}),t}function qO(t,e,n){const r=n.map((t=>{const n=e.getData(t.data);return n||BO(t.data),n.domainRef(e,t.field)}));return TN(e.add(gO({values:r})))}function PO(t,e,n){const r=n.map((t=>{const n=e.getData(t.data);return n||BO(t.data),n.extentRef(e,t.field)}));return TN(e.add(pO({extents:r})))}function jO(t,e,n){const r=e.config.range;let i=t.range;if(i.signal)return e.signalRef(i.signal);if(xt(i)){if(r&<(r,i))return jO(t=ot({},t,{range:r[i]}),e,n);"width"===i?i=[0,{signal:"width"}]:"height"===i?i=tp(t.type)?[0,{signal:"height"}]:[{signal:"height"},0]:s("Unrecognized scale range value: "+Ct(i))}else{if(i.scheme)return n.scheme=k(i.scheme)?TO(i.scheme,e):$O(i.scheme,e),i.extent&&(n.schemeExtent=TO(i.extent,e)),void(i.count&&(n.schemeCount=$O(i.count,e)));if(i.step)return void(n.rangeStep=$O(i.step,e));if(tp(t.type)&&!k(i))return zO(i,t,e);k(i)||s("Unsupported range type: "+Ct(i))}return i.map((t=>(k(t)?TO:$O)(t,e)))}function IO(t,e,n){return k(t)?t.map((t=>IO(t,e,n))):A(t)?t.signal?n.signalRef(t.signal):"fit"===e?t:s("Unsupported parameter object: "+Ct(t)):t}const HO="top",WO="left",YO="right",GO="bottom",VO="center",XO="vertical",JO="start",ZO="end",QO="index",KO="label",tR="offset",eR="perc",nR="perc2",rR="value",iR="guide-label",oR="guide-title",aR="group-title",sR="group-subtitle",uR="symbol",lR="gradient",cR="discrete",fR="size",hR=[fR,"shape","fill","stroke","strokeWidth","strokeDash","opacity"],dR={name:1,style:1,interactive:1},pR={value:0},gR={value:1},mR="group",yR="rect",vR="rule",_R="symbol",xR="text";function bR(t){return t.type=mR,t.interactive=t.interactive||!1,t}function wR(t,e){const n=(n,r)=>jN(t[n],jN(e[n],r));return n.isVertical=n=>XO===jN(t.direction,e.direction||(n?e.symbolDirection:e.gradientDirection)),n.gradientLength=()=>jN(t.gradientLength,e.gradientLength||e.gradientWidth),n.gradientThickness=()=>jN(t.gradientThickness,e.gradientThickness||e.gradientHeight),n.entryColumns=()=>jN(t.columns,jN(e.columns,+n.isVertical(!0))),n}function kR(t,e){const n=e&&(e.update&&e.update[t]||e.enter&&e.enter[t]);return n&&n.signal?n:n?n.value:null}function AR(t,e,n){return`item.anchor === '${JO}' ? ${t} : item.anchor === '${ZO}' ? ${e} : ${n}`}const MR=AR(Ct(WO),Ct(YO),Ct(VO));function ER(t,e){return e?t?A(t)?Object.assign({},t,{offset:ER(t.offset,e)}):{value:t,offset:e}:e:t}function DR(t,e){return e?(t.name=e.name,t.style=e.style||t.style,t.interactive=!!e.interactive,t.encode=Vz(t.encode,e,dR)):t.interactive=!1,t}function CR(t,e,n,r){const i=wR(t,n),o=i.isVertical(),a=i.gradientThickness(),s=i.gradientLength();let u,l,c,f,h;o?(l=[0,1],c=[0,0],f=a,h=s):(l=[0,0],c=[1,0],f=s,h=a);const d={enter:u={opacity:pR,x:pR,y:pR,width:Wz(f),height:Wz(h)},update:ot({},u,{opacity:gR,fill:{gradient:e,start:l,stop:c}}),exit:{opacity:pR}};return Gz(d,{stroke:i("gradientStrokeColor"),strokeWidth:i("gradientStrokeWidth")},{opacity:i("gradientOpacity")}),DR({type:yR,role:uN,encode:d},r)}function FR(t,e,n,r,i){const o=wR(t,n),a=o.isVertical(),s=o.gradientThickness(),u=o.gradientLength();let l,c,f,h,d="";a?(l="y",f="y2",c="x",h="width",d="1-"):(l="x",f="x2",c="y",h="height");const p={opacity:pR,fill:{scale:e,field:rR}};p[l]={signal:d+"datum."+eR,mult:u},p[c]=pR,p[f]={signal:d+"datum."+nR,mult:u},p[h]=Wz(s);const g={enter:p,update:ot({},p,{opacity:gR}),exit:{opacity:pR}};return Gz(g,{stroke:o("gradientStrokeColor"),strokeWidth:o("gradientStrokeWidth")},{opacity:o("gradientOpacity")}),DR({type:yR,role:aN,key:rR,from:i,encode:g},r)}const SR=`datum.${eR}<=0?"${WO}":datum.${eR}>=1?"${YO}":"${VO}"`,$R=`datum.${eR}<=0?"${GO}":datum.${eR}>=1?"${HO}":"middle"`;function TR(t,e,n,r){const i=wR(t,e),o=i.isVertical(),a=Wz(i.gradientThickness()),s=i.gradientLength();let u,l,c,f,h=i("labelOverlap"),d="";const p={enter:u={opacity:pR},update:l={opacity:gR,text:{field:KO}},exit:{opacity:pR}};return Gz(p,{fill:i("labelColor"),fillOpacity:i("labelOpacity"),font:i("labelFont"),fontSize:i("labelFontSize"),fontStyle:i("labelFontStyle"),fontWeight:i("labelFontWeight"),limit:jN(t.labelLimit,e.gradientLabelLimit)}),o?(u.align={value:"left"},u.baseline=l.baseline={signal:$R},c="y",f="x",d="1-"):(u.align=l.align={signal:SR},u.baseline={value:"top"},c="x",f="y"),u[c]=l[c]={signal:d+"datum."+eR,mult:s},u[f]=l[f]=a,a.offset=jN(t.labelOffset,e.gradientLabelOffset)||0,h=h?{separation:i("labelSeparation"),method:h,order:"datum."+QO}:void 0,DR({type:xR,role:lN,style:iR,key:rR,from:r,encode:p,overlap:h},n)}function BR(t,e,n,r,i){const o=wR(t,e),a=n.entries,s=!(!a||!a.interactive),u=a?a.name:void 0,l=o("clipHeight"),c=o("symbolOffset"),f={data:"value"},h=`(${i}) ? datum.${tR} : datum.${fR}`,d=l?Wz(l):{field:fR},p=`datum.${QO}`,g=`max(1, ${i})`;let m,y,v,_,x;d.mult=.5,m={enter:y={opacity:pR,x:{signal:h,mult:.5,offset:c},y:d},update:v={opacity:gR,x:y.x,y:y.y},exit:{opacity:pR}};let b=null,w=null;t.fill||(b=e.symbolBaseFillColor,w=e.symbolBaseStrokeColor),Gz(m,{fill:o("symbolFillColor",b),shape:o("symbolType"),size:o("symbolSize"),stroke:o("symbolStrokeColor",w),strokeDash:o("symbolDash"),strokeDashOffset:o("symbolDashOffset"),strokeWidth:o("symbolStrokeWidth")},{opacity:o("symbolOpacity")}),hR.forEach((e=>{t[e]&&(v[e]=y[e]={scale:t[e],field:rR})}));const k=DR({type:_R,role:cN,key:rR,from:f,clip:!!l||void 0,encode:m},n.symbols),A=Wz(c);A.offset=o("labelOffset"),m={enter:y={opacity:pR,x:{signal:h,offset:A},y:d},update:v={opacity:gR,text:{field:KO},x:y.x,y:y.y},exit:{opacity:pR}},Gz(m,{align:o("labelAlign"),baseline:o("labelBaseline"),fill:o("labelColor"),fillOpacity:o("labelOpacity"),font:o("labelFont"),fontSize:o("labelFontSize"),fontStyle:o("labelFontStyle"),fontWeight:o("labelFontWeight"),limit:o("labelLimit")});const M=DR({type:xR,role:lN,style:iR,key:rR,from:f,encode:m},n.labels);return m={enter:{noBound:{value:!l},width:pR,height:l?Wz(l):pR,opacity:pR},exit:{opacity:pR},update:v={opacity:gR,row:{signal:null},column:{signal:null}}},o.isVertical(!0)?(_=`ceil(item.mark.items.length / ${g})`,v.row.signal=`${p}%${_}`,v.column.signal=`floor(${p} / ${_})`,x={field:["row",p]}):(v.row.signal=`floor(${p} / ${g})`,v.column.signal=`${p} % ${g}`,x={field:p}),v.column.signal=`(${i})?${v.column.signal}:${p}`,bR({role:Qz,from:r={facet:{data:r,name:"value",groupby:QO}},encode:Vz(m,a,dR),marks:[k,M],name:u,interactive:s,sort:x})}const zR='item.orient === "left"',NR='item.orient === "right"',OR=`(${zR} || ${NR})`,RR=`datum.vgrad && ${OR}`,UR=AR('"top"','"bottom"','"middle"'),LR=`datum.vgrad && ${NR} ? (${AR('"right"','"left"','"center"')}) : (${OR} && !(datum.vgrad && ${zR})) ? "left" : ${MR}`,qR=`item._anchor || (${OR} ? "middle" : "start")`,PR=`${RR} ? (${zR} ? -90 : 90) : 0`,jR=`${OR} ? (datum.vgrad ? (${NR} ? "bottom" : "top") : ${UR}) : "top"`;function IR(t,e){let n;return A(t)&&(t.signal?n=t.signal:t.path?n="pathShape("+HR(t.path)+")":t.sphere&&(n="geoShape("+HR(t.sphere)+', {type: "Sphere"})')),n?e.signalRef(n):!!t}function HR(t){return A(t)&&t.signal?t.signal:Ct(t)}function WR(t){const e=t.role||"";return e.indexOf("axis")&&e.indexOf("legend")&&e.indexOf("title")?t.type===mR?Qz:e||Jz:e}function YR(t){return{marktype:t.type,name:t.name||void 0,role:t.role||WR(t),zindex:+t.zindex||void 0,aria:t.aria,description:t.description}}function GR(t,e){return t&&t.signal?e.signalRef(t.signal):!1!==t}function VR(t,e){const n=Ka(t.type);n||s("Unrecognized transform type: "+Ct(t.type));const r=SN(n.type.toLowerCase(),null,XR(n,t,e));return t.signal&&e.addSignal(t.signal,e.proxy(r)),r.metadata=n.metadata||{},r}function XR(t,e,n){const r={},i=t.params.length;for(let o=0;oQR(t,e,n)))):QR(t,r,n)}(t,e,n):"projection"===r?n.projectionRef(e[t.name]):t.array&&!qN(i)?i.map((e=>ZR(t,e,n))):ZR(t,i,n):void(t.required&&s("Missing required "+Ct(e.type)+" parameter: "+Ct(t.name)))}function ZR(t,e,n){const r=t.type;if(qN(e))return nU(r)?s("Expression references can not be signals."):rU(r)?n.fieldRef(e):iU(r)?n.compareRef(e):n.signalRef(e.signal);{const i=t.expr||rU(r);return i&&KR(e)?n.exprRef(e.expr,e.as):i&&tU(e)?BN(e.field,e.as):nU(r)?mB(e,n):eU(r)?TN(n.getData(e).values):rU(r)?BN(e):iU(r)?n.compareRef(e):e}}function QR(t,e,n){const r=t.params.length;let i;for(let n=0;nt&&t.expr,tU=t=>t&&t.field,eU=t=>"data"===t,nU=t=>"expr"===t,rU=t=>"field"===t,iU=t=>"compare"===t;function oU(t,e){return t.$ref?t:t.data&&t.data.$ref?t.data:TN(e.getData(t.data).output)}function aU(t,e,n,r,i){this.scope=t,this.input=e,this.output=n,this.values=r,this.aggregate=i,this.index={}}function sU(t){return xt(t)?t:null}function uU(t,e,n){const r=RN(n.op,n.field);let i;if(e.ops){for(let t=0,n=e.as.length;tnull==t?"null":t)).join(",")+"),0)",e);u.update=l.$expr,u.params=l.$params}function fU(t,e){const n=WR(t),r=t.type===mR,i=t.from&&t.from.facet,o=t.overlap;let a,u,l,c,f,h,d,p=t.layout||n===Qz||n===Zz;const g=n===Jz||p||i,m=function(t,e,n){let r,i,o,a,u;return t?(r=t.facet)&&(e||s("Only group marks can be faceted."),null!=r.field?a=u=oU(r,n):(t.data?u=TN(n.getData(t.data).aggregate):(o=VR(ot({type:"aggregate",groupby:V(r.groupby)},r.aggregate),n),o.params.key=n.keyRef(r.groupby),o.params.pulse=oU(r,n),a=u=TN(n.add(o))),i=n.keyRef(r.groupby,!0))):a=TN(n.add(rO(null,[{}]))),a||(a=oU(t,n)),{key:i,pulse:a,parent:u}}(t.from,r,e);u=e.add(oO({key:m.key||(t.key?BN(t.key):void 0),pulse:m.pulse,clean:!r}));const y=TN(u);u=l=e.add(rO({pulse:y})),u=e.add(dO({markdef:YR(t),interactive:GR(t.interactive,e),clip:IR(t.clip,e),context:{$context:!0},groups:e.lookup(),parent:e.signals.parent?e.signalRef("parent"):null,index:e.markpath(),pulse:TN(u)}));const v=TN(u);u=c=e.add(aO(wN(t.encode,t.type,n,t.style,e,{mod:!1,pulse:v}))),u.params.parent=e.encode(),t.transform&&t.transform.forEach((t=>{const n=VR(t,e),r=n.metadata;(r.generates||r.changes)&&s("Mark transforms should not generate new data."),r.nomod||(c.params.mod=!0),n.params.pulse=TN(u),e.add(u=n)})),t.sort&&(u=e.add(MO({sort:e.compareRef(t.sort),pulse:TN(u)})));const _=TN(u);(i||p)&&(p=e.add(EO({layout:e.objectProperty(t.layout),legends:e.legends,mark:v,pulse:_})),h=TN(p));const x=e.add(nO({mark:v,pulse:h||_}));d=TN(x),r&&(g&&(a=e.operators,a.pop(),p&&a.pop()),e.pushState(_,h||d,y),i?function(t,e,n){const r=t.from.facet,i=r.name,o=oU(r,e);let a;r.name||s("Facet must have a name: "+Ct(r)),r.data||s("Facet must reference a data set: "+Ct(r)),r.field?a=e.add(vO({field:e.fieldRef(r.field),pulse:o})):r.groupby?a=e.add(uO({key:e.keyRef(r.groupby),group:TN(e.proxy(n.parent)),pulse:o})):s("Facet must specify groupby or field: "+Ct(r));const u=e.fork(),l=u.add(rO()),c=u.add(AO({pulse:TN(l)}));u.addData(i,new aU(u,l,l,c)),u.addSignal("parent",null),a.params.subflow={$subflow:u.parse(t).toRuntime()}}(t,e,m):g?function(t,e,n){const r=e.add(vO({pulse:n.pulse})),i=e.fork();i.add(AO()),i.addSignal("parent",null),r.params.subflow={$subflow:i.parse(t).toRuntime()}}(t,e,m):e.parse(t),e.popState(),g&&(p&&a.push(p),a.push(x))),o&&(d=function(t,e,n){const r=t.method,i=t.bound,o=t.separation,a={separation:qN(o)?n.signalRef(o.signal):o,method:qN(r)?n.signalRef(r.signal):r,pulse:e};t.order&&(a.sort=n.compareRef({field:t.order}));if(i){const t=i.tolerance;a.boundTolerance=qN(t)?n.signalRef(t.signal):+t,a.boundScale=n.scaleRef(i.scale),a.boundOrient=i.orient}return TN(n.add(mO(a)))}(o,d,e));const b=e.add(wO({pulse:d})),w=e.add(AO({pulse:TN(b)},void 0,e.parent()));null!=t.name&&(f=t.name,e.addData(f,new aU(e,l,b,w)),t.on&&t.on.forEach((t=>{(t.insert||t.remove||t.toggle)&&s("Marks only support modify triggers."),cU(t,e,f)})))}function hU(t,e){const n=e.config.legend,r=t.encode||{},i=wR(t,n),o=r.legend||{},a=o.name||void 0,u=o.interactive,l=o.style,c={};let f,h,d,p=0;hR.forEach((e=>t[e]?(c[e]=t[e],p=p||t[e]):0)),p||s("Missing valid scale for legend.");const g=function(t,e){let n=t.type||uR;t.type||1!==function(t){return hR.reduce(((e,n)=>e+(t[n]?1:0)),0)}(t)||!t.fill&&!t.stroke||(n=Kd(e)?lR:ep(e)?cR:uR);return n!==lR?n:ep(e)?cR:lR}(t,e.scaleType(p)),m={title:null!=t.title,scales:c,type:g,vgrad:"symbol"!==g&&i.isVertical()},y=TN(e.add(rO(null,[m]))),v=TN(e.add(fO(h={type:g,scale:e.scaleRef(p),count:e.objectProperty(i("tickCount")),limit:e.property(i("symbolLimit")),values:e.objectProperty(t.values),minstep:e.property(t.tickMinStep),formatType:e.property(t.formatType),formatSpecifier:e.property(t.format)})));return g===lR?(d=[CR(t,p,n,r.gradient),TR(t,n,r.labels,v)],h.count=h.count||e.signalRef(`max(2,2*floor((${IN(i.gradientLength())})/100))`)):g===cR?d=[FR(t,p,n,r.gradient,v),TR(t,n,r.labels,v)]:(f=function(t,e){const n=wR(t,e);return{align:n("gridAlign"),columns:n.entryColumns(),center:{row:!0,column:!1},padding:{row:n("rowPadding"),column:n("columnPadding")}}}(t,n),d=[BR(t,n,r,v,IN(f.columns))],h.size=function(t,e,n){const r=IN(pU("size",t,n)),i=IN(pU("strokeWidth",t,n)),o=IN(function(t,e,n){return kR("fontSize",t)||function(t,e,n){const r=e.config.style[n];return r&&r[t]}("fontSize",e,n)}(n[1].encode,e,iR));return mB(`max(ceil(sqrt(${r})+${i}),${o})`,e)}(t,e,d[0].marks)),d=[bR({role:sN,from:y,encode:{enter:{x:{value:0},y:{value:0}}},marks:d,layout:f,interactive:u})],m.title&&d.push(function(t,e,n,r){const i=wR(t,e),o={enter:{opacity:pR},update:{opacity:gR,x:{field:{group:"padding"}},y:{field:{group:"padding"}}},exit:{opacity:pR}};return Gz(o,{orient:i("titleOrient"),_anchor:i("titleAnchor"),anchor:{signal:qR},angle:{signal:PR},align:{signal:LR},baseline:{signal:jR},text:t.title,fill:i("titleColor"),fillOpacity:i("titleOpacity"),font:i("titleFont"),fontSize:i("titleFontSize"),fontStyle:i("titleFontStyle"),fontWeight:i("titleFontWeight"),limit:i("titleLimit"),lineHeight:i("titleLineHeight")},{align:i("titleAlign"),baseline:i("titleBaseline")}),DR({type:xR,role:fN,style:oR,from:r,encode:o},n)}(t,n,r.title,y)),fU(bR({role:oN,from:y,encode:Vz(dU(i,t,n),o,dR),marks:d,aria:i("aria"),description:i("description"),zindex:i("zindex"),name:a,interactive:u,style:l}),e)}function dU(t,e,n){const r={enter:{},update:{}};return Gz(r,{orient:t("orient"),offset:t("offset"),padding:t("padding"),titlePadding:t("titlePadding"),cornerRadius:t("cornerRadius"),fill:t("fillColor"),stroke:t("strokeColor"),strokeWidth:n.strokeWidth,strokeDash:n.strokeDash,x:t("legendX"),y:t("legendY"),format:e.format,formatType:e.formatType}),r}function pU(t,e,n){return e[t]?`scale("${e[t]}",datum)`:kR(t,n[0].encode)}aU.fromEntries=function(t,e){const n=e.length,r=e[n-1],i=e[n-2];let o=e[0],a=null,s=1;for(o&&"load"===o.type&&(o=e[1]),t.add(e[0]);s{n.push(VR(t,e))})),t.on&&t.on.forEach((n=>{cU(n,e,t.name)})),e.addDataPipeline(t.name,function(t,e,n){const r=[];let i,o,a,s,u,l=null,c=!1,f=!1;t.values?qN(t.values)||PN(t.format)?(r.push(xU(e,t)),r.push(l=_U())):r.push(l=_U({$ingest:t.values,$format:t.format})):t.url?PN(t.url)||PN(t.format)?(r.push(xU(e,t)),r.push(l=_U())):r.push(l=_U({$request:t.url,$format:t.format})):t.source&&(l=i=V(t.source).map((t=>TN(e.getData(t).output))),r.push(null));for(o=0,a=n.length;ot===GO||t===HO,wU=(t,e,n)=>qN(t)?FU(t.signal,e,n):t===WO||t===HO?e:n,kU=(t,e,n)=>qN(t)?DU(t.signal,e,n):bU(t)?e:n,AU=(t,e,n)=>qN(t)?CU(t.signal,e,n):bU(t)?n:e,MU=(t,e,n)=>qN(t)?SU(t.signal,e,n):t===HO?{value:e}:{value:n},EU=(t,e,n)=>qN(t)?$U(t.signal,e,n):t===YO?{value:e}:{value:n},DU=(t,e,n)=>TU(`${t} === '${HO}' || ${t} === '${GO}'`,e,n),CU=(t,e,n)=>TU(`${t} !== '${HO}' && ${t} !== '${GO}'`,e,n),FU=(t,e,n)=>zU(`${t} === '${WO}' || ${t} === '${HO}'`,e,n),SU=(t,e,n)=>zU(`${t} === '${HO}'`,e,n),$U=(t,e,n)=>zU(`${t} === '${YO}'`,e,n),TU=(t,e,n)=>(e=null!=e?Wz(e):e,n=null!=n?Wz(n):n,BU(e)&&BU(n)?{signal:`${t} ? (${e=e?e.signal||Ct(e.value):null}) : (${n=n?n.signal||Ct(n.value):null})`}:[ot({test:t},e)].concat(n||[])),BU=t=>null==t||1===Object.keys(t).length,zU=(t,e,n)=>({signal:`${t} ? (${OU(e)}) : (${OU(n)})`}),NU=(t,e,n,r,i)=>({signal:(null!=r?`${t} === '${WO}' ? (${OU(r)}) : `:"")+(null!=n?`${t} === '${GO}' ? (${OU(n)}) : `:"")+(null!=i?`${t} === '${YO}' ? (${OU(i)}) : `:"")+(null!=e?`${t} === '${HO}' ? (${OU(e)}) : `:"")+"(null)"}),OU=t=>qN(t)?t.signal:null==t?null:Ct(t),RU=(t,e)=>0===e?0:qN(t)?{signal:`(${t.signal}) * ${e}`}:{value:t*e},UU=(t,e)=>{const n=t.signal;return n&&n.endsWith("(null)")?{signal:n.slice(0,-6)+e.signal}:t};function LU(t,e,n,r){let i;if(e&<(e,t))return e[t];if(lt(n,t))return n[t];if(t.startsWith("title")){switch(t){case"titleColor":i="fill";break;case"titleFont":case"titleFontSize":case"titleFontWeight":i=t[5].toLowerCase()+t.slice(6)}return r[oR][i]}if(t.startsWith("label")){switch(t){case"labelColor":i="fill";break;case"labelFont":case"labelFontSize":i=t[5].toLowerCase()+t.slice(6)}return r[iR][i]}return null}function qU(t){const e={};for(const n of t)if(n)for(const t in n)e[t]=1;return Object.keys(e)}function PU(t,e){return{scale:t.scale,range:e}}function jU(t,e,n,r,i){const o=wR(t,e),a=t.orient,s=t.gridScale,u=wU(a,1,-1),l=function(t,e){if(1===e);else if(A(t)){let n=t=ot({},t);for(;null!=n.mult;){if(!A(n.mult))return n.mult=qN(e)?{signal:`(${n.mult}) * (${e.signal})`}:n.mult*e,t;n=n.mult=ot({},n.mult)}n.mult=e}else t=qN(e)?{signal:`(${e.signal}) * (${t||0})`}:e*(t||0);return t}(t.offset,u);let c,f,h;const d={enter:c={opacity:pR},update:h={opacity:gR},exit:f={opacity:pR}};Gz(d,{stroke:o("gridColor"),strokeCap:o("gridCap"),strokeDash:o("gridDash"),strokeDashOffset:o("gridDashOffset"),strokeOpacity:o("gridOpacity"),strokeWidth:o("gridWidth")});const p={scale:t.scale,field:rR,band:i.band,extra:i.extra,offset:i.offset,round:o("tickRound")},g=kU(a,{signal:"height"},{signal:"width"}),m=s?{scale:s,range:0,mult:u,offset:l}:{value:0,offset:l},y=s?{scale:s,range:1,mult:u,offset:l}:ot(g,{mult:u,offset:l});return c.x=h.x=kU(a,p,m),c.y=h.y=AU(a,p,m),c.x2=h.x2=AU(a,y),c.y2=h.y2=kU(a,y),f.x=kU(a,p),f.y=AU(a,p),DR({type:vR,role:eN,key:rR,from:r,encode:d},n)}function IU(t,e,n,r,i){return{signal:'flush(range("'+t+'"), scale("'+t+'", datum.value), '+e+","+n+","+r+","+i+")"}}function HU(t,e,n,r){const i=wR(t,e),o=t.orient,a=wU(o,-1,1);let s,u;const l={enter:s={opacity:pR,anchor:Wz(i("titleAnchor",null)),align:{signal:MR}},update:u=ot({},s,{opacity:gR,text:Wz(t.title)}),exit:{opacity:pR}},c={signal:`lerp(range("${t.scale}"), ${AR(0,1,.5)})`};return u.x=kU(o,c),u.y=AU(o,c),s.angle=kU(o,pR,RU(a,90)),s.baseline=kU(o,MU(o,GO,HO),{value:GO}),u.angle=s.angle,u.baseline=s.baseline,Gz(l,{fill:i("titleColor"),fillOpacity:i("titleOpacity"),font:i("titleFont"),fontSize:i("titleFontSize"),fontStyle:i("titleFontStyle"),fontWeight:i("titleFontWeight"),limit:i("titleLimit"),lineHeight:i("titleLineHeight")},{align:i("titleAlign"),angle:i("titleAngle"),baseline:i("titleBaseline")}),function(t,e,n,r){const i=(t,e)=>null!=t?(n.update[e]=UU(Wz(t),n.update[e]),!1):!Xz(e,r),o=i(t("titleX"),"x"),a=i(t("titleY"),"y");n.enter.auto=a===o?Wz(a):kU(e,Wz(a),Wz(o))}(i,o,l,n),l.update.align=UU(l.update.align,s.align),l.update.angle=UU(l.update.angle,s.angle),l.update.baseline=UU(l.update.baseline,s.baseline),DR({type:xR,role:iN,style:oR,from:r,encode:l},n)}function WU(t,e){const n=function(t,e){var n,r,i,o=e.config,a=o.style,s=o.axis,u="band"===e.scaleType(t.scale)&&o.axisBand,l=t.orient;if(qN(l)){const t=qU([o.axisX,o.axisY]),e=qU([o.axisTop,o.axisBottom,o.axisLeft,o.axisRight]);for(i of(n={},t))n[i]=kU(l,LU(i,o.axisX,s,a),LU(i,o.axisY,s,a));for(i of(r={},e))r[i]=NU(l.signal,LU(i,o.axisTop,s,a),LU(i,o.axisBottom,s,a),LU(i,o.axisLeft,s,a),LU(i,o.axisRight,s,a))}else n=l===HO||l===GO?o.axisX:o.axisY,r=o["axis"+l[0].toUpperCase()+l.slice(1)];return n||r||u?ot({},s,n,r,u):s}(t,e),r=t.encode||{},i=r.axis||{},o=i.name||void 0,a=i.interactive,s=i.style,u=wR(t,n),l=function(t){const e=t("tickBand");let n,r,i=t("tickOffset");return e?e.signal?(n={signal:`(${e.signal}) === 'extent' ? 1 : 0.5`},r={signal:`(${e.signal}) === 'extent'`},A(i)||(i={signal:`(${e.signal}) === 'extent' ? 0 : ${i}`})):"extent"===e?(n=1,r=!0,i=0):(n=.5,r=!1):(n=t("bandPosition"),r=t("tickExtra")),{extra:r,band:n,offset:i}}(u),c={scale:t.scale,ticks:!!u("ticks"),labels:!!u("labels"),grid:!!u("grid"),domain:!!u("domain"),title:null!=t.title},f=TN(e.add(rO({},[c]))),h=TN(e.add(eO({scale:e.scaleRef(t.scale),extra:e.property(l.extra),count:e.objectProperty(t.tickCount),values:e.objectProperty(t.values),minstep:e.property(t.tickMinStep),formatType:e.property(t.formatType),formatSpecifier:e.property(t.format)}))),d=[];let p;return c.grid&&d.push(jU(t,n,r.grid,h,l)),c.ticks&&(p=u("tickSize"),d.push(function(t,e,n,r,i,o){const a=wR(t,e),s=t.orient,u=wU(s,-1,1);let l,c,f;const h={enter:l={opacity:pR},update:f={opacity:gR},exit:c={opacity:pR}};Gz(h,{stroke:a("tickColor"),strokeCap:a("tickCap"),strokeDash:a("tickDash"),strokeDashOffset:a("tickDashOffset"),strokeOpacity:a("tickOpacity"),strokeWidth:a("tickWidth")});const d=Wz(i);d.mult=u;const p={scale:t.scale,field:rR,band:o.band,extra:o.extra,offset:o.offset,round:a("tickRound")};return f.y=l.y=kU(s,pR,p),f.y2=l.y2=kU(s,d),c.x=kU(s,p),f.x=l.x=AU(s,pR,p),f.x2=l.x2=AU(s,d),c.y=AU(s,p),DR({type:vR,role:rN,key:rR,from:r,encode:h},n)}(t,n,r.ticks,h,p,l))),c.labels&&(p=c.ticks?p:0,d.push(function(t,e,n,r,i,o){const a=wR(t,e),s=t.orient,u=t.scale,l=wU(s,-1,1),c=IN(a("labelFlush")),f=IN(a("labelFlushOffset")),h=a("labelAlign"),d=a("labelBaseline");let p,g=0===c||!!c;const m=Wz(i);m.mult=l,m.offset=Wz(a("labelPadding")||0),m.offset.mult=l;const y={scale:u,field:rR,band:.5,offset:ER(o.offset,a("labelOffset"))},v=kU(s,g?IU(u,c,'"left"','"right"','"center"'):{value:"center"},EU(s,"left","right")),_=kU(s,MU(s,"bottom","top"),g?IU(u,c,'"top"','"bottom"','"middle"'):{value:"middle"}),x=IU(u,c,`-(${f})`,f,0);g=g&&f;const b={opacity:pR,x:kU(s,y,m),y:AU(s,y,m)},w={enter:b,update:p={opacity:gR,text:{field:KO},x:b.x,y:b.y,align:v,baseline:_},exit:{opacity:pR,x:b.x,y:b.y}};Gz(w,{dx:!h&&g?kU(s,x):null,dy:!d&&g?AU(s,x):null}),Gz(w,{angle:a("labelAngle"),fill:a("labelColor"),fillOpacity:a("labelOpacity"),font:a("labelFont"),fontSize:a("labelFontSize"),fontWeight:a("labelFontWeight"),fontStyle:a("labelFontStyle"),limit:a("labelLimit"),lineHeight:a("labelLineHeight")},{align:h,baseline:d});const k=a("labelBound");let A=a("labelOverlap");return A=A||k?{separation:a("labelSeparation"),method:A,order:"datum.index",bound:k?{scale:u,orient:s,tolerance:k}:null}:void 0,p.align!==v&&(p.align=UU(p.align,v)),p.baseline!==_&&(p.baseline=UU(p.baseline,_)),DR({type:xR,role:nN,style:iR,key:rR,from:r,encode:w,overlap:A},n)}(t,n,r.labels,h,p,l))),c.domain&&d.push(function(t,e,n,r){const i=wR(t,e),o=t.orient;let a,s;const u={enter:a={opacity:pR},update:s={opacity:gR},exit:{opacity:pR}};Gz(u,{stroke:i("domainColor"),strokeCap:i("domainCap"),strokeDash:i("domainDash"),strokeDashOffset:i("domainDashOffset"),strokeWidth:i("domainWidth"),strokeOpacity:i("domainOpacity")});const l=PU(t,0),c=PU(t,1);return a.x=s.x=kU(o,l,pR),a.x2=s.x2=kU(o,c),a.y=s.y=AU(o,l,pR),a.y2=s.y2=AU(o,c),DR({type:vR,role:tN,from:r,encode:u},n)}(t,n,r.domain,f)),c.title&&d.push(HU(t,n,r.title,f)),fU(bR({role:Kz,from:f,encode:Vz(YU(u,t),i,dR),marks:d,aria:u("aria"),description:u("description"),zindex:u("zindex"),name:o,interactive:a,style:s}),e)}function YU(t,e){const n={enter:{},update:{}};return Gz(n,{orient:t("orient"),offset:t("offset")||0,position:jN(e.position,0),titlePadding:t("titlePadding"),minExtent:t("minExtent"),maxExtent:t("maxExtent"),range:{signal:`abs(span(range("${e.scale}")))`},translate:t("translate"),format:e.format,formatType:e.formatType}),n}function GU(t,e,n){const r=V(t.signals),i=V(t.scales);return n||r.forEach((t=>CN(t,e))),V(t.projections).forEach((t=>function(t,e){const n=e.config.projection||{},r={};for(const n in t)"name"!==n&&(r[n]=IO(t[n],n,e));for(const t in n)null==r[t]&&(r[t]=IO(n[t],t,e));e.addProjection(t.name,r)}(t,e))),i.forEach((t=>function(t,e){const n=t.type||"linear";Zd(n)||s("Unrecognized scale type: "+Ct(n)),e.addScale(t.name,{type:n,domain:void 0})}(t,e))),V(t.data).forEach((t=>vU(t,e))),i.forEach((t=>SO(t,e))),(n||r).forEach((t=>function(t,e){const n=e.getSignal(t.name);let r=t.update;t.init&&(r?s("Signals can not include both init and update expressions."):(r=t.init,n.initonly=!0)),r&&(r=mB(r,e),n.update=r.$expr,n.params=r.$params),t.on&&t.on.forEach((t=>ZN(t,e,n.id)))}(t,e))),V(t.axes).forEach((t=>WU(t,e))),V(t.marks).forEach((t=>fU(t,e))),V(t.legends).forEach((t=>hU(t,e))),t.title&&mU(t.title,e),e.parseLambdas(),e}const VU=t=>Vz({enter:{x:{value:0},y:{value:0}},update:{width:{signal:"width"},height:{signal:"height"}}},t);function XU(t,e){const n=e.config,r=TN(e.root=e.add($N())),i=function(t,e){const n=n=>jN(t[n],e[n]),r=[JU("background",n("background")),JU("autosize",Pz(n("autosize"))),JU("padding",Hz(n("padding"))),JU("width",n("width")||0),JU("height",n("height")||0)],i=r.reduce(((t,e)=>(t[e.name]=e,t)),{}),o={};return V(t.signals).forEach((t=>{lt(i,t.name)?t=ot(i[t.name],t):r.push(t),o[t.name]=t})),V(e.signals).forEach((t=>{lt(o,t.name)||lt(i,t.name)||r.push(t)})),r}(t,n);i.forEach((t=>CN(t,e))),e.description=t.description||n.description,e.eventConfig=n.events,e.legends=e.objectProperty(n.legend&&n.legend.layout),e.locale=n.locale;const o=e.add(rO()),a=e.add(aO(wN(VU(t.encode),mR,Zz,t.style,e,{pulse:TN(o)}))),s=e.add(EO({layout:e.objectProperty(t.layout),legends:e.legends,autosize:e.signalRef("autosize"),mark:r,pulse:TN(a)}));e.operators.pop(),e.pushState(TN(a),TN(s),null),GU(t,e,i),e.operators.push(s);let u=e.add(nO({mark:r,pulse:TN(s)}));return u=e.add(wO({pulse:TN(u)})),u=e.add(AO({pulse:TN(u)})),e.addData("root",new aU(e,o,o,u)),e}function JU(t,e){return e&&e.signal?{name:t,update:e.signal}:{name:t,value:e}}function ZU(t,e){this.config=t||{},this.options=e||{},this.bindings=[],this.field={},this.signals={},this.lambdas={},this.scales={},this.events={},this.data={},this.streams=[],this.updates=[],this.operators=[],this.eventConfig=null,this.locale=null,this._id=0,this._subid=0,this._nextsub=[0],this._parent=[],this._encode=[],this._lookup=[],this._markpath=[]}function QU(t){this.config=t.config,this.options=t.options,this.legends=t.legends,this.field=Object.create(t.field),this.signals=Object.create(t.signals),this.lambdas=Object.create(t.lambdas),this.scales=Object.create(t.scales),this.events=Object.create(t.events),this.data=Object.create(t.data),this.streams=[],this.updates=[],this.operators=[],this._id=0,this._subid=++t._nextsub[0],this._nextsub=t._nextsub,this._parent=t._parent.slice(),this._encode=t._encode.slice(),this._lookup=t._lookup.slice(),this._markpath=t._markpath}function KU(t){return(k(t)?tL:eL)(t)}function tL(t){const e=t.length;let n="[";for(let r=0;r0?",":"")+(A(e)?e.signal||KU(e):Ct(e))}return n+"]"}function eL(t){let e,n,r="{",i=0;for(e in t)n=t[e],r+=(++i>1?",":"")+Ct(e)+":"+(A(n)?n.signal||KU(n):Ct(n));return r+"}"}ZU.prototype=QU.prototype={parse(t){return GU(t,this)},fork(){return new QU(this)},isSubscope(){return this._subid>0},toRuntime(){return this.finish(),{description:this.description,operators:this.operators,streams:this.streams,updates:this.updates,bindings:this.bindings,eventConfig:this.eventConfig,locale:this.locale}},id(){return(this._subid?this._subid+":":0)+this._id++},add(t){return this.operators.push(t),t.id=this.id(),t.refs&&(t.refs.forEach((e=>{e.$ref=t.id})),t.refs=null),t},proxy(t){const e=t instanceof FN?TN(t):t;return this.add(xO({value:e}))},addStream(t){return this.streams.push(t),t.id=this.id(),t},addUpdate(t){return this.updates.push(t),t},finish(){let t,e;for(t in this.root&&(this.root.root=!0),this.signals)this.signals[t].signal=t;for(t in this.scales)this.scales[t].scale=t;function n(t,e,n){let r,i;t&&(r=t.data||(t.data={}),i=r[e]||(r[e]=[]),i.push(n))}for(t in this.data){e=this.data[t],n(e.input,t,"input"),n(e.output,t,"output"),n(e.values,t,"values");for(const r in e.index)n(e.index[r],t,"index:"+r)}return this},pushState(t,e,n){this._encode.push(TN(this.add(AO({pulse:t})))),this._parent.push(e),this._lookup.push(n?TN(this.proxy(n)):null),this._markpath.push(-1)},popState(){this._encode.pop(),this._parent.pop(),this._lookup.pop(),this._markpath.pop()},parent(){return F(this._parent)},encode(){return F(this._encode)},lookup(){return F(this._lookup)},markpath(){const t=this._markpath;return++t[t.length-1]},fieldRef(t,e){if(xt(t))return BN(t,e);t.signal||s("Unsupported field reference: "+Ct(t));const n=t.signal;let r=this.field[n];if(!r){const t={name:this.signalRef(n)};e&&(t.as=e),this.field[n]=r=TN(this.add(lO(t)))}return r},compareRef(t){let e=!1;const n=t=>qN(t)?(e=!0,this.signalRef(t.signal)):function(t){return t&&t.expr}(t)?(e=!0,this.exprRef(t.expr)):t,r=V(t.field).map(n),i=V(t.order).map(n);return e?TN(this.add(iO({fields:r,orders:i}))):NN(r,i)},keyRef(t,e){let n=!1;const r=this.signals;return t=V(t).map((t=>qN(t)?(n=!0,TN(r[t.signal])):t)),n?TN(this.add(cO({fields:t,flat:e}))):function(t,e){const n={$key:t};return e&&(n.$flat=!0),n}(t,e)},sortRef(t){if(!t)return t;const e=RN(t.op,t.field),n=t.order||"ascending";return n.signal?TN(this.add(iO({fields:e,orders:this.signalRef(n.signal)}))):NN(e,n)},event(t,e){const n=t+":"+e;if(!this.events[n]){const r=this.id();this.streams.push({id:r,source:t,type:e}),this.events[n]=r}return this.events[n]},hasOwnSignal(t){return lt(this.signals,t)},addSignal(t,e){this.hasOwnSignal(t)&&s("Duplicate signal name: "+Ct(t));const n=e instanceof FN?e:this.add($N(e));return this.signals[t]=n},getSignal(t){return this.signals[t]||s("Unrecognized signal name: "+Ct(t)),this.signals[t]},signalRef(t){return this.signals[t]?TN(this.signals[t]):(lt(this.lambdas,t)||(this.lambdas[t]=this.add($N(null))),TN(this.lambdas[t]))},parseLambdas(){const t=Object.keys(this.lambdas);for(let e=0,n=t.length;er+Math.floor(o*t.random()),pdf:t=>t===Math.floor(t)&&t>=r&&t=i?1:(e-r+1)/o},icdf:t=>t>=0&&t<=1?r-1+Math.floor(t*o):NaN};return a.min(e).max(n)},t.randomKDE=ms,t.randomLCG=function(t){return function(){return(t=(1103515245*t+12345)%2147483647)/2147483647}},t.randomLogNormal=bs,t.randomMixture=ws,t.randomNormal=gs,t.randomUniform=Ds,t.read=fa,t.regressionConstant=Cs,t.regressionExp=Ns,t.regressionLinear=Bs,t.regressionLoess=qs,t.regressionLog=zs,t.regressionPoly=Us,t.regressionPow=Os,t.regressionQuad=Rs,t.renderModule=y_,t.repeat=Mt,t.resetDefaultLocale=function(){return Fo(),zo(),Lo()},t.resetSVGClipId=Og,t.resetSVGDefIds=function(){Og(),Rp=0},t.responseType=ca,t.runtimeContext=MB,t.sampleCurve=Hs,t.sampleLogNormal=ys,t.sampleNormal=fs,t.sampleUniform=ks,t.scale=Jd,t.sceneEqual=M_,t.sceneFromJSON=Py,t.scenePickVisit=Sm,t.sceneToJSON=qy,t.sceneVisit=Fm,t.sceneZOrder=Cm,t.scheme=pp,t.serializeXML=qv,t.setHybridRendererOptions=function(t){u_.svgMarkTypes=t.svgMarkTypes??["text"],u_.svgOnTop=t.svgOnTop??!0,u_.debug=t.debug??!1},t.setRandom=function(e){t.random=e},t.span=Dt,t.splitAccessPath=u,t.stringValue=Ct,t.textMetrics=gy,t.timeBin=Zr,t.timeFloor=kr,t.timeFormatLocale=Oo,t.timeInterval=Fr,t.timeOffset=Tr,t.timeSequence=Nr,t.timeUnitSpecifier=ir,t.timeUnits=nr,t.toBoolean=Ft,t.toDate=$t,t.toNumber=S,t.toSet=Bt,t.toString=Tt,t.transform=ts,t.transforms=Qa,t.truncate=zt,t.truthy=p,t.tupleid=va,t.typeParsers=Qo,t.utcFloor=Er,t.utcInterval=Sr,t.utcOffset=Br,t.utcSequence=Or,t.utcdayofyear=dr,t.utcquarter=G,t.utcweek=pr,t.version="5.26.0",t.visitArray=Nt,t.week=ur,t.writeConfig=D,t.zero=h,t.zoomLinear=j,t.zoomLog=I,t.zoomPow=H,t.zoomSymlog=W})); //# sourceMappingURL=vega.min.js.map diff --git a/docs/vega.min.js.map b/docs/vega.min.js.map index ddabb948ea..224f4d8ba1 100644 --- a/docs/vega.min.js.map +++ b/docs/vega.min.js.map @@ -1 +1 @@ -{"version":3,"file":"vega.min.js","sources":["../../vega-util/build/vega-util.module.js","../../../node_modules/d3-dsv/src/dsv.js","../../../node_modules/topojson-client/src/identity.js","../../../node_modules/topojson-client/src/feature.js","../../../node_modules/topojson-client/src/transform.js","../../../node_modules/topojson-client/src/reverse.js","../../../node_modules/topojson-client/src/stitch.js","../../../node_modules/topojson-client/src/mesh.js","../../../node_modules/d3-array/src/ascending.js","../../../node_modules/d3-array/src/descending.js","../../../node_modules/d3-array/src/bisector.js","../../../node_modules/d3-array/src/number.js","../../../node_modules/d3-array/src/bisect.js","../../../node_modules/d3-array/src/fsum.js","../../../node_modules/internmap/src/index.js","../../../node_modules/d3-array/src/sort.js","../../../node_modules/d3-array/src/ticks.js","../../../node_modules/d3-array/src/max.js","../../../node_modules/d3-array/src/min.js","../../../node_modules/d3-array/src/quickselect.js","../../../node_modules/d3-array/src/quantile.js","../../../node_modules/d3-array/src/median.js","../../../node_modules/d3-array/src/merge.js","../../../node_modules/d3-array/src/range.js","../../../node_modules/d3-array/src/sum.js","../../../node_modules/d3-array/src/intersection.js","../../../node_modules/d3-format/src/formatDecimal.js","../../../node_modules/d3-format/src/exponent.js","../../../node_modules/d3-format/src/formatSpecifier.js","../../../node_modules/d3-format/src/formatPrefixAuto.js","../../../node_modules/d3-format/src/formatRounded.js","../../../node_modules/d3-format/src/formatTypes.js","../../../node_modules/d3-format/src/identity.js","../../../node_modules/d3-format/src/locale.js","../../../node_modules/d3-format/src/defaultLocale.js","../../../node_modules/d3-format/src/formatGroup.js","../../../node_modules/d3-format/src/formatNumerals.js","../../../node_modules/d3-format/src/formatTrim.js","../../../node_modules/d3-format/src/precisionFixed.js","../../../node_modules/d3-format/src/precisionPrefix.js","../../../node_modules/d3-format/src/precisionRound.js","../../../node_modules/d3-time/src/interval.js","../../../node_modules/d3-time/src/millisecond.js","../../../node_modules/d3-time/src/duration.js","../../../node_modules/d3-time/src/second.js","../../../node_modules/d3-time/src/minute.js","../../../node_modules/d3-time/src/hour.js","../../../node_modules/d3-time/src/day.js","../../../node_modules/d3-time/src/week.js","../../../node_modules/d3-time/src/month.js","../../../node_modules/d3-time/src/year.js","../../../node_modules/d3-time/src/ticks.js","../../vega-time/build/vega-time.module.js","../../../node_modules/d3-time-format/src/locale.js","../../../node_modules/d3-time-format/src/defaultLocale.js","../../vega-format/build/vega-format.module.js","../../vega-loader/build/vega-loader.browser.module.js","../../vega-dataflow/build/vega-dataflow.module.js","../../vega-statistics/build/vega-statistics.module.js","../../../node_modules/d3-array/src/deviation.js","../../../node_modules/d3-array/src/variance.js","../../vega-transforms/build/vega-transforms.module.js","../../../node_modules/d3-array/src/mean.js","../../../node_modules/d3-shape/src/constant.js","../../../node_modules/d3-shape/src/math.js","../../../node_modules/d3-path/src/path.js","../../../node_modules/d3-shape/src/path.js","../../../node_modules/d3-shape/src/arc.js","../../../node_modules/d3-shape/src/array.js","../../../node_modules/d3-shape/src/curve/linear.js","../../../node_modules/d3-shape/src/point.js","../../../node_modules/d3-shape/src/line.js","../../../node_modules/d3-shape/src/area.js","../../../node_modules/d3-shape/src/symbol/circle.js","../../../node_modules/d3-shape/src/noop.js","../../../node_modules/d3-shape/src/curve/basis.js","../../../node_modules/d3-shape/src/curve/basisClosed.js","../../../node_modules/d3-shape/src/curve/basisOpen.js","../../../node_modules/d3-shape/src/curve/bundle.js","../../../node_modules/d3-shape/src/curve/cardinal.js","../../../node_modules/d3-shape/src/curve/cardinalClosed.js","../../../node_modules/d3-shape/src/curve/cardinalOpen.js","../../../node_modules/d3-shape/src/curve/catmullRom.js","../../../node_modules/d3-shape/src/curve/catmullRomClosed.js","../../../node_modules/d3-shape/src/curve/catmullRomOpen.js","../../../node_modules/d3-shape/src/curve/linearClosed.js","../../../node_modules/d3-shape/src/curve/monotone.js","../../../node_modules/d3-shape/src/curve/natural.js","../../../node_modules/d3-shape/src/curve/step.js","../../vega-canvas/build/vega-canvas.browser.module.js","../../../node_modules/d3-scale/src/init.js","../../../node_modules/d3-scale/src/ordinal.js","../../../node_modules/d3-color/src/define.js","../../../node_modules/d3-color/src/color.js","../../../node_modules/d3-color/src/math.js","../../../node_modules/d3-color/src/lab.js","../../../node_modules/d3-color/src/cubehelix.js","../../../node_modules/d3-interpolate/src/basis.js","../../../node_modules/d3-interpolate/src/basisClosed.js","../../../node_modules/d3-interpolate/src/constant.js","../../../node_modules/d3-interpolate/src/color.js","../../../node_modules/d3-interpolate/src/rgb.js","../../../node_modules/d3-interpolate/src/numberArray.js","../../../node_modules/d3-interpolate/src/array.js","../../../node_modules/d3-interpolate/src/date.js","../../../node_modules/d3-interpolate/src/number.js","../../../node_modules/d3-interpolate/src/object.js","../../../node_modules/d3-interpolate/src/string.js","../../../node_modules/d3-interpolate/src/value.js","../../../node_modules/d3-interpolate/src/round.js","../../../node_modules/d3-interpolate/src/transform/decompose.js","../../../node_modules/d3-interpolate/src/transform/parse.js","../../../node_modules/d3-interpolate/src/transform/index.js","../../../node_modules/d3-interpolate/src/zoom.js","../../../node_modules/d3-interpolate/src/hsl.js","../../../node_modules/d3-interpolate/src/hcl.js","../../../node_modules/d3-interpolate/src/cubehelix.js","../../../node_modules/d3-interpolate/src/piecewise.js","../../../node_modules/d3-interpolate/src/discrete.js","../../../node_modules/d3-interpolate/src/hue.js","../../../node_modules/d3-interpolate/src/lab.js","../../../node_modules/d3-interpolate/src/quantize.js","../../../node_modules/d3-scale/src/number.js","../../../node_modules/d3-scale/src/continuous.js","../../../node_modules/d3-scale/src/constant.js","../../../node_modules/d3-scale/src/tickFormat.js","../../../node_modules/d3-scale/src/linear.js","../../../node_modules/d3-scale/src/nice.js","../../../node_modules/d3-scale/src/log.js","../../../node_modules/d3-scale/src/symlog.js","../../../node_modules/d3-scale/src/pow.js","../../../node_modules/d3-scale/src/time.js","../../../node_modules/d3-scale/src/sequential.js","../../../node_modules/d3-scale/src/diverging.js","../../vega-scale/build/vega-scale.module.js","../../../node_modules/d3-scale/src/identity.js","../../../node_modules/d3-scale/src/utcTime.js","../../../node_modules/d3-scale/src/quantile.js","../../../node_modules/d3-scale/src/quantize.js","../../../node_modules/d3-scale/src/threshold.js","../../vega-scenegraph/build/vega-scenegraph.module.js","../../../node_modules/d3-shape/src/symbol.js","../../vega-view-transforms/build/vega-view-transforms.module.js","../../vega-encode/build/vega-encode.module.js","../../../node_modules/d3-geo/src/math.js","../../../node_modules/d3-geo/src/noop.js","../../../node_modules/d3-geo/src/stream.js","../../../node_modules/d3-geo/src/area.js","../../../node_modules/d3-geo/src/bounds.js","../../../node_modules/d3-geo/src/cartesian.js","../../../node_modules/d3-geo/src/centroid.js","../../../node_modules/d3-geo/src/compose.js","../../../node_modules/d3-geo/src/rotation.js","../../../node_modules/d3-geo/src/circle.js","../../../node_modules/d3-geo/src/clip/buffer.js","../../../node_modules/d3-geo/src/pointEqual.js","../../../node_modules/d3-geo/src/clip/rejoin.js","../../../node_modules/d3-geo/src/polygonContains.js","../../../node_modules/d3-geo/src/clip/index.js","../../../node_modules/d3-geo/src/clip/antimeridian.js","../../../node_modules/d3-geo/src/clip/circle.js","../../../node_modules/d3-geo/src/clip/rectangle.js","../../../node_modules/d3-geo/src/clip/line.js","../../../node_modules/d3-geo/src/graticule.js","../../../node_modules/d3-geo/src/identity.js","../../../node_modules/d3-geo/src/path/area.js","../../../node_modules/d3-geo/src/path/bounds.js","../../../node_modules/d3-geo/src/path/centroid.js","../../../node_modules/d3-geo/src/path/context.js","../../../node_modules/d3-geo/src/path/measure.js","../../../node_modules/d3-geo/src/path/string.js","../../../node_modules/d3-geo/src/path/index.js","../../../node_modules/d3-geo/src/transform.js","../../../node_modules/d3-geo/src/projection/fit.js","../../../node_modules/d3-geo/src/projection/resample.js","../../../node_modules/d3-geo/src/projection/index.js","../../../node_modules/d3-geo/src/projection/conic.js","../../../node_modules/d3-geo/src/projection/conicEqualArea.js","../../../node_modules/d3-geo/src/projection/cylindricalEqualArea.js","../../../node_modules/d3-geo/src/projection/albers.js","../../../node_modules/d3-geo/src/projection/azimuthal.js","../../../node_modules/d3-geo/src/projection/azimuthalEqualArea.js","../../../node_modules/d3-geo/src/projection/azimuthalEquidistant.js","../../../node_modules/d3-geo/src/projection/mercator.js","../../../node_modules/d3-geo/src/projection/conicConformal.js","../../../node_modules/d3-geo/src/projection/equirectangular.js","../../../node_modules/d3-geo/src/projection/conicEquidistant.js","../../../node_modules/d3-geo/src/projection/equalEarth.js","../../../node_modules/d3-geo/src/projection/gnomonic.js","../../../node_modules/d3-geo/src/projection/naturalEarth1.js","../../../node_modules/d3-geo/src/projection/orthographic.js","../../../node_modules/d3-geo/src/projection/stereographic.js","../../../node_modules/d3-geo/src/projection/transverseMercator.js","../../../node_modules/d3-geo-projection/src/math.js","../../../node_modules/d3-geo-projection/src/mollweide.js","../../vega-projection/build/vega-projection.module.js","../../../node_modules/d3-geo/src/projection/albersUsa.js","../../../node_modules/d3-geo/src/projection/identity.js","../../vega-geo/build/vega-geo.module.js","../../../node_modules/d3-quadtree/src/add.js","../../../node_modules/d3-quadtree/src/quad.js","../../../node_modules/d3-quadtree/src/x.js","../../../node_modules/d3-quadtree/src/y.js","../../../node_modules/d3-quadtree/src/quadtree.js","../../../node_modules/d3-force/src/constant.js","../../../node_modules/d3-force/src/jiggle.js","../../../node_modules/d3-force/src/collide.js","../../../node_modules/d3-force/src/link.js","../../../node_modules/d3-quadtree/src/cover.js","../../../node_modules/d3-quadtree/src/data.js","../../../node_modules/d3-quadtree/src/extent.js","../../../node_modules/d3-quadtree/src/find.js","../../../node_modules/d3-quadtree/src/remove.js","../../../node_modules/d3-quadtree/src/root.js","../../../node_modules/d3-quadtree/src/size.js","../../../node_modules/d3-quadtree/src/visit.js","../../../node_modules/d3-quadtree/src/visitAfter.js","../../../node_modules/d3-dispatch/src/dispatch.js","../../../node_modules/d3-timer/src/timer.js","../../../node_modules/d3-force/src/lcg.js","../../../node_modules/d3-force/src/simulation.js","../../vega-force/build/vega-force.module.js","../../../node_modules/d3-force/src/center.js","../../../node_modules/d3-force/src/manyBody.js","../../../node_modules/d3-force/src/x.js","../../../node_modules/d3-force/src/y.js","../../../node_modules/d3-hierarchy/src/cluster.js","../../../node_modules/d3-hierarchy/src/hierarchy/count.js","../../../node_modules/d3-hierarchy/src/hierarchy/index.js","../../../node_modules/d3-hierarchy/src/accessors.js","../../../node_modules/d3-hierarchy/src/constant.js","../../../node_modules/d3-hierarchy/src/hierarchy/each.js","../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../../../node_modules/d3-hierarchy/src/hierarchy/find.js","../../../node_modules/d3-hierarchy/src/hierarchy/sum.js","../../../node_modules/d3-hierarchy/src/hierarchy/sort.js","../../../node_modules/d3-hierarchy/src/hierarchy/path.js","../../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../../../node_modules/d3-hierarchy/src/hierarchy/descendants.js","../../../node_modules/d3-hierarchy/src/hierarchy/leaves.js","../../../node_modules/d3-hierarchy/src/hierarchy/links.js","../../../node_modules/d3-hierarchy/src/hierarchy/iterator.js","../../../node_modules/d3-hierarchy/src/lcg.js","../../../node_modules/d3-hierarchy/src/pack/enclose.js","../../../node_modules/d3-hierarchy/src/pack/siblings.js","../../../node_modules/d3-hierarchy/src/array.js","../../../node_modules/d3-hierarchy/src/pack/index.js","../../../node_modules/d3-hierarchy/src/treemap/round.js","../../../node_modules/d3-hierarchy/src/treemap/dice.js","../../../node_modules/d3-hierarchy/src/stratify.js","../../../node_modules/d3-hierarchy/src/tree.js","../../../node_modules/d3-hierarchy/src/treemap/slice.js","../../../node_modules/d3-hierarchy/src/treemap/squarify.js","../../../node_modules/d3-hierarchy/src/treemap/resquarify.js","../../vega-hierarchy/build/vega-hierarchy.module.js","../../../node_modules/d3-hierarchy/src/partition.js","../../../node_modules/d3-hierarchy/src/treemap/binary.js","../../../node_modules/d3-hierarchy/src/treemap/sliceDice.js","../../../node_modules/d3-hierarchy/src/treemap/index.js","../../vega-label/build/vega-label.module.js","../../vega-regression/build/vega-regression.module.js","../../../node_modules/robust-predicates/esm/util.js","../../../node_modules/robust-predicates/esm/orient2d.js","../../../node_modules/delaunator/index.js","../../../node_modules/d3-delaunay/src/path.js","../../../node_modules/d3-delaunay/src/polygon.js","../../../node_modules/d3-delaunay/src/delaunay.js","../../../node_modules/d3-delaunay/src/voronoi.js","../../vega-voronoi/build/vega-voronoi.module.js","../../vega-wordcloud/build/vega-wordcloud.module.js","../../vega-crossfilter/build/vega-crossfilter.module.js","../../../node_modules/d3-array/src/permute.js","../../vega-expression/build/vega-expression.module.js","../../vega-selections/build/vega-selection.module.js","../../../node_modules/d3-array/src/union.js","../../vega-functions/build/vega-functions.module.js","../../vega-runtime/build/vega-runtime.module.js","../../vega-view/build/vega-view.module.js","../../../node_modules/d3-timer/src/interval.js","../../vega-event-selector/build/vega-event-selector.module.js","../../vega-parser/build/vega-parser.module.js","../index.js"],"sourcesContent":["function accessor (fn, fields, name) {\n fn.fields = fields || [];\n fn.fname = name;\n return fn;\n}\nfunction accessorName(fn) {\n return fn == null ? null : fn.fname;\n}\nfunction accessorFields(fn) {\n return fn == null ? null : fn.fields;\n}\n\nfunction getter (path) {\n return path.length === 1 ? get1(path[0]) : getN(path);\n}\nconst get1 = field => function (obj) {\n return obj[field];\n};\nconst getN = path => {\n const len = path.length;\n return function (obj) {\n for (let i = 0; i < len; ++i) {\n obj = obj[path[i]];\n }\n return obj;\n };\n};\n\nfunction error (message) {\n throw Error(message);\n}\n\nfunction splitAccessPath (p) {\n const path = [],\n n = p.length;\n let q = null,\n b = 0,\n s = '',\n i,\n j,\n c;\n p = p + '';\n function push() {\n path.push(s + p.substring(i, j));\n s = '';\n i = j + 1;\n }\n for (i = j = 0; j < n; ++j) {\n c = p[j];\n if (c === '\\\\') {\n s += p.substring(i, j++);\n i = j;\n } else if (c === q) {\n push();\n q = null;\n b = -1;\n } else if (q) {\n continue;\n } else if (i === b && c === '\"') {\n i = j + 1;\n q = c;\n } else if (i === b && c === \"'\") {\n i = j + 1;\n q = c;\n } else if (c === '.' && !b) {\n if (j > i) {\n push();\n } else {\n i = j + 1;\n }\n } else if (c === '[') {\n if (j > i) push();\n b = i = j + 1;\n } else if (c === ']') {\n if (!b) error('Access path missing open bracket: ' + p);\n if (b > 0) push();\n b = 0;\n i = j + 1;\n }\n }\n if (b) error('Access path missing closing bracket: ' + p);\n if (q) error('Access path missing closing quote: ' + p);\n if (j > i) {\n j++;\n push();\n }\n return path;\n}\n\nfunction field (field, name, opt) {\n const path = splitAccessPath(field);\n field = path.length === 1 ? path[0] : field;\n return accessor((opt && opt.get || getter)(path), [field], name || field);\n}\n\nconst id = field('id');\nconst identity = accessor(_ => _, [], 'identity');\nconst zero = accessor(() => 0, [], 'zero');\nconst one = accessor(() => 1, [], 'one');\nconst truthy = accessor(() => true, [], 'true');\nconst falsy = accessor(() => false, [], 'false');\n\nfunction log$1(method, level, input) {\n const args = [level].concat([].slice.call(input));\n console[method].apply(console, args); // eslint-disable-line no-console\n}\n\nconst None = 0;\nconst Error$1 = 1;\nconst Warn = 2;\nconst Info = 3;\nconst Debug = 4;\nfunction logger (_, method) {\n let handler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : log$1;\n let level = _ || None;\n return {\n level(_) {\n if (arguments.length) {\n level = +_;\n return this;\n } else {\n return level;\n }\n },\n error() {\n if (level >= Error$1) handler(method || 'error', 'ERROR', arguments);\n return this;\n },\n warn() {\n if (level >= Warn) handler(method || 'warn', 'WARN', arguments);\n return this;\n },\n info() {\n if (level >= Info) handler(method || 'log', 'INFO', arguments);\n return this;\n },\n debug() {\n if (level >= Debug) handler(method || 'log', 'DEBUG', arguments);\n return this;\n }\n };\n}\n\nvar isArray = Array.isArray;\n\nfunction isObject (_) {\n return _ === Object(_);\n}\n\nconst isLegalKey = key => key !== '__proto__';\nfunction mergeConfig() {\n for (var _len = arguments.length, configs = new Array(_len), _key = 0; _key < _len; _key++) {\n configs[_key] = arguments[_key];\n }\n return configs.reduce((out, source) => {\n for (const key in source) {\n if (key === 'signals') {\n // for signals, we merge the signals arrays\n // source signals take precedence over\n // existing signals with the same name\n out.signals = mergeNamed(out.signals, source.signals);\n } else {\n // otherwise, merge objects subject to recursion constraints\n // for legend block, recurse for the layout entry only\n // for style block, recurse for all properties\n // otherwise, no recursion: objects overwrite, no merging\n const r = key === 'legend' ? {\n layout: 1\n } : key === 'style' ? true : null;\n writeConfig(out, key, source[key], r);\n }\n }\n return out;\n }, {});\n}\nfunction writeConfig(output, key, value, recurse) {\n if (!isLegalKey(key)) return;\n let k, o;\n if (isObject(value) && !isArray(value)) {\n o = isObject(output[key]) ? output[key] : output[key] = {};\n for (k in value) {\n if (recurse && (recurse === true || recurse[k])) {\n writeConfig(o, k, value[k]);\n } else if (isLegalKey(k)) {\n o[k] = value[k];\n }\n }\n } else {\n output[key] = value;\n }\n}\nfunction mergeNamed(a, b) {\n if (a == null) return b;\n const map = {},\n out = [];\n function add(_) {\n if (!map[_.name]) {\n map[_.name] = 1;\n out.push(_);\n }\n }\n b.forEach(add);\n a.forEach(add);\n return out;\n}\n\nfunction peek (array) {\n return array[array.length - 1];\n}\n\nfunction toNumber (_) {\n return _ == null || _ === '' ? null : +_;\n}\n\nconst exp = sign => x => sign * Math.exp(x);\nconst log = sign => x => Math.log(sign * x);\nconst symlog = c => x => Math.sign(x) * Math.log1p(Math.abs(x / c));\nconst symexp = c => x => Math.sign(x) * Math.expm1(Math.abs(x)) * c;\nconst pow = exponent => x => x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\nfunction pan(domain, delta, lift, ground) {\n const d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n dd = (d1 - d0) * delta;\n return [ground(d0 - dd), ground(d1 - dd)];\n}\nfunction panLinear(domain, delta) {\n return pan(domain, delta, toNumber, identity);\n}\nfunction panLog(domain, delta) {\n var sign = Math.sign(domain[0]);\n return pan(domain, delta, log(sign), exp(sign));\n}\nfunction panPow(domain, delta, exponent) {\n return pan(domain, delta, pow(exponent), pow(1 / exponent));\n}\nfunction panSymlog(domain, delta, constant) {\n return pan(domain, delta, symlog(constant), symexp(constant));\n}\nfunction zoom(domain, anchor, scale, lift, ground) {\n const d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n return [ground(da + (d0 - da) * scale), ground(da + (d1 - da) * scale)];\n}\nfunction zoomLinear(domain, anchor, scale) {\n return zoom(domain, anchor, scale, toNumber, identity);\n}\nfunction zoomLog(domain, anchor, scale) {\n const sign = Math.sign(domain[0]);\n return zoom(domain, anchor, scale, log(sign), exp(sign));\n}\nfunction zoomPow(domain, anchor, scale, exponent) {\n return zoom(domain, anchor, scale, pow(exponent), pow(1 / exponent));\n}\nfunction zoomSymlog(domain, anchor, scale, constant) {\n return zoom(domain, anchor, scale, symlog(constant), symexp(constant));\n}\n\nfunction quarter(date) {\n return 1 + ~~(new Date(date).getMonth() / 3);\n}\nfunction utcquarter(date) {\n return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n\nfunction array (_) {\n return _ != null ? isArray(_) ? _ : [_] : [];\n}\n\n/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nfunction clampRange (range, min, max) {\n let lo = range[0],\n hi = range[1],\n span;\n if (hi < lo) {\n span = hi;\n hi = lo;\n lo = span;\n }\n span = hi - lo;\n return span >= max - min ? [min, max] : [lo = Math.min(Math.max(lo, min), max - span), lo + span];\n}\n\nfunction isFunction (_) {\n return typeof _ === 'function';\n}\n\nconst DESCENDING = 'descending';\nfunction compare (fields, orders, opt) {\n opt = opt || {};\n orders = array(orders) || [];\n const ord = [],\n get = [],\n fmap = {},\n gen = opt.comparator || comparator;\n array(fields).forEach((f, i) => {\n if (f == null) return;\n ord.push(orders[i] === DESCENDING ? -1 : 1);\n get.push(f = isFunction(f) ? f : field(f, null, opt));\n (accessorFields(f) || []).forEach(_ => fmap[_] = 1);\n });\n return get.length === 0 ? null : accessor(gen(get, ord), Object.keys(fmap));\n}\nconst ascending = (u, v) => (u < v || u == null) && v != null ? -1 : (u > v || v == null) && u != null ? 1 : (v = v instanceof Date ? +v : v, u = u instanceof Date ? +u : u) !== u && v === v ? -1 : v !== v && u === u ? 1 : 0;\nconst comparator = (fields, orders) => fields.length === 1 ? compare1(fields[0], orders[0]) : compareN(fields, orders, fields.length);\nconst compare1 = (field, order) => function (a, b) {\n return ascending(field(a), field(b)) * order;\n};\nconst compareN = (fields, orders, n) => {\n orders.push(0); // pad zero for convenient lookup\n return function (a, b) {\n let f,\n c = 0,\n i = -1;\n while (c === 0 && ++i < n) {\n f = fields[i];\n c = ascending(f(a), f(b));\n }\n return c * orders[i];\n };\n};\n\nfunction constant (_) {\n return isFunction(_) ? _ : () => _;\n}\n\nfunction debounce (delay, handler) {\n let tid;\n return e => {\n if (tid) clearTimeout(tid);\n tid = setTimeout(() => (handler(e), tid = null), delay);\n };\n}\n\nfunction extend (_) {\n for (let x, k, i = 1, len = arguments.length; i < len; ++i) {\n x = arguments[i];\n for (k in x) {\n _[k] = x[k];\n }\n }\n return _;\n}\n\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nfunction extent (array, f) {\n let i = 0,\n n,\n v,\n min,\n max;\n if (array && (n = array.length)) {\n if (f == null) {\n // find first valid value\n for (v = array[i]; i < n && (v == null || v !== v); v = array[++i]);\n min = max = v;\n\n // visit all other values\n for (; i < n; ++i) {\n v = array[i];\n // skip null/undefined; NaN will fail all comparisons\n if (v != null) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n } else {\n // find first valid value\n for (v = f(array[i]); i < n && (v == null || v !== v); v = f(array[++i]));\n min = max = v;\n\n // visit all other values\n for (; i < n; ++i) {\n v = f(array[i]);\n // skip null/undefined; NaN will fail all comparisons\n if (v != null) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n }\n }\n return [min, max];\n}\n\nfunction extentIndex (array, f) {\n const n = array.length;\n let i = -1,\n a,\n b,\n c,\n u,\n v;\n if (f == null) {\n while (++i < n) {\n b = array[i];\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n if (i === n) return [-1, -1];\n u = v = i;\n while (++i < n) {\n b = array[i];\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n } else {\n while (++i < n) {\n b = f(array[i], i, array);\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n if (i === n) return [-1, -1];\n u = v = i;\n while (++i < n) {\n b = f(array[i], i, array);\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n }\n return [u, v];\n}\n\nconst hop = Object.prototype.hasOwnProperty;\nfunction has (object, property) {\n return hop.call(object, property);\n}\n\nconst NULL = {};\nfunction fastmap (input) {\n let obj = {},\n test;\n function has$1(key) {\n return has(obj, key) && obj[key] !== NULL;\n }\n const map = {\n size: 0,\n empty: 0,\n object: obj,\n has: has$1,\n get(key) {\n return has$1(key) ? obj[key] : undefined;\n },\n set(key, value) {\n if (!has$1(key)) {\n ++map.size;\n if (obj[key] === NULL) --map.empty;\n }\n obj[key] = value;\n return this;\n },\n delete(key) {\n if (has$1(key)) {\n --map.size;\n ++map.empty;\n obj[key] = NULL;\n }\n return this;\n },\n clear() {\n map.size = map.empty = 0;\n map.object = obj = {};\n },\n test(_) {\n if (arguments.length) {\n test = _;\n return map;\n } else {\n return test;\n }\n },\n clean() {\n const next = {};\n let size = 0;\n for (const key in obj) {\n const value = obj[key];\n if (value !== NULL && (!test || !test(value))) {\n next[key] = value;\n ++size;\n }\n }\n map.size = size;\n map.empty = 0;\n map.object = obj = next;\n }\n };\n if (input) Object.keys(input).forEach(key => {\n map.set(key, input[key]);\n });\n return map;\n}\n\nfunction flush (range, value, threshold, left, right, center) {\n if (!threshold && threshold !== 0) return center;\n const t = +threshold;\n let a = range[0],\n b = peek(range),\n l;\n\n // swap endpoints if range is reversed\n if (b < a) {\n l = a;\n a = b;\n b = l;\n }\n\n // compare value to endpoints\n l = Math.abs(value - a);\n const r = Math.abs(b - value);\n\n // adjust if value is within threshold distance of endpoint\n return l < r && l <= t ? left : r <= t ? right : center;\n}\n\nfunction inherits (child, parent, members) {\n const proto = child.prototype = Object.create(parent.prototype);\n Object.defineProperty(proto, 'constructor', {\n value: child,\n writable: true,\n enumerable: true,\n configurable: true\n });\n return extend(proto, members);\n}\n\n/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nfunction inrange (value, range, left, right) {\n let r0 = range[0],\n r1 = range[range.length - 1],\n t;\n if (r0 > r1) {\n t = r0;\n r0 = r1;\n r1 = t;\n }\n left = left === undefined || left;\n right = right === undefined || right;\n return (left ? r0 <= value : r0 < value) && (right ? value <= r1 : value < r1);\n}\n\nfunction isBoolean (_) {\n return typeof _ === 'boolean';\n}\n\nfunction isDate (_) {\n return Object.prototype.toString.call(_) === '[object Date]';\n}\n\nfunction isIterable (_) {\n return _ && isFunction(_[Symbol.iterator]);\n}\n\nfunction isNumber (_) {\n return typeof _ === 'number';\n}\n\nfunction isRegExp (_) {\n return Object.prototype.toString.call(_) === '[object RegExp]';\n}\n\nfunction isString (_) {\n return typeof _ === 'string';\n}\n\nfunction key (fields, flat, opt) {\n if (fields) {\n fields = flat ? array(fields).map(f => f.replace(/\\\\(.)/g, '$1')) : array(fields);\n }\n const len = fields && fields.length,\n gen = opt && opt.get || getter,\n map = f => gen(flat ? [f] : splitAccessPath(f));\n let fn;\n if (!len) {\n fn = function () {\n return '';\n };\n } else if (len === 1) {\n const get = map(fields[0]);\n fn = function (_) {\n return '' + get(_);\n };\n } else {\n const get = fields.map(map);\n fn = function (_) {\n let s = '' + get[0](_),\n i = 0;\n while (++i < len) s += '|' + get[i](_);\n return s;\n };\n }\n return accessor(fn, fields, 'key');\n}\n\nfunction lerp (array, frac) {\n const lo = array[0],\n hi = peek(array),\n f = +frac;\n return !f ? lo : f === 1 ? hi : lo + f * (hi - lo);\n}\n\nconst DEFAULT_MAX_SIZE = 10000;\n\n// adapted from https://github.com/dominictarr/hashlru/ (MIT License)\nfunction lruCache (maxsize) {\n maxsize = +maxsize || DEFAULT_MAX_SIZE;\n let curr, prev, size;\n const clear = () => {\n curr = {};\n prev = {};\n size = 0;\n };\n const update = (key, value) => {\n if (++size > maxsize) {\n prev = curr;\n curr = {};\n size = 1;\n }\n return curr[key] = value;\n };\n clear();\n return {\n clear,\n has: key => has(curr, key) || has(prev, key),\n get: key => has(curr, key) ? curr[key] : has(prev, key) ? update(key, prev[key]) : undefined,\n set: (key, value) => has(curr, key) ? curr[key] = value : update(key, value)\n };\n}\n\nfunction merge (compare, array0, array1, output) {\n const n0 = array0.length,\n n1 = array1.length;\n if (!n1) return array0;\n if (!n0) return array1;\n const merged = output || new array0.constructor(n0 + n1);\n let i0 = 0,\n i1 = 0,\n i = 0;\n for (; i0 < n0 && i1 < n1; ++i) {\n merged[i] = compare(array0[i0], array1[i1]) > 0 ? array1[i1++] : array0[i0++];\n }\n for (; i0 < n0; ++i0, ++i) {\n merged[i] = array0[i0];\n }\n for (; i1 < n1; ++i1, ++i) {\n merged[i] = array1[i1];\n }\n return merged;\n}\n\nfunction repeat (str, reps) {\n let s = '';\n while (--reps >= 0) s += str;\n return s;\n}\n\nfunction pad (str, length, padchar, align) {\n const c = padchar || ' ',\n s = str + '',\n n = length - s.length;\n return n <= 0 ? s : align === 'left' ? repeat(c, n) + s : align === 'center' ? repeat(c, ~~(n / 2)) + s + repeat(c, Math.ceil(n / 2)) : s + repeat(c, n);\n}\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\nfunction span (array) {\n return array && peek(array) - array[0] || 0;\n}\n\nfunction $(x) {\n return isArray(x) ? '[' + x.map($) + ']' : isObject(x) || isString(x) ?\n // Output valid JSON and JS source strings.\n // See http://timelessrepo.com/json-isnt-a-javascript-subset\n JSON.stringify(x).replace('\\u2028', '\\\\u2028').replace('\\u2029', '\\\\u2029') : x;\n}\n\nfunction toBoolean (_) {\n return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n}\n\nconst defaultParser = _ => isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\nfunction toDate (_, parser) {\n parser = parser || defaultParser;\n return _ == null || _ === '' ? null : parser(_);\n}\n\nfunction toString (_) {\n return _ == null || _ === '' ? null : _ + '';\n}\n\nfunction toSet (_) {\n const s = {},\n n = _.length;\n for (let i = 0; i < n; ++i) s[_[i]] = true;\n return s;\n}\n\nfunction truncate (str, length, align, ellipsis) {\n const e = ellipsis != null ? ellipsis : '\\u2026',\n s = str + '',\n n = s.length,\n l = Math.max(0, length - e.length);\n return n <= length ? s : align === 'left' ? e + s.slice(n - l) : align === 'center' ? s.slice(0, Math.ceil(l / 2)) + e + s.slice(n - ~~(l / 2)) : s.slice(0, l) + e;\n}\n\nfunction visitArray (array, filter, visitor) {\n if (array) {\n if (filter) {\n const n = array.length;\n for (let i = 0; i < n; ++i) {\n const t = filter(array[i]);\n if (t) visitor(t, i, array);\n }\n } else {\n array.forEach(visitor);\n }\n }\n}\n\nexport { Debug, Error$1 as Error, Info, None, Warn, accessor, accessorFields, accessorName, array, ascending, clampRange, compare, constant, debounce, error, extend, extent, extentIndex, falsy, fastmap, field, flush, has as hasOwnProperty, id, identity, inherits, inrange, isArray, isBoolean, isDate, isFunction, isIterable, isNumber, isObject, isRegExp, isString, key, lerp, logger, lruCache, merge, mergeConfig, one, pad, panLinear, panLog, panPow, panSymlog, peek, quarter, repeat, span, splitAccessPath, $ as stringValue, toBoolean, toDate, toNumber, toSet, toString, truncate, truthy, utcquarter, visitArray, writeConfig, zero, zoomLinear, zoomLog, zoomPow, zoomSymlog };\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","export default function(x) {\n return x;\n}\n","import reverse from \"./reverse.js\";\nimport transform from \"./transform.js\";\n\nexport default function(topology, o) {\n if (typeof o === \"string\") o = topology.objects[o];\n return o.type === \"GeometryCollection\"\n ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n : feature(topology, o);\n}\n\nfunction feature(topology, o) {\n var id = o.id,\n bbox = o.bbox,\n properties = o.properties == null ? {} : o.properties,\n geometry = object(topology, o);\n return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n var transformPoint = transform(topology.transform),\n arcs = topology.arcs;\n\n function arc(i, points) {\n if (points.length) points.pop();\n for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n points.push(transformPoint(a[k], k));\n }\n if (i < 0) reverse(points, n);\n }\n\n function point(p) {\n return transformPoint(p);\n }\n\n function line(arcs) {\n var points = [];\n for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n return points;\n }\n\n function ring(arcs) {\n var points = line(arcs);\n while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n return points;\n }\n\n function polygon(arcs) {\n return arcs.map(ring);\n }\n\n function geometry(o) {\n var type = o.type, coordinates;\n switch (type) {\n case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n case \"Point\": coordinates = point(o.coordinates); break;\n case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n case \"LineString\": coordinates = line(o.arcs); break;\n case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n case \"Polygon\": coordinates = polygon(o.arcs); break;\n case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n default: return null;\n }\n return {type: type, coordinates: coordinates};\n }\n\n return geometry(o);\n}\n","import identity from \"./identity.js\";\n\nexport default function(transform) {\n if (transform == null) return identity;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function(input, i) {\n if (!i) x0 = y0 = 0;\n var j = 2, n = input.length, output = new Array(n);\n output[0] = (x0 += input[0]) * kx + dx;\n output[1] = (y0 += input[1]) * ky + dy;\n while (j < n) output[j] = input[j], ++j;\n return output;\n };\n}\n","export default function(array, n) {\n var t, j = array.length, i = j - n;\n while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n","export default function(topology, arcs) {\n var stitchedArcs = {},\n fragmentByStart = {},\n fragmentByEnd = {},\n fragments = [],\n emptyIndex = -1;\n\n // Stitch empty arcs first, since they may be subsumed by other arcs.\n arcs.forEach(function(i, j) {\n var arc = topology.arcs[i < 0 ? ~i : i], t;\n if (arc.length < 3 && !arc[1][0] && !arc[1][1]) {\n t = arcs[++emptyIndex], arcs[emptyIndex] = i, arcs[j] = t;\n }\n });\n\n arcs.forEach(function(i) {\n var e = ends(i),\n start = e[0],\n end = e[1],\n f, g;\n\n if (f = fragmentByEnd[start]) {\n delete fragmentByEnd[f.end];\n f.push(i);\n f.end = end;\n if (g = fragmentByStart[end]) {\n delete fragmentByStart[g.start];\n var fg = g === f ? f : f.concat(g);\n fragmentByStart[fg.start = f.start] = fragmentByEnd[fg.end = g.end] = fg;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else if (f = fragmentByStart[end]) {\n delete fragmentByStart[f.start];\n f.unshift(i);\n f.start = start;\n if (g = fragmentByEnd[start]) {\n delete fragmentByEnd[g.end];\n var gf = g === f ? f : g.concat(f);\n fragmentByStart[gf.start = g.start] = fragmentByEnd[gf.end = f.end] = gf;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else {\n f = [i];\n fragmentByStart[f.start = start] = fragmentByEnd[f.end = end] = f;\n }\n });\n\n function ends(i) {\n var arc = topology.arcs[i < 0 ? ~i : i], p0 = arc[0], p1;\n if (topology.transform) p1 = [0, 0], arc.forEach(function(dp) { p1[0] += dp[0], p1[1] += dp[1]; });\n else p1 = arc[arc.length - 1];\n return i < 0 ? [p1, p0] : [p0, p1];\n }\n\n function flush(fragmentByEnd, fragmentByStart) {\n for (var k in fragmentByEnd) {\n var f = fragmentByEnd[k];\n delete fragmentByStart[f.start];\n delete f.start;\n delete f.end;\n f.forEach(function(i) { stitchedArcs[i < 0 ? ~i : i] = 1; });\n fragments.push(f);\n }\n }\n\n flush(fragmentByEnd, fragmentByStart);\n flush(fragmentByStart, fragmentByEnd);\n arcs.forEach(function(i) { if (!stitchedArcs[i < 0 ? ~i : i]) fragments.push([i]); });\n\n return fragments;\n}\n","import {object} from \"./feature.js\";\nimport stitch from \"./stitch.js\";\n\nexport default function(topology) {\n return object(topology, meshArcs.apply(this, arguments));\n}\n\nexport function meshArcs(topology, object, filter) {\n var arcs, i, n;\n if (arguments.length > 1) arcs = extractArcs(topology, object, filter);\n else for (i = 0, arcs = new Array(n = topology.arcs.length); i < n; ++i) arcs[i] = i;\n return {type: \"MultiLineString\", arcs: stitch(topology, arcs)};\n}\n\nfunction extractArcs(topology, object, filter) {\n var arcs = [],\n geomsByArc = [],\n geom;\n\n function extract0(i) {\n var j = i < 0 ? ~i : i;\n (geomsByArc[j] || (geomsByArc[j] = [])).push({i: i, g: geom});\n }\n\n function extract1(arcs) {\n arcs.forEach(extract0);\n }\n\n function extract2(arcs) {\n arcs.forEach(extract1);\n }\n\n function extract3(arcs) {\n arcs.forEach(extract2);\n }\n\n function geometry(o) {\n switch (geom = o, o.type) {\n case \"GeometryCollection\": o.geometries.forEach(geometry); break;\n case \"LineString\": extract1(o.arcs); break;\n case \"MultiLineString\": case \"Polygon\": extract2(o.arcs); break;\n case \"MultiPolygon\": extract3(o.arcs); break;\n }\n }\n\n geometry(object);\n\n geomsByArc.forEach(filter == null\n ? function(geoms) { arcs.push(geoms[0].i); }\n : function(geoms) { if (filter(geoms[0].g, geoms[geoms.length - 1].g)) arcs.push(geoms[0].i); });\n\n return arcs;\n}\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n constructor() {\n this._partials = new Float64Array(32);\n this._n = 0;\n }\n add(x) {\n const p = this._partials;\n let i = 0;\n for (let j = 0; j < this._n && j < 32; j++) {\n const y = p[j],\n hi = x + y,\n lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n if (lo) p[i++] = lo;\n x = hi;\n }\n p[i] = x;\n this._n = i + 1;\n return this;\n }\n valueOf() {\n const p = this._partials;\n let n = this._n, x, y, lo, hi = 0;\n if (n > 0) {\n hi = p[--n];\n while (n > 0) {\n x = hi;\n y = p[--n];\n hi = x + y;\n lo = y - (hi - x);\n if (lo) break;\n }\n if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n y = lo * 2;\n x = hi + y;\n if (y == x - hi) hi = x;\n }\n }\n return hi;\n }\n}\n\nexport function fsum(values, valueof) {\n const adder = new Adder();\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n adder.add(value);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n adder.add(value);\n }\n }\n }\n return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n const adder = new Adder();\n let index = -1;\n return Float64Array.from(values, valueof === undefined\n ? v => adder.add(+v || 0)\n : v => adder.add(+valueof(v, ++index, values) || 0)\n );\n}\n","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n values = Array.from(values);\n let [f] = F;\n if ((f && f.length !== 2) || F.length > 1) {\n const index = Uint32Array.from(values, (d, i) => i);\n if (F.length > 1) {\n F = F.map(f => values.map(f));\n index.sort((i, j) => {\n for (const f of F) {\n const c = ascendingDefined(f[i], f[j]);\n if (c) return c;\n }\n });\n } else {\n f = values.map(f);\n index.sort((i, j) => ascendingDefined(f[i], f[j]));\n }\n return permute(values, index);\n }\n return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n if (compare === ascending) return ascendingDefined;\n if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n return (a, b) => {\n const x = compare(a, b);\n if (x || x === 0) return x;\n return (compare(b, b) === 0) - (compare(a, a) === 0);\n };\n}\n\nexport function ascendingDefined(a, b) {\n return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n k = Math.floor(k);\n left = Math.floor(Math.max(0, left));\n right = Math.floor(Math.min(array.length - 1, right));\n\n if (!(left <= k && k <= right)) return array;\n\n compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return minIndex(values);\n if (p >= 1) return maxIndex(values);\n var n,\n i = Math.floor((n - 1) * p),\n order = (i, j) => ascendingDefined(values[i], values[j]),\n index = quickselect(Uint32Array.from(values, (_, i) => i), i, 0, n - 1, order);\n return greatest(index.subarray(0, i + 1), i => values[i]);\n}\n","import quantile, {quantileIndex} from \"./quantile.js\";\n\nexport default function median(values, valueof) {\n return quantile(values, 0.5, valueof);\n}\n\nexport function medianIndex(values, valueof) {\n return quantileIndex(values, 0.5, valueof);\n}\n","function* flatten(arrays) {\n for (const array of arrays) {\n yield* array;\n }\n}\n\nexport default function merge(arrays) {\n return Array.from(flatten(arrays));\n}\n","export default function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export default function sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n","import {InternSet} from \"internmap\";\n\nexport default function intersection(values, ...others) {\n values = new InternSet(values);\n others = others.map(set);\n out: for (const value of values) {\n for (const other of others) {\n if (!other.has(value)) {\n values.delete(value);\n continue out;\n }\n }\n }\n return values;\n}\n\nfunction set(values) {\n return values instanceof InternSet ? values : new InternSet(values);\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nexport const milliseconds = millisecond.range;\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport const utcYears = utcYear.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import { array, error, hasOwnProperty, extend, peek, toSet, constant, zero, one, span } from 'vega-util';\nimport { timeDay, timeWeek, utcDay, utcWeek, timeYear, timeMonth, timeHour, timeMinute, timeSecond, timeMillisecond, utcYear, utcMonth, utcHour, utcMinute, utcSecond, utcMillisecond } from 'd3-time';\nimport { bisector, tickStep } from 'd3-array';\n\nconst YEAR = 'year';\nconst QUARTER = 'quarter';\nconst MONTH = 'month';\nconst WEEK = 'week';\nconst DATE = 'date';\nconst DAY = 'day';\nconst DAYOFYEAR = 'dayofyear';\nconst HOURS = 'hours';\nconst MINUTES = 'minutes';\nconst SECONDS = 'seconds';\nconst MILLISECONDS = 'milliseconds';\nconst TIME_UNITS = [YEAR, QUARTER, MONTH, WEEK, DATE, DAY, DAYOFYEAR, HOURS, MINUTES, SECONDS, MILLISECONDS];\nconst UNITS = TIME_UNITS.reduce((o, u, i) => (o[u] = 1 + i, o), {});\nfunction timeUnits(units) {\n const u = array(units).slice(),\n m = {};\n\n // check validity\n if (!u.length) error('Missing time unit.');\n u.forEach(unit => {\n if (hasOwnProperty(UNITS, unit)) {\n m[unit] = 1;\n } else {\n error(`Invalid time unit: ${unit}.`);\n }\n });\n const numTypes = (m[WEEK] || m[DAY] ? 1 : 0) + (m[QUARTER] || m[MONTH] || m[DATE] ? 1 : 0) + (m[DAYOFYEAR] ? 1 : 0);\n if (numTypes > 1) {\n error(`Incompatible time units: ${units}`);\n }\n\n // ensure proper sort order\n u.sort((a, b) => UNITS[a] - UNITS[b]);\n return u;\n}\nconst defaultSpecifiers = {\n [YEAR]: '%Y ',\n [QUARTER]: 'Q%q ',\n [MONTH]: '%b ',\n [DATE]: '%d ',\n [WEEK]: 'W%U ',\n [DAY]: '%a ',\n [DAYOFYEAR]: '%j ',\n [HOURS]: '%H:00',\n [MINUTES]: '00:%M',\n [SECONDS]: ':%S',\n [MILLISECONDS]: '.%L',\n [`${YEAR}-${MONTH}`]: '%Y-%m ',\n [`${YEAR}-${MONTH}-${DATE}`]: '%Y-%m-%d ',\n [`${HOURS}-${MINUTES}`]: '%H:%M'\n};\nfunction timeUnitSpecifier(units, specifiers) {\n const s = extend({}, defaultSpecifiers, specifiers),\n u = timeUnits(units),\n n = u.length;\n let fmt = '',\n start = 0,\n end,\n key;\n for (start = 0; start < n;) {\n for (end = u.length; end > start; --end) {\n key = u.slice(start, end).join('-');\n if (s[key] != null) {\n fmt += s[key];\n start = end;\n break;\n }\n }\n }\n return fmt.trim();\n}\n\nconst t0 = new Date();\nfunction localYear(y) {\n t0.setFullYear(y);\n t0.setMonth(0);\n t0.setDate(1);\n t0.setHours(0, 0, 0, 0);\n return t0;\n}\nfunction dayofyear(d) {\n return localDayOfYear(new Date(d));\n}\nfunction week(d) {\n return localWeekNum(new Date(d));\n}\nfunction localDayOfYear(d) {\n return timeDay.count(localYear(d.getFullYear()) - 1, d);\n}\nfunction localWeekNum(d) {\n return timeWeek.count(localYear(d.getFullYear()) - 1, d);\n}\nfunction localFirst(y) {\n return localYear(y).getDay();\n}\nfunction localDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(-1, m, d, H, M, S, L);\n date.setFullYear(y);\n return date;\n }\n return new Date(y, m, d, H, M, S, L);\n}\nfunction utcdayofyear(d) {\n return utcDayOfYear(new Date(d));\n}\nfunction utcweek(d) {\n return utcWeekNum(new Date(d));\n}\nfunction utcDayOfYear(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcDay.count(y - 1, d);\n}\nfunction utcWeekNum(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcWeek.count(y - 1, d);\n}\nfunction utcFirst(y) {\n t0.setTime(Date.UTC(y, 0, 1));\n return t0.getUTCDay();\n}\nfunction utcDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(Date.UTC(-1, m, d, H, M, S, L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(y, m, d, H, M, S, L));\n}\n\nfunction floor(units, step, get, inv, newDate) {\n const s = step || 1,\n b = peek(units),\n _ = (unit, p, key) => {\n key = key || unit;\n return getUnit(get[key], inv[key], unit === b && s, p);\n };\n const t = new Date(),\n u = toSet(units),\n y = u[YEAR] ? _(YEAR) : constant(2012),\n m = u[MONTH] ? _(MONTH) : u[QUARTER] ? _(QUARTER) : zero,\n d = u[WEEK] && u[DAY] ? _(DAY, 1, WEEK + DAY) : u[WEEK] ? _(WEEK, 1) : u[DAY] ? _(DAY, 1) : u[DATE] ? _(DATE, 1) : u[DAYOFYEAR] ? _(DAYOFYEAR, 1) : one,\n H = u[HOURS] ? _(HOURS) : zero,\n M = u[MINUTES] ? _(MINUTES) : zero,\n S = u[SECONDS] ? _(SECONDS) : zero,\n L = u[MILLISECONDS] ? _(MILLISECONDS) : zero;\n return function (v) {\n t.setTime(+v);\n const year = y(t);\n return newDate(year, m(t), d(t, year), H(t), M(t), S(t), L(t));\n };\n}\nfunction getUnit(f, inv, step, phase) {\n const u = step <= 1 ? f : phase ? (d, y) => phase + step * Math.floor((f(d, y) - phase) / step) : (d, y) => step * Math.floor(f(d, y) / step);\n return inv ? (d, y) => inv(u(d, y), y) : u;\n}\n\n// returns the day of the year based on week number, day of week,\n// and the day of the week for the first day of the year\nfunction weekday(week, day, firstDay) {\n return day + week * 7 - (firstDay + 6) % 7;\n}\n\n// -- LOCAL TIME --\n\nconst localGet = {\n [YEAR]: d => d.getFullYear(),\n [QUARTER]: d => Math.floor(d.getMonth() / 3),\n [MONTH]: d => d.getMonth(),\n [DATE]: d => d.getDate(),\n [HOURS]: d => d.getHours(),\n [MINUTES]: d => d.getMinutes(),\n [SECONDS]: d => d.getSeconds(),\n [MILLISECONDS]: d => d.getMilliseconds(),\n [DAYOFYEAR]: d => localDayOfYear(d),\n [WEEK]: d => localWeekNum(d),\n [WEEK + DAY]: (d, y) => weekday(localWeekNum(d), d.getDay(), localFirst(y)),\n [DAY]: (d, y) => weekday(1, d.getDay(), localFirst(y))\n};\nconst localInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, localFirst(y))\n};\nfunction timeFloor(units, step) {\n return floor(units, step || 1, localGet, localInv, localDate);\n}\n\n// -- UTC TIME --\n\nconst utcGet = {\n [YEAR]: d => d.getUTCFullYear(),\n [QUARTER]: d => Math.floor(d.getUTCMonth() / 3),\n [MONTH]: d => d.getUTCMonth(),\n [DATE]: d => d.getUTCDate(),\n [HOURS]: d => d.getUTCHours(),\n [MINUTES]: d => d.getUTCMinutes(),\n [SECONDS]: d => d.getUTCSeconds(),\n [MILLISECONDS]: d => d.getUTCMilliseconds(),\n [DAYOFYEAR]: d => utcDayOfYear(d),\n [WEEK]: d => utcWeekNum(d),\n [DAY]: (d, y) => weekday(1, d.getUTCDay(), utcFirst(y)),\n [WEEK + DAY]: (d, y) => weekday(utcWeekNum(d), d.getUTCDay(), utcFirst(y))\n};\nconst utcInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, utcFirst(y))\n};\nfunction utcFloor(units, step) {\n return floor(units, step || 1, utcGet, utcInv, utcDate);\n}\n\nconst timeIntervals = {\n [YEAR]: timeYear,\n [QUARTER]: timeMonth.every(3),\n [MONTH]: timeMonth,\n [WEEK]: timeWeek,\n [DATE]: timeDay,\n [DAY]: timeDay,\n [DAYOFYEAR]: timeDay,\n [HOURS]: timeHour,\n [MINUTES]: timeMinute,\n [SECONDS]: timeSecond,\n [MILLISECONDS]: timeMillisecond\n};\nconst utcIntervals = {\n [YEAR]: utcYear,\n [QUARTER]: utcMonth.every(3),\n [MONTH]: utcMonth,\n [WEEK]: utcWeek,\n [DATE]: utcDay,\n [DAY]: utcDay,\n [DAYOFYEAR]: utcDay,\n [HOURS]: utcHour,\n [MINUTES]: utcMinute,\n [SECONDS]: utcSecond,\n [MILLISECONDS]: utcMillisecond\n};\nfunction timeInterval(unit) {\n return timeIntervals[unit];\n}\nfunction utcInterval(unit) {\n return utcIntervals[unit];\n}\nfunction offset(ival, date, step) {\n return ival ? ival.offset(date, step) : undefined;\n}\nfunction timeOffset(unit, date, step) {\n return offset(timeInterval(unit), date, step);\n}\nfunction utcOffset(unit, date, step) {\n return offset(utcInterval(unit), date, step);\n}\nfunction sequence(ival, start, stop, step) {\n return ival ? ival.range(start, stop, step) : undefined;\n}\nfunction timeSequence(unit, start, stop, step) {\n return sequence(timeInterval(unit), start, stop, step);\n}\nfunction utcSequence(unit, start, stop, step) {\n return sequence(utcInterval(unit), start, stop, step);\n}\n\nconst durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\nconst Milli = [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS],\n Seconds = Milli.slice(0, -1),\n Minutes = Seconds.slice(0, -1),\n Hours = Minutes.slice(0, -1),\n Day = Hours.slice(0, -1),\n Week = [YEAR, WEEK],\n Month = [YEAR, MONTH],\n Year = [YEAR];\nconst intervals = [[Seconds, 1, durationSecond], [Seconds, 5, 5 * durationSecond], [Seconds, 15, 15 * durationSecond], [Seconds, 30, 30 * durationSecond], [Minutes, 1, durationMinute], [Minutes, 5, 5 * durationMinute], [Minutes, 15, 15 * durationMinute], [Minutes, 30, 30 * durationMinute], [Hours, 1, durationHour], [Hours, 3, 3 * durationHour], [Hours, 6, 6 * durationHour], [Hours, 12, 12 * durationHour], [Day, 1, durationDay], [Week, 1, durationWeek], [Month, 1, durationMonth], [Month, 3, 3 * durationMonth], [Year, 1, durationYear]];\nfunction bin (opt) {\n const ext = opt.extent,\n max = opt.maxbins || 40,\n target = Math.abs(span(ext)) / max;\n let i = bisector(i => i[2]).right(intervals, target),\n units,\n step;\n if (i === intervals.length) {\n units = Year, step = tickStep(ext[0] / durationYear, ext[1] / durationYear, max);\n } else if (i) {\n i = intervals[target / intervals[i - 1][2] < intervals[i][2] / target ? i - 1 : i];\n units = i[0];\n step = i[1];\n } else {\n units = Milli;\n step = Math.max(tickStep(ext[0], ext[1], max), 1);\n }\n return {\n units,\n step\n };\n}\n\nexport { DATE, DAY, DAYOFYEAR, HOURS, MILLISECONDS, MINUTES, MONTH, QUARTER, SECONDS, TIME_UNITS, WEEK, YEAR, dayofyear, bin as timeBin, timeFloor, timeInterval, timeOffset, timeSequence, timeUnitSpecifier, timeUnits, utcFloor, utcInterval, utcOffset, utcSequence, utcdayofyear, utcweek, week };\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import { tickStep } from 'd3-array';\nimport { formatSpecifier, precisionFixed, precisionRound, precisionPrefix, format, formatPrefix, formatLocale } from 'd3-format';\nimport { SECONDS, MINUTES, HOURS, DATE, WEEK, MONTH, QUARTER, YEAR, MILLISECONDS, DAY, timeInterval, utcInterval } from 'vega-time';\nimport { isString, isObject, error, extend } from 'vega-util';\nimport { timeFormat, timeParse, utcFormat, utcParse, timeFormatLocale as timeFormatLocale$1 } from 'd3-time-format';\n\nfunction memoize (method) {\n const cache = {};\n return spec => cache[spec] || (cache[spec] = method(spec));\n}\n\nfunction trimZeroes(numberFormat, decimalChar) {\n return x => {\n const str = numberFormat(x),\n dec = str.indexOf(decimalChar);\n if (dec < 0) return str;\n let idx = rightmostDigit(str, dec);\n const end = idx < str.length ? str.slice(idx) : '';\n while (--idx > dec) if (str[idx] !== '0') {\n ++idx;\n break;\n }\n return str.slice(0, idx) + end;\n };\n}\nfunction rightmostDigit(str, dec) {\n let i = str.lastIndexOf('e'),\n c;\n if (i > 0) return i;\n for (i = str.length; --i > dec;) {\n c = str.charCodeAt(i);\n if (c >= 48 && c <= 57) return i + 1; // is digit\n }\n}\n\nfunction numberLocale(locale) {\n const format = memoize(locale.format),\n formatPrefix = locale.formatPrefix;\n return {\n format,\n formatPrefix,\n formatFloat(spec) {\n const s = formatSpecifier(spec || ',');\n if (s.precision == null) {\n s.precision = 12;\n switch (s.type) {\n case '%':\n s.precision -= 2;\n break;\n case 'e':\n s.precision -= 1;\n break;\n }\n return trimZeroes(format(s),\n // number format\n format('.1f')(1)[1] // decimal point character\n );\n } else {\n return format(s);\n }\n },\n formatSpan(start, stop, count, specifier) {\n specifier = formatSpecifier(specifier == null ? ',f' : specifier);\n const step = tickStep(start, stop, count),\n value = Math.max(Math.abs(start), Math.abs(stop));\n let precision;\n if (specifier.precision == null) {\n switch (specifier.type) {\n case 's':\n {\n if (!isNaN(precision = precisionPrefix(step, value))) {\n specifier.precision = precision;\n }\n return formatPrefix(specifier, value);\n }\n case '':\n case 'e':\n case 'g':\n case 'p':\n case 'r':\n {\n if (!isNaN(precision = precisionRound(step, value))) {\n specifier.precision = precision - (specifier.type === 'e');\n }\n break;\n }\n case 'f':\n case '%':\n {\n if (!isNaN(precision = precisionFixed(step))) {\n specifier.precision = precision - (specifier.type === '%') * 2;\n }\n break;\n }\n }\n }\n return format(specifier);\n }\n };\n}\nlet defaultNumberLocale;\nresetNumberFormatDefaultLocale();\nfunction resetNumberFormatDefaultLocale() {\n return defaultNumberLocale = numberLocale({\n format: format,\n formatPrefix: formatPrefix\n });\n}\nfunction numberFormatLocale(definition) {\n return numberLocale(formatLocale(definition));\n}\nfunction numberFormatDefaultLocale(definition) {\n return arguments.length ? defaultNumberLocale = numberFormatLocale(definition) : defaultNumberLocale;\n}\n\nfunction timeMultiFormat(format, interval, spec) {\n spec = spec || {};\n if (!isObject(spec)) {\n error(`Invalid time multi-format specifier: ${spec}`);\n }\n const second = interval(SECONDS),\n minute = interval(MINUTES),\n hour = interval(HOURS),\n day = interval(DATE),\n week = interval(WEEK),\n month = interval(MONTH),\n quarter = interval(QUARTER),\n year = interval(YEAR),\n L = format(spec[MILLISECONDS] || '.%L'),\n S = format(spec[SECONDS] || ':%S'),\n M = format(spec[MINUTES] || '%I:%M'),\n H = format(spec[HOURS] || '%I %p'),\n d = format(spec[DATE] || spec[DAY] || '%a %d'),\n w = format(spec[WEEK] || '%b %d'),\n m = format(spec[MONTH] || '%B'),\n q = format(spec[QUARTER] || '%B'),\n y = format(spec[YEAR] || '%Y');\n return date => (second(date) < date ? L : minute(date) < date ? S : hour(date) < date ? M : day(date) < date ? H : month(date) < date ? week(date) < date ? d : w : year(date) < date ? quarter(date) < date ? m : q : y)(date);\n}\nfunction timeLocale(locale) {\n const timeFormat = memoize(locale.format),\n utcFormat = memoize(locale.utcFormat);\n return {\n timeFormat: spec => isString(spec) ? timeFormat(spec) : timeMultiFormat(timeFormat, timeInterval, spec),\n utcFormat: spec => isString(spec) ? utcFormat(spec) : timeMultiFormat(utcFormat, utcInterval, spec),\n timeParse: memoize(locale.parse),\n utcParse: memoize(locale.utcParse)\n };\n}\nlet defaultTimeLocale;\nresetTimeFormatDefaultLocale();\nfunction resetTimeFormatDefaultLocale() {\n return defaultTimeLocale = timeLocale({\n format: timeFormat,\n parse: timeParse,\n utcFormat: utcFormat,\n utcParse: utcParse\n });\n}\nfunction timeFormatLocale(definition) {\n return timeLocale(timeFormatLocale$1(definition));\n}\nfunction timeFormatDefaultLocale(definition) {\n return arguments.length ? defaultTimeLocale = timeFormatLocale(definition) : defaultTimeLocale;\n}\n\nconst createLocale = (number, time) => extend({}, number, time);\nfunction locale(numberSpec, timeSpec) {\n const number = numberSpec ? numberFormatLocale(numberSpec) : numberFormatDefaultLocale();\n const time = timeSpec ? timeFormatLocale(timeSpec) : timeFormatDefaultLocale();\n return createLocale(number, time);\n}\nfunction defaultLocale(numberSpec, timeSpec) {\n const args = arguments.length;\n if (args && args !== 2) {\n error('defaultLocale expects either zero or two arguments.');\n }\n return args ? createLocale(numberFormatDefaultLocale(numberSpec), timeFormatDefaultLocale(timeSpec)) : createLocale(numberFormatDefaultLocale(), timeFormatDefaultLocale());\n}\nfunction resetDefaultLocale() {\n resetNumberFormatDefaultLocale();\n resetTimeFormatDefaultLocale();\n return defaultLocale();\n}\n\nexport { defaultLocale, locale, numberFormatDefaultLocale, numberFormatLocale, resetDefaultLocale, resetNumberFormatDefaultLocale, resetTimeFormatDefaultLocale, timeFormatDefaultLocale, timeFormatLocale };\n","import { extend, error, stringValue, isFunction, toBoolean, toNumber, toDate, toString, identity, field, isObject, isArray, isIterable, hasOwnProperty } from 'vega-util';\nimport { dsvFormat } from 'd3-dsv';\nimport { feature, mesh } from 'topojson-client';\nimport { timeFormatDefaultLocale } from 'vega-format';\n\n// Matches absolute URLs with optional protocol\n// https://... file://... //...\nconst protocol_re = /^(data:|([A-Za-z]+:)?\\/\\/)/;\n\n// Matches allowed URIs. From https://github.com/cure53/DOMPurify/blob/master/src/regexp.js with added file://\nconst allowed_re = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i; // eslint-disable-line no-useless-escape\nconst whitespace_re = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g; // eslint-disable-line no-control-regex\n\n// Special treatment in node.js for the file: protocol\nconst fileProtocol = 'file://';\n\n/**\n * Factory for a loader constructor that provides methods for requesting\n * files from either the network or disk, and for sanitizing request URIs.\n * @param {function} fetch - The Fetch API for HTTP network requests.\n * If null or undefined, HTTP loading will be disabled.\n * @param {object} fs - The file system interface for file loading.\n * If null or undefined, local file loading will be disabled.\n * @return {function} A loader constructor with the following signature:\n * param {object} [options] - Optional default loading options to use.\n * return {object} - A new loader instance.\n */\nfunction loaderFactory (fetch, fs) {\n return options => ({\n options: options || {},\n sanitize: sanitize,\n load: load,\n fileAccess: !!fs,\n file: fileLoader(fs),\n http: httpLoader(fetch)\n });\n}\n\n/**\n * Load an external resource, typically either from the web or from the local\n * filesystem. This function uses {@link sanitize} to first sanitize the uri,\n * then calls either {@link http} (for web requests) or {@link file} (for\n * filesystem loading).\n * @param {string} uri - The resource indicator (e.g., URL or filename).\n * @param {object} [options] - Optional loading options. These options will\n * override any existing default options.\n * @return {Promise} - A promise that resolves to the loaded content.\n */\nasync function load(uri, options) {\n const opt = await this.sanitize(uri, options),\n url = opt.href;\n return opt.localFile ? this.file(url) : this.http(url, options);\n}\n\n/**\n * URI sanitizer function.\n * @param {string} uri - The uri (url or filename) to check.\n * @param {object} options - An options hash.\n * @return {Promise} - A promise that resolves to an object containing\n * sanitized uri data, or rejects it the input uri is deemed invalid.\n * The properties of the resolved object are assumed to be\n * valid attributes for an HTML 'a' tag. The sanitized uri *must* be\n * provided by the 'href' property of the returned object.\n */\nasync function sanitize(uri, options) {\n options = extend({}, this.options, options);\n const fileAccess = this.fileAccess,\n result = {\n href: null\n };\n let isFile, loadFile, base;\n const isAllowed = allowed_re.test(uri.replace(whitespace_re, ''));\n if (uri == null || typeof uri !== 'string' || !isAllowed) {\n error('Sanitize failure, invalid URI: ' + stringValue(uri));\n }\n const hasProtocol = protocol_re.test(uri);\n\n // if relative url (no protocol/host), prepend baseURL\n if ((base = options.baseURL) && !hasProtocol) {\n // Ensure that there is a slash between the baseURL (e.g. hostname) and url\n if (!uri.startsWith('/') && !base.endsWith('/')) {\n uri = '/' + uri;\n }\n uri = base + uri;\n }\n\n // should we load from file system?\n loadFile = (isFile = uri.startsWith(fileProtocol)) || options.mode === 'file' || options.mode !== 'http' && !hasProtocol && fileAccess;\n if (isFile) {\n // strip file protocol\n uri = uri.slice(fileProtocol.length);\n } else if (uri.startsWith('//')) {\n if (options.defaultProtocol === 'file') {\n // if is file, strip protocol and set loadFile flag\n uri = uri.slice(2);\n loadFile = true;\n } else {\n // if relative protocol (starts with '//'), prepend default protocol\n uri = (options.defaultProtocol || 'http') + ':' + uri;\n }\n }\n\n // set non-enumerable mode flag to indicate local file load\n Object.defineProperty(result, 'localFile', {\n value: !!loadFile\n });\n\n // set uri\n result.href = uri;\n\n // set default result target, if specified\n if (options.target) {\n result.target = options.target + '';\n }\n\n // set default result rel, if specified (#1542)\n if (options.rel) {\n result.rel = options.rel + '';\n }\n\n // provide control over cross-origin image handling (#2238)\n // https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image\n if (options.context === 'image' && options.crossOrigin) {\n result.crossOrigin = options.crossOrigin + '';\n }\n\n // return\n return result;\n}\n\n/**\n * File system loader factory.\n * @param {object} fs - The file system interface.\n * @return {function} - A file loader with the following signature:\n * param {string} filename - The file system path to load.\n * param {string} filename - The file system path to load.\n * return {Promise} A promise that resolves to the file contents.\n */\nfunction fileLoader(fs) {\n return fs ? filename => new Promise((accept, reject) => {\n fs.readFile(filename, (error, data) => {\n if (error) reject(error);else accept(data);\n });\n }) : fileReject;\n}\n\n/**\n * Default file system loader that simply rejects.\n */\nasync function fileReject() {\n error('No file system access.');\n}\n\n/**\n * HTTP request handler factory.\n * @param {function} fetch - The Fetch API method.\n * @return {function} - An http loader with the following signature:\n * param {string} url - The url to request.\n * param {object} options - An options hash.\n * return {Promise} - A promise that resolves to the file contents.\n */\nfunction httpLoader(fetch) {\n return fetch ? async function (url, options) {\n const opt = extend({}, this.options.http, options),\n type = options && options.response,\n response = await fetch(url, opt);\n return !response.ok ? error(response.status + '' + response.statusText) : isFunction(response[type]) ? response[type]() : response.text();\n } : httpReject;\n}\n\n/**\n * Default http request handler that simply rejects.\n */\nasync function httpReject() {\n error('No HTTP fetch method available.');\n}\n\nconst isValid = _ => _ != null && _ === _;\nconst isBoolean = _ => _ === 'true' || _ === 'false' || _ === true || _ === false;\nconst isDate = _ => !Number.isNaN(Date.parse(_));\nconst isNumber = _ => !Number.isNaN(+_) && !(_ instanceof Date);\nconst isInteger = _ => isNumber(_) && Number.isInteger(+_);\nconst typeParsers = {\n boolean: toBoolean,\n integer: toNumber,\n number: toNumber,\n date: toDate,\n string: toString,\n unknown: identity\n};\nconst typeTests = [isBoolean, isInteger, isNumber, isDate];\nconst typeList = ['boolean', 'integer', 'number', 'date'];\nfunction inferType(values, field) {\n if (!values || !values.length) return 'unknown';\n const n = values.length,\n m = typeTests.length,\n a = typeTests.map((_, i) => i + 1);\n for (let i = 0, t = 0, j, value; i < n; ++i) {\n value = field ? values[i][field] : values[i];\n for (j = 0; j < m; ++j) {\n if (a[j] && isValid(value) && !typeTests[j](value)) {\n a[j] = 0;\n ++t;\n if (t === typeTests.length) return 'string';\n }\n }\n }\n return typeList[a.reduce((u, v) => u === 0 ? v : u, 0) - 1];\n}\nfunction inferTypes(data, fields) {\n return fields.reduce((types, field) => {\n types[field] = inferType(data, field);\n return types;\n }, {});\n}\n\nfunction delimitedFormat(delimiter) {\n const parse = function (data, format) {\n const delim = {\n delimiter: delimiter\n };\n return dsv(data, format ? extend(format, delim) : delim);\n };\n parse.responseType = 'text';\n return parse;\n}\nfunction dsv(data, format) {\n if (format.header) {\n data = format.header.map(stringValue).join(format.delimiter) + '\\n' + data;\n }\n return dsvFormat(format.delimiter).parse(data + '');\n}\ndsv.responseType = 'text';\n\nfunction isBuffer(_) {\n return typeof Buffer === 'function' && isFunction(Buffer.isBuffer) ? Buffer.isBuffer(_) : false;\n}\nfunction json(data, format) {\n const prop = format && format.property ? field(format.property) : identity;\n return isObject(data) && !isBuffer(data) ? parseJSON(prop(data), format) : prop(JSON.parse(data));\n}\njson.responseType = 'json';\nfunction parseJSON(data, format) {\n if (!isArray(data) && isIterable(data)) {\n data = [...data];\n }\n return format && format.copy ? JSON.parse(JSON.stringify(data)) : data;\n}\n\nconst filters = {\n interior: (a, b) => a !== b,\n exterior: (a, b) => a === b\n};\nfunction topojson(data, format) {\n let method, object, property, filter;\n data = json(data, format);\n if (format && format.feature) {\n method = feature;\n property = format.feature;\n } else if (format && format.mesh) {\n method = mesh;\n property = format.mesh;\n filter = filters[format.filter];\n } else {\n error('Missing TopoJSON feature or mesh parameter.');\n }\n object = (object = data.objects[property]) ? method(data, object, filter) : error('Invalid TopoJSON object: ' + property);\n return object && object.features || [object];\n}\ntopojson.responseType = 'json';\n\nconst format = {\n dsv: dsv,\n csv: delimitedFormat(','),\n tsv: delimitedFormat('\\t'),\n json: json,\n topojson: topojson\n};\nfunction formats(name, reader) {\n if (arguments.length > 1) {\n format[name] = reader;\n return this;\n } else {\n return hasOwnProperty(format, name) ? format[name] : null;\n }\n}\nfunction responseType(type) {\n const f = formats(type);\n return f && f.responseType || 'text';\n}\n\nfunction read (data, schema, timeParser, utcParser) {\n schema = schema || {};\n const reader = formats(schema.type || 'json');\n if (!reader) error('Unknown data format type: ' + schema.type);\n data = reader(data, schema);\n if (schema.parse) parse(data, schema.parse, timeParser, utcParser);\n if (hasOwnProperty(data, 'columns')) delete data.columns;\n return data;\n}\nfunction parse(data, types, timeParser, utcParser) {\n if (!data.length) return; // early exit for empty data\n\n const locale = timeFormatDefaultLocale();\n timeParser = timeParser || locale.timeParse;\n utcParser = utcParser || locale.utcParse;\n let fields = data.columns || Object.keys(data[0]),\n datum,\n field,\n i,\n j,\n n,\n m;\n if (types === 'auto') types = inferTypes(data, fields);\n fields = Object.keys(types);\n const parsers = fields.map(field => {\n const type = types[field];\n let parts, pattern;\n if (type && (type.startsWith('date:') || type.startsWith('utc:'))) {\n parts = type.split(/:(.+)?/, 2); // split on first :\n pattern = parts[1];\n if (pattern[0] === '\\'' && pattern[pattern.length - 1] === '\\'' || pattern[0] === '\"' && pattern[pattern.length - 1] === '\"') {\n pattern = pattern.slice(1, -1);\n }\n const parse = parts[0] === 'utc' ? utcParser : timeParser;\n return parse(pattern);\n }\n if (!typeParsers[type]) {\n throw Error('Illegal format pattern: ' + field + ':' + type);\n }\n return typeParsers[type];\n });\n for (i = 0, n = data.length, m = fields.length; i < n; ++i) {\n datum = data[i];\n for (j = 0; j < m; ++j) {\n field = fields[j];\n datum[field] = parsers[j](datum[field]);\n }\n }\n}\n\nconst loader = loaderFactory(typeof fetch !== 'undefined' && fetch,\n// use built-in fetch API\nnull // no file system access\n);\n\nexport { format, formats, inferType, inferTypes, loader, read, responseType, typeParsers };\n","import { identity, array, isFunction, constant, isArray, id, error, truthy, debounce, extend, visitArray, inherits, logger, Error, hasOwnProperty } from 'vega-util';\nimport { read, responseType, loader } from 'vega-loader';\nimport { defaultLocale } from 'vega-format';\n\nfunction UniqueList(idFunc) {\n const $ = idFunc || identity,\n list = [],\n ids = {};\n list.add = _ => {\n const id = $(_);\n if (!ids[id]) {\n ids[id] = 1;\n list.push(_);\n }\n return list;\n };\n list.remove = _ => {\n const id = $(_);\n if (ids[id]) {\n ids[id] = 0;\n const idx = list.indexOf(_);\n if (idx >= 0) list.splice(idx, 1);\n }\n return list;\n };\n return list;\n}\n\n/**\n * Invoke and await a potentially async callback function. If\n * an error occurs, trap it and route to Dataflow.error.\n * @param {Dataflow} df - The dataflow instance\n * @param {function} callback - A callback function to invoke\n * and then await. The dataflow will be passed as the single\n * argument to the function.\n */\nasync function asyncCallback (df, callback) {\n try {\n await callback(df);\n } catch (err) {\n df.error(err);\n }\n}\n\nconst TUPLE_ID_KEY = Symbol('vega_id');\nlet TUPLE_ID = 1;\n\n/**\n * Checks if an input value is a registered tuple.\n * @param {*} t - The value to check.\n * @return {boolean} True if the input is a tuple, false otherwise.\n */\nfunction isTuple(t) {\n return !!(t && tupleid(t));\n}\n\n/**\n * Returns the id of a tuple.\n * @param {object} t - The input tuple.\n * @return {*} the tuple id.\n */\nfunction tupleid(t) {\n return t[TUPLE_ID_KEY];\n}\n\n/**\n * Sets the id of a tuple.\n * @param {object} t - The input tuple.\n * @param {*} id - The id value to set.\n * @return {object} the input tuple.\n */\nfunction setid(t, id) {\n t[TUPLE_ID_KEY] = id;\n return t;\n}\n\n/**\n * Ingest an object or value as a data tuple.\n * If the input value is an object, an id field will be added to it. For\n * efficiency, the input object is modified directly. A copy is not made.\n * If the input value is a literal, it will be wrapped in a new object\n * instance, with the value accessible as the 'data' property.\n * @param datum - The value to ingest.\n * @return {object} The ingested data tuple.\n */\nfunction ingest$1(datum) {\n const t = datum === Object(datum) ? datum : {\n data: datum\n };\n return tupleid(t) ? t : setid(t, TUPLE_ID++);\n}\n\n/**\n * Given a source tuple, return a derived copy.\n * @param {object} t - The source tuple.\n * @return {object} The derived tuple.\n */\nfunction derive(t) {\n return rederive(t, ingest$1({}));\n}\n\n/**\n * Rederive a derived tuple by copying values from the source tuple.\n * @param {object} t - The source tuple.\n * @param {object} d - The derived tuple.\n * @return {object} The derived tuple.\n */\nfunction rederive(t, d) {\n for (const k in t) d[k] = t[k];\n return d;\n}\n\n/**\n * Replace an existing tuple with a new tuple.\n * @param {object} t - The existing data tuple.\n * @param {object} d - The new tuple that replaces the old.\n * @return {object} The new tuple.\n */\nfunction replace(t, d) {\n return setid(d, tupleid(t));\n}\n\n/**\n * Generate an augmented comparator function that provides stable\n * sorting by tuple id when the given comparator produces ties.\n * @param {function} cmp - The comparator to augment.\n * @param {function} [f] - Optional tuple accessor function.\n * @return {function} An augmented comparator function.\n */\nfunction stableCompare(cmp, f) {\n return !cmp ? null : f ? (a, b) => cmp(a, b) || tupleid(f(a)) - tupleid(f(b)) : (a, b) => cmp(a, b) || tupleid(a) - tupleid(b);\n}\n\nfunction isChangeSet(v) {\n return v && v.constructor === changeset;\n}\nfunction changeset() {\n const add = [],\n // insert tuples\n rem = [],\n // remove tuples\n mod = [],\n // modify tuples\n remp = [],\n // remove by predicate\n modp = []; // modify by predicate\n let clean = null,\n reflow = false;\n return {\n constructor: changeset,\n insert(t) {\n const d = array(t),\n n = d.length;\n for (let i = 0; i < n; ++i) add.push(d[i]);\n return this;\n },\n remove(t) {\n const a = isFunction(t) ? remp : rem,\n d = array(t),\n n = d.length;\n for (let i = 0; i < n; ++i) a.push(d[i]);\n return this;\n },\n modify(t, field, value) {\n const m = {\n field: field,\n value: constant(value)\n };\n if (isFunction(t)) {\n m.filter = t;\n modp.push(m);\n } else {\n m.tuple = t;\n mod.push(m);\n }\n return this;\n },\n encode(t, set) {\n if (isFunction(t)) modp.push({\n filter: t,\n field: set\n });else mod.push({\n tuple: t,\n field: set\n });\n return this;\n },\n clean(value) {\n clean = value;\n return this;\n },\n reflow() {\n reflow = true;\n return this;\n },\n pulse(pulse, tuples) {\n const cur = {},\n out = {};\n let i, n, m, f, t, id;\n\n // build lookup table of current tuples\n for (i = 0, n = tuples.length; i < n; ++i) {\n cur[tupleid(tuples[i])] = 1;\n }\n\n // process individual tuples to remove\n for (i = 0, n = rem.length; i < n; ++i) {\n t = rem[i];\n cur[tupleid(t)] = -1;\n }\n\n // process predicate-based removals\n for (i = 0, n = remp.length; i < n; ++i) {\n f = remp[i];\n tuples.forEach(t => {\n if (f(t)) cur[tupleid(t)] = -1;\n });\n }\n\n // process all add tuples\n for (i = 0, n = add.length; i < n; ++i) {\n t = add[i];\n id = tupleid(t);\n if (cur[id]) {\n // tuple already resides in dataset\n // if flagged for both add and remove, cancel\n cur[id] = 1;\n } else {\n // tuple does not reside in dataset, add\n pulse.add.push(ingest$1(add[i]));\n }\n }\n\n // populate pulse rem list\n for (i = 0, n = tuples.length; i < n; ++i) {\n t = tuples[i];\n if (cur[tupleid(t)] < 0) pulse.rem.push(t);\n }\n\n // modify helper method\n function modify(t, f, v) {\n if (v) {\n t[f] = v(t);\n } else {\n pulse.encode = f;\n }\n if (!reflow) out[tupleid(t)] = t;\n }\n\n // process individual tuples to modify\n for (i = 0, n = mod.length; i < n; ++i) {\n m = mod[i];\n t = m.tuple;\n f = m.field;\n id = cur[tupleid(t)];\n if (id > 0) {\n modify(t, f, m.value);\n pulse.modifies(f);\n }\n }\n\n // process predicate-based modifications\n for (i = 0, n = modp.length; i < n; ++i) {\n m = modp[i];\n f = m.filter;\n tuples.forEach(t => {\n if (f(t) && cur[tupleid(t)] > 0) {\n modify(t, m.field, m.value);\n }\n });\n pulse.modifies(m.field);\n }\n\n // upon reflow request, populate mod with all non-removed tuples\n // otherwise, populate mod with modified tuples only\n if (reflow) {\n pulse.mod = rem.length || remp.length ? tuples.filter(t => cur[tupleid(t)] > 0) : tuples.slice();\n } else {\n for (id in out) pulse.mod.push(out[id]);\n }\n\n // set pulse garbage collection request\n if (clean || clean == null && (rem.length || remp.length)) {\n pulse.clean(true);\n }\n return pulse;\n }\n };\n}\n\nconst CACHE = '_:mod:_';\n\n/**\n * Hash that tracks modifications to assigned values.\n * Callers *must* use the set method to update values.\n */\nfunction Parameters() {\n Object.defineProperty(this, CACHE, {\n writable: true,\n value: {}\n });\n}\nParameters.prototype = {\n /**\n * Set a parameter value. If the parameter value changes, the parameter\n * will be recorded as modified.\n * @param {string} name - The parameter name.\n * @param {number} index - The index into an array-value parameter. Ignored if\n * the argument is undefined, null or less than zero.\n * @param {*} value - The parameter value to set.\n * @param {boolean} [force=false] - If true, records the parameter as modified\n * even if the value is unchanged.\n * @return {Parameters} - This parameter object.\n */\n set(name, index, value, force) {\n const o = this,\n v = o[name],\n mod = o[CACHE];\n if (index != null && index >= 0) {\n if (v[index] !== value || force) {\n v[index] = value;\n mod[index + ':' + name] = -1;\n mod[name] = -1;\n }\n } else if (v !== value || force) {\n o[name] = value;\n mod[name] = isArray(value) ? 1 + value.length : -1;\n }\n return o;\n },\n /**\n * Tests if one or more parameters has been modified. If invoked with no\n * arguments, returns true if any parameter value has changed. If the first\n * argument is array, returns trues if any parameter name in the array has\n * changed. Otherwise, tests if the given name and optional array index has\n * changed.\n * @param {string} name - The parameter name to test.\n * @param {number} [index=undefined] - The parameter array index to test.\n * @return {boolean} - Returns true if a queried parameter was modified.\n */\n modified(name, index) {\n const mod = this[CACHE];\n if (!arguments.length) {\n for (const k in mod) {\n if (mod[k]) return true;\n }\n return false;\n } else if (isArray(name)) {\n for (let k = 0; k < name.length; ++k) {\n if (mod[name[k]]) return true;\n }\n return false;\n }\n return index != null && index >= 0 ? index + 1 < mod[name] || !!mod[index + ':' + name] : !!mod[name];\n },\n /**\n * Clears the modification records. After calling this method,\n * all parameters are considered unmodified.\n */\n clear() {\n this[CACHE] = {};\n return this;\n }\n};\n\nlet OP_ID = 0;\nconst PULSE = 'pulse',\n NO_PARAMS = new Parameters();\n\n// Boolean Flags\nconst SKIP$1 = 1,\n MODIFIED = 2;\n\n/**\n * An Operator is a processing node in a dataflow graph.\n * Each operator stores a value and an optional value update function.\n * Operators can accept a hash of named parameters. Parameter values can\n * either be direct (JavaScript literals, arrays, objects) or indirect\n * (other operators whose values will be pulled dynamically). Operators\n * included as parameters will have this operator added as a dependency.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {function(object, Pulse)} [update] - An update function. Upon\n * evaluation of this operator, the update function will be invoked and the\n * return value will be used as the new value of this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @see parameters\n */\nfunction Operator(init, update, params, react) {\n this.id = ++OP_ID;\n this.value = init;\n this.stamp = -1;\n this.rank = -1;\n this.qrank = -1;\n this.flags = 0;\n if (update) {\n this._update = update;\n }\n if (params) this.parameters(params, react);\n}\nfunction flag(bit) {\n return function (state) {\n const f = this.flags;\n if (arguments.length === 0) return !!(f & bit);\n this.flags = state ? f | bit : f & ~bit;\n return this;\n };\n}\nOperator.prototype = {\n /**\n * Returns a list of target operators dependent on this operator.\n * If this list does not exist, it is created and then returned.\n * @return {UniqueList}\n */\n targets() {\n return this._targets || (this._targets = UniqueList(id));\n },\n /**\n * Sets the value of this operator.\n * @param {*} value - the value to set.\n * @return {Number} Returns 1 if the operator value has changed\n * according to strict equality, returns 0 otherwise.\n */\n set(value) {\n if (this.value !== value) {\n this.value = value;\n return 1;\n } else {\n return 0;\n }\n },\n /**\n * Indicates that operator evaluation should be skipped on the next pulse.\n * This operator will still propagate incoming pulses, but its update function\n * will not be invoked. The skip flag is reset after every pulse, so calling\n * this method will affect processing of the next pulse only.\n */\n skip: flag(SKIP$1),\n /**\n * Indicates that this operator's value has been modified on its most recent\n * pulse. Normally modification is checked via strict equality; however, in\n * some cases it is more efficient to update the internal state of an object.\n * In those cases, the modified flag can be used to trigger propagation. Once\n * set, the modification flag persists across pulses until unset. The flag can\n * be used with the last timestamp to test if a modification is recent.\n */\n modified: flag(MODIFIED),\n /**\n * Sets the parameters for this operator. The parameter values are analyzed for\n * operator instances. If found, this operator will be added as a dependency\n * of the parameterizing operator. Operator values are dynamically marshalled\n * from each operator parameter prior to evaluation. If a parameter value is\n * an array, the array will also be searched for Operator instances. However,\n * the search does not recurse into sub-arrays or object properties.\n * @param {object} params - A hash of operator parameters.\n * @param {boolean} [react=true] - A flag indicating if this operator should\n * automatically update (react) when parameter values change. In other words,\n * this flag determines if the operator registers itself as a listener on\n * any upstream operators included in the parameters.\n * @param {boolean} [initonly=false] - A flag indicating if this operator\n * should calculate an update only upon its initial evaluation, then\n * deregister dependencies and suppress all future update invocations.\n * @return {Operator[]} - An array of upstream dependencies.\n */\n parameters(params, react, initonly) {\n react = react !== false;\n const argval = this._argval = this._argval || new Parameters(),\n argops = this._argops = this._argops || [],\n deps = [];\n let name, value, n, i;\n const add = (name, index, value) => {\n if (value instanceof Operator) {\n if (value !== this) {\n if (react) value.targets().add(this);\n deps.push(value);\n }\n argops.push({\n op: value,\n name: name,\n index: index\n });\n } else {\n argval.set(name, index, value);\n }\n };\n for (name in params) {\n value = params[name];\n if (name === PULSE) {\n array(value).forEach(op => {\n if (!(op instanceof Operator)) {\n error('Pulse parameters must be operator instances.');\n } else if (op !== this) {\n op.targets().add(this);\n deps.push(op);\n }\n });\n this.source = value;\n } else if (isArray(value)) {\n argval.set(name, -1, Array(n = value.length));\n for (i = 0; i < n; ++i) add(name, i, value[i]);\n } else {\n add(name, -1, value);\n }\n }\n this.marshall().clear(); // initialize values\n if (initonly) argops.initonly = true;\n return deps;\n },\n /**\n * Internal method for marshalling parameter values.\n * Visits each operator dependency to pull the latest value.\n * @return {Parameters} A Parameters object to pass to the update function.\n */\n marshall(stamp) {\n const argval = this._argval || NO_PARAMS,\n argops = this._argops;\n let item, i, op, mod;\n if (argops) {\n const n = argops.length;\n for (i = 0; i < n; ++i) {\n item = argops[i];\n op = item.op;\n mod = op.modified() && op.stamp === stamp;\n argval.set(item.name, item.index, op.value, mod);\n }\n if (argops.initonly) {\n for (i = 0; i < n; ++i) {\n item = argops[i];\n item.op.targets().remove(this);\n }\n this._argops = null;\n this._update = null;\n }\n }\n return argval;\n },\n /**\n * Detach this operator from the dataflow.\n * Unregisters listeners on upstream dependencies.\n */\n detach() {\n const argops = this._argops;\n let i, n, item, op;\n if (argops) {\n for (i = 0, n = argops.length; i < n; ++i) {\n item = argops[i];\n op = item.op;\n if (op._targets) {\n op._targets.remove(this);\n }\n }\n }\n\n // remove references to the source and pulse object,\n // if present, to prevent memory leaks of old data.\n this.pulse = null;\n this.source = null;\n },\n /**\n * Delegate method to perform operator processing.\n * Subclasses can override this method to perform custom processing.\n * By default, it marshalls parameters and calls the update function\n * if that function is defined. If the update function does not\n * change the operator value then StopPropagation is returned.\n * If no update function is defined, this method does nothing.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return The output pulse or StopPropagation. A falsy return value\n * (including undefined) will let the input pulse pass through.\n */\n evaluate(pulse) {\n const update = this._update;\n if (update) {\n const params = this.marshall(pulse.stamp),\n v = update.call(this, params, pulse);\n params.clear();\n if (v !== this.value) {\n this.value = v;\n } else if (!this.modified()) {\n return pulse.StopPropagation;\n }\n }\n },\n /**\n * Run this operator for the current pulse. If this operator has already\n * been run at (or after) the pulse timestamp, returns StopPropagation.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\n run(pulse) {\n if (pulse.stamp < this.stamp) return pulse.StopPropagation;\n let rv;\n if (this.skip()) {\n this.skip(false);\n rv = 0;\n } else {\n rv = this.evaluate(pulse);\n }\n return this.pulse = rv || pulse;\n }\n};\n\n/**\n * Add an operator to the dataflow graph. This function accepts a\n * variety of input argument types. The basic signature supports an\n * initial value, update function and parameters. If the first parameter\n * is an Operator instance, it will be added directly. If it is a\n * constructor for an Operator subclass, a new instance will be instantiated.\n * Otherwise, if the first parameter is a function instance, it will be used\n * as the update function and a null initial value is assumed.\n * @param {*} init - One of: the operator to add, the initial value of\n * the operator, an operator class to instantiate, or an update function.\n * @param {function} [update] - The operator update function.\n * @param {object} [params] - The operator parameters.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @return {Operator} - The added operator.\n */\nfunction add (init, update, params, react) {\n let shift = 1,\n op;\n if (init instanceof Operator) {\n op = init;\n } else if (init && init.prototype instanceof Operator) {\n op = new init();\n } else if (isFunction(init)) {\n op = new Operator(null, init);\n } else {\n shift = 0;\n op = new Operator(init, update);\n }\n this.rank(op);\n if (shift) {\n react = params;\n params = update;\n }\n if (params) this.connect(op, op.parameters(params, react));\n this.touch(op);\n return op;\n}\n\n/**\n * Connect a target operator as a dependent of source operators.\n * If necessary, this method will rerank the target operator and its\n * dependents to ensure propagation proceeds in a topologically sorted order.\n * @param {Operator} target - The target operator.\n * @param {Array} - The source operators that should propagate\n * to the target operator.\n */\nfunction connect (target, sources) {\n const targetRank = target.rank,\n n = sources.length;\n for (let i = 0; i < n; ++i) {\n if (targetRank < sources[i].rank) {\n this.rerank(target);\n return;\n }\n }\n}\n\nlet STREAM_ID = 0;\n\n/**\n * Models an event stream.\n * @constructor\n * @param {function(Object, number): boolean} [filter] - Filter predicate.\n * Events pass through when truthy, events are suppressed when falsy.\n * @param {function(Object): *} [apply] - Applied to input events to produce\n * new event values.\n * @param {function(Object)} [receive] - Event callback function to invoke\n * upon receipt of a new event. Use to override standard event processing.\n */\nfunction EventStream(filter, apply, receive) {\n this.id = ++STREAM_ID;\n this.value = null;\n if (receive) this.receive = receive;\n if (filter) this._filter = filter;\n if (apply) this._apply = apply;\n}\n\n/**\n * Creates a new event stream instance with the provided\n * (optional) filter, apply and receive functions.\n * @param {function(Object, number): boolean} [filter] - Filter predicate.\n * Events pass through when truthy, events are suppressed when falsy.\n * @param {function(Object): *} [apply] - Applied to input events to produce\n * new event values.\n * @see EventStream\n */\nfunction stream(filter, apply, receive) {\n return new EventStream(filter, apply, receive);\n}\nEventStream.prototype = {\n _filter: truthy,\n _apply: identity,\n targets() {\n return this._targets || (this._targets = UniqueList(id));\n },\n consume(_) {\n if (!arguments.length) return !!this._consume;\n this._consume = !!_;\n return this;\n },\n receive(evt) {\n if (this._filter(evt)) {\n const val = this.value = this._apply(evt),\n trg = this._targets,\n n = trg ? trg.length : 0;\n for (let i = 0; i < n; ++i) trg[i].receive(val);\n if (this._consume) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n }\n },\n filter(filter) {\n const s = stream(filter);\n this.targets().add(s);\n return s;\n },\n apply(apply) {\n const s = stream(null, apply);\n this.targets().add(s);\n return s;\n },\n merge() {\n const s = stream();\n this.targets().add(s);\n for (let i = 0, n = arguments.length; i < n; ++i) {\n arguments[i].targets().add(s);\n }\n return s;\n },\n throttle(pause) {\n let t = -1;\n return this.filter(() => {\n const now = Date.now();\n if (now - t > pause) {\n t = now;\n return 1;\n } else {\n return 0;\n }\n });\n },\n debounce(delay) {\n const s = stream();\n this.targets().add(stream(null, null, debounce(delay, e => {\n const df = e.dataflow;\n s.receive(e);\n if (df && df.run) df.run();\n })));\n return s;\n },\n between(a, b) {\n let active = false;\n a.targets().add(stream(null, null, () => active = true));\n b.targets().add(stream(null, null, () => active = false));\n return this.filter(() => active);\n },\n detach() {\n // ensures compatibility with operators (#2753)\n // remove references to other streams and filter functions that may\n // be bound to subcontexts that need to be garbage collected.\n this._filter = truthy;\n this._targets = null;\n }\n};\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor. The input must\n * support the addEventListener method.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @param {function(object): *} [apply] - Event application function.\n * If provided, this function will be invoked and the result will be\n * used as the downstream event value.\n * @return {EventStream}\n */\nfunction events (source, type, filter, apply) {\n const df = this,\n s = stream(filter, apply),\n send = function (e) {\n e.dataflow = df;\n try {\n s.receive(e);\n } catch (error) {\n df.error(error);\n } finally {\n df.run();\n }\n };\n let sources;\n if (typeof source === 'string' && typeof document !== 'undefined') {\n sources = document.querySelectorAll(source);\n } else {\n sources = array(source);\n }\n const n = sources.length;\n for (let i = 0; i < n; ++i) {\n sources[i].addEventListener(type, send);\n }\n return s;\n}\n\nfunction parse(data, format) {\n const locale = this.locale();\n return read(data, format, locale.timeParse, locale.utcParse);\n}\n\n/**\n * Ingests new data into the dataflow. First parses the data using the\n * vega-loader read method, then pulses a changeset to the target operator.\n * @param {Operator} target - The Operator to target with ingested data,\n * typically a Collect transform instance.\n * @param {*} data - The input data, prior to parsing. For JSON this may\n * be a string or an object. For CSV, TSV, etc should be a string.\n * @param {object} format - The data format description for parsing\n * loaded data. This object is passed to the vega-loader read method.\n * @returns {Dataflow}\n */\nfunction ingest(target, data, format) {\n data = this.parse(data, format);\n return this.pulse(target, this.changeset().insert(data));\n}\n\n/**\n * Request data from an external source, parse it, and return a Promise.\n * @param {string} url - The URL from which to load the data. This string\n * is passed to the vega-loader load method.\n * @param {object} [format] - The data format description for parsing\n * loaded data. This object is passed to the vega-loader read method.\n * @return {Promise} A Promise that resolves upon completion of the request.\n * The resolved object contains the following properties:\n * - data: an array of parsed data (or null upon error)\n * - status: a code for success (0), load fail (-1), or parse fail (-2)\n */\nasync function request(url, format) {\n const df = this;\n let status = 0,\n data;\n try {\n data = await df.loader().load(url, {\n context: 'dataflow',\n response: responseType(format && format.type)\n });\n try {\n data = df.parse(data, format);\n } catch (err) {\n status = -2;\n df.warn('Data ingestion failed', url, err);\n }\n } catch (err) {\n status = -1;\n df.warn('Loading failed', url, err);\n }\n return {\n data,\n status\n };\n}\nasync function preload(target, url, format) {\n const df = this,\n pending = df._pending || loadPending(df);\n pending.requests += 1;\n const res = await df.request(url, format);\n df.pulse(target, df.changeset().remove(truthy).insert(res.data || []));\n pending.done();\n return res;\n}\nfunction loadPending(df) {\n let accept;\n const pending = new Promise(a => accept = a);\n pending.requests = 0;\n pending.done = () => {\n if (--pending.requests === 0) {\n df._pending = null;\n accept(df);\n }\n };\n return df._pending = pending;\n}\n\nconst SKIP = {\n skip: true\n};\n\n/**\n * Perform operator updates in response to events. Applies an\n * update function to compute a new operator value. If the update function\n * returns a {@link ChangeSet}, the operator will be pulsed with those tuple\n * changes. Otherwise, the operator value will be updated to the return value.\n * @param {EventStream|Operator} source - The event source to react to.\n * This argument can be either an EventStream or an Operator.\n * @param {Operator|function(object):Operator} target - The operator to update.\n * This argument can either be an Operator instance or (if the source\n * argument is an EventStream), a function that accepts an event object as\n * input and returns an Operator to target.\n * @param {function(Parameters,Event): *} [update] - Optional update function\n * to compute the new operator value, or a literal value to set. Update\n * functions expect to receive a parameter object and event as arguments.\n * This function can either return a new operator value or (if the source\n * argument is an EventStream) a {@link ChangeSet} instance to pulse\n * the target operator with tuple changes.\n * @param {object} [params] - The update function parameters.\n * @param {object} [options] - Additional options hash. If not overridden,\n * updated operators will be skipped by default.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @return {Dataflow}\n */\nfunction on (source, target, update, params, options) {\n const fn = source instanceof Operator ? onOperator : onStream;\n fn(this, source, target, update, params, options);\n return this;\n}\nfunction onStream(df, stream, target, update, params, options) {\n const opt = extend({}, options, SKIP);\n let func, op;\n if (!isFunction(target)) target = constant(target);\n if (update === undefined) {\n func = e => df.touch(target(e));\n } else if (isFunction(update)) {\n op = new Operator(null, update, params, false);\n func = e => {\n op.evaluate(e);\n const t = target(e),\n v = op.value;\n isChangeSet(v) ? df.pulse(t, v, options) : df.update(t, v, opt);\n };\n } else {\n func = e => df.update(target(e), update, opt);\n }\n stream.apply(func);\n}\nfunction onOperator(df, source, target, update, params, options) {\n if (update === undefined) {\n source.targets().add(target);\n } else {\n const opt = options || {},\n op = new Operator(null, updater(target, update), params, false);\n op.modified(opt.force);\n op.rank = source.rank; // immediately follow source\n source.targets().add(op); // add dependency\n\n if (target) {\n op.skip(true); // skip first invocation\n op.value = target.value; // initialize value\n op.targets().add(target); // chain dependencies\n df.connect(target, [op]); // rerank as needed, #1672\n }\n }\n}\n\nfunction updater(target, update) {\n update = isFunction(update) ? update : constant(update);\n return target ? function (_, pulse) {\n const value = update(_, pulse);\n if (!target.skip()) {\n target.skip(value !== this.value).value = value;\n }\n return value;\n } : update;\n}\n\n/**\n * Assigns a rank to an operator. Ranks are assigned in increasing order\n * by incrementing an internal rank counter.\n * @param {Operator} op - The operator to assign a rank.\n */\nfunction rank(op) {\n op.rank = ++this._rank;\n}\n\n/**\n * Re-ranks an operator and all downstream target dependencies. This\n * is necessary when upstream dependencies of higher rank are added to\n * a target operator.\n * @param {Operator} op - The operator to re-rank.\n */\nfunction rerank(op) {\n const queue = [op];\n let cur, list, i;\n while (queue.length) {\n this.rank(cur = queue.pop());\n if (list = cur._targets) {\n for (i = list.length; --i >= 0;) {\n queue.push(cur = list[i]);\n if (cur === op) error('Cycle detected in dataflow graph.');\n }\n }\n }\n}\n\n/**\n * Sentinel value indicating pulse propagation should stop.\n */\nconst StopPropagation = {};\n\n// Pulse visit type flags\nconst ADD = 1 << 0,\n REM = 1 << 1,\n MOD = 1 << 2,\n ADD_REM = ADD | REM,\n ADD_MOD = ADD | MOD,\n ALL = ADD | REM | MOD,\n REFLOW = 1 << 3,\n SOURCE = 1 << 4,\n NO_SOURCE = 1 << 5,\n NO_FIELDS = 1 << 6;\n\n/**\n * A Pulse enables inter-operator communication during a run of the\n * dataflow graph. In addition to the current timestamp, a pulse may also\n * contain a change-set of added, removed or modified data tuples, as well as\n * a pointer to a full backing data source. Tuple change sets may not\n * be fully materialized; for example, to prevent needless array creation\n * a change set may include larger arrays and corresponding filter functions.\n * The pulse provides a {@link visit} method to enable proper and efficient\n * iteration over requested data tuples.\n *\n * In addition, each pulse can track modification flags for data tuple fields.\n * Responsible transform operators should call the {@link modifies} method to\n * indicate changes to data fields. The {@link modified} method enables\n * querying of this modification state.\n *\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The current propagation timestamp.\n * @param {string} [encode] - An optional encoding set name, which is then\n * accessible as Pulse.encode. Operators can respond to (or ignore) this\n * setting as appropriate. This parameter can be used in conjunction with\n * the Encode transform in the vega-encode module.\n */\nfunction Pulse(dataflow, stamp, encode) {\n this.dataflow = dataflow;\n this.stamp = stamp == null ? -1 : stamp;\n this.add = [];\n this.rem = [];\n this.mod = [];\n this.fields = null;\n this.encode = encode || null;\n}\nfunction materialize(data, filter) {\n const out = [];\n visitArray(data, filter, _ => out.push(_));\n return out;\n}\nfunction filter(pulse, flags) {\n const map = {};\n pulse.visit(flags, t => {\n map[tupleid(t)] = 1;\n });\n return t => map[tupleid(t)] ? null : t;\n}\nfunction addFilter(a, b) {\n return a ? (t, i) => a(t, i) && b(t, i) : b;\n}\nPulse.prototype = {\n /**\n * Sentinel value indicating pulse propagation should stop.\n */\n StopPropagation,\n /**\n * Boolean flag indicating ADD (added) tuples.\n */\n ADD,\n /**\n * Boolean flag indicating REM (removed) tuples.\n */\n REM,\n /**\n * Boolean flag indicating MOD (modified) tuples.\n */\n MOD,\n /**\n * Boolean flag indicating ADD (added) and REM (removed) tuples.\n */\n ADD_REM,\n /**\n * Boolean flag indicating ADD (added) and MOD (modified) tuples.\n */\n ADD_MOD,\n /**\n * Boolean flag indicating ADD, REM and MOD tuples.\n */\n ALL,\n /**\n * Boolean flag indicating all tuples in a data source\n * except for the ADD, REM and MOD tuples.\n */\n REFLOW,\n /**\n * Boolean flag indicating a 'pass-through' to a\n * backing data source, ignoring ADD, REM and MOD tuples.\n */\n SOURCE,\n /**\n * Boolean flag indicating that source data should be\n * suppressed when creating a forked pulse.\n */\n NO_SOURCE,\n /**\n * Boolean flag indicating that field modifications should be\n * suppressed when creating a forked pulse.\n */\n NO_FIELDS,\n /**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created.\n * @return {Pulse} - The forked pulse instance.\n * @see init\n */\n fork(flags) {\n return new Pulse(this.dataflow).init(this, flags);\n },\n /**\n * Creates a copy of this pulse with new materialized array\n * instances for the ADD, REM, MOD, and SOURCE arrays.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse} - The cloned pulse instance.\n * @see init\n */\n clone() {\n const p = this.fork(ALL);\n p.add = p.add.slice();\n p.rem = p.rem.slice();\n p.mod = p.mod.slice();\n if (p.source) p.source = p.source.slice();\n return p.materialize(ALL | SOURCE);\n },\n /**\n * Returns a pulse that adds all tuples from a backing source. This is\n * useful for cases where operators are added to a dataflow after an\n * upstream data pipeline has already been processed, ensuring that\n * new operators can observe all tuples within a stream.\n * @return {Pulse} - A pulse instance with all source tuples included\n * in the add array. If the current pulse already has all source\n * tuples in its add array, it is returned directly. If the current\n * pulse does not have a backing source, it is returned directly.\n */\n addAll() {\n let p = this;\n const reuse = !p.source || p.add === p.rem // special case for indexed set (e.g., crossfilter)\n || !p.rem.length && p.source.length === p.add.length;\n if (reuse) {\n return p;\n } else {\n p = new Pulse(this.dataflow).init(this);\n p.add = p.source;\n p.rem = []; // new operators can ignore rem #2769\n return p;\n }\n },\n /**\n * Initialize this pulse based on the values of another pulse. This method\n * is used internally by {@link fork} to initialize a new forked tuple.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {Pulse} src - The source pulse to copy from.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created. By default, source data arrays are copied\n * to the new pulse. Use the NO_SOURCE flag to enforce a null source.\n * @return {Pulse} - Returns this Pulse instance.\n */\n init(src, flags) {\n const p = this;\n p.stamp = src.stamp;\n p.encode = src.encode;\n if (src.fields && !(flags & NO_FIELDS)) {\n p.fields = src.fields;\n }\n if (flags & ADD) {\n p.addF = src.addF;\n p.add = src.add;\n } else {\n p.addF = null;\n p.add = [];\n }\n if (flags & REM) {\n p.remF = src.remF;\n p.rem = src.rem;\n } else {\n p.remF = null;\n p.rem = [];\n }\n if (flags & MOD) {\n p.modF = src.modF;\n p.mod = src.mod;\n } else {\n p.modF = null;\n p.mod = [];\n }\n if (flags & NO_SOURCE) {\n p.srcF = null;\n p.source = null;\n } else {\n p.srcF = src.srcF;\n p.source = src.source;\n if (src.cleans) p.cleans = src.cleans;\n }\n return p;\n },\n /**\n * Schedules a function to run after pulse propagation completes.\n * @param {function} func - The function to run.\n */\n runAfter(func) {\n this.dataflow.runAfter(func);\n },\n /**\n * Indicates if tuples have been added, removed or modified.\n * @param {number} [flags] - The tuple types (ADD, REM or MOD) to query.\n * Defaults to ALL, returning true if any tuple type has changed.\n * @return {boolean} - Returns true if one or more queried tuple types have\n * changed, false otherwise.\n */\n changed(flags) {\n const f = flags || ALL;\n return f & ADD && this.add.length || f & REM && this.rem.length || f & MOD && this.mod.length;\n },\n /**\n * Forces a \"reflow\" of tuple values, such that all tuples in the backing\n * source are added to the MOD set, unless already present in the ADD set.\n * @param {boolean} [fork=false] - If true, returns a forked copy of this\n * pulse, and invokes reflow on that derived pulse.\n * @return {Pulse} - The reflowed pulse instance.\n */\n reflow(fork) {\n if (fork) return this.fork(ALL).reflow();\n const len = this.add.length,\n src = this.source && this.source.length;\n if (src && src !== len) {\n this.mod = this.source;\n if (len) this.filter(MOD, filter(this, ADD));\n }\n return this;\n },\n /**\n * Get/set metadata to pulse requesting garbage collection\n * to reclaim currently unused resources.\n */\n clean(value) {\n if (arguments.length) {\n this.cleans = !!value;\n return this;\n } else {\n return this.cleans;\n }\n },\n /**\n * Marks one or more data field names as modified to assist dependency\n * tracking and incremental processing by transform operators.\n * @param {string|Array} _ - The field(s) to mark as modified.\n * @return {Pulse} - This pulse instance.\n */\n modifies(_) {\n const hash = this.fields || (this.fields = {});\n if (isArray(_)) {\n _.forEach(f => hash[f] = true);\n } else {\n hash[_] = true;\n }\n return this;\n },\n /**\n * Checks if one or more data fields have been modified during this pulse\n * propagation timestamp.\n * @param {string|Array} _ - The field(s) to check for modified.\n * @param {boolean} nomod - If true, will check the modified flag even if\n * no mod tuples exist. If false (default), mod tuples must be present.\n * @return {boolean} - Returns true if any of the provided fields has been\n * marked as modified, false otherwise.\n */\n modified(_, nomod) {\n const fields = this.fields;\n return !((nomod || this.mod.length) && fields) ? false : !arguments.length ? !!fields : isArray(_) ? _.some(f => fields[f]) : fields[_];\n },\n /**\n * Adds a filter function to one more tuple sets. Filters are applied to\n * backing tuple arrays, to determine the actual set of tuples considered\n * added, removed or modified. They can be used to delay materialization of\n * a tuple set in order to avoid expensive array copies. In addition, the\n * filter functions can serve as value transformers: unlike standard predicate\n * function (which return boolean values), Pulse filters should return the\n * actual tuple value to process. If a tuple set is already filtered, the\n * new filter function will be appended into a conjuntive ('and') query.\n * @param {number} flags - Flags indicating the tuple set(s) to filter.\n * @param {function(*):object} filter - Filter function that will be applied\n * to the tuple set array, and should return a data tuple if the value\n * should be included in the tuple set, and falsy (or null) otherwise.\n * @return {Pulse} - Returns this pulse instance.\n */\n filter(flags, filter) {\n const p = this;\n if (flags & ADD) p.addF = addFilter(p.addF, filter);\n if (flags & REM) p.remF = addFilter(p.remF, filter);\n if (flags & MOD) p.modF = addFilter(p.modF, filter);\n if (flags & SOURCE) p.srcF = addFilter(p.srcF, filter);\n return p;\n },\n /**\n * Materialize one or more tuple sets in this pulse. If the tuple set(s) have\n * a registered filter function, it will be applied and the tuple set(s) will\n * be replaced with materialized tuple arrays.\n * @param {number} flags - Flags indicating the tuple set(s) to materialize.\n * @return {Pulse} - Returns this pulse instance.\n */\n materialize(flags) {\n flags = flags || ALL;\n const p = this;\n if (flags & ADD && p.addF) {\n p.add = materialize(p.add, p.addF);\n p.addF = null;\n }\n if (flags & REM && p.remF) {\n p.rem = materialize(p.rem, p.remF);\n p.remF = null;\n }\n if (flags & MOD && p.modF) {\n p.mod = materialize(p.mod, p.modF);\n p.modF = null;\n }\n if (flags & SOURCE && p.srcF) {\n p.source = p.source.filter(p.srcF);\n p.srcF = null;\n }\n return p;\n },\n /**\n * Visit one or more tuple sets in this pulse.\n * @param {number} flags - Flags indicating the tuple set(s) to visit.\n * Legal values are ADD, REM, MOD and SOURCE (if a backing data source\n * has been set).\n * @param {function(object):*} - Visitor function invoked per-tuple.\n * @return {Pulse} - Returns this pulse instance.\n */\n visit(flags, visitor) {\n const p = this,\n v = visitor;\n if (flags & SOURCE) {\n visitArray(p.source, p.srcF, v);\n return p;\n }\n if (flags & ADD) visitArray(p.add, p.addF, v);\n if (flags & REM) visitArray(p.rem, p.remF, v);\n if (flags & MOD) visitArray(p.mod, p.modF, v);\n const src = p.source;\n if (flags & REFLOW && src) {\n const sum = p.add.length + p.mod.length;\n if (sum === src.length) ; else if (sum) {\n visitArray(src, filter(p, ADD_MOD), v);\n } else {\n // if no add/rem/mod tuples, visit source\n visitArray(src, p.srcF, v);\n }\n }\n return p;\n }\n};\n\n/**\n * Represents a set of multiple pulses. Used as input for operators\n * that accept multiple pulses at a time. Contained pulses are\n * accessible via the public \"pulses\" array property. This pulse doe\n * not carry added, removed or modified tuples directly. However,\n * the visit method can be used to traverse all such tuples contained\n * in sub-pulses with a timestamp matching this parent multi-pulse.\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The timestamp.\n * @param {Array} pulses - The sub-pulses for this multi-pulse.\n */\nfunction MultiPulse(dataflow, stamp, pulses, encode) {\n const p = this;\n let c = 0;\n this.dataflow = dataflow;\n this.stamp = stamp;\n this.fields = null;\n this.encode = encode || null;\n this.pulses = pulses;\n for (const pulse of pulses) {\n if (pulse.stamp !== stamp) continue;\n if (pulse.fields) {\n const hash = p.fields || (p.fields = {});\n for (const f in pulse.fields) {\n hash[f] = 1;\n }\n }\n if (pulse.changed(p.ADD)) c |= p.ADD;\n if (pulse.changed(p.REM)) c |= p.REM;\n if (pulse.changed(p.MOD)) c |= p.MOD;\n }\n this.changes = c;\n}\ninherits(MultiPulse, Pulse, {\n /**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse}\n */\n fork(flags) {\n const p = new Pulse(this.dataflow).init(this, flags & this.NO_FIELDS);\n if (flags !== undefined) {\n if (flags & p.ADD) this.visit(p.ADD, t => p.add.push(t));\n if (flags & p.REM) this.visit(p.REM, t => p.rem.push(t));\n if (flags & p.MOD) this.visit(p.MOD, t => p.mod.push(t));\n }\n return p;\n },\n changed(flags) {\n return this.changes & flags;\n },\n modified(_) {\n const p = this,\n fields = p.fields;\n return !(fields && p.changes & p.MOD) ? 0 : isArray(_) ? _.some(f => fields[f]) : fields[_];\n },\n filter() {\n error('MultiPulse does not support filtering.');\n },\n materialize() {\n error('MultiPulse does not support materialization.');\n },\n visit(flags, visitor) {\n const p = this,\n pulses = p.pulses,\n n = pulses.length;\n let i = 0;\n if (flags & p.SOURCE) {\n for (; i < n; ++i) {\n pulses[i].visit(flags, visitor);\n }\n } else {\n for (; i < n; ++i) {\n if (pulses[i].stamp === p.stamp) {\n pulses[i].visit(flags, visitor);\n }\n }\n }\n return p;\n }\n});\n\n/* eslint-disable require-atomic-updates */\n\n/**\n * Evaluates the dataflow and returns a Promise that resolves when pulse\n * propagation completes. This method will increment the current timestamp\n * and process all updated, pulsed and touched operators. When invoked for\n * the first time, all registered operators will be processed. This method\n * should not be invoked by third-party clients, use {@link runAsync} or\n * {@link run} instead.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode package.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Promise} - A promise that resolves to this dataflow after\n * evaluation completes.\n */\nasync function evaluate(encode, prerun, postrun) {\n const df = this,\n async = [];\n\n // if the pulse value is set, this is a re-entrant call\n if (df._pulse) return reentrant(df);\n\n // wait for pending datasets to load\n if (df._pending) await df._pending;\n\n // invoke prerun function, if provided\n if (prerun) await asyncCallback(df, prerun);\n\n // exit early if there are no updates\n if (!df._touched.length) {\n df.debug('Dataflow invoked, but nothing to do.');\n return df;\n }\n\n // increment timestamp clock\n const stamp = ++df._clock;\n\n // set the current pulse\n df._pulse = new Pulse(df, stamp, encode);\n\n // initialize priority queue, reset touched operators\n df._touched.forEach(op => df._enqueue(op, true));\n df._touched = UniqueList(id);\n let count = 0,\n op,\n next,\n error;\n try {\n while (df._heap.size() > 0) {\n // dequeue operator with highest priority\n op = df._heap.pop();\n\n // re-queue if rank changed\n if (op.rank !== op.qrank) {\n df._enqueue(op, true);\n continue;\n }\n\n // otherwise, evaluate the operator\n next = op.run(df._getPulse(op, encode));\n if (next.then) {\n // await if operator returns a promise directly\n next = await next;\n } else if (next.async) {\n // queue parallel asynchronous execution\n async.push(next.async);\n next = StopPropagation;\n }\n\n // propagate evaluation, enqueue dependent operators\n if (next !== StopPropagation) {\n if (op._targets) op._targets.forEach(op => df._enqueue(op));\n }\n\n // increment visit counter\n ++count;\n }\n } catch (err) {\n df._heap.clear();\n error = err;\n }\n\n // reset pulse map\n df._input = {};\n df._pulse = null;\n df.debug(`Pulse ${stamp}: ${count} operators`);\n if (error) {\n df._postrun = [];\n df.error(error);\n }\n\n // invoke callbacks queued via runAfter\n if (df._postrun.length) {\n const pr = df._postrun.sort((a, b) => b.priority - a.priority);\n df._postrun = [];\n for (let i = 0; i < pr.length; ++i) {\n await asyncCallback(df, pr[i].callback);\n }\n }\n\n // invoke postrun function, if provided\n if (postrun) await asyncCallback(df, postrun);\n\n // handle non-blocking asynchronous callbacks\n if (async.length) {\n Promise.all(async).then(cb => df.runAsync(null, () => {\n cb.forEach(f => {\n try {\n f(df);\n } catch (err) {\n df.error(err);\n }\n });\n }));\n }\n return df;\n}\n\n/**\n * Queues dataflow evaluation to run once any other queued evaluations have\n * completed and returns a Promise that resolves when the queued pulse\n * propagation completes. If provided, a callback function will be invoked\n * immediately before evaluation commences. This method will ensure a\n * separate evaluation is invoked for each time it is called.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode package.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Promise} - A promise that resolves to this dataflow after\n * evaluation completes.\n */\nasync function runAsync(encode, prerun, postrun) {\n // await previously queued functions\n while (this._running) await this._running;\n\n // run dataflow, manage running promise\n const clear = () => this._running = null;\n (this._running = this.evaluate(encode, prerun, postrun)).then(clear, clear);\n return this._running;\n}\n\n/**\n * Requests dataflow evaluation and the immediately returns this dataflow\n * instance. If there are pending data loading or other asynchronous\n * operations, the dataflow will evaluate asynchronously after this method\n * has been invoked. To track when dataflow evaluation completes, use the\n * {@link runAsync} method instead. This method will raise an error if\n * invoked while the dataflow is already in the midst of evaluation.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode module.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Dataflow} - This dataflow instance.\n */\nfunction run(encode, prerun, postrun) {\n return this._pulse ? reentrant(this) : (this.evaluate(encode, prerun, postrun), this);\n}\n\n/**\n * Schedules a callback function to be invoked after the current pulse\n * propagation completes. If no propagation is currently occurring,\n * the function is invoked immediately. Callbacks scheduled via runAfter\n * are invoked immediately upon completion of the current cycle, before\n * any request queued via runAsync. This method is primarily intended for\n * internal use. Third-party callers using runAfter to schedule a callback\n * that invokes {@link run} or {@link runAsync} should not use this method,\n * but instead use {@link runAsync} with prerun or postrun arguments.\n * @param {function(Dataflow)} callback - The callback function to run.\n * The callback will be invoked with this Dataflow instance as its\n * sole argument.\n * @param {boolean} enqueue - A boolean flag indicating that the\n * callback should be queued up to run after the next propagation\n * cycle, suppressing immediate invocation when propagation is not\n * currently occurring.\n * @param {number} [priority] - A priority value used to sort registered\n * callbacks to determine execution order. This argument is intended\n * for internal Vega use only.\n */\nfunction runAfter(callback, enqueue, priority) {\n if (this._pulse || enqueue) {\n // pulse propagation is currently running, queue to run after\n this._postrun.push({\n priority: priority || 0,\n callback: callback\n });\n } else {\n // pulse propagation already complete, invoke immediately\n try {\n callback(this);\n } catch (err) {\n this.error(err);\n }\n }\n}\n\n/**\n * Raise an error for re-entrant dataflow evaluation.\n */\nfunction reentrant(df) {\n df.error('Dataflow already running. Use runAsync() to chain invocations.');\n return df;\n}\n\n/**\n * Enqueue an operator into the priority queue for evaluation. The operator\n * will be enqueued if it has no registered pulse for the current cycle, or if\n * the force argument is true. Upon enqueue, this method also sets the\n * operator's qrank to the current rank value.\n * @param {Operator} op - The operator to enqueue.\n * @param {boolean} [force] - A flag indicating if the operator should be\n * forceably added to the queue, even if it has already been previously\n * enqueued during the current pulse propagation. This is useful when the\n * dataflow graph is dynamically modified and the operator rank changes.\n */\nfunction enqueue(op, force) {\n const q = op.stamp < this._clock;\n if (q) op.stamp = this._clock;\n if (q || force) {\n op.qrank = op.rank;\n this._heap.push(op);\n }\n}\n\n/**\n * Provide a correct pulse for evaluating an operator. If the operator has an\n * explicit source operator, we will try to pull the pulse(s) from it.\n * If there is an array of source operators, we build a multi-pulse.\n * Otherwise, we return a current pulse with correct source data.\n * If the pulse is the pulse map has an explicit target set, we use that.\n * Else if the pulse on the upstream source operator is current, we use that.\n * Else we use the pulse from the pulse map, but copy the source tuple array.\n * @param {Operator} op - The operator for which to get an input pulse.\n * @param {string} [encode] - An (optional) encoding set name with which to\n * annotate the returned pulse. See {@link run} for more information.\n */\nfunction getPulse(op, encode) {\n const s = op.source,\n stamp = this._clock;\n return s && isArray(s) ? new MultiPulse(this, stamp, s.map(_ => _.pulse), encode) : this._input[op.id] || singlePulse(this._pulse, s && s.pulse);\n}\nfunction singlePulse(p, s) {\n if (s && s.stamp === p.stamp) {\n return s;\n }\n p = p.fork();\n if (s && s !== StopPropagation) {\n p.source = s.source;\n }\n return p;\n}\n\nconst NO_OPT = {\n skip: false,\n force: false\n};\n\n/**\n * Touches an operator, scheduling it to be evaluated. If invoked outside of\n * a pulse propagation, the operator will be evaluated the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the operator\n * will be queued for evaluation if and only if the operator has not yet been\n * evaluated on the current propagation timestamp.\n * @param {Operator} op - The operator to touch.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nfunction touch(op, options) {\n const opt = options || NO_OPT;\n if (this._pulse) {\n // if in midst of propagation, add to priority queue\n this._enqueue(op);\n } else {\n // otherwise, queue for next propagation\n this._touched.add(op);\n }\n if (opt.skip) op.skip(true);\n return this;\n}\n\n/**\n * Updates the value of the given operator.\n * @param {Operator} op - The operator to update.\n * @param {*} value - The value to set.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nfunction update(op, value, options) {\n const opt = options || NO_OPT;\n if (op.set(value) || opt.force) {\n this.touch(op, opt);\n }\n return this;\n}\n\n/**\n * Pulses an operator with a changeset of tuples. If invoked outside of\n * a pulse propagation, the pulse will be applied the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the pulse\n * will be added to the set of active pulses and will be applied if and\n * only if the target operator has not yet been evaluated on the current\n * propagation timestamp.\n * @param {Operator} op - The operator to pulse.\n * @param {ChangeSet} value - The tuple changeset to apply.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nfunction pulse(op, changeset, options) {\n this.touch(op, options || NO_OPT);\n const p = new Pulse(this, this._clock + (this._pulse ? 0 : 1)),\n t = op.pulse && op.pulse.source || [];\n p.target = op;\n this._input[op.id] = changeset.pulse(p, t);\n return this;\n}\n\nfunction Heap(cmp) {\n let nodes = [];\n return {\n clear: () => nodes = [],\n size: () => nodes.length,\n peek: () => nodes[0],\n push: x => {\n nodes.push(x);\n return siftdown(nodes, 0, nodes.length - 1, cmp);\n },\n pop: () => {\n const last = nodes.pop();\n let item;\n if (nodes.length) {\n item = nodes[0];\n nodes[0] = last;\n siftup(nodes, 0, cmp);\n } else {\n item = last;\n }\n return item;\n }\n };\n}\nfunction siftdown(array, start, idx, cmp) {\n let parent, pidx;\n const item = array[idx];\n while (idx > start) {\n pidx = idx - 1 >> 1;\n parent = array[pidx];\n if (cmp(item, parent) < 0) {\n array[idx] = parent;\n idx = pidx;\n continue;\n }\n break;\n }\n return array[idx] = item;\n}\nfunction siftup(array, idx, cmp) {\n const start = idx,\n end = array.length,\n item = array[idx];\n let cidx = (idx << 1) + 1,\n ridx;\n while (cidx < end) {\n ridx = cidx + 1;\n if (ridx < end && cmp(array[cidx], array[ridx]) >= 0) {\n cidx = ridx;\n }\n array[idx] = array[cidx];\n idx = cidx;\n cidx = (idx << 1) + 1;\n }\n array[idx] = item;\n return siftdown(array, start, idx, cmp);\n}\n\n/**\n * A dataflow graph for reactive processing of data streams.\n * @constructor\n */\nfunction Dataflow() {\n this.logger(logger());\n this.logLevel(Error);\n this._clock = 0;\n this._rank = 0;\n this._locale = defaultLocale();\n try {\n this._loader = loader();\n } catch (e) {\n // do nothing if loader module is unavailable\n }\n this._touched = UniqueList(id);\n this._input = {};\n this._pulse = null;\n this._heap = Heap((a, b) => a.qrank - b.qrank);\n this._postrun = [];\n}\nfunction logMethod(method) {\n return function () {\n return this._log[method].apply(this, arguments);\n };\n}\nDataflow.prototype = {\n /**\n * The current timestamp of this dataflow. This value reflects the\n * timestamp of the previous dataflow run. The dataflow is initialized\n * with a stamp value of 0. The initial run of the dataflow will have\n * a timestap of 1, and so on. This value will match the\n * {@link Pulse.stamp} property.\n * @return {number} - The current timestamp value.\n */\n stamp() {\n return this._clock;\n },\n /**\n * Gets or sets the loader instance to use for data file loading. A\n * loader object must provide a \"load\" method for loading files and a\n * \"sanitize\" method for checking URL/filename validity. Both methods\n * should accept a URI and options hash as arguments, and return a Promise\n * that resolves to the loaded file contents (load) or a hash containing\n * sanitized URI data with the sanitized url assigned to the \"href\" property\n * (sanitize).\n * @param {object} _ - The loader instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current loader instance. Otherwise returns this Dataflow instance.\n */\n loader(_) {\n if (arguments.length) {\n this._loader = _;\n return this;\n } else {\n return this._loader;\n }\n },\n /**\n * Gets or sets the locale instance to use for formatting and parsing\n * string values. The locale object should be provided by the\n * vega-format library, and include methods such as format, timeFormat,\n * utcFormat, timeParse, and utcParse.\n * @param {object} _ - The locale instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current locale instance. Otherwise returns this Dataflow instance.\n */\n locale(_) {\n if (arguments.length) {\n this._locale = _;\n return this;\n } else {\n return this._locale;\n }\n },\n /**\n * Get or set the logger instance used to log messages. If no arguments are\n * provided, returns the current logger instance. Otherwise, sets the logger\n * and return this Dataflow instance. Provided loggers must support the full\n * API of logger objects generated by the vega-util logger method. Note that\n * by default the log level of the new logger will be used; use the logLevel\n * method to adjust the log level as needed.\n */\n logger(logger) {\n if (arguments.length) {\n this._log = logger;\n return this;\n } else {\n return this._log;\n }\n },\n /**\n * Logs an error message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit error messages.\n */\n error: logMethod('error'),\n /**\n * Logs a warning message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit warning messages.\n */\n warn: logMethod('warn'),\n /**\n * Logs a information message. By default, logged messages are written to\n * console output. The message will only be logged if the current log level is\n * high enough to permit information messages.\n */\n info: logMethod('info'),\n /**\n * Logs a debug message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit debug messages.\n */\n debug: logMethod('debug'),\n /**\n * Get or set the current log level. If an argument is provided, it\n * will be used as the new log level.\n * @param {number} [level] - Should be one of None, Warn, Info\n * @return {number} - The current log level.\n */\n logLevel: logMethod('level'),\n /**\n * Empty entry threshold for garbage cleaning. Map data structures will\n * perform cleaning once the number of empty entries exceeds this value.\n */\n cleanThreshold: 1e4,\n // OPERATOR REGISTRATION\n add,\n connect,\n rank,\n rerank,\n // OPERATOR UPDATES\n pulse,\n touch,\n update,\n changeset,\n // DATA LOADING\n ingest,\n parse,\n preload,\n request,\n // EVENT HANDLING\n events,\n on,\n // PULSE PROPAGATION\n evaluate,\n run,\n runAsync,\n runAfter,\n _enqueue: enqueue,\n _getPulse: getPulse\n};\n\n/**\n * Abstract class for operators that process data tuples.\n * Subclasses must provide a {@link transform} method for operator processing.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {Operator} [source] - The operator from which to receive pulses.\n */\nfunction Transform(init, params) {\n Operator.call(this, init, null, params);\n}\ninherits(Transform, Operator, {\n /**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\n run(pulse) {\n if (pulse.stamp < this.stamp) return pulse.StopPropagation;\n let rv;\n if (this.skip()) {\n this.skip(false);\n } else {\n rv = this.evaluate(pulse);\n }\n rv = rv || pulse;\n if (rv.then) {\n rv = rv.then(_ => this.pulse = _);\n } else if (rv !== pulse.StopPropagation) {\n this.pulse = rv;\n }\n return rv;\n },\n /**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Marshalls parameter values and then invokes {@link transform}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n value (including undefined) will let the input pulse pass through.\n */\n evaluate(pulse) {\n const params = this.marshall(pulse.stamp),\n out = this.transform(params, pulse);\n params.clear();\n return out;\n },\n /**\n * Process incoming pulses.\n * Subclasses should override this method to implement transforms.\n * @param {Parameters} _ - The operator parameter values.\n * @param {Pulse} pulse - The current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n * value (including undefined) will let the input pulse pass through.\n */\n transform() {}\n});\n\nconst transforms = {};\nfunction definition(type) {\n const t = transform(type);\n return t && t.Definition || null;\n}\nfunction transform(type) {\n type = type && type.toLowerCase();\n return hasOwnProperty(transforms, type) ? transforms[type] : null;\n}\n\nexport { Dataflow, EventStream, MultiPulse, Operator, Parameters, Pulse, Transform, UniqueList, asyncCallback, changeset, definition, derive, ingest$1 as ingest, isChangeSet, isTuple, rederive, replace, stableCompare, transform, transforms, tupleid };\n","import { ascending, quantileSorted, deviation, quantile, median } from 'd3-array';\n\nfunction* numbers (values, valueof) {\n if (valueof == null) {\n for (let value of values) {\n if (value != null && value !== '' && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n value = valueof(value, ++index, values);\n if (value != null && value !== '' && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n\nfunction quantiles (array, p, f) {\n const values = Float64Array.from(numbers(array, f));\n\n // don't depend on return value from typed array sort call\n // protects against undefined sort results in Safari (vega/vega-lite#4964)\n values.sort(ascending);\n return p.map(_ => quantileSorted(values, _));\n}\n\nfunction quartiles (array, f) {\n return quantiles(array, [0.25, 0.50, 0.75], f);\n}\n\n// Scott, D. W. (1992) Multivariate Density Estimation:\n// Theory, Practice, and Visualization. Wiley.\nfunction estimateBandwidth (array, f) {\n const n = array.length,\n d = deviation(array, f),\n q = quartiles(array, f),\n h = (q[2] - q[0]) / 1.34,\n v = Math.min(d, h) || d || Math.abs(q[0]) || 1;\n return 1.06 * v * Math.pow(n, -0.2);\n}\n\nfunction bin (_) {\n // determine range\n const maxb = _.maxbins || 20,\n base = _.base || 10,\n logb = Math.log(base),\n div = _.divide || [5, 2];\n let min = _.extent[0],\n max = _.extent[1],\n step,\n level,\n minstep,\n v,\n i,\n n;\n const span = _.span || max - min || Math.abs(min) || 1;\n if (_.step) {\n // if step size is explicitly given, use that\n step = _.step;\n } else if (_.steps) {\n // if provided, limit choice to acceptable step sizes\n v = span / maxb;\n for (i = 0, n = _.steps.length; i < n && _.steps[i] < v; ++i);\n step = _.steps[Math.max(0, i - 1)];\n } else {\n // else use span to determine step size\n level = Math.ceil(Math.log(maxb) / logb);\n minstep = _.minstep || 0;\n step = Math.max(minstep, Math.pow(base, Math.round(Math.log(span) / logb) - level));\n\n // increase step size if too many bins\n while (Math.ceil(span / step) > maxb) {\n step *= base;\n }\n\n // decrease step size if allowed\n for (i = 0, n = div.length; i < n; ++i) {\n v = step / div[i];\n if (v >= minstep && span / v <= maxb) step = v;\n }\n }\n\n // update precision, min and max\n v = Math.log(step);\n const precision = v >= 0 ? 0 : ~~(-v / logb) + 1,\n eps = Math.pow(base, -precision - 1);\n if (_.nice || _.nice === undefined) {\n v = Math.floor(min / step + eps) * step;\n min = min < v ? v - step : v;\n max = Math.ceil(max / step) * step;\n }\n return {\n start: min,\n stop: max === min ? min + step : max,\n step: step\n };\n}\n\nvar random = Math.random;\nfunction setRandom(r) {\n random = r;\n}\n\nfunction bootstrapCI (array, samples, alpha, f) {\n if (!array.length) return [undefined, undefined];\n const values = Float64Array.from(numbers(array, f)),\n n = values.length,\n m = samples;\n let a, i, j, mu;\n for (j = 0, mu = Array(m); j < m; ++j) {\n for (a = 0, i = 0; i < n; ++i) {\n a += values[~~(random() * n)];\n }\n mu[j] = a / n;\n }\n mu.sort(ascending);\n return [quantile(mu, alpha / 2), quantile(mu, 1 - alpha / 2)];\n}\n\n// Dot density binning for dot plot construction.\n// Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n// https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\nfunction dotbin (array, step, smooth, f) {\n f = f || (_ => _);\n const n = array.length,\n v = new Float64Array(n);\n let i = 0,\n j = 1,\n a = f(array[0]),\n b = a,\n w = a + step,\n x;\n for (; j < n; ++j) {\n x = f(array[j]);\n if (x >= w) {\n b = (a + b) / 2;\n for (; i < j; ++i) v[i] = b;\n w = x + step;\n a = x;\n }\n b = x;\n }\n b = (a + b) / 2;\n for (; i < j; ++i) v[i] = b;\n return smooth ? smoothing(v, step + step / 4) : v;\n}\n\n// perform smoothing to reduce variance\n// swap points between \"adjacent\" stacks\n// Wilkinson defines adjacent as within step/4 units\nfunction smoothing(v, thresh) {\n const n = v.length;\n let a = 0,\n b = 1,\n c,\n d;\n\n // get left stack\n while (v[a] === v[b]) ++b;\n while (b < n) {\n // get right stack\n c = b + 1;\n while (v[b] === v[c]) ++c;\n\n // are stacks adjacent?\n // if so, compare sizes and swap as needed\n if (v[b] - v[b - 1] < thresh) {\n d = b + (a + c - b - b >> 1);\n while (d < b) v[d++] = v[b];\n while (d > b) v[d--] = v[a];\n }\n\n // update left stack indices\n a = b;\n b = c;\n }\n return v;\n}\n\nfunction lcg (seed) {\n // Random numbers using a Linear Congruential Generator with seed value\n // Uses glibc values from https://en.wikipedia.org/wiki/Linear_congruential_generator\n return function () {\n seed = (1103515245 * seed + 12345) % 2147483647;\n return seed / 2147483647;\n };\n}\n\nfunction integer (min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n let a, b, d;\n const dist = {\n min(_) {\n if (arguments.length) {\n a = _ || 0;\n d = b - a;\n return dist;\n } else {\n return a;\n }\n },\n max(_) {\n if (arguments.length) {\n b = _ || 0;\n d = b - a;\n return dist;\n } else {\n return b;\n }\n },\n sample() {\n return a + Math.floor(d * random());\n },\n pdf(x) {\n return x === Math.floor(x) && x >= a && x < b ? 1 / d : 0;\n },\n cdf(x) {\n const v = Math.floor(x);\n return v < a ? 0 : v >= b ? 1 : (v - a + 1) / d;\n },\n icdf(p) {\n return p >= 0 && p <= 1 ? a - 1 + Math.floor(p * d) : NaN;\n }\n };\n return dist.min(min).max(max);\n}\n\nconst SQRT2PI = Math.sqrt(2 * Math.PI);\nconst SQRT2 = Math.SQRT2;\n\nlet nextSample = NaN;\nfunction sampleNormal(mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n let x = 0,\n y = 0,\n rds,\n c;\n if (nextSample === nextSample) {\n x = nextSample;\n nextSample = NaN;\n } else {\n do {\n x = random() * 2 - 1;\n y = random() * 2 - 1;\n rds = x * x + y * y;\n } while (rds === 0 || rds > 1);\n c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform\n x *= c;\n nextSample = y * c;\n }\n return mean + x * stdev;\n}\nfunction densityNormal(value, mean, stdev) {\n stdev = stdev == null ? 1 : stdev;\n const z = (value - (mean || 0)) / stdev;\n return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI);\n}\n\n// Approximation from West (2009)\n// Better Approximations to Cumulative Normal Functions\nfunction cumulativeNormal(value, mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n const z = (value - mean) / stdev,\n Z = Math.abs(z);\n let cd;\n if (Z > 37) {\n cd = 0;\n } else {\n const exp = Math.exp(-Z * Z / 2);\n let sum;\n if (Z < 7.07106781186547) {\n sum = 3.52624965998911e-02 * Z + 0.700383064443688;\n sum = sum * Z + 6.37396220353165;\n sum = sum * Z + 33.912866078383;\n sum = sum * Z + 112.079291497871;\n sum = sum * Z + 221.213596169931;\n sum = sum * Z + 220.206867912376;\n cd = exp * sum;\n sum = 8.83883476483184e-02 * Z + 1.75566716318264;\n sum = sum * Z + 16.064177579207;\n sum = sum * Z + 86.7807322029461;\n sum = sum * Z + 296.564248779674;\n sum = sum * Z + 637.333633378831;\n sum = sum * Z + 793.826512519948;\n sum = sum * Z + 440.413735824752;\n cd = cd / sum;\n } else {\n sum = Z + 0.65;\n sum = Z + 4 / sum;\n sum = Z + 3 / sum;\n sum = Z + 2 / sum;\n sum = Z + 1 / sum;\n cd = exp / sum / 2.506628274631;\n }\n }\n return z > 0 ? 1 - cd : cd;\n}\n\n// Approximation of Probit function using inverse error function.\nfunction quantileNormal(p, mean, stdev) {\n if (p < 0 || p > 1) return NaN;\n return (mean || 0) + (stdev == null ? 1 : stdev) * SQRT2 * erfinv(2 * p - 1);\n}\n\n// Approximate inverse error function. Implementation from \"Approximating\n// the erfinv function\" by Mike Giles, GPU Computing Gems, volume 2, 2010.\n// Ported from Apache Commons Math, http://www.apache.org/licenses/LICENSE-2.0\nfunction erfinv(x) {\n // beware that the logarithm argument must be\n // commputed as (1.0 - x) * (1.0 + x),\n // it must NOT be simplified as 1.0 - x * x as this\n // would induce rounding errors near the boundaries +/-1\n let w = -Math.log((1 - x) * (1 + x)),\n p;\n if (w < 6.25) {\n w -= 3.125;\n p = -3.6444120640178196996e-21;\n p = -1.685059138182016589e-19 + p * w;\n p = 1.2858480715256400167e-18 + p * w;\n p = 1.115787767802518096e-17 + p * w;\n p = -1.333171662854620906e-16 + p * w;\n p = 2.0972767875968561637e-17 + p * w;\n p = 6.6376381343583238325e-15 + p * w;\n p = -4.0545662729752068639e-14 + p * w;\n p = -8.1519341976054721522e-14 + p * w;\n p = 2.6335093153082322977e-12 + p * w;\n p = -1.2975133253453532498e-11 + p * w;\n p = -5.4154120542946279317e-11 + p * w;\n p = 1.051212273321532285e-09 + p * w;\n p = -4.1126339803469836976e-09 + p * w;\n p = -2.9070369957882005086e-08 + p * w;\n p = 4.2347877827932403518e-07 + p * w;\n p = -1.3654692000834678645e-06 + p * w;\n p = -1.3882523362786468719e-05 + p * w;\n p = 0.0001867342080340571352 + p * w;\n p = -0.00074070253416626697512 + p * w;\n p = -0.0060336708714301490533 + p * w;\n p = 0.24015818242558961693 + p * w;\n p = 1.6536545626831027356 + p * w;\n } else if (w < 16.0) {\n w = Math.sqrt(w) - 3.25;\n p = 2.2137376921775787049e-09;\n p = 9.0756561938885390979e-08 + p * w;\n p = -2.7517406297064545428e-07 + p * w;\n p = 1.8239629214389227755e-08 + p * w;\n p = 1.5027403968909827627e-06 + p * w;\n p = -4.013867526981545969e-06 + p * w;\n p = 2.9234449089955446044e-06 + p * w;\n p = 1.2475304481671778723e-05 + p * w;\n p = -4.7318229009055733981e-05 + p * w;\n p = 6.8284851459573175448e-05 + p * w;\n p = 2.4031110387097893999e-05 + p * w;\n p = -0.0003550375203628474796 + p * w;\n p = 0.00095328937973738049703 + p * w;\n p = -0.0016882755560235047313 + p * w;\n p = 0.0024914420961078508066 + p * w;\n p = -0.0037512085075692412107 + p * w;\n p = 0.005370914553590063617 + p * w;\n p = 1.0052589676941592334 + p * w;\n p = 3.0838856104922207635 + p * w;\n } else if (Number.isFinite(w)) {\n w = Math.sqrt(w) - 5.0;\n p = -2.7109920616438573243e-11;\n p = -2.5556418169965252055e-10 + p * w;\n p = 1.5076572693500548083e-09 + p * w;\n p = -3.7894654401267369937e-09 + p * w;\n p = 7.6157012080783393804e-09 + p * w;\n p = -1.4960026627149240478e-08 + p * w;\n p = 2.9147953450901080826e-08 + p * w;\n p = -6.7711997758452339498e-08 + p * w;\n p = 2.2900482228026654717e-07 + p * w;\n p = -9.9298272942317002539e-07 + p * w;\n p = 4.5260625972231537039e-06 + p * w;\n p = -1.9681778105531670567e-05 + p * w;\n p = 7.5995277030017761139e-05 + p * w;\n p = -0.00021503011930044477347 + p * w;\n p = -0.00013871931833623122026 + p * w;\n p = 1.0103004648645343977 + p * w;\n p = 4.8499064014085844221 + p * w;\n } else {\n p = Infinity;\n }\n return p * x;\n}\nfunction gaussian (mean, stdev) {\n let mu, sigma;\n const dist = {\n mean(_) {\n if (arguments.length) {\n mu = _ || 0;\n return dist;\n } else {\n return mu;\n }\n },\n stdev(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n return dist;\n } else {\n return sigma;\n }\n },\n sample: () => sampleNormal(mu, sigma),\n pdf: value => densityNormal(value, mu, sigma),\n cdf: value => cumulativeNormal(value, mu, sigma),\n icdf: p => quantileNormal(p, mu, sigma)\n };\n return dist.mean(mean).stdev(stdev);\n}\n\nfunction kde (support, bandwidth) {\n const kernel = gaussian();\n let n = 0;\n const dist = {\n data(_) {\n if (arguments.length) {\n support = _;\n n = _ ? _.length : 0;\n return dist.bandwidth(bandwidth);\n } else {\n return support;\n }\n },\n bandwidth(_) {\n if (!arguments.length) return bandwidth;\n bandwidth = _;\n if (!bandwidth && support) bandwidth = estimateBandwidth(support);\n return dist;\n },\n sample() {\n return support[~~(random() * n)] + bandwidth * kernel.sample();\n },\n pdf(x) {\n let y = 0,\n i = 0;\n for (; i < n; ++i) {\n y += kernel.pdf((x - support[i]) / bandwidth);\n }\n return y / bandwidth / n;\n },\n cdf(x) {\n let y = 0,\n i = 0;\n for (; i < n; ++i) {\n y += kernel.cdf((x - support[i]) / bandwidth);\n }\n return y / n;\n },\n icdf() {\n throw Error('KDE icdf not supported.');\n }\n };\n return dist.data(support);\n}\n\nfunction sampleLogNormal(mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n return Math.exp(mean + sampleNormal() * stdev);\n}\nfunction densityLogNormal(value, mean, stdev) {\n if (value <= 0) return 0;\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n const z = (Math.log(value) - mean) / stdev;\n return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI * value);\n}\nfunction cumulativeLogNormal(value, mean, stdev) {\n return cumulativeNormal(Math.log(value), mean, stdev);\n}\nfunction quantileLogNormal(p, mean, stdev) {\n return Math.exp(quantileNormal(p, mean, stdev));\n}\nfunction lognormal (mean, stdev) {\n let mu, sigma;\n const dist = {\n mean(_) {\n if (arguments.length) {\n mu = _ || 0;\n return dist;\n } else {\n return mu;\n }\n },\n stdev(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n return dist;\n } else {\n return sigma;\n }\n },\n sample: () => sampleLogNormal(mu, sigma),\n pdf: value => densityLogNormal(value, mu, sigma),\n cdf: value => cumulativeLogNormal(value, mu, sigma),\n icdf: p => quantileLogNormal(p, mu, sigma)\n };\n return dist.mean(mean).stdev(stdev);\n}\n\nfunction mixture (dists, weights) {\n let m = 0,\n w;\n function normalize(x) {\n const w = [];\n let sum = 0,\n i;\n for (i = 0; i < m; ++i) {\n sum += w[i] = x[i] == null ? 1 : +x[i];\n }\n for (i = 0; i < m; ++i) {\n w[i] /= sum;\n }\n return w;\n }\n const dist = {\n weights(_) {\n if (arguments.length) {\n w = normalize(weights = _ || []);\n return dist;\n }\n return weights;\n },\n distributions(_) {\n if (arguments.length) {\n if (_) {\n m = _.length;\n dists = _;\n } else {\n m = 0;\n dists = [];\n }\n return dist.weights(weights);\n }\n return dists;\n },\n sample() {\n const r = random();\n let d = dists[m - 1],\n v = w[0],\n i = 0;\n\n // first select distribution\n for (; i < m - 1; v += w[++i]) {\n if (r < v) {\n d = dists[i];\n break;\n }\n }\n // then sample from it\n return d.sample();\n },\n pdf(x) {\n let p = 0,\n i = 0;\n for (; i < m; ++i) {\n p += w[i] * dists[i].pdf(x);\n }\n return p;\n },\n cdf(x) {\n let p = 0,\n i = 0;\n for (; i < m; ++i) {\n p += w[i] * dists[i].cdf(x);\n }\n return p;\n },\n icdf() {\n throw Error('Mixture icdf not supported.');\n }\n };\n return dist.distributions(dists).weights(weights);\n}\n\nfunction sampleUniform(min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return min + (max - min) * random();\n}\nfunction densityUniform(value, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return value >= min && value <= max ? 1 / (max - min) : 0;\n}\nfunction cumulativeUniform(value, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return value < min ? 0 : value > max ? 1 : (value - min) / (max - min);\n}\nfunction quantileUniform(p, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return p >= 0 && p <= 1 ? min + p * (max - min) : NaN;\n}\nfunction uniform (min, max) {\n let a, b;\n const dist = {\n min(_) {\n if (arguments.length) {\n a = _ || 0;\n return dist;\n } else {\n return a;\n }\n },\n max(_) {\n if (arguments.length) {\n b = _ == null ? 1 : _;\n return dist;\n } else {\n return b;\n }\n },\n sample: () => sampleUniform(a, b),\n pdf: value => densityUniform(value, a, b),\n cdf: value => cumulativeUniform(value, a, b),\n icdf: p => quantileUniform(p, a, b)\n };\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return dist.min(min).max(max);\n}\n\nfunction constant (data, x, y) {\n let mean = 0,\n n = 0;\n for (const d of data) {\n const val = y(d);\n if (x(d) == null || val == null || isNaN(val)) continue;\n mean += (val - mean) / ++n;\n }\n return {\n coef: [mean],\n predict: () => mean,\n rSquared: 0\n };\n}\n\n// Ordinary Least Squares\nfunction ols (uX, uY, uXY, uX2) {\n const delta = uX2 - uX * uX,\n slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta,\n intercept = uY - slope * uX;\n return [intercept, slope];\n}\n\nfunction points(data, x, y, sort) {\n data = data.filter(d => {\n let u = x(d),\n v = y(d);\n return u != null && (u = +u) >= u && v != null && (v = +v) >= v;\n });\n if (sort) {\n data.sort((a, b) => x(a) - x(b));\n }\n const n = data.length,\n X = new Float64Array(n),\n Y = new Float64Array(n);\n\n // extract values, calculate means\n let i = 0,\n ux = 0,\n uy = 0,\n xv,\n yv,\n d;\n for (d of data) {\n X[i] = xv = +x(d);\n Y[i] = yv = +y(d);\n ++i;\n ux += (xv - ux) / i;\n uy += (yv - uy) / i;\n }\n\n // mean center the data\n for (i = 0; i < n; ++i) {\n X[i] -= ux;\n Y[i] -= uy;\n }\n return [X, Y, ux, uy];\n}\nfunction visitPoints(data, x, y, callback) {\n let i = -1,\n u,\n v;\n for (const d of data) {\n u = x(d);\n v = y(d);\n if (u != null && (u = +u) >= u && v != null && (v = +v) >= v) {\n callback(u, v, ++i);\n }\n }\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction rSquared (data, x, y, uY, predict) {\n let SSE = 0,\n SST = 0;\n visitPoints(data, x, y, (dx, dy) => {\n const sse = dy - predict(dx),\n sst = dy - uY;\n SSE += sse * sse;\n SST += sst * sst;\n });\n return 1 - SSE / SST;\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction linear (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] + coef[1] * x;\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction log (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n dx = Math.log(dx);\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] + coef[1] * Math.log(x);\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n\nfunction exp (data, x, y) {\n // eslint-disable-next-line no-unused-vars\n const [xv, yv, ux, uy] = points(data, x, y);\n let YL = 0,\n XY = 0,\n XYL = 0,\n X2Y = 0,\n n = 0,\n dx,\n ly,\n xy;\n visitPoints(data, x, y, (_, dy) => {\n dx = xv[n++];\n ly = Math.log(dy);\n xy = dx * dy;\n YL += (dy * ly - YL) / n;\n XY += (xy - XY) / n;\n XYL += (xy * ly - XYL) / n;\n X2Y += (dx * xy - X2Y) / n;\n });\n const [c0, c1] = ols(XY / uy, YL / uy, XYL / uy, X2Y / uy),\n predict = x => Math.exp(c0 + c1 * (x - ux));\n return {\n coef: [Math.exp(c0 - c1 * ux), c1],\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction pow (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n YS = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n const lx = Math.log(dx),\n ly = Math.log(dy);\n ++n;\n X += (lx - X) / n;\n Y += (ly - Y) / n;\n XY += (lx * ly - XY) / n;\n X2 += (lx * lx - X2) / n;\n YS += (dy - YS) / n;\n });\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] * Math.pow(x, coef[1]);\n coef[0] = Math.exp(coef[0]);\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, YS, predict)\n };\n}\n\nfunction quad (data, x, y) {\n const [xv, yv, ux, uy] = points(data, x, y),\n n = xv.length;\n let X2 = 0,\n X3 = 0,\n X4 = 0,\n XY = 0,\n X2Y = 0,\n i,\n dx,\n dy,\n x2;\n for (i = 0; i < n;) {\n dx = xv[i];\n dy = yv[i++];\n x2 = dx * dx;\n X2 += (x2 - X2) / i;\n X3 += (x2 * dx - X3) / i;\n X4 += (x2 * x2 - X4) / i;\n XY += (dx * dy - XY) / i;\n X2Y += (x2 * dy - X2Y) / i;\n }\n const X2X2 = X4 - X2 * X2,\n d = X2 * X2X2 - X3 * X3,\n a = (X2Y * X2 - XY * X3) / d,\n b = (XY * X2X2 - X2Y * X3) / d,\n c = -a * X2,\n predict = x => {\n x = x - ux;\n return a * x * x + b * x + c + uy;\n };\n\n // transform coefficients back from mean-centered space\n return {\n coef: [c - b * ux + a * ux * ux + uy, b - 2 * a * ux, a],\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n// ... which was adapted from regression-js by Tom Alexander\n// Source: https://github.com/Tom-Alexander/regression-js/blob/master/src/regression.js#L246\n// License: https://github.com/Tom-Alexander/regression-js/blob/master/LICENSE\nfunction poly (data, x, y, order) {\n // use more efficient methods for lower orders\n if (order === 0) return constant(data, x, y);\n if (order === 1) return linear(data, x, y);\n if (order === 2) return quad(data, x, y);\n const [xv, yv, ux, uy] = points(data, x, y),\n n = xv.length,\n lhs = [],\n rhs = [],\n k = order + 1;\n let i, j, l, v, c;\n for (i = 0; i < k; ++i) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i) * yv[l];\n }\n lhs.push(v);\n c = new Float64Array(k);\n for (j = 0; j < k; ++j) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i + j);\n }\n c[j] = v;\n }\n rhs.push(c);\n }\n rhs.push(lhs);\n const coef = gaussianElimination(rhs),\n predict = x => {\n x -= ux;\n let y = uy + coef[0] + coef[1] * x + coef[2] * x * x;\n for (i = 3; i < k; ++i) y += coef[i] * Math.pow(x, i);\n return y;\n };\n return {\n coef: uncenter(k, coef, -ux, uy),\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\nfunction uncenter(k, a, x, y) {\n const z = Array(k);\n let i, j, v, c;\n\n // initialize to zero\n for (i = 0; i < k; ++i) z[i] = 0;\n\n // polynomial expansion\n for (i = k - 1; i >= 0; --i) {\n v = a[i];\n c = 1;\n z[i] += v;\n for (j = 1; j <= i; ++j) {\n c *= (i + 1 - j) / j; // binomial coefficent\n z[i - j] += v * Math.pow(x, j) * c;\n }\n }\n\n // bias term\n z[0] += y;\n return z;\n}\n\n// Given an array for a two-dimensional matrix and the polynomial order,\n// solve A * x = b using Gaussian elimination.\nfunction gaussianElimination(matrix) {\n const n = matrix.length - 1,\n coef = [];\n let i, j, k, r, t;\n for (i = 0; i < n; ++i) {\n r = i; // max row\n for (j = i + 1; j < n; ++j) {\n if (Math.abs(matrix[i][j]) > Math.abs(matrix[i][r])) {\n r = j;\n }\n }\n for (k = i; k < n + 1; ++k) {\n t = matrix[k][i];\n matrix[k][i] = matrix[k][r];\n matrix[k][r] = t;\n }\n for (j = i + 1; j < n; ++j) {\n for (k = n; k >= i; k--) {\n matrix[k][j] -= matrix[k][i] * matrix[i][j] / matrix[i][i];\n }\n }\n }\n for (j = n - 1; j >= 0; --j) {\n t = 0;\n for (k = j + 1; k < n; ++k) {\n t += matrix[k][j] * coef[k];\n }\n coef[j] = (matrix[n][j] - t) / matrix[j][j];\n }\n return coef;\n}\n\nconst maxiters = 2,\n epsilon = 1e-12;\n\n// Adapted from science.js by Jason Davies\n// Source: https://github.com/jasondavies/science.js/blob/master/src/stats/loess.js\n// License: https://github.com/jasondavies/science.js/blob/master/LICENSE\nfunction loess (data, x, y, bandwidth) {\n const [xv, yv, ux, uy] = points(data, x, y, true),\n n = xv.length,\n bw = Math.max(2, ~~(bandwidth * n)),\n // # nearest neighbors\n yhat = new Float64Array(n),\n residuals = new Float64Array(n),\n robustWeights = new Float64Array(n).fill(1);\n for (let iter = -1; ++iter <= maxiters;) {\n const interval = [0, bw - 1];\n for (let i = 0; i < n; ++i) {\n const dx = xv[i],\n i0 = interval[0],\n i1 = interval[1],\n edge = dx - xv[i0] > xv[i1] - dx ? i0 : i1;\n let W = 0,\n X = 0,\n Y = 0,\n XY = 0,\n X2 = 0;\n const denom = 1 / Math.abs(xv[edge] - dx || 1); // avoid singularity!\n\n for (let k = i0; k <= i1; ++k) {\n const xk = xv[k],\n yk = yv[k],\n w = tricube(Math.abs(dx - xk) * denom) * robustWeights[k],\n xkw = xk * w;\n W += w;\n X += xkw;\n Y += yk * w;\n XY += yk * xkw;\n X2 += xk * xkw;\n }\n\n // linear regression fit\n const [a, b] = ols(X / W, Y / W, XY / W, X2 / W);\n yhat[i] = a + b * dx;\n residuals[i] = Math.abs(yv[i] - yhat[i]);\n updateInterval(xv, i + 1, interval);\n }\n if (iter === maxiters) {\n break;\n }\n const medianResidual = median(residuals);\n if (Math.abs(medianResidual) < epsilon) break;\n for (let i = 0, arg, w; i < n; ++i) {\n arg = residuals[i] / (6 * medianResidual);\n // default to epsilon (rather than zero) for large deviations\n // keeping weights tiny but non-zero prevents singularites\n robustWeights[i] = arg >= 1 ? epsilon : (w = 1 - arg * arg) * w;\n }\n }\n return output(xv, yhat, ux, uy);\n}\n\n// weighting kernel for local regression\nfunction tricube(x) {\n return (x = 1 - x * x * x) * x * x;\n}\n\n// advance sliding window interval of nearest neighbors\nfunction updateInterval(xv, i, interval) {\n const val = xv[i];\n let left = interval[0],\n right = interval[1] + 1;\n if (right >= xv.length) return;\n\n // step right if distance to new right edge is <= distance to old left edge\n // step when distance is equal to ensure movement over duplicate x values\n while (i > left && xv[right] - val <= val - xv[left]) {\n interval[0] = ++left;\n interval[1] = right;\n ++right;\n }\n}\n\n// generate smoothed output points\n// average points with repeated x values\nfunction output(xv, yhat, ux, uy) {\n const n = xv.length,\n out = [];\n let i = 0,\n cnt = 0,\n prev = [],\n v;\n for (; i < n; ++i) {\n v = xv[i] + ux;\n if (prev[0] === v) {\n // average output values via online update\n prev[1] += (yhat[i] - prev[1]) / ++cnt;\n } else {\n // add new output point\n cnt = 0;\n prev[1] += uy;\n prev = [v, yhat[i]];\n out.push(prev);\n }\n }\n prev[1] += uy;\n return out;\n}\n\n// subdivide up to accuracy of 0.5 degrees\nconst MIN_RADIANS = 0.5 * Math.PI / 180;\n\n// Adaptively sample an interpolated function over a domain extent\nfunction sampleCurve (f, extent, minSteps, maxSteps) {\n minSteps = minSteps || 25;\n maxSteps = Math.max(minSteps, maxSteps || 200);\n const point = x => [x, f(x)],\n minX = extent[0],\n maxX = extent[1],\n span = maxX - minX,\n stop = span / maxSteps,\n prev = [point(minX)],\n next = [];\n if (minSteps === maxSteps) {\n // no adaptation, sample uniform grid directly and return\n for (let i = 1; i < maxSteps; ++i) {\n prev.push(point(minX + i / minSteps * span));\n }\n prev.push(point(maxX));\n return prev;\n } else {\n // sample minimum points on uniform grid\n // then move on to perform adaptive refinement\n next.push(point(maxX));\n for (let i = minSteps; --i > 0;) {\n next.push(point(minX + i / minSteps * span));\n }\n }\n let p0 = prev[0];\n let p1 = next[next.length - 1];\n const sx = 1 / span;\n const sy = scaleY(p0[1], next);\n while (p1) {\n // midpoint for potential curve subdivision\n const pm = point((p0[0] + p1[0]) / 2);\n const dx = pm[0] - p0[0] >= stop;\n if (dx && angleDelta(p0, pm, p1, sx, sy) > MIN_RADIANS) {\n // maximum resolution has not yet been met, and\n // subdivision midpoint is sufficiently different from endpoint\n // save subdivision, push midpoint onto the visitation stack\n next.push(pm);\n } else {\n // subdivision midpoint sufficiently similar to endpoint\n // skip subdivision, store endpoint, move to next point on the stack\n p0 = p1;\n prev.push(p1);\n next.pop();\n }\n p1 = next[next.length - 1];\n }\n return prev;\n}\nfunction scaleY(init, points) {\n let ymin = init;\n let ymax = init;\n const n = points.length;\n for (let i = 0; i < n; ++i) {\n const y = points[i][1];\n if (y < ymin) ymin = y;\n if (y > ymax) ymax = y;\n }\n return 1 / (ymax - ymin);\n}\nfunction angleDelta(p, q, r, sx, sy) {\n const a0 = Math.atan2(sy * (r[1] - p[1]), sx * (r[0] - p[0])),\n a1 = Math.atan2(sy * (q[1] - p[1]), sx * (q[0] - p[0]));\n return Math.abs(a0 - a1);\n}\n\nexport { estimateBandwidth as bandwidthNRD, bin, bootstrapCI, cumulativeLogNormal, cumulativeNormal, cumulativeUniform, densityLogNormal, densityNormal, densityUniform, dotbin, quantileLogNormal, quantileNormal, quantileUniform, quantiles, quartiles, random, integer as randomInteger, kde as randomKDE, lcg as randomLCG, lognormal as randomLogNormal, mixture as randomMixture, gaussian as randomNormal, uniform as randomUniform, constant as regressionConstant, exp as regressionExp, linear as regressionLinear, loess as regressionLoess, log as regressionLog, poly as regressionPoly, pow as regressionPow, quad as regressionQuad, sampleCurve, sampleLogNormal, sampleNormal, sampleUniform, setRandom };\n","import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n const v = variance(values, valueof);\n return v ? Math.sqrt(v) : v;\n}\n","export default function variance(values, valueof) {\n let count = 0;\n let delta;\n let mean = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n }\n if (count > 1) return sum / (count - 1);\n}\n","import { extend, identity, field, hasOwnProperty, extentIndex, inherits, array, accessorName, error, accessorFields, accessor, toNumber, merge, compare, truthy, extent, span, fastmap, isArray, key, ascending, peek, zero, constant } from 'vega-util';\nimport { tupleid, Transform, replace, ingest, stableCompare, Operator, derive, rederive } from 'vega-dataflow';\nimport { quartiles, bootstrapCI, bin, randomKDE, randomMixture, randomNormal, randomLogNormal, randomUniform, sampleCurve, dotbin, quantiles, random } from 'vega-statistics';\nimport { median, mean, min, max, range, bisector } from 'd3-array';\nimport { TIME_UNITS, utcInterval, timeInterval, timeBin, timeUnits, utcFloor, timeFloor } from 'vega-time';\n\nfunction multikey(f) {\n return x => {\n const n = f.length;\n let i = 1,\n k = String(f[0](x));\n for (; i < n; ++i) {\n k += '|' + f[i](x);\n }\n return k;\n };\n}\nfunction groupkey(fields) {\n return !fields || !fields.length ? function () {\n return '';\n } : fields.length === 1 ? fields[0] : multikey(fields);\n}\n\nfunction measureName(op, field, as) {\n return as || op + (!field ? '' : '_' + field);\n}\nconst noop = () => {};\nconst base_op = {\n init: noop,\n add: noop,\n rem: noop,\n idx: 0\n};\nconst AggregateOps = {\n values: {\n init: m => m.cell.store = true,\n value: m => m.cell.data.values(),\n idx: -1\n },\n count: {\n value: m => m.cell.num\n },\n __count__: {\n value: m => m.missing + m.valid\n },\n missing: {\n value: m => m.missing\n },\n valid: {\n value: m => m.valid\n },\n sum: {\n init: m => m.sum = 0,\n value: m => m.sum,\n add: (m, v) => m.sum += +v,\n rem: (m, v) => m.sum -= v\n },\n product: {\n init: m => m.product = 1,\n value: m => m.valid ? m.product : undefined,\n add: (m, v) => m.product *= v,\n rem: (m, v) => m.product /= v\n },\n mean: {\n init: m => m.mean = 0,\n value: m => m.valid ? m.mean : undefined,\n add: (m, v) => (m.mean_d = v - m.mean, m.mean += m.mean_d / m.valid),\n rem: (m, v) => (m.mean_d = v - m.mean, m.mean -= m.valid ? m.mean_d / m.valid : m.mean)\n },\n average: {\n value: m => m.valid ? m.mean : undefined,\n req: ['mean'],\n idx: 1\n },\n variance: {\n init: m => m.dev = 0,\n value: m => m.valid > 1 ? m.dev / (m.valid - 1) : undefined,\n add: (m, v) => m.dev += m.mean_d * (v - m.mean),\n rem: (m, v) => m.dev -= m.mean_d * (v - m.mean),\n req: ['mean'],\n idx: 1\n },\n variancep: {\n value: m => m.valid > 1 ? m.dev / m.valid : undefined,\n req: ['variance'],\n idx: 2\n },\n stdev: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / (m.valid - 1)) : undefined,\n req: ['variance'],\n idx: 2\n },\n stdevp: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / m.valid) : undefined,\n req: ['variance'],\n idx: 2\n },\n stderr: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / (m.valid * (m.valid - 1))) : undefined,\n req: ['variance'],\n idx: 2\n },\n distinct: {\n value: m => m.cell.data.distinct(m.get),\n req: ['values'],\n idx: 3\n },\n ci0: {\n value: m => m.cell.data.ci0(m.get),\n req: ['values'],\n idx: 3\n },\n ci1: {\n value: m => m.cell.data.ci1(m.get),\n req: ['values'],\n idx: 3\n },\n median: {\n value: m => m.cell.data.q2(m.get),\n req: ['values'],\n idx: 3\n },\n q1: {\n value: m => m.cell.data.q1(m.get),\n req: ['values'],\n idx: 3\n },\n q3: {\n value: m => m.cell.data.q3(m.get),\n req: ['values'],\n idx: 3\n },\n min: {\n init: m => m.min = undefined,\n value: m => m.min = Number.isNaN(m.min) ? m.cell.data.min(m.get) : m.min,\n add: (m, v) => {\n if (v < m.min || m.min === undefined) m.min = v;\n },\n rem: (m, v) => {\n if (v <= m.min) m.min = NaN;\n },\n req: ['values'],\n idx: 4\n },\n max: {\n init: m => m.max = undefined,\n value: m => m.max = Number.isNaN(m.max) ? m.cell.data.max(m.get) : m.max,\n add: (m, v) => {\n if (v > m.max || m.max === undefined) m.max = v;\n },\n rem: (m, v) => {\n if (v >= m.max) m.max = NaN;\n },\n req: ['values'],\n idx: 4\n },\n argmin: {\n init: m => m.argmin = undefined,\n value: m => m.argmin || m.cell.data.argmin(m.get),\n add: (m, v, t) => {\n if (v < m.min) m.argmin = t;\n },\n rem: (m, v) => {\n if (v <= m.min) m.argmin = undefined;\n },\n req: ['min', 'values'],\n idx: 3\n },\n argmax: {\n init: m => m.argmax = undefined,\n value: m => m.argmax || m.cell.data.argmax(m.get),\n add: (m, v, t) => {\n if (v > m.max) m.argmax = t;\n },\n rem: (m, v) => {\n if (v >= m.max) m.argmax = undefined;\n },\n req: ['max', 'values'],\n idx: 3\n }\n};\nconst ValidAggregateOps = Object.keys(AggregateOps).filter(d => d !== '__count__');\nfunction measure(key, value) {\n return out => extend({\n name: key,\n out: out || key\n }, base_op, value);\n}\n[...ValidAggregateOps, '__count__'].forEach(key => {\n AggregateOps[key] = measure(key, AggregateOps[key]);\n});\nfunction createMeasure(op, name) {\n return AggregateOps[op](name);\n}\nfunction compareIndex(a, b) {\n return a.idx - b.idx;\n}\nfunction resolve(agg) {\n const map = {};\n agg.forEach(a => map[a.name] = a);\n const getreqs = a => {\n if (!a.req) return;\n a.req.forEach(key => {\n if (!map[key]) getreqs(map[key] = AggregateOps[key]());\n });\n };\n agg.forEach(getreqs);\n return Object.values(map).sort(compareIndex);\n}\nfunction init() {\n this.valid = 0;\n this.missing = 0;\n this._ops.forEach(op => op.init(this));\n}\nfunction add(v, t) {\n if (v == null || v === '') {\n ++this.missing;\n return;\n }\n if (v !== v) return;\n ++this.valid;\n this._ops.forEach(op => op.add(this, v, t));\n}\nfunction rem(v, t) {\n if (v == null || v === '') {\n --this.missing;\n return;\n }\n if (v !== v) return;\n --this.valid;\n this._ops.forEach(op => op.rem(this, v, t));\n}\nfunction set(t) {\n this._out.forEach(op => t[op.out] = op.value(this));\n return t;\n}\nfunction compileMeasures(agg, field) {\n const get = field || identity,\n ops = resolve(agg),\n out = agg.slice().sort(compareIndex);\n function ctr(cell) {\n this._ops = ops;\n this._out = out;\n this.cell = cell;\n this.init();\n }\n ctr.prototype.init = init;\n ctr.prototype.add = add;\n ctr.prototype.rem = rem;\n ctr.prototype.set = set;\n ctr.prototype.get = get;\n ctr.fields = agg.map(op => op.out);\n return ctr;\n}\n\nfunction TupleStore(key) {\n this._key = key ? field(key) : tupleid;\n this.reset();\n}\nconst prototype$1 = TupleStore.prototype;\nprototype$1.reset = function () {\n this._add = [];\n this._rem = [];\n this._ext = null;\n this._get = null;\n this._q = null;\n};\nprototype$1.add = function (v) {\n this._add.push(v);\n};\nprototype$1.rem = function (v) {\n this._rem.push(v);\n};\nprototype$1.values = function () {\n this._get = null;\n if (this._rem.length === 0) return this._add;\n const a = this._add,\n r = this._rem,\n k = this._key,\n n = a.length,\n m = r.length,\n x = Array(n - m),\n map = {};\n let i, j, v;\n\n // use unique key field to clear removed values\n for (i = 0; i < m; ++i) {\n map[k(r[i])] = 1;\n }\n for (i = 0, j = 0; i < n; ++i) {\n if (map[k(v = a[i])]) {\n map[k(v)] = 0;\n } else {\n x[j++] = v;\n }\n }\n this._rem = [];\n return this._add = x;\n};\n\n// memoizing statistics methods\n\nprototype$1.distinct = function (get) {\n const v = this.values(),\n map = {};\n let n = v.length,\n count = 0,\n s;\n while (--n >= 0) {\n s = get(v[n]) + '';\n if (!hasOwnProperty(map, s)) {\n map[s] = 1;\n ++count;\n }\n }\n return count;\n};\nprototype$1.extent = function (get) {\n if (this._get !== get || !this._ext) {\n const v = this.values(),\n i = extentIndex(v, get);\n this._ext = [v[i[0]], v[i[1]]];\n this._get = get;\n }\n return this._ext;\n};\nprototype$1.argmin = function (get) {\n return this.extent(get)[0] || {};\n};\nprototype$1.argmax = function (get) {\n return this.extent(get)[1] || {};\n};\nprototype$1.min = function (get) {\n const m = this.extent(get)[0];\n return m != null ? get(m) : undefined;\n};\nprototype$1.max = function (get) {\n const m = this.extent(get)[1];\n return m != null ? get(m) : undefined;\n};\nprototype$1.quartile = function (get) {\n if (this._get !== get || !this._q) {\n this._q = quartiles(this.values(), get);\n this._get = get;\n }\n return this._q;\n};\nprototype$1.q1 = function (get) {\n return this.quartile(get)[0];\n};\nprototype$1.q2 = function (get) {\n return this.quartile(get)[1];\n};\nprototype$1.q3 = function (get) {\n return this.quartile(get)[2];\n};\nprototype$1.ci = function (get) {\n if (this._get !== get || !this._ci) {\n this._ci = bootstrapCI(this.values(), 1000, 0.05, get);\n this._get = get;\n }\n return this._ci;\n};\nprototype$1.ci0 = function (get) {\n return this.ci(get)[0];\n};\nprototype$1.ci1 = function (get) {\n return this.ci(get)[1];\n};\n\n/**\n * Group-by aggregation operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {Array} [params.fields] - An array of accessors to aggregate.\n * @param {Array} [params.ops] - An array of strings indicating aggregation operations.\n * @param {Array} [params.as] - An array of output field names for aggregated values.\n * @param {boolean} [params.cross=false] - A flag indicating that the full\n * cross-product of groupby values should be generated, including empty cells.\n * If true, the drop parameter is ignored and empty cells are retained.\n * @param {boolean} [params.drop=true] - A flag indicating if empty cells should be removed.\n */\nfunction Aggregate(params) {\n Transform.call(this, null, params);\n this._adds = []; // array of added output tuples\n this._mods = []; // array of modified output tuples\n this._alen = 0; // number of active added tuples\n this._mlen = 0; // number of active modified tuples\n this._drop = true; // should empty aggregation cells be removed\n this._cross = false; // produce full cross-product of group-by values\n\n this._dims = []; // group-by dimension accessors\n this._dnames = []; // group-by dimension names\n\n this._measures = []; // collection of aggregation monoids\n this._countOnly = false; // flag indicating only count aggregation\n this._counts = null; // collection of count fields\n this._prev = null; // previous aggregation cells\n\n this._inputs = null; // array of dependent input tuple field names\n this._outputs = null; // array of output tuple field names\n}\n\nAggregate.Definition = {\n 'type': 'Aggregate',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidAggregateOps\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'drop',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'cross',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(Aggregate, Transform, {\n transform(_, pulse) {\n const aggr = this,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n mod = _.modified();\n aggr.stamp = out.stamp;\n if (aggr.value && (mod || pulse.modified(aggr._inputs, true))) {\n aggr._prev = aggr.value;\n aggr.value = mod ? aggr.init(_) : Object.create(null);\n pulse.visit(pulse.SOURCE, t => aggr.add(t));\n } else {\n aggr.value = aggr.value || aggr.init(_);\n pulse.visit(pulse.REM, t => aggr.rem(t));\n pulse.visit(pulse.ADD, t => aggr.add(t));\n }\n\n // Indicate output fields and return aggregate tuples.\n out.modifies(aggr._outputs);\n\n // Should empty cells be dropped?\n aggr._drop = _.drop !== false;\n\n // If domain cross-product requested, generate empty cells as needed\n // and ensure that empty cells are not dropped\n if (_.cross && aggr._dims.length > 1) {\n aggr._drop = false;\n aggr.cross();\n }\n if (pulse.clean() && aggr._drop) {\n out.clean(true).runAfter(() => this.clean());\n }\n return aggr.changes(out);\n },\n cross() {\n const aggr = this,\n curr = aggr.value,\n dims = aggr._dnames,\n vals = dims.map(() => ({})),\n n = dims.length;\n\n // collect all group-by domain values\n function collect(cells) {\n let key, i, t, v;\n for (key in cells) {\n t = cells[key].tuple;\n for (i = 0; i < n; ++i) {\n vals[i][v = t[dims[i]]] = v;\n }\n }\n }\n collect(aggr._prev);\n collect(curr);\n\n // iterate over key cross-product, create cells as needed\n function generate(base, tuple, index) {\n const name = dims[index],\n v = vals[index++];\n for (const k in v) {\n const key = base ? base + '|' + k : k;\n tuple[name] = v[k];\n if (index < n) generate(key, tuple, index);else if (!curr[key]) aggr.cell(key, tuple);\n }\n }\n generate('', {}, 0);\n },\n init(_) {\n // initialize input and output fields\n const inputs = this._inputs = [],\n outputs = this._outputs = [],\n inputMap = {};\n function inputVisit(get) {\n const fields = array(accessorFields(get)),\n n = fields.length;\n let i = 0,\n f;\n for (; i < n; ++i) {\n if (!inputMap[f = fields[i]]) {\n inputMap[f] = 1;\n inputs.push(f);\n }\n }\n }\n\n // initialize group-by dimensions\n this._dims = array(_.groupby);\n this._dnames = this._dims.map(d => {\n const dname = accessorName(d);\n inputVisit(d);\n outputs.push(dname);\n return dname;\n });\n this.cellkey = _.key ? _.key : groupkey(this._dims);\n\n // initialize aggregate measures\n this._countOnly = true;\n this._counts = [];\n this._measures = [];\n const fields = _.fields || [null],\n ops = _.ops || ['count'],\n as = _.as || [],\n n = fields.length,\n map = {};\n let field, op, m, mname, outname, i;\n if (n !== ops.length) {\n error('Unmatched number of fields and aggregate ops.');\n }\n for (i = 0; i < n; ++i) {\n field = fields[i];\n op = ops[i];\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n mname = accessorName(field);\n outname = measureName(op, mname, as[i]);\n outputs.push(outname);\n if (op === 'count') {\n this._counts.push(outname);\n continue;\n }\n m = map[mname];\n if (!m) {\n inputVisit(field);\n m = map[mname] = [];\n m.field = field;\n this._measures.push(m);\n }\n if (op !== 'count') this._countOnly = false;\n m.push(createMeasure(op, outname));\n }\n this._measures = this._measures.map(m => compileMeasures(m, m.field));\n return Object.create(null); // aggregation cells (this.value)\n },\n\n // -- Cell Management -----\n\n cellkey: groupkey(),\n cell(key, t) {\n let cell = this.value[key];\n if (!cell) {\n cell = this.value[key] = this.newcell(key, t);\n this._adds[this._alen++] = cell;\n } else if (cell.num === 0 && this._drop && cell.stamp < this.stamp) {\n cell.stamp = this.stamp;\n this._adds[this._alen++] = cell;\n } else if (cell.stamp < this.stamp) {\n cell.stamp = this.stamp;\n this._mods[this._mlen++] = cell;\n }\n return cell;\n },\n newcell(key, t) {\n const cell = {\n key: key,\n num: 0,\n agg: null,\n tuple: this.newtuple(t, this._prev && this._prev[key]),\n stamp: this.stamp,\n store: false\n };\n if (!this._countOnly) {\n const measures = this._measures,\n n = measures.length;\n cell.agg = Array(n);\n for (let i = 0; i < n; ++i) {\n cell.agg[i] = new measures[i](cell);\n }\n }\n if (cell.store) {\n cell.data = new TupleStore();\n }\n return cell;\n },\n newtuple(t, p) {\n const names = this._dnames,\n dims = this._dims,\n n = dims.length,\n x = {};\n for (let i = 0; i < n; ++i) {\n x[names[i]] = dims[i](t);\n }\n return p ? replace(p.tuple, x) : ingest(x);\n },\n clean() {\n const cells = this.value;\n for (const key in cells) {\n if (cells[key].num === 0) {\n delete cells[key];\n }\n }\n },\n // -- Process Tuples -----\n\n add(t) {\n const key = this.cellkey(t),\n cell = this.cell(key, t);\n cell.num += 1;\n if (this._countOnly) return;\n if (cell.store) cell.data.add(t);\n const agg = cell.agg;\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].add(agg[i].get(t), t);\n }\n },\n rem(t) {\n const key = this.cellkey(t),\n cell = this.cell(key, t);\n cell.num -= 1;\n if (this._countOnly) return;\n if (cell.store) cell.data.rem(t);\n const agg = cell.agg;\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].rem(agg[i].get(t), t);\n }\n },\n celltuple(cell) {\n const tuple = cell.tuple,\n counts = this._counts;\n\n // consolidate stored values\n if (cell.store) {\n cell.data.values();\n }\n\n // update tuple properties\n for (let i = 0, n = counts.length; i < n; ++i) {\n tuple[counts[i]] = cell.num;\n }\n if (!this._countOnly) {\n const agg = cell.agg;\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].set(tuple);\n }\n }\n return tuple;\n },\n changes(out) {\n const adds = this._adds,\n mods = this._mods,\n prev = this._prev,\n drop = this._drop,\n add = out.add,\n rem = out.rem,\n mod = out.mod;\n let cell, key, i, n;\n if (prev) for (key in prev) {\n cell = prev[key];\n if (!drop || cell.num) rem.push(cell.tuple);\n }\n for (i = 0, n = this._alen; i < n; ++i) {\n add.push(this.celltuple(adds[i]));\n adds[i] = null; // for garbage collection\n }\n\n for (i = 0, n = this._mlen; i < n; ++i) {\n cell = mods[i];\n (cell.num === 0 && drop ? rem : mod).push(this.celltuple(cell));\n mods[i] = null; // for garbage collection\n }\n\n this._alen = this._mlen = 0; // reset list of active cells\n this._prev = null;\n return out;\n }\n});\n\n// epsilon bias to offset floating point error (#1737)\nconst EPSILON$1 = 1e-14;\n\n/**\n * Generates a binning function for discretizing data.\n * @constructor\n * @param {object} params - The parameters for this operator. The\n * provided values should be valid options for the {@link bin} function.\n * @param {function(object): *} params.field - The data field to bin.\n */\nfunction Bin(params) {\n Transform.call(this, null, params);\n}\nBin.Definition = {\n 'type': 'Bin',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'interval',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'anchor',\n 'type': 'number'\n }, {\n 'name': 'maxbins',\n 'type': 'number',\n 'default': 20\n }, {\n 'name': 'base',\n 'type': 'number',\n 'default': 10\n }, {\n 'name': 'divide',\n 'type': 'number',\n 'array': true,\n 'default': [5, 2]\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'span',\n 'type': 'number'\n }, {\n 'name': 'step',\n 'type': 'number'\n }, {\n 'name': 'steps',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'minstep',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'name',\n 'type': 'string'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['bin0', 'bin1']\n }]\n};\ninherits(Bin, Transform, {\n transform(_, pulse) {\n const band = _.interval !== false,\n bins = this._bins(_),\n start = bins.start,\n step = bins.step,\n as = _.as || ['bin0', 'bin1'],\n b0 = as[0],\n b1 = as[1];\n let flag;\n if (_.modified()) {\n pulse = pulse.reflow(true);\n flag = pulse.SOURCE;\n } else {\n flag = pulse.modified(accessorFields(_.field)) ? pulse.ADD_MOD : pulse.ADD;\n }\n pulse.visit(flag, band ? t => {\n const v = bins(t);\n // minimum bin value (inclusive)\n t[b0] = v;\n // maximum bin value (exclusive)\n // use convoluted math for better floating point agreement\n // see https://github.com/vega/vega/issues/830\n // infinite values propagate through this formula! #2227\n t[b1] = v == null ? null : start + step * (1 + (v - start) / step);\n } : t => t[b0] = bins(t));\n return pulse.modifies(band ? as : b0);\n },\n _bins(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n const field = _.field,\n bins = bin(_),\n step = bins.step;\n let start = bins.start,\n stop = start + Math.ceil((bins.stop - start) / step) * step,\n a,\n d;\n if ((a = _.anchor) != null) {\n d = a - (start + step * Math.floor((a - start) / step));\n start += d;\n stop += d;\n }\n const f = function (t) {\n let v = toNumber(field(t));\n return v == null ? null : v < start ? -Infinity : v > stop ? +Infinity : (v = Math.max(start, Math.min(v, stop - step)), start + step * Math.floor(EPSILON$1 + (v - start) / step));\n };\n f.start = start;\n f.stop = bins.stop;\n f.step = step;\n return this.value = accessor(f, accessorFields(field), _.name || 'bin_' + accessorName(field));\n }\n});\n\nfunction SortedList (idFunc, source, input) {\n const $ = idFunc;\n let data = source || [],\n add = input || [],\n rem = {},\n cnt = 0;\n return {\n add: t => add.push(t),\n remove: t => rem[$(t)] = ++cnt,\n size: () => data.length,\n data: (compare, resort) => {\n if (cnt) {\n data = data.filter(t => !rem[$(t)]);\n rem = {};\n cnt = 0;\n }\n if (resort && compare) {\n data.sort(compare);\n }\n if (add.length) {\n data = compare ? merge(compare, data, add.sort(compare)) : data.concat(add);\n add = [];\n }\n return data;\n }\n };\n}\n\n/**\n * Collects all data tuples that pass through this operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for additionally sorting the collected tuples.\n */\nfunction Collect(params) {\n Transform.call(this, [], params);\n}\nCollect.Definition = {\n 'type': 'Collect',\n 'metadata': {\n 'source': true\n },\n 'params': [{\n 'name': 'sort',\n 'type': 'compare'\n }]\n};\ninherits(Collect, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.ALL),\n list = SortedList(tupleid, this.value, out.materialize(out.ADD).add),\n sort = _.sort,\n mod = pulse.changed() || sort && (_.modified('sort') || pulse.modified(sort.fields));\n out.visit(out.REM, list.remove);\n this.modified(mod);\n this.value = out.source = list.data(stableCompare(sort), mod);\n\n // propagate tree root if defined\n if (pulse.source && pulse.source.root) {\n this.value.root = pulse.source.root;\n }\n return out;\n }\n});\n\n/**\n * Generates a comparator function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - The fields to compare.\n * @param {Array} [params.orders] - The sort orders.\n * Each entry should be one of \"ascending\" (default) or \"descending\".\n */\nfunction Compare(params) {\n Operator.call(this, null, update$5, params);\n}\ninherits(Compare, Operator);\nfunction update$5(_) {\n return this.value && !_.modified() ? this.value : compare(_.fields, _.orders);\n}\n\n/**\n * Count regexp-defined pattern occurrences in a text field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the text field.\n * @param {string} [params.pattern] - RegExp string defining the text pattern.\n * @param {string} [params.case] - One of 'lower', 'upper' or null (mixed) case.\n * @param {string} [params.stopwords] - RegExp string of words to ignore.\n */\nfunction CountPattern(params) {\n Transform.call(this, null, params);\n}\nCountPattern.Definition = {\n 'type': 'CountPattern',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'case',\n 'type': 'enum',\n 'values': ['upper', 'lower', 'mixed'],\n 'default': 'mixed'\n }, {\n 'name': 'pattern',\n 'type': 'string',\n 'default': '[\\\\w\"]+'\n }, {\n 'name': 'stopwords',\n 'type': 'string',\n 'default': ''\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['text', 'count']\n }]\n};\nfunction tokenize(text, tcase, match) {\n switch (tcase) {\n case 'upper':\n text = text.toUpperCase();\n break;\n case 'lower':\n text = text.toLowerCase();\n break;\n }\n return text.match(match);\n}\ninherits(CountPattern, Transform, {\n transform(_, pulse) {\n const process = update => tuple => {\n var tokens = tokenize(get(tuple), _.case, match) || [],\n t;\n for (var i = 0, n = tokens.length; i < n; ++i) {\n if (!stop.test(t = tokens[i])) update(t);\n }\n };\n const init = this._parameterCheck(_, pulse),\n counts = this._counts,\n match = this._match,\n stop = this._stop,\n get = _.field,\n as = _.as || ['text', 'count'],\n add = process(t => counts[t] = 1 + (counts[t] || 0)),\n rem = process(t => counts[t] -= 1);\n if (init) {\n pulse.visit(pulse.SOURCE, add);\n } else {\n pulse.visit(pulse.ADD, add);\n pulse.visit(pulse.REM, rem);\n }\n return this._finish(pulse, as); // generate output tuples\n },\n\n _parameterCheck(_, pulse) {\n let init = false;\n if (_.modified('stopwords') || !this._stop) {\n this._stop = new RegExp('^' + (_.stopwords || '') + '$', 'i');\n init = true;\n }\n if (_.modified('pattern') || !this._match) {\n this._match = new RegExp(_.pattern || '[\\\\w\\']+', 'g');\n init = true;\n }\n if (_.modified('field') || pulse.modified(_.field.fields)) {\n init = true;\n }\n if (init) this._counts = {};\n return init;\n },\n _finish(pulse, as) {\n const counts = this._counts,\n tuples = this._tuples || (this._tuples = {}),\n text = as[0],\n count = as[1],\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n let w, t, c;\n for (w in counts) {\n t = tuples[w];\n c = counts[w] || 0;\n if (!t && c) {\n tuples[w] = t = ingest({});\n t[text] = w;\n t[count] = c;\n out.add.push(t);\n } else if (c === 0) {\n if (t) out.rem.push(t);\n counts[w] = null;\n tuples[w] = null;\n } else if (t[count] !== c) {\n t[count] = c;\n out.mod.push(t);\n }\n }\n return out.modifies(as);\n }\n});\n\n/**\n * Perform a cross-product of a tuple stream with itself.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object):boolean} [params.filter] - An optional filter\n * function for selectively including tuples in the cross product.\n * @param {Array} [params.as] - The names of the output fields.\n */\nfunction Cross(params) {\n Transform.call(this, null, params);\n}\nCross.Definition = {\n 'type': 'Cross',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'filter',\n 'type': 'expr'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['a', 'b']\n }]\n};\ninherits(Cross, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n as = _.as || ['a', 'b'],\n a = as[0],\n b = as[1],\n reset = !this.value || pulse.changed(pulse.ADD_REM) || _.modified('as') || _.modified('filter');\n let data = this.value;\n if (reset) {\n if (data) out.rem = data;\n data = pulse.materialize(pulse.SOURCE).source;\n out.add = this.value = cross(data, a, b, _.filter || truthy);\n } else {\n out.mod = data;\n }\n out.source = this.value;\n return out.modifies(as);\n }\n});\nfunction cross(input, a, b, filter) {\n var data = [],\n t = {},\n n = input.length,\n i = 0,\n j,\n left;\n for (; i < n; ++i) {\n t[a] = left = input[i];\n for (j = 0; j < n; ++j) {\n t[b] = input[j];\n if (filter(t)) {\n data.push(ingest(t));\n t = {};\n t[a] = left;\n }\n }\n }\n return data;\n}\n\nconst Distributions = {\n kde: randomKDE,\n mixture: randomMixture,\n normal: randomNormal,\n lognormal: randomLogNormal,\n uniform: randomUniform\n};\nconst DISTRIBUTIONS = 'distributions',\n FUNCTION = 'function',\n FIELD = 'field';\n\n/**\n * Parse a parameter object for a probability distribution.\n * @param {object} def - The distribution parameter object.\n * @param {function():Array} - A method for requesting\n * source data. Used for distributions (such as KDE) that\n * require sample data points. This method will only be\n * invoked if the 'from' parameter for a target data source\n * is not provided. Typically this method returns backing\n * source data for a Pulse object.\n * @return {object} - The output distribution object.\n */\nfunction parse(def, data) {\n const func = def[FUNCTION];\n if (!hasOwnProperty(Distributions, func)) {\n error('Unknown distribution function: ' + func);\n }\n const d = Distributions[func]();\n for (const name in def) {\n // if data field, extract values\n if (name === FIELD) {\n d.data((def.from || data()).map(def[name]));\n }\n\n // if distribution mixture, recurse to parse each definition\n else if (name === DISTRIBUTIONS) {\n d[name](def[name].map(_ => parse(_, data)));\n }\n\n // otherwise, simply set the parameter\n else if (typeof d[name] === FUNCTION) {\n d[name](def[name]);\n }\n }\n return d;\n}\n\n/**\n * Grid sample points for a probability density. Given a distribution and\n * a sampling extent, will generate points suitable for plotting either\n * PDF (probability density function) or CDF (cumulative distribution\n * function) curves.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.distribution - The probability distribution. This\n * is an object parameter dependent on the distribution type.\n * @param {string} [params.method='pdf'] - The distribution method to sample.\n * One of 'pdf' or 'cdf'.\n * @param {Array} [params.extent] - The [min, max] extent over which\n * to sample the distribution. This argument is required in most cases, but\n * can be omitted if the distribution (e.g., 'kde') supports a 'data' method\n * that returns numerical sample points from which the extent can be deduced.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\nfunction Density(params) {\n Transform.call(this, null, params);\n}\nconst distributions = [{\n 'key': {\n 'function': 'normal'\n },\n 'params': [{\n 'name': 'mean',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'stdev',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'lognormal'\n },\n 'params': [{\n 'name': 'mean',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'stdev',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'uniform'\n },\n 'params': [{\n 'name': 'min',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'max',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'kde'\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'from',\n 'type': 'data'\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0\n }]\n}];\nconst mixture = {\n 'key': {\n 'function': 'mixture'\n },\n 'params': [{\n 'name': 'distributions',\n 'type': 'param',\n 'array': true,\n 'params': distributions\n }, {\n 'name': 'weights',\n 'type': 'number',\n 'array': true\n }]\n};\nDensity.Definition = {\n 'type': 'Density',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'steps',\n 'type': 'number'\n }, {\n 'name': 'minsteps',\n 'type': 'number',\n 'default': 25\n }, {\n 'name': 'maxsteps',\n 'type': 'number',\n 'default': 200\n }, {\n 'name': 'method',\n 'type': 'string',\n 'default': 'pdf',\n 'values': ['pdf', 'cdf']\n }, {\n 'name': 'distribution',\n 'type': 'param',\n 'params': distributions.concat(mixture)\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['value', 'density']\n }]\n};\ninherits(Density, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const dist = parse(_.distribution, source(pulse)),\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200;\n let method = _.method || 'pdf';\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n if (!_.extent && !dist.data) {\n error('Missing density extent parameter.');\n }\n method = dist[method];\n const as = _.as || ['value', 'density'],\n domain = _.extent || extent(dist.data()),\n values = sampleCurve(method, domain, minsteps, maxsteps).map(v => {\n const tuple = {};\n tuple[as[0]] = v[0];\n tuple[as[1]] = v[1];\n return ingest(tuple);\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\nfunction source(pulse) {\n return () => pulse.materialize(pulse.SOURCE).source;\n}\n\n// use either provided alias or accessor field name\nfunction fieldNames(fields, as) {\n if (!fields) return null;\n return fields.map((f, i) => as[i] || accessorName(f));\n}\nfunction partition$1(data, groupby, field) {\n const groups = [],\n get = f => f(t);\n let map, i, n, t, k, g;\n\n // partition data points into groups\n if (groupby == null) {\n groups.push(data.map(field));\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n g.push(field(t));\n }\n }\n return groups;\n}\n\nconst Output = 'bin';\n\n/**\n * Dot density binning for dot plot construction.\n * Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n * https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to bin.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {number} [params.step] - The step size (bin width) within which dots should be\n * stacked. Defaults to 1/30 of the extent of the data *field*.\n * @param {boolean} [params.smooth=false] - A boolean flag indicating if dot density\n * stacks should be smoothed to reduce variance.\n */\nfunction DotBin(params) {\n Transform.call(this, null, params);\n}\nDotBin.Definition = {\n 'type': 'DotBin',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number'\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': Output\n }]\n};\nconst autostep = (data, field) => span(extent(data, field)) / 30;\ninherits(DotBin, Transform, {\n transform(_, pulse) {\n if (this.value && !(_.modified() || pulse.changed())) {\n return pulse; // early exit\n }\n\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(pulse.source, _.groupby, identity),\n smooth = _.smooth || false,\n field = _.field,\n step = _.step || autostep(source, field),\n sort = stableCompare((a, b) => field(a) - field(b)),\n as = _.as || Output,\n n = groups.length;\n\n // compute dotplot bins per group\n let min = Infinity,\n max = -Infinity,\n i = 0,\n j;\n for (; i < n; ++i) {\n const g = groups[i].sort(sort);\n j = -1;\n for (const v of dotbin(g, step, smooth, field)) {\n if (v < min) min = v;\n if (v > max) max = v;\n g[++j][as] = v;\n }\n }\n this.value = {\n start: min,\n stop: max,\n step: step\n };\n return pulse.reflow(true).modifies(as);\n }\n});\n\n/**\n * Wraps an expression function with access to external parameters.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function} params.expr - The expression function. The\n * function should accept both a datum and a parameter object.\n * This operator's value will be a new function that wraps the\n * expression function with access to this operator's parameters.\n */\nfunction Expression(params) {\n Operator.call(this, null, update$4, params);\n this.modified(true);\n}\ninherits(Expression, Operator);\nfunction update$4(_) {\n const expr = _.expr;\n return this.value && !_.modified('expr') ? this.value : accessor(datum => expr(datum, _), accessorFields(expr), accessorName(expr));\n}\n\n/**\n * Computes extents (min/max) for a data field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field over which to compute extends.\n */\nfunction Extent(params) {\n Transform.call(this, [undefined, undefined], params);\n}\nExtent.Definition = {\n 'type': 'Extent',\n 'metadata': {},\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }]\n};\ninherits(Extent, Transform, {\n transform(_, pulse) {\n const extent = this.value,\n field = _.field,\n mod = pulse.changed() || pulse.modified(field.fields) || _.modified('field');\n let min = extent[0],\n max = extent[1];\n if (mod || min == null) {\n min = +Infinity;\n max = -Infinity;\n }\n pulse.visit(mod ? pulse.SOURCE : pulse.ADD, t => {\n const v = toNumber(field(t));\n if (v != null) {\n // NaNs will fail all comparisons!\n if (v < min) min = v;\n if (v > max) max = v;\n }\n });\n if (!Number.isFinite(min) || !Number.isFinite(max)) {\n let name = accessorName(field);\n if (name) name = ` for field \"${name}\"`;\n pulse.dataflow.warn(`Infinite extent${name}: [${min}, ${max}]`);\n min = max = undefined;\n }\n this.value = [min, max];\n }\n});\n\n/**\n * Provides a bridge between a parent transform and a target subflow that\n * consumes only a subset of the tuples that pass through the parent.\n * @constructor\n * @param {Pulse} pulse - A pulse to use as the value of this operator.\n * @param {Transform} parent - The parent transform (typically a Facet instance).\n */\nfunction Subflow(pulse, parent) {\n Operator.call(this, pulse);\n this.parent = parent;\n this.count = 0;\n}\ninherits(Subflow, Operator, {\n /**\n * Routes pulses from this subflow to a target transform.\n * @param {Transform} target - A transform that receives the subflow of tuples.\n */\n connect(target) {\n this.detachSubflow = target.detachSubflow;\n this.targets().add(target);\n return target.source = this;\n },\n /**\n * Add an 'add' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being added.\n */\n add(t) {\n this.count += 1;\n this.value.add.push(t);\n },\n /**\n * Add a 'rem' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being removed.\n */\n rem(t) {\n this.count -= 1;\n this.value.rem.push(t);\n },\n /**\n * Add a 'mod' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being modified.\n */\n mod(t) {\n this.value.mod.push(t);\n },\n /**\n * Re-initialize this operator's pulse value.\n * @param {Pulse} pulse - The pulse to copy from.\n * @see Pulse.init\n */\n init(pulse) {\n this.value.init(pulse, pulse.NO_SOURCE);\n },\n /**\n * Evaluate this operator. This method overrides the\n * default behavior to simply return the contained pulse value.\n * @return {Pulse}\n */\n evaluate() {\n // assert: this.value.stamp === pulse.stamp\n return this.value;\n }\n});\n\n/**\n * Facets a dataflow into a set of subflows based on a key.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): *} params.key - The key field to facet by.\n */\nfunction Facet(params) {\n Transform.call(this, {}, params);\n this._keys = fastmap(); // cache previously calculated key values\n\n // keep track of active subflows, use as targets array for listeners\n // this allows us to limit propagation to only updated subflows\n const a = this._targets = [];\n a.active = 0;\n a.forEach = f => {\n for (let i = 0, n = a.active; i < n; ++i) {\n f(a[i], i, a);\n }\n };\n}\ninherits(Facet, Transform, {\n activate(flow) {\n this._targets[this._targets.active++] = flow;\n },\n // parent argument provided by PreFacet subclass\n subflow(key, flow, pulse, parent) {\n const flows = this.value;\n let sf = hasOwnProperty(flows, key) && flows[key],\n df,\n p;\n if (!sf) {\n p = parent || (p = this._group[key]) && p.tuple;\n df = pulse.dataflow;\n sf = new Subflow(pulse.fork(pulse.NO_SOURCE), this);\n df.add(sf).connect(flow(df, key, p));\n flows[key] = sf;\n this.activate(sf);\n } else if (sf.value.stamp < pulse.stamp) {\n sf.init(pulse);\n this.activate(sf);\n }\n return sf;\n },\n clean() {\n const flows = this.value;\n let detached = 0;\n for (const key in flows) {\n if (flows[key].count === 0) {\n const detach = flows[key].detachSubflow;\n if (detach) detach();\n delete flows[key];\n ++detached;\n }\n }\n\n // remove inactive targets from the active targets array\n if (detached) {\n const active = this._targets.filter(sf => sf && sf.count > 0);\n this.initTargets(active);\n }\n },\n initTargets(act) {\n const a = this._targets,\n n = a.length,\n m = act ? act.length : 0;\n let i = 0;\n for (; i < m; ++i) {\n a[i] = act[i];\n }\n for (; i < n && a[i] != null; ++i) {\n a[i] = null; // ensure old flows can be garbage collected\n }\n\n a.active = m;\n },\n transform(_, pulse) {\n const df = pulse.dataflow,\n key = _.key,\n flow = _.subflow,\n cache = this._keys,\n rekey = _.modified('key'),\n subflow = key => this.subflow(key, flow, pulse);\n this._group = _.group || {};\n this.initTargets(); // reset list of active subflows\n\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t),\n k = cache.get(id);\n if (k !== undefined) {\n cache.delete(id);\n subflow(k).rem(t);\n }\n });\n pulse.visit(pulse.ADD, t => {\n const k = key(t);\n cache.set(tupleid(t), k);\n subflow(k).add(t);\n });\n if (rekey || pulse.modified(key.fields)) {\n pulse.visit(pulse.MOD, t => {\n const id = tupleid(t),\n k0 = cache.get(id),\n k1 = key(t);\n if (k0 === k1) {\n subflow(k1).mod(t);\n } else {\n cache.set(id, k1);\n subflow(k0).rem(t);\n subflow(k1).add(t);\n }\n });\n } else if (pulse.changed(pulse.MOD)) {\n pulse.visit(pulse.MOD, t => {\n subflow(cache.get(tupleid(t))).mod(t);\n });\n }\n if (rekey) {\n pulse.visit(pulse.REFLOW, t => {\n const id = tupleid(t),\n k0 = cache.get(id),\n k1 = key(t);\n if (k0 !== k1) {\n cache.set(id, k1);\n subflow(k0).rem(t);\n subflow(k1).add(t);\n }\n });\n }\n if (pulse.clean()) {\n df.runAfter(() => {\n this.clean();\n cache.clean();\n });\n } else if (cache.empty > df.cleanThreshold) {\n df.runAfter(cache.clean);\n }\n return pulse;\n }\n});\n\n/**\n * Generates one or more field accessor functions.\n * If the 'name' parameter is an array, an array of field accessors\n * will be created and the 'as' parameter will be ignored.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.name - The field name(s) to access.\n * @param {string} params.as - The accessor function name.\n */\nfunction Field(params) {\n Operator.call(this, null, update$3, params);\n}\ninherits(Field, Operator);\nfunction update$3(_) {\n return this.value && !_.modified() ? this.value : isArray(_.name) ? array(_.name).map(f => field(f)) : field(_.name, _.as);\n}\n\n/**\n * Filters data tuples according to a predicate function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The predicate expression function\n * that determines a tuple's filter status. Truthy values pass the filter.\n */\nfunction Filter(params) {\n Transform.call(this, fastmap(), params);\n}\nFilter.Definition = {\n 'type': 'Filter',\n 'metadata': {\n 'changes': true\n },\n 'params': [{\n 'name': 'expr',\n 'type': 'expr',\n 'required': true\n }]\n};\ninherits(Filter, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow,\n cache = this.value,\n // cache ids of filtered tuples\n output = pulse.fork(),\n add = output.add,\n rem = output.rem,\n mod = output.mod,\n test = _.expr;\n let isMod = true;\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n if (!cache.has(id)) rem.push(t);else cache.delete(id);\n });\n pulse.visit(pulse.ADD, t => {\n if (test(t, _)) add.push(t);else cache.set(tupleid(t), 1);\n });\n function revisit(t) {\n const id = tupleid(t),\n b = test(t, _),\n s = cache.get(id);\n if (b && s) {\n cache.delete(id);\n add.push(t);\n } else if (!b && !s) {\n cache.set(id, 1);\n rem.push(t);\n } else if (isMod && b && !s) {\n mod.push(t);\n }\n }\n pulse.visit(pulse.MOD, revisit);\n if (_.modified()) {\n isMod = false;\n pulse.visit(pulse.REFLOW, revisit);\n }\n if (cache.empty > df.cleanThreshold) df.runAfter(cache.clean);\n return output;\n }\n});\n\n/**\n * Flattens array-typed field values into new data objects.\n * If multiple fields are specified, they are treated as parallel arrays,\n * with output values included for each matching index (or null if missing).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of field\n * accessors for the tuple fields that should be flattened.\n * @param {string} [params.index] - Optional output field name for index\n * value. If unspecified, no index field is included in the output.\n * @param {Array} [params.as] - Output field names for flattened\n * array fields. Any unspecified fields will use the field name provided\n * by the fields accessors.\n */\nfunction Flatten(params) {\n Transform.call(this, [], params);\n}\nFlatten.Definition = {\n 'type': 'Flatten',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'index',\n 'type': 'string'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Flatten, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(fields, _.as || []),\n index = _.index || null,\n m = as.length;\n\n // remove any previous results\n out.rem = this.value;\n\n // generate flattened tuples\n pulse.visit(pulse.SOURCE, t => {\n const arrays = fields.map(f => f(t)),\n maxlen = arrays.reduce((l, a) => Math.max(l, a.length), 0);\n let i = 0,\n j,\n d,\n v;\n for (; i < maxlen; ++i) {\n d = derive(t);\n for (j = 0; j < m; ++j) {\n d[as[j]] = (v = arrays[j][i]) == null ? null : v;\n }\n if (index) {\n d[index] = i;\n }\n out.add.push(d);\n }\n });\n this.value = out.source = out.add;\n if (index) out.modifies(index);\n return out.modifies(as);\n }\n});\n\n/**\n * Folds one more tuple fields into multiple tuples in which the field\n * name and values are available under new 'key' and 'value' fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.fields - An array of field accessors\n * for the tuple fields that should be folded.\n * @param {Array} [params.as] - Output field names for folded key\n * and value fields, defaults to ['key', 'value'].\n */\nfunction Fold(params) {\n Transform.call(this, [], params);\n}\nFold.Definition = {\n 'type': 'Fold',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['key', 'value']\n }]\n};\ninherits(Fold, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n fnames = fields.map(accessorName),\n as = _.as || ['key', 'value'],\n k = as[0],\n v = as[1],\n n = fields.length;\n out.rem = this.value;\n pulse.visit(pulse.SOURCE, t => {\n for (let i = 0, d; i < n; ++i) {\n d = derive(t);\n d[k] = fnames[i];\n d[v] = fields[i](t);\n out.add.push(d);\n }\n });\n this.value = out.source = out.add;\n return out.modifies(as);\n }\n});\n\n/**\n * Invokes a function for each data tuple and saves the results as a new field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The formula function to invoke for each tuple.\n * @param {string} params.as - The field name under which to save the result.\n * @param {boolean} [params.initonly=false] - If true, the formula is applied to\n * added tuples only, and does not update in response to modifications.\n */\nfunction Formula(params) {\n Transform.call(this, null, params);\n}\nFormula.Definition = {\n 'type': 'Formula',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'expr',\n 'type': 'expr',\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'required': true\n }, {\n 'name': 'initonly',\n 'type': 'boolean'\n }]\n};\ninherits(Formula, Transform, {\n transform(_, pulse) {\n const func = _.expr,\n as = _.as,\n mod = _.modified(),\n flag = _.initonly ? pulse.ADD : mod ? pulse.SOURCE : pulse.modified(func.fields) || pulse.modified(as) ? pulse.ADD_MOD : pulse.ADD;\n if (mod) {\n // parameters updated, need to reflow\n pulse = pulse.materialize().reflow(true);\n }\n if (!_.initonly) {\n pulse.modifies(as);\n }\n return pulse.visit(flag, t => t[as] = func(t, _));\n }\n});\n\n/**\n * Generates data tuples using a provided generator function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Parameters): object} params.generator - A tuple generator\n * function. This function is given the operator parameters as input.\n * Changes to any additional parameters will not trigger re-calculation\n * of previously generated tuples. Only future tuples are affected.\n * @param {number} params.size - The number of tuples to produce.\n */\nfunction Generate(params) {\n Transform.call(this, [], params);\n}\ninherits(Generate, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.ALL),\n gen = _.generator;\n let data = this.value,\n num = _.size - data.length,\n add,\n rem,\n t;\n if (num > 0) {\n // need more tuples, generate and add\n for (add = []; --num >= 0;) {\n add.push(t = ingest(gen(_)));\n data.push(t);\n }\n out.add = out.add.length ? out.materialize(out.ADD).add.concat(add) : add;\n } else {\n // need fewer tuples, remove\n rem = data.slice(0, -num);\n out.rem = out.rem.length ? out.materialize(out.REM).rem.concat(rem) : rem;\n data = data.slice(-num);\n }\n out.source = this.value = data;\n return out;\n }\n});\n\nconst Methods = {\n value: 'value',\n median: median,\n mean: mean,\n min: min,\n max: max\n};\nconst Empty = [];\n\n/**\n * Impute missing values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to impute.\n * @param {Array} [params.groupby] - An array of\n * accessors to determine series within which to perform imputation.\n * @param {function(object): *} params.key - An accessor for a key value.\n * Each key value should be unique within a group. New tuples will be\n * imputed for any key values that are not found within a group.\n * @param {Array<*>} [params.keyvals] - Optional array of required key\n * values. New tuples will be imputed for any key values that are not\n * found within a group. In addition, these values will be automatically\n * augmented with the key values observed in the input data.\n * @param {string} [method='value'] - The imputation method to use. One of\n * 'value', 'mean', 'median', 'max', 'min'.\n * @param {*} [value=0] - The constant value to use for imputation\n * when using method 'value'.\n */\nfunction Impute(params) {\n Transform.call(this, [], params);\n}\nImpute.Definition = {\n 'type': 'Impute',\n 'metadata': {\n 'changes': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'keyvals',\n 'array': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'value',\n 'values': ['value', 'mean', 'median', 'max', 'min']\n }, {\n 'name': 'value',\n 'default': 0\n }]\n};\nfunction getValue(_) {\n var m = _.method || Methods.value,\n v;\n if (Methods[m] == null) {\n error('Unrecognized imputation method: ' + m);\n } else if (m === Methods.value) {\n v = _.value !== undefined ? _.value : 0;\n return () => v;\n } else {\n return Methods[m];\n }\n}\nfunction getField(_) {\n const f = _.field;\n return t => t ? f(t) : NaN;\n}\ninherits(Impute, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n impute = getValue(_),\n field = getField(_),\n fName = accessorName(_.field),\n kName = accessorName(_.key),\n gNames = (_.groupby || []).map(accessorName),\n groups = partition(pulse.source, _.groupby, _.key, _.keyvals),\n curr = [],\n prev = this.value,\n m = groups.domain.length,\n group,\n value,\n gVals,\n kVal,\n g,\n i,\n j,\n l,\n n,\n t;\n for (g = 0, l = groups.length; g < l; ++g) {\n group = groups[g];\n gVals = group.values;\n value = NaN;\n\n // add tuples for missing values\n for (j = 0; j < m; ++j) {\n if (group[j] != null) continue;\n kVal = groups.domain[j];\n t = {\n _impute: true\n };\n for (i = 0, n = gVals.length; i < n; ++i) t[gNames[i]] = gVals[i];\n t[kName] = kVal;\n t[fName] = Number.isNaN(value) ? value = impute(group, field) : value;\n curr.push(ingest(t));\n }\n }\n\n // update pulse with imputed tuples\n if (curr.length) out.add = out.materialize(out.ADD).add.concat(curr);\n if (prev.length) out.rem = out.materialize(out.REM).rem.concat(prev);\n this.value = curr;\n return out;\n }\n});\nfunction partition(data, groupby, key, keyvals) {\n var get = f => f(t),\n groups = [],\n domain = keyvals ? keyvals.slice() : [],\n kMap = {},\n gMap = {},\n gVals,\n gKey,\n group,\n i,\n j,\n k,\n n,\n t;\n domain.forEach((k, i) => kMap[k] = i + 1);\n for (i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = key(t);\n j = kMap[k] || (kMap[k] = domain.push(k));\n gKey = (gVals = groupby ? groupby.map(get) : Empty) + '';\n if (!(group = gMap[gKey])) {\n group = gMap[gKey] = [];\n groups.push(group);\n group.values = gVals;\n }\n group[j - 1] = t;\n }\n groups.domain = domain;\n return groups;\n}\n\n/**\n * Extend input tuples with aggregate values.\n * Calcuates aggregate values and joins them with the input stream.\n * @constructor\n */\nfunction JoinAggregate(params) {\n Aggregate.call(this, params);\n}\nJoinAggregate.Definition = {\n 'type': 'JoinAggregate',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidAggregateOps\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(JoinAggregate, Aggregate, {\n transform(_, pulse) {\n const aggr = this,\n mod = _.modified();\n let cells;\n\n // process all input tuples to calculate aggregates\n if (aggr.value && (mod || pulse.modified(aggr._inputs, true))) {\n cells = aggr.value = mod ? aggr.init(_) : {};\n pulse.visit(pulse.SOURCE, t => aggr.add(t));\n } else {\n cells = aggr.value = aggr.value || this.init(_);\n pulse.visit(pulse.REM, t => aggr.rem(t));\n pulse.visit(pulse.ADD, t => aggr.add(t));\n }\n\n // update aggregation cells\n aggr.changes();\n\n // write aggregate values to input tuples\n pulse.visit(pulse.SOURCE, t => {\n extend(t, cells[aggr.cellkey(t)].tuple);\n });\n return pulse.reflow(mod).modifies(this._outputs);\n },\n changes() {\n const adds = this._adds,\n mods = this._mods;\n let i, n;\n for (i = 0, n = this._alen; i < n; ++i) {\n this.celltuple(adds[i]);\n adds[i] = null; // for garbage collection\n }\n\n for (i = 0, n = this._mlen; i < n; ++i) {\n this.celltuple(mods[i]);\n mods[i] = null; // for garbage collection\n }\n\n this._alen = this._mlen = 0; // reset list of active cells\n }\n});\n\n/**\n * Compute kernel density estimates (KDE) for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {function(object): *} params.field - An accessor for the data field\n * to estimate.\n * @param {number} [params.bandwidth=0] - The KDE kernel bandwidth.\n * If zero or unspecified, the bandwidth is automatically determined.\n * @param {boolean} [params.counts=false] - A boolean flag indicating if the\n * output values should be probability estimates (false, default) or\n * smoothed counts (true).\n * @param {string} [params.cumulative=false] - A boolean flag indicating if a\n * density (false) or cumulative distribution (true) should be generated.\n * @param {Array} [params.extent] - The domain extent over which to\n * plot the density. If unspecified, the [min, max] data extent is used.\n * @param {string} [params.resolve='independent'] - Indicates how parameters for\n * multiple densities should be resolved. If \"independent\" (the default), each\n * density may have its own domain extent and dynamic number of curve sample\n * steps. If \"shared\", the KDE transform will ensure that all densities are\n * defined over a shared domain and curve steps, enabling stacking.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\nfunction KDE(params) {\n Transform.call(this, null, params);\n}\nKDE.Definition = {\n 'type': 'KDE',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'cumulative',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'counts',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'steps',\n 'type': 'number'\n }, {\n 'name': 'minsteps',\n 'type': 'number',\n 'default': 25\n }, {\n 'name': 'maxsteps',\n 'type': 'number',\n 'default': 200\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['value', 'density']\n }]\n};\ninherits(KDE, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(source, _.groupby, _.field),\n names = (_.groupby || []).map(accessorName),\n bandwidth = _.bandwidth,\n method = _.cumulative ? 'cdf' : 'pdf',\n as = _.as || ['value', 'density'],\n values = [];\n let domain = _.extent,\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200;\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n if (_.resolve === 'shared') {\n if (!domain) domain = extent(source, _.field);\n minsteps = maxsteps = _.steps || maxsteps;\n }\n groups.forEach(g => {\n const density = randomKDE(g, bandwidth)[method],\n scale = _.counts ? g.length : 1,\n local = domain || extent(g);\n sampleCurve(density, local, minsteps, maxsteps).forEach(v => {\n const t = {};\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = v[0];\n t[as[1]] = v[1] * scale;\n values.push(ingest(t));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\n\n/**\n * Generates a key function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - The field name(s) for the key function.\n * @param {boolean} params.flat - A boolean flag indicating if the field names\n * should be treated as flat property names, side-stepping nested field\n * lookups normally indicated by dot or bracket notation.\n */\nfunction Key(params) {\n Operator.call(this, null, update$2, params);\n}\ninherits(Key, Operator);\nfunction update$2(_) {\n return this.value && !_.modified() ? this.value : key(_.fields, _.flat);\n}\n\n/**\n * Load and parse data from an external source. Marshalls parameter\n * values and then invokes the Dataflow request method.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.url - The URL to load from.\n * @param {object} params.format - The data format options.\n */\nfunction Load(params) {\n Transform.call(this, [], params);\n this._pending = null;\n}\ninherits(Load, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow;\n if (this._pending) {\n // update state and return pulse\n return output(this, pulse, this._pending);\n }\n if (stop(_)) return pulse.StopPropagation;\n if (_.values) {\n // parse and ingest values, return output pulse\n return output(this, pulse, df.parse(_.values, _.format));\n } else if (_.async) {\n // return promise for non-blocking async loading\n const p = df.request(_.url, _.format).then(res => {\n this._pending = array(res.data);\n return df => df.touch(this);\n });\n return {\n async: p\n };\n } else {\n // return promise for synchronous loading\n return df.request(_.url, _.format).then(res => output(this, pulse, array(res.data)));\n }\n }\n});\nfunction stop(_) {\n return _.modified('async') && !(_.modified('values') || _.modified('url') || _.modified('format'));\n}\nfunction output(op, pulse, data) {\n data.forEach(ingest);\n const out = pulse.fork(pulse.NO_FIELDS & pulse.NO_SOURCE);\n out.rem = op.value;\n op.value = out.source = out.add = data;\n op._pending = null;\n if (out.rem.length) out.clean(true);\n return out;\n}\n\n/**\n * Extend tuples by joining them with values from a lookup table.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Map} params.index - The lookup table map.\n * @param {Array} params.as - Output field names for each lookup value.\n * @param {*} [params.default] - A default value to use if lookup fails.\n */\nfunction Lookup(params) {\n Transform.call(this, {}, params);\n}\nLookup.Definition = {\n 'type': 'Lookup',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'index',\n 'type': 'index',\n 'params': [{\n 'name': 'from',\n 'type': 'data',\n 'required': true\n }, {\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }]\n }, {\n 'name': 'values',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }, {\n 'name': 'default',\n 'default': null\n }]\n};\ninherits(Lookup, Transform, {\n transform(_, pulse) {\n const keys = _.fields,\n index = _.index,\n values = _.values,\n defaultValue = _.default == null ? null : _.default,\n reset = _.modified(),\n n = keys.length;\n let flag = reset ? pulse.SOURCE : pulse.ADD,\n out = pulse,\n as = _.as,\n set,\n m,\n mods;\n if (values) {\n m = values.length;\n if (n > 1 && !as) {\n error('Multi-field lookup requires explicit \"as\" parameter.');\n }\n if (as && as.length !== n * m) {\n error('The \"as\" parameter has too few output field names.');\n }\n as = as || values.map(accessorName);\n set = function (t) {\n for (var i = 0, k = 0, j, v; i < n; ++i) {\n v = index.get(keys[i](t));\n if (v == null) for (j = 0; j < m; ++j, ++k) t[as[k]] = defaultValue;else for (j = 0; j < m; ++j, ++k) t[as[k]] = values[j](v);\n }\n };\n } else {\n if (!as) {\n error('Missing output field names.');\n }\n set = function (t) {\n for (var i = 0, v; i < n; ++i) {\n v = index.get(keys[i](t));\n t[as[i]] = v == null ? defaultValue : v;\n }\n };\n }\n if (reset) {\n out = pulse.reflow(true);\n } else {\n mods = keys.some(k => pulse.modified(k.fields));\n flag |= mods ? pulse.MOD : 0;\n }\n pulse.visit(flag, set);\n return out.modifies(as);\n }\n});\n\n/**\n * Computes global min/max extents over a collection of extents.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array>} params.extents - The input extents.\n */\nfunction MultiExtent(params) {\n Operator.call(this, null, update$1, params);\n}\ninherits(MultiExtent, Operator);\nfunction update$1(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n const ext = _.extents,\n n = ext.length;\n let min = +Infinity,\n max = -Infinity,\n i,\n e;\n for (i = 0; i < n; ++i) {\n e = ext[i];\n if (e[0] < min) min = e[0];\n if (e[1] > max) max = e[1];\n }\n return [min, max];\n}\n\n/**\n * Merge a collection of value arrays.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array>} params.values - The input value arrrays.\n */\nfunction MultiValues(params) {\n Operator.call(this, null, update, params);\n}\ninherits(MultiValues, Operator);\nfunction update(_) {\n return this.value && !_.modified() ? this.value : _.values.reduce((data, _) => data.concat(_), []);\n}\n\n/**\n * Operator whose value is simply its parameter hash. This operator is\n * useful for enabling reactive updates to values of nested objects.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Params(params) {\n Transform.call(this, null, params);\n}\ninherits(Params, Transform, {\n transform(_, pulse) {\n this.modified(_.modified());\n this.value = _;\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); // do not pass tuples\n }\n});\n\n/**\n * Aggregate and pivot selected field values to become new fields.\n * This operator is useful to construction cross-tabulations.\n * @constructor\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby. These fields act just like groupby fields of an Aggregate transform.\n * @param {function(object): *} params.field - The field to pivot on. The unique\n * values of this field become new field names in the output stream.\n * @param {function(object): *} params.value - The field to populate pivoted fields.\n * The aggregate values of this field become the values of the new pivoted fields.\n * @param {string} [params.op] - The aggregation operation for the value field,\n * applied per cell in the output stream. The default is \"sum\".\n * @param {number} [params.limit] - An optional parameter indicating the maximum\n * number of pivoted fields to generate. The pivoted field names are sorted in\n * ascending order prior to enforcing the limit.\n */\nfunction Pivot(params) {\n Aggregate.call(this, params);\n}\nPivot.Definition = {\n 'type': 'Pivot',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'value',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'op',\n 'type': 'enum',\n 'values': ValidAggregateOps,\n 'default': 'sum'\n }, {\n 'name': 'limit',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(Pivot, Aggregate, {\n _transform: Aggregate.prototype.transform,\n transform(_, pulse) {\n return this._transform(aggregateParams(_, pulse), pulse);\n }\n});\n\n// Shoehorn a pivot transform into an aggregate transform!\n// First collect all unique pivot field values.\n// Then generate aggregate fields for each output pivot field.\nfunction aggregateParams(_, pulse) {\n const key = _.field,\n value = _.value,\n op = (_.op === 'count' ? '__count__' : _.op) || 'sum',\n fields = accessorFields(key).concat(accessorFields(value)),\n keys = pivotKeys(key, _.limit || 0, pulse);\n\n // if data stream content changes, pivot fields may change\n // flag parameter modification to ensure re-initialization\n if (pulse.changed()) _.set('__pivot__', null, null, true);\n return {\n key: _.key,\n groupby: _.groupby,\n ops: keys.map(() => op),\n fields: keys.map(k => get(k, key, value, fields)),\n as: keys.map(k => k + ''),\n modified: _.modified.bind(_)\n };\n}\n\n// Generate aggregate field accessor.\n// Output NaN for non-existent values; aggregator will ignore!\nfunction get(k, key, value, fields) {\n return accessor(d => key(d) === k ? value(d) : NaN, fields, k + '');\n}\n\n// Collect (and optionally limit) all unique pivot values.\nfunction pivotKeys(key, limit, pulse) {\n const map = {},\n list = [];\n pulse.visit(pulse.SOURCE, t => {\n const k = key(t);\n if (!map[k]) {\n map[k] = 1;\n list.push(k);\n }\n });\n list.sort(ascending);\n return limit ? list.slice(0, limit) : list;\n}\n\n/**\n * Partitions pre-faceted data into tuple subflows.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): Array} params.field - The field\n * accessor for an array of subflow tuple objects.\n */\nfunction PreFacet(params) {\n Facet.call(this, params);\n}\ninherits(PreFacet, Facet, {\n transform(_, pulse) {\n const flow = _.subflow,\n field = _.field,\n subflow = t => this.subflow(tupleid(t), flow, pulse, t);\n if (_.modified('field') || field && pulse.modified(accessorFields(field))) {\n error('PreFacet does not support field modification.');\n }\n this.initTargets(); // reset list of active subflows\n\n if (field) {\n pulse.visit(pulse.MOD, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.mod(_));\n });\n pulse.visit(pulse.ADD, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.add(ingest(_)));\n });\n pulse.visit(pulse.REM, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.rem(_));\n });\n } else {\n pulse.visit(pulse.MOD, t => subflow(t).mod(t));\n pulse.visit(pulse.ADD, t => subflow(t).add(t));\n pulse.visit(pulse.REM, t => subflow(t).rem(t));\n }\n if (pulse.clean()) {\n pulse.runAfter(() => this.clean());\n }\n return pulse;\n }\n});\n\n/**\n * Performs a relational projection, copying selected fields from source\n * tuples to a new set of derived tuples.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.as] - Output field names for each projected\n * field. Any unspecified fields will use the field name provided by\n * the field accessor.\n */\nfunction Project(params) {\n Transform.call(this, null, params);\n}\nProject.Definition = {\n 'type': 'Project',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }]\n};\ninherits(Project, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(_.fields, _.as || []),\n derive = fields ? (s, t) => project(s, t, fields, as) : rederive;\n let lut;\n if (this.value) {\n lut = this.value;\n } else {\n pulse = pulse.addAll();\n lut = this.value = {};\n }\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n pulse.visit(pulse.ADD, t => {\n const dt = derive(t, ingest({}));\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n pulse.visit(pulse.MOD, t => {\n out.mod.push(derive(t, lut[tupleid(t)]));\n });\n return out;\n }\n});\nfunction project(s, t, fields, as) {\n for (let i = 0, n = fields.length; i < n; ++i) {\n t[as[i]] = fields[i](s);\n }\n return t;\n}\n\n/**\n * Proxy the value of another operator as a pure signal value.\n * Ensures no tuples are propagated.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {*} params.value - The value to proxy, becomes the value of this operator.\n */\nfunction Proxy(params) {\n Transform.call(this, null, params);\n}\ninherits(Proxy, Transform, {\n transform(_, pulse) {\n this.value = _.value;\n return _.modified('value') ? pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS) : pulse.StopPropagation;\n }\n});\n\n/**\n * Generates sample quantile values from an input data stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the data field\n * over which to calculate quantile values.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {Array} [params.probs] - An array of probabilities in\n * the range (0, 1) for which to compute quantile values. If not specified,\n * the *step* parameter will be used.\n * @param {Array} [params.step=0.01] - A probability step size for\n * sampling quantile values. All values from one-half the step size up to\n * 1 (exclusive) will be sampled. This parameter is only used if the\n * *quantiles* parameter is not provided.\n */\nfunction Quantile(params) {\n Transform.call(this, null, params);\n}\nQuantile.Definition = {\n 'type': 'Quantile',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'probs',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 0.01\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['prob', 'value']\n }]\n};\nconst EPSILON = 1e-14;\ninherits(Quantile, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n as = _.as || ['prob', 'value'];\n if (this.value && !_.modified() && !pulse.changed()) {\n out.source = this.value;\n return out;\n }\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(source, _.groupby, _.field),\n names = (_.groupby || []).map(accessorName),\n values = [],\n step = _.step || 0.01,\n p = _.probs || range(step / 2, 1 - EPSILON, step),\n n = p.length;\n groups.forEach(g => {\n const q = quantiles(g, p);\n for (let i = 0; i < n; ++i) {\n const t = {};\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = p[i];\n t[as[1]] = q[i];\n values.push(ingest(t));\n }\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n return out;\n }\n});\n\n/**\n * Relays a data stream between data processing pipelines.\n * If the derive parameter is set, this transform will create derived\n * copies of observed tuples. This provides derived data streams in which\n * modifications to the tuples do not pollute an upstream data source.\n * @param {object} params - The parameters for this operator.\n * @param {number} [params.derive=false] - Boolean flag indicating if\n * the transform should make derived copies of incoming tuples.\n * @constructor\n */\nfunction Relay(params) {\n Transform.call(this, null, params);\n}\ninherits(Relay, Transform, {\n transform(_, pulse) {\n let out, lut;\n if (this.value) {\n lut = this.value;\n } else {\n out = pulse = pulse.addAll();\n lut = this.value = {};\n }\n if (_.derive) {\n out = pulse.fork(pulse.NO_SOURCE);\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n pulse.visit(pulse.ADD, t => {\n const dt = derive(t);\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n pulse.visit(pulse.MOD, t => {\n const dt = lut[tupleid(t)];\n for (const k in t) {\n dt[k] = t[k];\n // down stream writes may overwrite re-derived tuples\n // conservatively mark all source fields as modified\n out.modifies(k);\n }\n out.mod.push(dt);\n });\n }\n return out;\n }\n});\n\n/**\n * Samples tuples passing through this operator.\n * Uses reservoir sampling to maintain a representative sample.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {number} [params.size=1000] - The maximum number of samples.\n */\nfunction Sample(params) {\n Transform.call(this, [], params);\n this.count = 0;\n}\nSample.Definition = {\n 'type': 'Sample',\n 'metadata': {},\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'default': 1000\n }]\n};\ninherits(Sample, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n mod = _.modified('size'),\n num = _.size,\n map = this.value.reduce((m, t) => (m[tupleid(t)] = 1, m), {});\n let res = this.value,\n cnt = this.count,\n cap = 0;\n\n // sample reservoir update function\n function update(t) {\n let p, idx;\n if (res.length < num) {\n res.push(t);\n } else {\n idx = ~~((cnt + 1) * random());\n if (idx < res.length && idx >= cap) {\n p = res[idx];\n if (map[tupleid(p)]) out.rem.push(p); // eviction\n res[idx] = t;\n }\n }\n ++cnt;\n }\n if (pulse.rem.length) {\n // find all tuples that should be removed, add to output\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n if (map[id]) {\n map[id] = -1;\n out.rem.push(t);\n }\n --cnt;\n });\n\n // filter removed tuples out of the sample reservoir\n res = res.filter(t => map[tupleid(t)] !== -1);\n }\n if ((pulse.rem.length || mod) && res.length < num && pulse.source) {\n // replenish sample if backing data source is available\n cap = cnt = res.length;\n pulse.visit(pulse.SOURCE, t => {\n // update, but skip previously sampled tuples\n if (!map[tupleid(t)]) update(t);\n });\n cap = -1;\n }\n if (mod && res.length > num) {\n const n = res.length - num;\n for (let i = 0; i < n; ++i) {\n map[tupleid(res[i])] = -1;\n out.rem.push(res[i]);\n }\n res = res.slice(n);\n }\n if (pulse.mod.length) {\n // propagate modified tuples in the sample reservoir\n pulse.visit(pulse.MOD, t => {\n if (map[tupleid(t)]) out.mod.push(t);\n });\n }\n if (pulse.add.length) {\n // update sample reservoir\n pulse.visit(pulse.ADD, update);\n }\n if (pulse.add.length || cap < 0) {\n // output newly added tuples\n out.add = res.filter(t => !map[tupleid(t)]);\n }\n this.count = cnt;\n this.value = out.source = res;\n return out;\n }\n});\n\n/**\n * Generates data tuples for a specified sequence range of numbers.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {number} params.start - The first number in the sequence.\n * @param {number} params.stop - The last number (exclusive) in the sequence.\n * @param {number} [params.step=1] - The step size between numbers in the sequence.\n */\nfunction Sequence(params) {\n Transform.call(this, null, params);\n}\nSequence.Definition = {\n 'type': 'Sequence',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'start',\n 'type': 'number',\n 'required': true\n }, {\n 'name': 'stop',\n 'type': 'number',\n 'required': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'data'\n }]\n};\ninherits(Sequence, Transform, {\n transform(_, pulse) {\n if (this.value && !_.modified()) return;\n const out = pulse.materialize().fork(pulse.MOD),\n as = _.as || 'data';\n out.rem = this.value ? pulse.rem.concat(this.value) : pulse.rem;\n this.value = range(_.start, _.stop, _.step || 1).map(v => {\n const t = {};\n t[as] = v;\n return ingest(t);\n });\n out.add = pulse.add.concat(this.value);\n return out;\n }\n});\n\n/**\n * Propagates a new pulse without any tuples so long as the input\n * pulse contains some added, removed or modified tuples.\n * @param {object} params - The parameters for this operator.\n * @constructor\n */\nfunction Sieve(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\n\ninherits(Sieve, Transform, {\n transform(_, pulse) {\n this.value = pulse.source;\n return pulse.changed() ? pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS) : pulse.StopPropagation;\n }\n});\n\n/**\n * Discretize dates to specific time units.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The data field containing date/time values.\n */\nfunction TimeUnit(params) {\n Transform.call(this, null, params);\n}\nconst OUTPUT = ['unit0', 'unit1'];\nTimeUnit.Definition = {\n 'type': 'TimeUnit',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'interval',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'units',\n 'type': 'enum',\n 'values': TIME_UNITS,\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'maxbins',\n 'type': 'number',\n 'default': 40\n }, {\n 'name': 'extent',\n 'type': 'date',\n 'array': true\n }, {\n 'name': 'timezone',\n 'type': 'enum',\n 'default': 'local',\n 'values': ['local', 'utc']\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': OUTPUT\n }]\n};\ninherits(TimeUnit, Transform, {\n transform(_, pulse) {\n const field = _.field,\n band = _.interval !== false,\n utc = _.timezone === 'utc',\n floor = this._floor(_, pulse),\n offset = (utc ? utcInterval : timeInterval)(floor.unit).offset,\n as = _.as || OUTPUT,\n u0 = as[0],\n u1 = as[1],\n step = floor.step;\n let min = floor.start || Infinity,\n max = floor.stop || -Infinity,\n flag = pulse.ADD;\n if (_.modified() || pulse.changed(pulse.REM) || pulse.modified(accessorFields(field))) {\n pulse = pulse.reflow(true);\n flag = pulse.SOURCE;\n min = Infinity;\n max = -Infinity;\n }\n pulse.visit(flag, t => {\n const v = field(t);\n let a, b;\n if (v == null) {\n t[u0] = null;\n if (band) t[u1] = null;\n } else {\n t[u0] = a = b = floor(v);\n if (band) t[u1] = b = offset(a, step);\n if (a < min) min = a;\n if (b > max) max = b;\n }\n });\n floor.start = min;\n floor.stop = max;\n return pulse.modifies(band ? as : u0);\n },\n _floor(_, pulse) {\n const utc = _.timezone === 'utc';\n\n // get parameters\n const {\n units,\n step\n } = _.units ? {\n units: _.units,\n step: _.step || 1\n } : timeBin({\n extent: _.extent || extent(pulse.materialize(pulse.SOURCE).source, _.field),\n maxbins: _.maxbins\n });\n\n // check / standardize time units\n const tunits = timeUnits(units),\n prev = this.value || {},\n floor = (utc ? utcFloor : timeFloor)(tunits, step);\n floor.unit = peek(tunits);\n floor.units = tunits;\n floor.step = step;\n floor.start = prev.start;\n floor.stop = prev.stop;\n return this.value = floor;\n }\n});\n\n/**\n * An index that maps from unique, string-coerced, field values to tuples.\n * Assumes that the field serves as a unique key with no duplicate values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field accessor to index.\n */\nfunction TupleIndex(params) {\n Transform.call(this, fastmap(), params);\n}\ninherits(TupleIndex, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow,\n field = _.field,\n index = this.value,\n set = t => index.set(field(t), t);\n let mod = true;\n if (_.modified('field') || pulse.modified(field.fields)) {\n index.clear();\n pulse.visit(pulse.SOURCE, set);\n } else if (pulse.changed()) {\n pulse.visit(pulse.REM, t => index.delete(field(t)));\n pulse.visit(pulse.ADD, set);\n } else {\n mod = false;\n }\n this.modified(mod);\n if (index.empty > df.cleanThreshold) df.runAfter(index.clean);\n return pulse.fork();\n }\n});\n\n/**\n * Extracts an array of values. Assumes the source data has already been\n * reduced as needed (e.g., by an upstream Aggregate transform).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The domain field to extract.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting the values. The comparator will be\n * applied to backing tuples prior to value extraction.\n */\nfunction Values(params) {\n Transform.call(this, null, params);\n}\ninherits(Values, Transform, {\n transform(_, pulse) {\n const run = !this.value || _.modified('field') || _.modified('sort') || pulse.changed() || _.sort && pulse.modified(_.sort.fields);\n if (run) {\n this.value = (_.sort ? pulse.source.slice().sort(stableCompare(_.sort)) : pulse.source).map(_.field);\n }\n }\n});\n\nfunction WindowOp(op, field, param, as) {\n const fn = WindowOps[op](field, param);\n return {\n init: fn.init || zero,\n update: function (w, t) {\n t[as] = fn.next(w);\n }\n };\n}\nconst WindowOps = {\n row_number: function () {\n return {\n next: w => w.index + 1\n };\n },\n rank: function () {\n let rank;\n return {\n init: () => rank = 1,\n next: w => {\n const i = w.index,\n data = w.data;\n return i && w.compare(data[i - 1], data[i]) ? rank = i + 1 : rank;\n }\n };\n },\n dense_rank: function () {\n let drank;\n return {\n init: () => drank = 1,\n next: w => {\n const i = w.index,\n d = w.data;\n return i && w.compare(d[i - 1], d[i]) ? ++drank : drank;\n }\n };\n },\n percent_rank: function () {\n const rank = WindowOps.rank(),\n next = rank.next;\n return {\n init: rank.init,\n next: w => (next(w) - 1) / (w.data.length - 1)\n };\n },\n cume_dist: function () {\n let cume;\n return {\n init: () => cume = 0,\n next: w => {\n const d = w.data,\n c = w.compare;\n let i = w.index;\n if (cume < i) {\n while (i + 1 < d.length && !c(d[i], d[i + 1])) ++i;\n cume = i;\n }\n return (1 + cume) / d.length;\n }\n };\n },\n ntile: function (field, num) {\n num = +num;\n if (!(num > 0)) error('ntile num must be greater than zero.');\n const cume = WindowOps.cume_dist(),\n next = cume.next;\n return {\n init: cume.init,\n next: w => Math.ceil(num * next(w))\n };\n },\n lag: function (field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n const i = w.index - offset;\n return i >= 0 ? field(w.data[i]) : null;\n }\n };\n },\n lead: function (field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n const i = w.index + offset,\n d = w.data;\n return i < d.length ? field(d[i]) : null;\n }\n };\n },\n first_value: function (field) {\n return {\n next: w => field(w.data[w.i0])\n };\n },\n last_value: function (field) {\n return {\n next: w => field(w.data[w.i1 - 1])\n };\n },\n nth_value: function (field, nth) {\n nth = +nth;\n if (!(nth > 0)) error('nth_value nth must be greater than zero.');\n return {\n next: w => {\n const i = w.i0 + (nth - 1);\n return i < w.i1 ? field(w.data[i]) : null;\n }\n };\n },\n prev_value: function (field) {\n let prev;\n return {\n init: () => prev = null,\n next: w => {\n const v = field(w.data[w.index]);\n return v != null ? prev = v : prev;\n }\n };\n },\n next_value: function (field) {\n let v, i;\n return {\n init: () => (v = null, i = -1),\n next: w => {\n const d = w.data;\n return w.index <= i ? v : (i = find(field, d, w.index)) < 0 ? (i = d.length, v = null) : v = field(d[i]);\n }\n };\n }\n};\nfunction find(field, data, index) {\n for (let n = data.length; index < n; ++index) {\n const v = field(data[index]);\n if (v != null) return index;\n }\n return -1;\n}\nconst ValidWindowOps = Object.keys(WindowOps);\n\nfunction WindowState(_) {\n const ops = array(_.ops),\n fields = array(_.fields),\n params = array(_.params),\n as = array(_.as),\n outputs = this.outputs = [],\n windows = this.windows = [],\n inputs = {},\n map = {},\n counts = [],\n measures = [];\n let countOnly = true;\n function visitInputs(f) {\n array(accessorFields(f)).forEach(_ => inputs[_] = 1);\n }\n visitInputs(_.sort);\n ops.forEach((op, i) => {\n const field = fields[i],\n mname = accessorName(field),\n name = measureName(op, mname, as[i]);\n visitInputs(field);\n outputs.push(name);\n\n // Window operation\n if (hasOwnProperty(WindowOps, op)) {\n windows.push(WindowOp(op, fields[i], params[i], name));\n }\n\n // Aggregate operation\n else {\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n if (op === 'count') {\n counts.push(name);\n return;\n }\n countOnly = false;\n let m = map[mname];\n if (!m) {\n m = map[mname] = [];\n m.field = field;\n measures.push(m);\n }\n m.push(createMeasure(op, name));\n }\n });\n if (counts.length || measures.length) {\n this.cell = cell(measures, counts, countOnly);\n }\n this.inputs = Object.keys(inputs);\n}\nconst prototype = WindowState.prototype;\nprototype.init = function () {\n this.windows.forEach(_ => _.init());\n if (this.cell) this.cell.init();\n};\nprototype.update = function (w, t) {\n const cell = this.cell,\n wind = this.windows,\n data = w.data,\n m = wind && wind.length;\n let j;\n if (cell) {\n for (j = w.p0; j < w.i0; ++j) cell.rem(data[j]);\n for (j = w.p1; j < w.i1; ++j) cell.add(data[j]);\n cell.set(t);\n }\n for (j = 0; j < m; ++j) wind[j].update(w, t);\n};\nfunction cell(measures, counts, countOnly) {\n measures = measures.map(m => compileMeasures(m, m.field));\n const cell = {\n num: 0,\n agg: null,\n store: false,\n count: counts\n };\n if (!countOnly) {\n var n = measures.length,\n a = cell.agg = Array(n),\n i = 0;\n for (; i < n; ++i) a[i] = new measures[i](cell);\n }\n if (cell.store) {\n var store = cell.data = new TupleStore();\n }\n cell.add = function (t) {\n cell.num += 1;\n if (countOnly) return;\n if (store) store.add(t);\n for (let i = 0; i < n; ++i) {\n a[i].add(a[i].get(t), t);\n }\n };\n cell.rem = function (t) {\n cell.num -= 1;\n if (countOnly) return;\n if (store) store.rem(t);\n for (let i = 0; i < n; ++i) {\n a[i].rem(a[i].get(t), t);\n }\n };\n cell.set = function (t) {\n let i, n;\n\n // consolidate stored values\n if (store) store.values();\n\n // update tuple properties\n for (i = 0, n = counts.length; i < n; ++i) t[counts[i]] = cell.num;\n if (!countOnly) for (i = 0, n = a.length; i < n; ++i) a[i].set(t);\n };\n cell.init = function () {\n cell.num = 0;\n if (store) store.reset();\n for (let i = 0; i < n; ++i) a[i].init();\n };\n return cell;\n}\n\n/**\n * Perform window calculations and write results to the input stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator function for sorting tuples within a window.\n * @param {Array} [params.groupby] - An array of accessors by which to partition tuples into separate windows.\n * @param {Array} params.ops - An array of strings indicating window operations to perform.\n * @param {Array} [params.fields] - An array of accessors\n * for data fields to use as inputs to window operations.\n * @param {Array<*>} [params.params] - An array of parameter values for window operations.\n * @param {Array} [params.as] - An array of output field names for window operations.\n * @param {Array} [params.frame] - Window frame definition as two-element array.\n * @param {boolean} [params.ignorePeers=false] - If true, base window frame boundaries on row\n * number alone, ignoring peers with identical sort values. If false (default),\n * the window boundaries will be adjusted to include peer values.\n */\nfunction Window(params) {\n Transform.call(this, {}, params);\n this._mlen = 0;\n this._mods = [];\n}\nWindow.Definition = {\n 'type': 'Window',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidWindowOps.concat(ValidAggregateOps)\n }, {\n 'name': 'params',\n 'type': 'number',\n 'null': true,\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'frame',\n 'type': 'number',\n 'null': true,\n 'array': true,\n 'length': 2,\n 'default': [null, 0]\n }, {\n 'name': 'ignorePeers',\n 'type': 'boolean',\n 'default': false\n }]\n};\ninherits(Window, Transform, {\n transform(_, pulse) {\n this.stamp = pulse.stamp;\n const mod = _.modified(),\n cmp = stableCompare(_.sort),\n key = groupkey(_.groupby),\n group = t => this.group(key(t));\n\n // initialize window state\n let state = this.state;\n if (!state || mod) {\n state = this.state = new WindowState(_);\n }\n\n // partition input tuples\n if (mod || pulse.modified(state.inputs)) {\n this.value = {};\n pulse.visit(pulse.SOURCE, t => group(t).add(t));\n } else {\n pulse.visit(pulse.REM, t => group(t).remove(t));\n pulse.visit(pulse.ADD, t => group(t).add(t));\n }\n\n // perform window calculations for each modified partition\n for (let i = 0, n = this._mlen; i < n; ++i) {\n processPartition(this._mods[i], state, cmp, _);\n }\n this._mlen = 0;\n this._mods = [];\n\n // TODO don't reflow everything?\n return pulse.reflow(mod).modifies(state.outputs);\n },\n group(key) {\n let group = this.value[key];\n if (!group) {\n group = this.value[key] = SortedList(tupleid);\n group.stamp = -1;\n }\n if (group.stamp < this.stamp) {\n group.stamp = this.stamp;\n this._mods[this._mlen++] = group;\n }\n return group;\n }\n});\nfunction processPartition(list, state, cmp, _) {\n const sort = _.sort,\n range = sort && !_.ignorePeers,\n frame = _.frame || [null, 0],\n data = list.data(cmp),\n // use cmp for stable sort\n n = data.length,\n b = range ? bisector(sort) : null,\n w = {\n i0: 0,\n i1: 0,\n p0: 0,\n p1: 0,\n index: 0,\n data: data,\n compare: sort || constant(-1)\n };\n state.init();\n for (let i = 0; i < n; ++i) {\n setWindow(w, frame, i, n);\n if (range) adjustRange(w, b);\n state.update(w, data[i]);\n }\n}\nfunction setWindow(w, f, i, n) {\n w.p0 = w.i0;\n w.p1 = w.i1;\n w.i0 = f[0] == null ? 0 : Math.max(0, i - Math.abs(f[0]));\n w.i1 = f[1] == null ? n : Math.min(n, i + Math.abs(f[1]) + 1);\n w.index = i;\n}\n\n// if frame type is 'range', adjust window for peer values\nfunction adjustRange(w, bisect) {\n const r0 = w.i0,\n r1 = w.i1 - 1,\n c = w.compare,\n d = w.data,\n n = d.length - 1;\n if (r0 > 0 && !c(d[r0], d[r0 - 1])) w.i0 = bisect.left(d, d[r0]);\n if (r1 < n && !c(d[r1], d[r1 + 1])) w.i1 = bisect.right(d, d[r1]);\n}\n\nexport { Aggregate as aggregate, Bin as bin, Collect as collect, Compare as compare, CountPattern as countpattern, Cross as cross, Density as density, DotBin as dotbin, Expression as expression, Extent as extent, Facet as facet, Field as field, Filter as filter, Flatten as flatten, Fold as fold, Formula as formula, Generate as generate, Impute as impute, JoinAggregate as joinaggregate, KDE as kde, Key as key, Load as load, Lookup as lookup, MultiExtent as multiextent, MultiValues as multivalues, Params as params, Pivot as pivot, PreFacet as prefacet, Project as project, Proxy as proxy, Quantile as quantile, Relay as relay, Sample as sample, Sequence as sequence, Sieve as sieve, Subflow as subflow, TimeUnit as timeunit, TupleIndex as tupleindex, Values as values, Window as window };\n","export default function mean(values, valueof) {\n let count = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n }\n if (count) return sum / count;\n}\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n var x1 = null,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(area);\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import {pi, sqrt, tau} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const r = sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // falls through\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop.js\";\nimport {point} from \"./cardinal.js\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal.js\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed.js\";\nimport noop from \"../noop.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","function domCanvas(w, h) {\n if (typeof document !== 'undefined' && document.createElement) {\n const c = document.createElement('canvas');\n if (c && c.getContext) {\n c.width = w;\n c.height = h;\n return c;\n }\n }\n return null;\n}\nconst domImage = () => typeof Image !== 'undefined' ? Image : null;\n\nexport { domCanvas as canvas, domCanvas, domImage as image };\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb() {\n return hcl2lab(this).rgb();\n }\n}));\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n if (values === undefined) values = interpolate, interpolate = value;\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n","import {hue} from \"./color.js\";\n\nexport default function(a, b) {\n var i = hue(+a, +b);\n return function(t) {\n var x = i(t);\n return x - 360 * Math.floor(x / 360);\n };\n}\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n a = color(start.a, end.a),\n b = color(start.b, end.b),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n const scale = transform(transformLog, transformExp);\n const domain = scale.domain;\n let base = 10;\n let logs;\n let pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = count => {\n const d = domain();\n let u = d[0];\n let v = d[d.length - 1];\n const r = v < u;\n\n if (r) ([u, v] = [v, u]);\n\n let i = logs(u);\n let j = logs(v);\n let k;\n let t;\n const n = count == null ? 10 : +count;\n let z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.floor(i), j = Math.ceil(j);\n if (u > 0) for (; i <= j; ++i) {\n for (k = 1; k < base; ++k) {\n t = i < 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i <= j; ++i) {\n for (k = base - 1; k >= 1; --k) {\n t = i > 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n if (z.length * 2 < n) z = ticks(u, v, n);\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = (count, specifier) => {\n if (count == null) count = 10;\n if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n if (typeof specifier !== \"function\") {\n if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n specifier = format(specifier);\n }\n if (count === Infinity) return specifier;\n const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return d => {\n let i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = () => {\n return domain(nice(domain(), {\n floor: x => pows(Math.floor(logs(x))),\n ceil: x => pows(Math.ceil(logs(x)))\n }));\n };\n\n return scale;\n}\n\nexport default function log() {\n const scale = loggish(transformer()).domain([1, 10]);\n scale.copy = () => copy(scale, log()).base(scale.base());\n initRange.apply(scale, arguments);\n return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n s = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1, r2;\n return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n return scale;\n };\n}\n\nexport default function diverging() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, diverging());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","import { toNumber, peek, toSet, array, constant, isNumber, span, isObject, isString, error, isArray } from 'vega-util';\nimport { bisectRight, range, bisect } from 'd3-array';\nimport * as $ from 'd3-scale';\nimport { scaleOrdinal, tickFormat as tickFormat$1 } from 'd3-scale';\nexport { scaleImplicit } from 'd3-scale';\nimport * as $$1 from 'd3-interpolate';\nimport { timeInterval, utcInterval } from 'vega-time';\n\nfunction bandSpace (count, paddingInner, paddingOuter) {\n const space = count - paddingInner + paddingOuter * 2;\n return count ? space > 0 ? space : 1 : 0;\n}\n\nconst Identity = 'identity';\nconst Linear = 'linear';\nconst Log = 'log';\nconst Pow = 'pow';\nconst Sqrt = 'sqrt';\nconst Symlog = 'symlog';\nconst Time = 'time';\nconst UTC = 'utc';\nconst Sequential = 'sequential';\nconst Diverging = 'diverging';\nconst Quantile = 'quantile';\nconst Quantize = 'quantize';\nconst Threshold = 'threshold';\nconst Ordinal = 'ordinal';\nconst Point = 'point';\nconst Band = 'band';\nconst BinOrdinal = 'bin-ordinal';\n\n// categories\nconst Continuous = 'continuous';\nconst Discrete = 'discrete';\nconst Discretizing = 'discretizing';\nconst Interpolating = 'interpolating';\nconst Temporal = 'temporal';\n\nfunction invertRange (scale) {\n return function (_) {\n let lo = _[0],\n hi = _[1],\n t;\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n return [scale.invert(lo), scale.invert(hi)];\n };\n}\n\nfunction invertRangeExtent (scale) {\n return function (_) {\n const range = scale.range();\n let lo = _[0],\n hi = _[1],\n min = -1,\n max,\n t,\n i,\n n;\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n for (i = 0, n = range.length; i < n; ++i) {\n if (range[i] >= lo && range[i] <= hi) {\n if (min < 0) min = i;\n max = i;\n }\n }\n if (min < 0) return undefined;\n lo = scale.invertExtent(range[min]);\n hi = scale.invertExtent(range[max]);\n return [lo[0] === undefined ? lo[1] : lo[0], hi[1] === undefined ? hi[0] : hi[1]];\n };\n}\n\nfunction band() {\n const scale = scaleOrdinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range;\n let range$1 = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n delete scale.unknown;\n function rescale() {\n const n = domain().length,\n reverse = range$1[1] < range$1[0],\n stop = range$1[1 - reverse],\n space = bandSpace(n, paddingInner, paddingOuter);\n let start = range$1[reverse - 0];\n step = (stop - start) / (space || 1);\n if (round) {\n step = Math.floor(step);\n }\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) {\n start = Math.round(start);\n bandwidth = Math.round(bandwidth);\n }\n const values = range(n).map(i => start + step * i);\n return ordinalRange(reverse ? values.reverse() : values);\n }\n scale.domain = function (_) {\n if (arguments.length) {\n domain(_);\n return rescale();\n } else {\n return domain();\n }\n };\n scale.range = function (_) {\n if (arguments.length) {\n range$1 = [+_[0], +_[1]];\n return rescale();\n } else {\n return range$1.slice();\n }\n };\n scale.rangeRound = function (_) {\n range$1 = [+_[0], +_[1]];\n round = true;\n return rescale();\n };\n scale.bandwidth = function () {\n return bandwidth;\n };\n scale.step = function () {\n return step;\n };\n scale.round = function (_) {\n if (arguments.length) {\n round = !!_;\n return rescale();\n } else {\n return round;\n }\n };\n scale.padding = function (_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n paddingInner = paddingOuter;\n return rescale();\n } else {\n return paddingInner;\n }\n };\n scale.paddingInner = function (_) {\n if (arguments.length) {\n paddingInner = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingInner;\n }\n };\n scale.paddingOuter = function (_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingOuter;\n }\n };\n scale.align = function (_) {\n if (arguments.length) {\n align = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return align;\n }\n };\n scale.invertRange = function (_) {\n // bail if range has null or undefined values\n if (_[0] == null || _[1] == null) return;\n const reverse = range$1[1] < range$1[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1;\n let lo = +_[0],\n hi = +_[1],\n a,\n b,\n t;\n\n // bail if either range endpoint is invalid\n if (lo !== lo || hi !== hi) return;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n if (hi < values[0] || lo > range$1[1 - reverse]) return;\n\n // binary search to index into scale range\n a = Math.max(0, bisectRight(values, lo) - 1);\n b = lo === hi ? a : bisectRight(values, hi) - 1;\n\n // increment index a if lo is within padding gap\n if (lo - values[a] > bandwidth + 1e-10) ++a;\n if (reverse) {\n // map + swap\n t = a;\n a = n - b;\n b = n - t;\n }\n return a > b ? undefined : domain().slice(a, b + 1);\n };\n scale.invert = function (_) {\n const value = scale.invertRange([_, _]);\n return value ? value[0] : value;\n };\n scale.copy = function () {\n return band().domain(domain()).range(range$1).round(round).paddingInner(paddingInner).paddingOuter(paddingOuter).align(align);\n };\n return rescale();\n}\nfunction pointish(scale) {\n const copy = scale.copy;\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n scale.copy = function () {\n return pointish(copy());\n };\n return scale;\n}\nfunction point() {\n return pointish(band().paddingInner(1));\n}\n\nvar map = Array.prototype.map;\nfunction numbers(_) {\n return map.call(_, toNumber);\n}\n\nconst slice = Array.prototype.slice;\n\nfunction scaleBinOrdinal() {\n let domain = [],\n range = [];\n function scale(x) {\n return x == null || x !== x ? undefined : range[(bisect(domain, x) - 1) % range.length];\n }\n scale.domain = function (_) {\n if (arguments.length) {\n domain = numbers(_);\n return scale;\n } else {\n return domain.slice();\n }\n };\n scale.range = function (_) {\n if (arguments.length) {\n range = slice.call(_);\n return scale;\n } else {\n return range.slice();\n }\n };\n scale.tickFormat = function (count, specifier) {\n return tickFormat$1(domain[0], peek(domain), count == null ? 10 : count, specifier);\n };\n scale.copy = function () {\n return scaleBinOrdinal().domain(scale.domain()).range(scale.range());\n };\n return scale;\n}\n\n/** Private scale registry: should not be exported */\nconst scales = new Map();\nconst VEGA_SCALE = Symbol('vega_scale');\nfunction registerScale(scale) {\n scale[VEGA_SCALE] = true;\n return scale;\n}\n\n/**\n * Return true if object was created by a constructor from the vega-scale `scale` function.\n */\nfunction isRegisteredScale(scale) {\n return scale && scale[VEGA_SCALE] === true;\n}\n\n/**\n * Augment scales with their type and needed inverse methods.\n */\nfunction create(type, constructor, metadata) {\n const ctr = function scale() {\n const s = constructor();\n if (!s.invertRange) {\n s.invertRange = s.invert ? invertRange(s) : s.invertExtent ? invertRangeExtent(s) : undefined;\n }\n s.type = type;\n return registerScale(s);\n };\n ctr.metadata = toSet(array(metadata));\n return ctr;\n}\n\n/**\n * Registry function for adding and accessing scale constructor functions.\n * The *type* argument is a String indicating the name of the scale type.\n *\n * If the *scale* argument is not specified, this method returns the matching scale constructor in the registry, or `null` if not found.\n * If the *scale* argument is provided, it must be a scale constructor function to add to the registry under the given *type* name.\n * The *metadata* argument provides additional information to guide appropriate use of scales within Vega.\n *\n * *metadata* can be either a string or string array. The valid string values are:\n * - `\"continuous\"` - the scale is defined over a continuous-valued domain.\n * - `\"discrete\"` - the scale is defined over a discrete domain and range.\n * - `\"discretizing\"` - the scale discretizes a continuous domain to a discrete range.\n * - `\"interpolating\"` - the scale range is defined using a color interpolator.\n * - `\"log\"` - the scale performs a logarithmic transform of the continuous domain.\n * - `\"temporal\"` - the scale domain is defined over date-time values.\n */\nfunction scale(type, scale, metadata) {\n if (arguments.length > 1) {\n scales.set(type, create(type, scale, metadata));\n return this;\n } else {\n return isValidScaleType(type) ? scales.get(type) : undefined;\n }\n}\n\n// identity scale\nscale(Identity, $.scaleIdentity);\n\n// continuous scales\nscale(Linear, $.scaleLinear, Continuous);\nscale(Log, $.scaleLog, [Continuous, Log]);\nscale(Pow, $.scalePow, Continuous);\nscale(Sqrt, $.scaleSqrt, Continuous);\nscale(Symlog, $.scaleSymlog, Continuous);\nscale(Time, $.scaleTime, [Continuous, Temporal]);\nscale(UTC, $.scaleUtc, [Continuous, Temporal]);\n\n// sequential scales\nscale(Sequential, $.scaleSequential, [Continuous, Interpolating]); // backwards compat\nscale(`${Sequential}-${Linear}`, $.scaleSequential, [Continuous, Interpolating]);\nscale(`${Sequential}-${Log}`, $.scaleSequentialLog, [Continuous, Interpolating, Log]);\nscale(`${Sequential}-${Pow}`, $.scaleSequentialPow, [Continuous, Interpolating]);\nscale(`${Sequential}-${Sqrt}`, $.scaleSequentialSqrt, [Continuous, Interpolating]);\nscale(`${Sequential}-${Symlog}`, $.scaleSequentialSymlog, [Continuous, Interpolating]);\n\n// diverging scales\nscale(`${Diverging}-${Linear}`, $.scaleDiverging, [Continuous, Interpolating]);\nscale(`${Diverging}-${Log}`, $.scaleDivergingLog, [Continuous, Interpolating, Log]);\nscale(`${Diverging}-${Pow}`, $.scaleDivergingPow, [Continuous, Interpolating]);\nscale(`${Diverging}-${Sqrt}`, $.scaleDivergingSqrt, [Continuous, Interpolating]);\nscale(`${Diverging}-${Symlog}`, $.scaleDivergingSymlog, [Continuous, Interpolating]);\n\n// discretizing scales\nscale(Quantile, $.scaleQuantile, [Discretizing, Quantile]);\nscale(Quantize, $.scaleQuantize, Discretizing);\nscale(Threshold, $.scaleThreshold, Discretizing);\n\n// discrete scales\nscale(BinOrdinal, scaleBinOrdinal, [Discrete, Discretizing]);\nscale(Ordinal, $.scaleOrdinal, Discrete);\nscale(Band, band, Discrete);\nscale(Point, point, Discrete);\nfunction isValidScaleType(type) {\n return scales.has(type);\n}\nfunction hasType(key, type) {\n const s = scales.get(key);\n return s && s.metadata[type];\n}\nfunction isContinuous(key) {\n return hasType(key, Continuous);\n}\nfunction isDiscrete(key) {\n return hasType(key, Discrete);\n}\nfunction isDiscretizing(key) {\n return hasType(key, Discretizing);\n}\nfunction isLogarithmic(key) {\n return hasType(key, Log);\n}\nfunction isTemporal(key) {\n return hasType(key, Temporal);\n}\nfunction isInterpolating(key) {\n return hasType(key, Interpolating);\n}\nfunction isQuantile(key) {\n return hasType(key, Quantile);\n}\n\nconst scaleProps = ['clamp', 'base', 'constant', 'exponent'];\nfunction interpolateRange(interpolator, range) {\n const start = range[0],\n span = peek(range) - start;\n return function (i) {\n return interpolator(start + i * span);\n };\n}\nfunction interpolateColors(colors, type, gamma) {\n return $$1.piecewise(interpolate(type || 'rgb', gamma), colors);\n}\nfunction quantizeInterpolator(interpolator, count) {\n const samples = new Array(count),\n n = count + 1;\n for (let i = 0; i < count;) samples[i] = interpolator(++i / n);\n return samples;\n}\nfunction scaleCopy(scale) {\n const t = scale.type,\n s = scale.copy();\n s.type = t;\n return s;\n}\nfunction scaleFraction(scale$1, min, max) {\n const delta = max - min;\n let i, t, s;\n if (!delta || !Number.isFinite(delta)) {\n return constant(0.5);\n } else {\n i = (t = scale$1.type).indexOf('-');\n t = i < 0 ? t : t.slice(i + 1);\n s = scale(t)().domain([min, max]).range([0, 1]);\n scaleProps.forEach(m => scale$1[m] ? s[m](scale$1[m]()) : 0);\n return s;\n }\n}\nfunction interpolate(type, gamma) {\n const interp = $$1[method(type)];\n return gamma != null && interp && interp.gamma ? interp.gamma(gamma) : interp;\n}\nfunction method(type) {\n return 'interpolate' + type.toLowerCase().split('-').map(s => s[0].toUpperCase() + s.slice(1)).join('');\n}\n\nconst continuous = {\n blues: 'cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90',\n greens: 'd3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429',\n greys: 'e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e',\n oranges: 'fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303',\n purples: 'e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c',\n reds: 'fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13',\n blueGreen: 'd5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429',\n bluePurple: 'ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71',\n greenBlue: 'd3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1',\n orangeRed: 'fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403',\n purpleBlue: 'dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281',\n purpleBlueGreen: 'dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353',\n purpleRed: 'dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a',\n redPurple: 'fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174',\n yellowGreen: 'e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034',\n yellowOrangeBrown: 'feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204',\n yellowOrangeRed: 'fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225',\n blueOrange: '134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07',\n brownBlueGreen: '704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147',\n purpleGreen: '5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29',\n purpleOrange: '4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07',\n redBlue: '8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85',\n redGrey: '8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434',\n yellowGreenBlue: 'eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185',\n redYellowBlue: 'a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695',\n redYellowGreen: 'a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837',\n pinkYellowGreen: '8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419',\n spectral: '9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2',\n viridis: '440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725',\n magma: '0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf',\n inferno: '0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4',\n plasma: '0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921',\n cividis: '00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647',\n rainbow: '6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa',\n sinebow: 'ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040',\n turbo: '23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00',\n browns: 'eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632',\n tealBlues: 'bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985',\n teals: 'bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667',\n warmGreys: 'dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e',\n goldGreen: 'f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36',\n goldOrange: 'f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26',\n goldRed: 'f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e',\n lightGreyRed: 'efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b',\n lightGreyTeal: 'e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc',\n lightMulti: 'e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c',\n lightOrange: 'f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b',\n lightTealBlue: 'e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988',\n darkBlue: '3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff',\n darkGold: '3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff',\n darkGreen: '3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa',\n darkMulti: '3737371f5287197d8c29a86995ce3fffe800ffffff',\n darkRed: '3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c'\n};\nconst discrete = {\n category10: '1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf',\n category20: '1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5',\n category20b: '393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6',\n category20c: '3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9',\n tableau10: '4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac',\n tableau20: '4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5',\n accent: '7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666',\n dark2: '1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666',\n paired: 'a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928',\n pastel1: 'fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2',\n pastel2: 'b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc',\n set1: 'e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999',\n set2: '66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3',\n set3: '8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f'\n};\n\nfunction colors(palette) {\n const n = palette.length / 6 | 0,\n c = new Array(n);\n for (let i = 0; i < n;) {\n c[i] = '#' + palette.slice(i * 6, ++i * 6);\n }\n return c;\n}\nfunction apply(_, f) {\n for (const k in _) scheme(k, f(_[k]));\n}\nconst schemes = {};\napply(discrete, colors);\napply(continuous, _ => interpolateColors(colors(_)));\nfunction scheme(name, scheme) {\n name = name && name.toLowerCase();\n if (arguments.length > 1) {\n schemes[name] = scheme;\n return this;\n } else {\n return schemes[name];\n }\n}\n\nconst SymbolLegend = 'symbol';\nconst DiscreteLegend = 'discrete';\nconst GradientLegend = 'gradient';\n\nconst defaultFormatter = value => isArray(value) ? value.map(v => String(v)) : String(value);\nconst ascending = (a, b) => a[1] - b[1];\nconst descending = (a, b) => b[1] - a[1];\n\n/**\n * Determine the tick count or interval function.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} count - The desired tick count or interval specifier.\n * @param {number} minStep - The desired minimum step between tick values.\n * @return {*} - The tick count or interval function.\n */\nfunction tickCount(scale, count, minStep) {\n let step;\n if (isNumber(count)) {\n if (scale.bins) {\n count = Math.max(count, scale.bins.length);\n }\n if (minStep != null) {\n count = Math.min(count, Math.floor(span(scale.domain()) / minStep || 1));\n }\n }\n if (isObject(count)) {\n step = count.step;\n count = count.interval;\n }\n if (isString(count)) {\n count = scale.type === Time ? timeInterval(count) : scale.type == UTC ? utcInterval(count) : error('Only time and utc scales accept interval strings.');\n if (step) count = count.every(step);\n }\n return count;\n}\n\n/**\n * Filter a set of candidate tick values, ensuring that only tick values\n * that lie within the scale range are included.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {Array<*>} ticks - The candidate tick values.\n * @param {*} count - The tick count or interval function.\n * @return {Array<*>} - The filtered tick values.\n */\nfunction validTicks(scale, ticks, count) {\n let range = scale.range(),\n lo = range[0],\n hi = peek(range),\n cmp = ascending;\n if (lo > hi) {\n range = hi;\n hi = lo;\n lo = range;\n cmp = descending;\n }\n lo = Math.floor(lo);\n hi = Math.ceil(hi);\n\n // filter ticks to valid values within the range\n // additionally sort ticks in range order (#2579)\n ticks = ticks.map(v => [v, scale(v)]).filter(_ => lo <= _[1] && _[1] <= hi).sort(cmp).map(_ => _[0]);\n if (count > 0 && ticks.length > 1) {\n const endpoints = [ticks[0], peek(ticks)];\n while (ticks.length > count && ticks.length >= 3) {\n ticks = ticks.filter((_, i) => !(i % 2));\n }\n if (ticks.length < 3) {\n ticks = endpoints;\n }\n }\n return ticks;\n}\n\n/**\n * Generate tick values for the given scale and approximate tick count or\n * interval value. If the scale has a 'ticks' method, it will be used to\n * generate the ticks, with the count argument passed as a parameter. If the\n * scale lacks a 'ticks' method, the full scale domain will be returned.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} [count] - The approximate number of desired ticks.\n * @return {Array<*>} - The generated tick values.\n */\nfunction tickValues(scale, count) {\n return scale.bins ? validTicks(scale, scale.bins) : scale.ticks ? scale.ticks(count) : scale.domain();\n}\n\n/**\n * Generate a label format function for a scale. If the scale has a\n * 'tickFormat' method, it will be used to generate the formatter, with the\n * count and specifier arguments passed as parameters. If the scale lacks a\n * 'tickFormat' method, the returned formatter performs simple string coercion.\n * If the input scale is a logarithmic scale and the format specifier does not\n * indicate a desired decimal precision, a special variable precision formatter\n * that automatically trims trailing zeroes will be generated.\n * @param {Scale} scale - The scale for which to generate the label formatter.\n * @param {*} [count] - The approximate number of desired ticks.\n * @param {string} [specifier] - The format specifier. Must be a legal d3\n * specifier string (see https://github.com/d3/d3-format#formatSpecifier) or\n * time multi-format specifier object.\n * @return {function(*):string} - The generated label formatter.\n */\nfunction tickFormat(locale, scale, count, specifier, formatType, noSkip) {\n const type = scale.type;\n let format = defaultFormatter;\n if (type === Time || formatType === Time) {\n format = locale.timeFormat(specifier);\n } else if (type === UTC || formatType === UTC) {\n format = locale.utcFormat(specifier);\n } else if (isLogarithmic(type)) {\n const varfmt = locale.formatFloat(specifier);\n if (noSkip || scale.bins) {\n format = varfmt;\n } else {\n const test = tickLog(scale, count, false);\n format = _ => test(_) ? varfmt(_) : '';\n }\n } else if (scale.tickFormat) {\n // if d3 scale has tickFormat, it must be continuous\n const d = scale.domain();\n format = locale.formatSpan(d[0], d[d.length - 1], count, specifier);\n } else if (specifier) {\n format = locale.format(specifier);\n }\n return format;\n}\nfunction tickLog(scale, count, values) {\n const ticks = tickValues(scale, count),\n base = scale.base(),\n logb = Math.log(base),\n k = Math.max(1, base * count / ticks.length);\n\n // apply d3-scale's log format filter criteria\n const test = d => {\n let i = d / Math.pow(base, Math.round(Math.log(d) / logb));\n if (i * base < base - 0.5) i *= base;\n return i <= k;\n };\n return values ? ticks.filter(test) : test;\n}\n\nconst symbols = {\n [Quantile]: 'quantiles',\n [Quantize]: 'thresholds',\n [Threshold]: 'domain'\n};\nconst formats = {\n [Quantile]: 'quantiles',\n [Quantize]: 'domain'\n};\nfunction labelValues(scale, count) {\n return scale.bins ? binValues(scale.bins) : scale.type === Log ? tickLog(scale, count, true) : symbols[scale.type] ? thresholdValues(scale[symbols[scale.type]]()) : tickValues(scale, count);\n}\nfunction thresholdFormat(locale, scale, specifier) {\n const _ = scale[formats[scale.type]](),\n n = _.length;\n let d = n > 1 ? _[1] - _[0] : _[0],\n i;\n for (i = 1; i < n; ++i) {\n d = Math.min(d, _[i] - _[i - 1]);\n }\n\n // tickCount = 3 ticks times 10 for increased resolution\n return locale.formatSpan(0, d, 3 * 10, specifier);\n}\nfunction thresholdValues(thresholds) {\n const values = [-Infinity].concat(thresholds);\n values.max = +Infinity;\n return values;\n}\nfunction binValues(bins) {\n const values = bins.slice(0, -1);\n values.max = peek(bins);\n return values;\n}\nconst isDiscreteRange = scale => symbols[scale.type] || scale.bins;\nfunction labelFormat(locale, scale, count, type, specifier, formatType, noSkip) {\n const format = formats[scale.type] && formatType !== Time && formatType !== UTC ? thresholdFormat(locale, scale, specifier) : tickFormat(locale, scale, count, specifier, formatType, noSkip);\n return type === SymbolLegend && isDiscreteRange(scale) ? formatRange(format) : type === DiscreteLegend ? formatDiscrete(format) : formatPoint(format);\n}\nconst formatRange = format => (value, index, array) => {\n const limit = get(array[index + 1], get(array.max, +Infinity)),\n lo = formatValue(value, format),\n hi = formatValue(limit, format);\n return lo && hi ? lo + ' \\u2013 ' + hi : hi ? '< ' + hi : '\\u2265 ' + lo;\n};\nconst get = (value, dflt) => value != null ? value : dflt;\nconst formatDiscrete = format => (value, index) => index ? format(value) : null;\nconst formatPoint = format => value => format(value);\nconst formatValue = (value, format) => Number.isFinite(value) ? format(value) : null;\nfunction labelFraction(scale) {\n const domain = scale.domain(),\n count = domain.length - 1;\n let lo = +domain[0],\n hi = +peek(domain),\n span = hi - lo;\n if (scale.type === Threshold) {\n const adjust = count ? span / count : 0.1;\n lo -= adjust;\n hi += adjust;\n span = hi - lo;\n }\n return value => (value - lo) / span;\n}\n\nfunction format(locale, scale, specifier, formatType) {\n const type = formatType || scale.type;\n\n // replace abbreviated time specifiers to improve screen reader experience\n if (isString(specifier) && isTemporal(type)) {\n specifier = specifier.replace(/%a/g, '%A').replace(/%b/g, '%B');\n }\n return !specifier && type === Time ? locale.timeFormat('%A, %d %B %Y, %X') : !specifier && type === UTC ? locale.utcFormat('%A, %d %B %Y, %X UTC') : labelFormat(locale, scale, 5, null, specifier, formatType, true);\n}\nfunction domainCaption(locale, scale, opt) {\n opt = opt || {};\n const max = Math.max(3, opt.maxlen || 7),\n fmt = format(locale, scale, opt.format, opt.formatType);\n\n // if scale breaks domain into bins, describe boundaries\n if (isDiscretizing(scale.type)) {\n const v = labelValues(scale).slice(1).map(fmt),\n n = v.length;\n return `${n} boundar${n === 1 ? 'y' : 'ies'}: ${v.join(', ')}`;\n }\n\n // if scale domain is discrete, list values\n else if (isDiscrete(scale.type)) {\n const d = scale.domain(),\n n = d.length,\n v = n > max ? d.slice(0, max - 2).map(fmt).join(', ') + ', ending with ' + d.slice(-1).map(fmt) : d.map(fmt).join(', ');\n return `${n} value${n === 1 ? '' : 's'}: ${v}`;\n }\n\n // if scale domain is continuous, describe value range\n else {\n const d = scale.domain();\n return `values from ${fmt(d[0])} to ${fmt(peek(d))}`;\n }\n}\n\nexport { Band, BinOrdinal, DiscreteLegend, Diverging, GradientLegend, Identity, Linear, Log, Ordinal, Point, Pow, Quantile, Quantize, Sequential, Sqrt, SymbolLegend, Symlog, Threshold, Time, UTC, bandSpace, domainCaption, interpolate, interpolateColors, interpolateRange, isContinuous, isDiscrete, isDiscretizing, isInterpolating, isLogarithmic, isQuantile, isRegisteredScale, isTemporal, isValidScaleType, labelFormat, labelFraction, labelValues, quantizeInterpolator, registerScale, scale, scaleCopy, scaleFraction, scheme, tickCount, tickFormat, tickValues, validTicks };\n","import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n var unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n return linearish(scale);\n}\n","import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import { hasOwnProperty, isFunction, inherits, truthy, lruCache, isArray, error, toSet, array, peek, extend, isNumber, isObject } from 'vega-util';\nimport { curveBasis, curveBasisClosed, curveBasisOpen, curveBundle, curveCardinal, curveCardinalOpen, curveCardinalClosed, curveCatmullRom, curveCatmullRomClosed, curveCatmullRomOpen, curveLinear, curveLinearClosed, curveMonotoneY, curveMonotoneX, curveNatural, curveStep, curveStepAfter, curveStepBefore, arc as arc$2, area as area$2, line as line$2, symbol as symbol$2 } from 'd3-shape';\nimport { path as path$3 } from 'd3-path';\nexport { path } from 'd3-path';\nimport { image as image$1, canvas } from 'vega-canvas';\nimport { loader } from 'vega-loader';\nimport { isDiscrete, domainCaption } from 'vega-scale';\n\nlet gradient_id = 0;\nfunction resetSVGGradientId() {\n gradient_id = 0;\n}\nconst patternPrefix = 'p_';\nfunction isGradient(value) {\n return value && value.gradient;\n}\nfunction gradientRef(g, defs, base) {\n const type = g.gradient;\n let id = g.id,\n prefix = type === 'radial' ? patternPrefix : '';\n\n // check id, assign default values as needed\n if (!id) {\n id = g.id = 'gradient_' + gradient_id++;\n if (type === 'radial') {\n g.x1 = get(g.x1, 0.5);\n g.y1 = get(g.y1, 0.5);\n g.r1 = get(g.r1, 0);\n g.x2 = get(g.x2, 0.5);\n g.y2 = get(g.y2, 0.5);\n g.r2 = get(g.r2, 0.5);\n prefix = patternPrefix;\n } else {\n g.x1 = get(g.x1, 0);\n g.y1 = get(g.y1, 0);\n g.x2 = get(g.x2, 1);\n g.y2 = get(g.y2, 0);\n }\n }\n\n // register definition\n defs[id] = g;\n\n // return url reference\n return 'url(' + (base || '') + '#' + prefix + id + ')';\n}\nfunction get(val, def) {\n return val != null ? val : def;\n}\nfunction Gradient (p0, p1) {\n var stops = [],\n gradient;\n return gradient = {\n gradient: 'linear',\n x1: p0 ? p0[0] : 0,\n y1: p0 ? p0[1] : 0,\n x2: p1 ? p1[0] : 1,\n y2: p1 ? p1[1] : 0,\n stops: stops,\n stop: function (offset, color) {\n stops.push({\n offset: offset,\n color: color\n });\n return gradient;\n }\n };\n}\n\nconst lookup = {\n 'basis': {\n curve: curveBasis\n },\n 'basis-closed': {\n curve: curveBasisClosed\n },\n 'basis-open': {\n curve: curveBasisOpen\n },\n 'bundle': {\n curve: curveBundle,\n tension: 'beta',\n value: 0.85\n },\n 'cardinal': {\n curve: curveCardinal,\n tension: 'tension',\n value: 0\n },\n 'cardinal-open': {\n curve: curveCardinalOpen,\n tension: 'tension',\n value: 0\n },\n 'cardinal-closed': {\n curve: curveCardinalClosed,\n tension: 'tension',\n value: 0\n },\n 'catmull-rom': {\n curve: curveCatmullRom,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-closed': {\n curve: curveCatmullRomClosed,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-open': {\n curve: curveCatmullRomOpen,\n tension: 'alpha',\n value: 0.5\n },\n 'linear': {\n curve: curveLinear\n },\n 'linear-closed': {\n curve: curveLinearClosed\n },\n 'monotone': {\n horizontal: curveMonotoneY,\n vertical: curveMonotoneX\n },\n 'natural': {\n curve: curveNatural\n },\n 'step': {\n curve: curveStep\n },\n 'step-after': {\n curve: curveStepAfter\n },\n 'step-before': {\n curve: curveStepBefore\n }\n};\nfunction curves(type, orientation, tension) {\n var entry = hasOwnProperty(lookup, type) && lookup[type],\n curve = null;\n if (entry) {\n curve = entry.curve || entry[orientation || 'vertical'];\n if (entry.tension && tension != null) {\n curve = curve[entry.tension](tension);\n }\n }\n return curve;\n}\n\nconst paramCounts = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n z: 0,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7\n};\nconst commandPattern = /[mlhvzcsqta]([^mlhvzcsqta]+|$)/gi;\nconst numberPattern = /^[+-]?(([0-9]*\\.[0-9]+)|([0-9]+\\.)|([0-9]+))([eE][+-]?[0-9]+)?/;\nconst spacePattern = /^((\\s+,?\\s*)|(,\\s*))/;\nconst flagPattern = /^[01]/;\nfunction parse(path) {\n const commands = [];\n const matches = path.match(commandPattern) || [];\n matches.forEach(str => {\n let cmd = str[0];\n const type = cmd.toLowerCase();\n\n // parse parameters\n const paramCount = paramCounts[type];\n const params = parseParams(type, paramCount, str.slice(1).trim());\n const count = params.length;\n\n // error checking based on parameter count\n if (count < paramCount || count && count % paramCount !== 0) {\n throw Error('Invalid SVG path, incorrect parameter count');\n }\n\n // register the command\n commands.push([cmd, ...params.slice(0, paramCount)]);\n\n // exit now if we're done, also handles zero-param 'z'\n if (count === paramCount) {\n return;\n }\n\n // handle implicit line-to\n if (type === 'm') {\n cmd = cmd === 'M' ? 'L' : 'l';\n }\n\n // repeat command when given extended param list\n for (let i = paramCount; i < count; i += paramCount) {\n commands.push([cmd, ...params.slice(i, i + paramCount)]);\n }\n });\n return commands;\n}\nfunction parseParams(type, paramCount, segment) {\n const params = [];\n for (let index = 0; paramCount && index < segment.length;) {\n for (let i = 0; i < paramCount; ++i) {\n const pattern = type === 'a' && (i === 3 || i === 4) ? flagPattern : numberPattern;\n const match = segment.slice(index).match(pattern);\n if (match === null) {\n throw Error('Invalid SVG path, incorrect parameter type');\n }\n index += match[0].length;\n params.push(+match[0]);\n const ws = segment.slice(index).match(spacePattern);\n if (ws !== null) {\n index += ws[0].length;\n }\n }\n }\n return params;\n}\n\nconst DegToRad = Math.PI / 180;\nconst Epsilon = 1e-14;\nconst HalfPi = Math.PI / 2;\nconst Tau = Math.PI * 2;\nconst HalfSqrt3 = Math.sqrt(3) / 2;\n\nvar segmentCache = {};\nvar bezierCache = {};\nvar join = [].join;\n\n// Copied from Inkscape svgtopdf, thanks!\nfunction segments(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\n const key = join.call(arguments);\n if (segmentCache[key]) {\n return segmentCache[key];\n }\n const th = rotateX * DegToRad;\n const sin_th = Math.sin(th);\n const cos_th = Math.cos(th);\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n const px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\n const py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\n let pl = px * px / (rx * rx) + py * py / (ry * ry);\n if (pl > 1) {\n pl = Math.sqrt(pl);\n rx *= pl;\n ry *= pl;\n }\n const a00 = cos_th / rx;\n const a01 = sin_th / rx;\n const a10 = -sin_th / ry;\n const a11 = cos_th / ry;\n const x0 = a00 * ox + a01 * oy;\n const y0 = a10 * ox + a11 * oy;\n const x1 = a00 * x + a01 * y;\n const y1 = a10 * x + a11 * y;\n const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\n let sfactor_sq = 1 / d - 0.25;\n if (sfactor_sq < 0) sfactor_sq = 0;\n let sfactor = Math.sqrt(sfactor_sq);\n if (sweep == large) sfactor = -sfactor;\n const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\n const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\n const th0 = Math.atan2(y0 - yc, x0 - xc);\n const th1 = Math.atan2(y1 - yc, x1 - xc);\n let th_arc = th1 - th0;\n if (th_arc < 0 && sweep === 1) {\n th_arc += Tau;\n } else if (th_arc > 0 && sweep === 0) {\n th_arc -= Tau;\n }\n const segs = Math.ceil(Math.abs(th_arc / (HalfPi + 0.001)));\n const result = [];\n for (let i = 0; i < segs; ++i) {\n const th2 = th0 + i * th_arc / segs;\n const th3 = th0 + (i + 1) * th_arc / segs;\n result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\n }\n return segmentCache[key] = result;\n}\nfunction bezier(params) {\n const key = join.call(params);\n if (bezierCache[key]) {\n return bezierCache[key];\n }\n var cx = params[0],\n cy = params[1],\n th0 = params[2],\n th1 = params[3],\n rx = params[4],\n ry = params[5],\n sin_th = params[6],\n cos_th = params[7];\n const a00 = cos_th * rx;\n const a01 = -sin_th * ry;\n const a10 = sin_th * rx;\n const a11 = cos_th * ry;\n const cos_th0 = Math.cos(th0);\n const sin_th0 = Math.sin(th0);\n const cos_th1 = Math.cos(th1);\n const sin_th1 = Math.sin(th1);\n const th_half = 0.5 * (th1 - th0);\n const sin_th_h2 = Math.sin(th_half * 0.5);\n const t = 8 / 3 * sin_th_h2 * sin_th_h2 / Math.sin(th_half);\n const x1 = cx + cos_th0 - t * sin_th0;\n const y1 = cy + sin_th0 + t * cos_th0;\n const x3 = cx + cos_th1;\n const y3 = cy + sin_th1;\n const x2 = x3 + t * sin_th1;\n const y2 = y3 - t * cos_th1;\n return bezierCache[key] = [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3];\n}\n\nconst temp = ['l', 0, 0, 0, 0, 0, 0, 0];\nfunction scale$1(current, sX, sY) {\n const c = temp[0] = current[0];\n if (c === 'a' || c === 'A') {\n temp[1] = sX * current[1];\n temp[2] = sY * current[2];\n temp[3] = current[3];\n temp[4] = current[4];\n temp[5] = current[5];\n temp[6] = sX * current[6];\n temp[7] = sY * current[7];\n } else if (c === 'h' || c === 'H') {\n temp[1] = sX * current[1];\n } else if (c === 'v' || c === 'V') {\n temp[1] = sY * current[1];\n } else {\n for (var i = 1, n = current.length; i < n; ++i) {\n temp[i] = (i % 2 == 1 ? sX : sY) * current[i];\n }\n }\n return temp;\n}\nfunction pathRender (context, path, l, t, sX, sY) {\n var current,\n // current instruction\n previous = null,\n x = 0,\n // current x\n y = 0,\n // current y\n controlX = 0,\n // current control point x\n controlY = 0,\n // current control point y\n tempX,\n tempY,\n tempControlX,\n tempControlY,\n anchorX = 0,\n anchorY = 0;\n if (l == null) l = 0;\n if (t == null) t = 0;\n if (sX == null) sX = 1;\n if (sY == null) sY = sX;\n if (context.beginPath) context.beginPath();\n for (var i = 0, len = path.length; i < len; ++i) {\n current = path[i];\n if (sX !== 1 || sY !== 1) {\n current = scale$1(current, sX, sY);\n }\n switch (current[0]) {\n // first letter\n\n case 'l':\n // lineto, relative\n x += current[1];\n y += current[2];\n context.lineTo(x + l, y + t);\n break;\n case 'L':\n // lineto, absolute\n x = current[1];\n y = current[2];\n context.lineTo(x + l, y + t);\n break;\n case 'h':\n // horizontal lineto, relative\n x += current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'H':\n // horizontal lineto, absolute\n x = current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'v':\n // vertical lineto, relative\n y += current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'V':\n // verical lineto, absolute\n y = current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'm':\n // moveTo, relative\n x += current[1];\n y += current[2];\n anchorX = x;\n anchorY = y;\n context.moveTo(x + l, y + t);\n break;\n case 'M':\n // moveTo, absolute\n x = current[1];\n y = current[2];\n anchorX = x;\n anchorY = y;\n context.moveTo(x + l, y + t);\n break;\n case 'c':\n // bezierCurveTo, relative\n tempX = x + current[5];\n tempY = y + current[6];\n controlX = x + current[3];\n controlY = y + current[4];\n context.bezierCurveTo(x + current[1] + l,\n // x1\n y + current[2] + t,\n // y1\n controlX + l,\n // x2\n controlY + t,\n // y2\n tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n case 'C':\n // bezierCurveTo, absolute\n x = current[5];\n y = current[6];\n controlX = current[3];\n controlY = current[4];\n context.bezierCurveTo(current[1] + l, current[2] + t, controlX + l, controlY + t, x + l, y + t);\n break;\n case 's':\n // shorthand cubic bezierCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.bezierCurveTo(controlX + l, controlY + t, x + current[1] + l, y + current[2] + t, tempX + l, tempY + t);\n\n // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n controlX = x + current[1];\n controlY = y + current[2];\n x = tempX;\n y = tempY;\n break;\n case 'S':\n // shorthand cubic bezierCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.bezierCurveTo(controlX + l, controlY + t, current[1] + l, current[2] + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n controlX = current[1];\n controlY = current[2];\n break;\n case 'q':\n // quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n controlX = x + current[1];\n controlY = y + current[2];\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n case 'Q':\n // quadraticCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n context.quadraticCurveTo(current[1] + l, current[2] + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = current[1];\n controlY = current[2];\n break;\n case 't':\n // shorthand quadraticCurveTo, relative\n\n // transform to absolute x,y\n tempX = x + current[1];\n tempY = y + current[2];\n if (previous[0].match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else if (previous[0] === 't') {\n // calculate reflection of previous control points for t\n controlX = 2 * x - tempControlX;\n controlY = 2 * y - tempControlY;\n } else if (previous[0] === 'q') {\n // calculate reflection of previous control points for q\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n tempControlX = controlX;\n tempControlY = controlY;\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = x + current[1];\n controlY = y + current[2];\n break;\n case 'T':\n tempX = current[1];\n tempY = current[2];\n\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n case 'a':\n drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + x + l, current[7] + y + t]);\n x += current[6];\n y += current[7];\n break;\n case 'A':\n drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + l, current[7] + t]);\n x = current[6];\n y = current[7];\n break;\n case 'z':\n case 'Z':\n x = anchorX;\n y = anchorY;\n context.closePath();\n break;\n }\n previous = current;\n }\n}\nfunction drawArc(context, x, y, coords) {\n const seg = segments(coords[5],\n // end x\n coords[6],\n // end y\n coords[0],\n // radius x\n coords[1],\n // radius y\n coords[3],\n // large flag\n coords[4],\n // sweep flag\n coords[2],\n // rotation\n x, y);\n for (let i = 0; i < seg.length; ++i) {\n const bez = bezier(seg[i]);\n context.bezierCurveTo(bez[0], bez[1], bez[2], bez[3], bez[4], bez[5]);\n }\n}\n\nconst Tan30 = 0.5773502691896257;\nconst builtins = {\n 'circle': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, Tau);\n }\n },\n 'cross': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n s = r / 2.5;\n context.moveTo(-r, -s);\n context.lineTo(-r, s);\n context.lineTo(-s, s);\n context.lineTo(-s, r);\n context.lineTo(s, r);\n context.lineTo(s, s);\n context.lineTo(r, s);\n context.lineTo(r, -s);\n context.lineTo(s, -s);\n context.lineTo(s, -r);\n context.lineTo(-s, -r);\n context.lineTo(-s, -s);\n context.closePath();\n }\n },\n 'diamond': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(-r, 0);\n context.lineTo(0, -r);\n context.lineTo(r, 0);\n context.lineTo(0, r);\n context.closePath();\n }\n },\n 'square': {\n draw: function (context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n },\n 'arrow': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n s = r / 7,\n t = r / 2.5,\n v = r / 8;\n context.moveTo(-s, r);\n context.lineTo(s, r);\n context.lineTo(s, -v);\n context.lineTo(t, -v);\n context.lineTo(0, -r);\n context.lineTo(-t, -v);\n context.lineTo(-s, -v);\n context.closePath();\n }\n },\n 'wedge': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r,\n o = h - r * Tan30,\n b = r / 4;\n context.moveTo(0, -h - o);\n context.lineTo(-b, h - o);\n context.lineTo(b, h - o);\n context.closePath();\n }\n },\n 'triangle': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r,\n o = h - r * Tan30;\n context.moveTo(0, -h - o);\n context.lineTo(-r, h - o);\n context.lineTo(r, h - o);\n context.closePath();\n }\n },\n 'triangle-up': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(0, -h);\n context.lineTo(-r, h);\n context.lineTo(r, h);\n context.closePath();\n }\n },\n 'triangle-down': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(0, h);\n context.lineTo(-r, -h);\n context.lineTo(r, -h);\n context.closePath();\n }\n },\n 'triangle-right': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(h, 0);\n context.lineTo(-h, -r);\n context.lineTo(-h, r);\n context.closePath();\n }\n },\n 'triangle-left': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(-h, 0);\n context.lineTo(h, -r);\n context.lineTo(h, r);\n context.closePath();\n }\n },\n 'stroke': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(-r, 0);\n context.lineTo(r, 0);\n }\n }\n};\nfunction symbols(_) {\n return hasOwnProperty(builtins, _) ? builtins[_] : customSymbol(_);\n}\nvar custom = {};\nfunction customSymbol(path) {\n if (!hasOwnProperty(custom, path)) {\n const parsed = parse(path);\n custom[path] = {\n draw: function (context, size) {\n pathRender(context, parsed, 0, 0, Math.sqrt(size) / 2);\n }\n };\n }\n return custom[path];\n}\n\n// See http://spencermortensen.com/articles/bezier-circle/\nconst C = 0.448084975506; // C = 1 - c\n\nfunction rectangleX(d) {\n return d.x;\n}\nfunction rectangleY(d) {\n return d.y;\n}\nfunction rectangleWidth(d) {\n return d.width;\n}\nfunction rectangleHeight(d) {\n return d.height;\n}\nfunction number(_) {\n return typeof _ === 'function' ? _ : () => +_;\n}\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(value, max));\n}\nfunction vg_rect () {\n var x = rectangleX,\n y = rectangleY,\n width = rectangleWidth,\n height = rectangleHeight,\n crTL = number(0),\n crTR = crTL,\n crBL = crTL,\n crBR = crTL,\n context = null;\n function rectangle(_, x0, y0) {\n var buffer,\n x1 = x0 != null ? x0 : +x.call(this, _),\n y1 = y0 != null ? y0 : +y.call(this, _),\n w = +width.call(this, _),\n h = +height.call(this, _),\n s = Math.min(w, h) / 2,\n tl = clamp(+crTL.call(this, _), 0, s),\n tr = clamp(+crTR.call(this, _), 0, s),\n bl = clamp(+crBL.call(this, _), 0, s),\n br = clamp(+crBR.call(this, _), 0, s);\n if (!context) context = buffer = path$3();\n if (tl <= 0 && tr <= 0 && bl <= 0 && br <= 0) {\n context.rect(x1, y1, w, h);\n } else {\n var x2 = x1 + w,\n y2 = y1 + h;\n context.moveTo(x1 + tl, y1);\n context.lineTo(x2 - tr, y1);\n context.bezierCurveTo(x2 - C * tr, y1, x2, y1 + C * tr, x2, y1 + tr);\n context.lineTo(x2, y2 - br);\n context.bezierCurveTo(x2, y2 - C * br, x2 - C * br, y2, x2 - br, y2);\n context.lineTo(x1 + bl, y2);\n context.bezierCurveTo(x1 + C * bl, y2, x1, y2 - C * bl, x1, y2 - bl);\n context.lineTo(x1, y1 + tl);\n context.bezierCurveTo(x1, y1 + C * tl, x1 + C * tl, y1, x1 + tl, y1);\n context.closePath();\n }\n if (buffer) {\n context = null;\n return buffer + '' || null;\n }\n }\n rectangle.x = function (_) {\n if (arguments.length) {\n x = number(_);\n return rectangle;\n } else {\n return x;\n }\n };\n rectangle.y = function (_) {\n if (arguments.length) {\n y = number(_);\n return rectangle;\n } else {\n return y;\n }\n };\n rectangle.width = function (_) {\n if (arguments.length) {\n width = number(_);\n return rectangle;\n } else {\n return width;\n }\n };\n rectangle.height = function (_) {\n if (arguments.length) {\n height = number(_);\n return rectangle;\n } else {\n return height;\n }\n };\n rectangle.cornerRadius = function (tl, tr, br, bl) {\n if (arguments.length) {\n crTL = number(tl);\n crTR = tr != null ? number(tr) : crTL;\n crBR = br != null ? number(br) : crTL;\n crBL = bl != null ? number(bl) : crTR;\n return rectangle;\n } else {\n return crTL;\n }\n };\n rectangle.context = function (_) {\n if (arguments.length) {\n context = _ == null ? null : _;\n return rectangle;\n } else {\n return context;\n }\n };\n return rectangle;\n}\n\nfunction vg_trail () {\n var x,\n y,\n size,\n defined,\n context = null,\n ready,\n x1,\n y1,\n r1;\n function point(x2, y2, w2) {\n const r2 = w2 / 2;\n if (ready) {\n var ux = y1 - y2,\n uy = x2 - x1;\n if (ux || uy) {\n // get normal vector\n var ud = Math.hypot(ux, uy),\n rx = (ux /= ud) * r1,\n ry = (uy /= ud) * r1,\n t = Math.atan2(uy, ux);\n\n // draw segment\n context.moveTo(x1 - rx, y1 - ry);\n context.lineTo(x2 - ux * r2, y2 - uy * r2);\n context.arc(x2, y2, r2, t - Math.PI, t);\n context.lineTo(x1 + rx, y1 + ry);\n context.arc(x1, y1, r1, t, t + Math.PI);\n } else {\n context.arc(x2, y2, r2, 0, Tau);\n }\n context.closePath();\n } else {\n ready = 1;\n }\n x1 = x2;\n y1 = y2;\n r1 = r2;\n }\n function trail(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n if (context == null) context = buffer = path$3();\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) ready = 0;\n }\n if (defined0) point(+x(d, i, data), +y(d, i, data), +size(d, i, data));\n }\n if (buffer) {\n context = null;\n return buffer + '' || null;\n }\n }\n trail.x = function (_) {\n if (arguments.length) {\n x = _;\n return trail;\n } else {\n return x;\n }\n };\n trail.y = function (_) {\n if (arguments.length) {\n y = _;\n return trail;\n } else {\n return y;\n }\n };\n trail.size = function (_) {\n if (arguments.length) {\n size = _;\n return trail;\n } else {\n return size;\n }\n };\n trail.defined = function (_) {\n if (arguments.length) {\n defined = _;\n return trail;\n } else {\n return defined;\n }\n };\n trail.context = function (_) {\n if (arguments.length) {\n if (_ == null) {\n context = null;\n } else {\n context = _;\n }\n return trail;\n } else {\n return context;\n }\n };\n return trail;\n}\n\nfunction value$1(a, b) {\n return a != null ? a : b;\n}\nconst x = item => item.x || 0,\n y = item => item.y || 0,\n w = item => item.width || 0,\n h = item => item.height || 0,\n xw = item => (item.x || 0) + (item.width || 0),\n yh = item => (item.y || 0) + (item.height || 0),\n sa = item => item.startAngle || 0,\n ea = item => item.endAngle || 0,\n pa = item => item.padAngle || 0,\n ir = item => item.innerRadius || 0,\n or = item => item.outerRadius || 0,\n cr = item => item.cornerRadius || 0,\n tl = item => value$1(item.cornerRadiusTopLeft, item.cornerRadius) || 0,\n tr = item => value$1(item.cornerRadiusTopRight, item.cornerRadius) || 0,\n br = item => value$1(item.cornerRadiusBottomRight, item.cornerRadius) || 0,\n bl = item => value$1(item.cornerRadiusBottomLeft, item.cornerRadius) || 0,\n sz = item => value$1(item.size, 64),\n ts = item => item.size || 1,\n def = item => !(item.defined === false),\n type = item => symbols(item.shape || 'circle');\nconst arcShape = arc$2().startAngle(sa).endAngle(ea).padAngle(pa).innerRadius(ir).outerRadius(or).cornerRadius(cr),\n areavShape = area$2().x(x).y1(y).y0(yh).defined(def),\n areahShape = area$2().y(y).x1(x).x0(xw).defined(def),\n lineShape = line$2().x(x).y(y).defined(def),\n rectShape = vg_rect().x(x).y(y).width(w).height(h).cornerRadius(tl, tr, br, bl),\n symbolShape = symbol$2().type(type).size(sz),\n trailShape = vg_trail().x(x).y(y).defined(def).size(ts);\nfunction hasCornerRadius(item) {\n return item.cornerRadius || item.cornerRadiusTopLeft || item.cornerRadiusTopRight || item.cornerRadiusBottomRight || item.cornerRadiusBottomLeft;\n}\nfunction arc$1(context, item) {\n return arcShape.context(context)(item);\n}\nfunction area$1(context, items) {\n const item = items[0],\n interp = item.interpolate || 'linear';\n return (item.orient === 'horizontal' ? areahShape : areavShape).curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction line$1(context, items) {\n const item = items[0],\n interp = item.interpolate || 'linear';\n return lineShape.curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction rectangle(context, item, x, y) {\n return rectShape.context(context)(item, x, y);\n}\nfunction shape$1(context, item) {\n return (item.mark.shape || item.shape).context(context)(item);\n}\nfunction symbol$1(context, item) {\n return symbolShape.context(context)(item);\n}\nfunction trail$1(context, items) {\n return trailShape.context(context)(items);\n}\n\nvar clip_id = 1;\nfunction resetSVGClipId() {\n clip_id = 1;\n}\nfunction clip$1 (renderer, item, size) {\n var clip = item.clip,\n defs = renderer._defs,\n id = item.clip_id || (item.clip_id = 'clip' + clip_id++),\n c = defs.clipping[id] || (defs.clipping[id] = {\n id: id\n });\n if (isFunction(clip)) {\n c.path = clip(null);\n } else if (hasCornerRadius(size)) {\n c.path = rectangle(null, size, 0, 0);\n } else {\n c.width = size.width || 0;\n c.height = size.height || 0;\n }\n return 'url(#' + id + ')';\n}\n\nfunction Bounds(b) {\n this.clear();\n if (b) this.union(b);\n}\nBounds.prototype = {\n clone() {\n return new Bounds(this);\n },\n clear() {\n this.x1 = +Number.MAX_VALUE;\n this.y1 = +Number.MAX_VALUE;\n this.x2 = -Number.MAX_VALUE;\n this.y2 = -Number.MAX_VALUE;\n return this;\n },\n empty() {\n return this.x1 === +Number.MAX_VALUE && this.y1 === +Number.MAX_VALUE && this.x2 === -Number.MAX_VALUE && this.y2 === -Number.MAX_VALUE;\n },\n equals(b) {\n return this.x1 === b.x1 && this.y1 === b.y1 && this.x2 === b.x2 && this.y2 === b.y2;\n },\n set(x1, y1, x2, y2) {\n if (x2 < x1) {\n this.x2 = x1;\n this.x1 = x2;\n } else {\n this.x1 = x1;\n this.x2 = x2;\n }\n if (y2 < y1) {\n this.y2 = y1;\n this.y1 = y2;\n } else {\n this.y1 = y1;\n this.y2 = y2;\n }\n return this;\n },\n add(x, y) {\n if (x < this.x1) this.x1 = x;\n if (y < this.y1) this.y1 = y;\n if (x > this.x2) this.x2 = x;\n if (y > this.y2) this.y2 = y;\n return this;\n },\n expand(d) {\n this.x1 -= d;\n this.y1 -= d;\n this.x2 += d;\n this.y2 += d;\n return this;\n },\n round() {\n this.x1 = Math.floor(this.x1);\n this.y1 = Math.floor(this.y1);\n this.x2 = Math.ceil(this.x2);\n this.y2 = Math.ceil(this.y2);\n return this;\n },\n scale(s) {\n this.x1 *= s;\n this.y1 *= s;\n this.x2 *= s;\n this.y2 *= s;\n return this;\n },\n translate(dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n },\n rotate(angle, x, y) {\n const p = this.rotatedPoints(angle, x, y);\n return this.clear().add(p[0], p[1]).add(p[2], p[3]).add(p[4], p[5]).add(p[6], p[7]);\n },\n rotatedPoints(angle, x, y) {\n var {\n x1,\n y1,\n x2,\n y2\n } = this,\n cos = Math.cos(angle),\n sin = Math.sin(angle),\n cx = x - x * cos + y * sin,\n cy = y - x * sin - y * cos;\n return [cos * x1 - sin * y1 + cx, sin * x1 + cos * y1 + cy, cos * x1 - sin * y2 + cx, sin * x1 + cos * y2 + cy, cos * x2 - sin * y1 + cx, sin * x2 + cos * y1 + cy, cos * x2 - sin * y2 + cx, sin * x2 + cos * y2 + cy];\n },\n union(b) {\n if (b.x1 < this.x1) this.x1 = b.x1;\n if (b.y1 < this.y1) this.y1 = b.y1;\n if (b.x2 > this.x2) this.x2 = b.x2;\n if (b.y2 > this.y2) this.y2 = b.y2;\n return this;\n },\n intersect(b) {\n if (b.x1 > this.x1) this.x1 = b.x1;\n if (b.y1 > this.y1) this.y1 = b.y1;\n if (b.x2 < this.x2) this.x2 = b.x2;\n if (b.y2 < this.y2) this.y2 = b.y2;\n return this;\n },\n encloses(b) {\n return b && this.x1 <= b.x1 && this.x2 >= b.x2 && this.y1 <= b.y1 && this.y2 >= b.y2;\n },\n alignsWith(b) {\n return b && (this.x1 == b.x1 || this.x2 == b.x2 || this.y1 == b.y1 || this.y2 == b.y2);\n },\n intersects(b) {\n return b && !(this.x2 < b.x1 || this.x1 > b.x2 || this.y2 < b.y1 || this.y1 > b.y2);\n },\n contains(x, y) {\n return !(x < this.x1 || x > this.x2 || y < this.y1 || y > this.y2);\n },\n width() {\n return this.x2 - this.x1;\n },\n height() {\n return this.y2 - this.y1;\n }\n};\n\nfunction Item(mark) {\n this.mark = mark;\n this.bounds = this.bounds || new Bounds();\n}\n\nfunction GroupItem(mark) {\n Item.call(this, mark);\n this.items = this.items || [];\n}\ninherits(GroupItem, Item);\n\nfunction ResourceLoader(customLoader) {\n this._pending = 0;\n this._loader = customLoader || loader();\n}\nfunction increment(loader) {\n loader._pending += 1;\n}\nfunction decrement(loader) {\n loader._pending -= 1;\n}\nResourceLoader.prototype = {\n pending() {\n return this._pending;\n },\n sanitizeURL(uri) {\n const loader = this;\n increment(loader);\n return loader._loader.sanitize(uri, {\n context: 'href'\n }).then(opt => {\n decrement(loader);\n return opt;\n }).catch(() => {\n decrement(loader);\n return null;\n });\n },\n loadImage(uri) {\n const loader = this,\n Image = image$1();\n increment(loader);\n return loader._loader.sanitize(uri, {\n context: 'image'\n }).then(opt => {\n const url = opt.href;\n if (!url || !Image) throw {\n url: url\n };\n const img = new Image();\n\n // set crossOrigin only if cors is defined; empty string sets anonymous mode\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/crossOrigin\n const cors = hasOwnProperty(opt, 'crossOrigin') ? opt.crossOrigin : 'anonymous';\n if (cors != null) img.crossOrigin = cors;\n\n // attempt to load image resource\n img.onload = () => decrement(loader);\n img.onerror = () => decrement(loader);\n img.src = url;\n return img;\n }).catch(e => {\n decrement(loader);\n return {\n complete: false,\n width: 0,\n height: 0,\n src: e && e.url || ''\n };\n });\n },\n ready() {\n const loader = this;\n return new Promise(accept => {\n function poll(value) {\n if (!loader.pending()) accept(value);else setTimeout(() => {\n poll(true);\n }, 10);\n }\n poll(false);\n });\n }\n};\n\nfunction boundStroke (bounds, item, miter) {\n if (item.stroke && item.opacity !== 0 && item.strokeOpacity !== 0) {\n const sw = item.strokeWidth != null ? +item.strokeWidth : 1;\n bounds.expand(sw + (miter ? miterAdjustment(item, sw) : 0));\n }\n return bounds;\n}\nfunction miterAdjustment(item, strokeWidth) {\n // TODO: more sophisticated adjustment? Or miter support in boundContext?\n return item.strokeJoin && item.strokeJoin !== 'miter' ? 0 : strokeWidth;\n}\n\nconst circleThreshold = Tau - 1e-8;\nlet bounds, lx, ly, rot, ma, mb, mc, md;\nconst add = (x, y) => bounds.add(x, y);\nconst addL = (x, y) => add(lx = x, ly = y);\nconst addX = x => add(x, bounds.y1);\nconst addY = y => add(bounds.x1, y);\nconst px = (x, y) => ma * x + mc * y;\nconst py = (x, y) => mb * x + md * y;\nconst addp = (x, y) => add(px(x, y), py(x, y));\nconst addpL = (x, y) => addL(px(x, y), py(x, y));\nfunction boundContext (_, deg) {\n bounds = _;\n if (deg) {\n rot = deg * DegToRad;\n ma = md = Math.cos(rot);\n mb = Math.sin(rot);\n mc = -mb;\n } else {\n ma = md = 1;\n rot = mb = mc = 0;\n }\n return context$1;\n}\nconst context$1 = {\n beginPath() {},\n closePath() {},\n moveTo: addpL,\n lineTo: addpL,\n rect(x, y, w, h) {\n if (rot) {\n addp(x + w, y);\n addp(x + w, y + h);\n addp(x, y + h);\n addpL(x, y);\n } else {\n add(x + w, y + h);\n addL(x, y);\n }\n },\n quadraticCurveTo(x1, y1, x2, y2) {\n const px1 = px(x1, y1),\n py1 = py(x1, y1),\n px2 = px(x2, y2),\n py2 = py(x2, y2);\n quadExtrema(lx, px1, px2, addX);\n quadExtrema(ly, py1, py2, addY);\n addL(px2, py2);\n },\n bezierCurveTo(x1, y1, x2, y2, x3, y3) {\n const px1 = px(x1, y1),\n py1 = py(x1, y1),\n px2 = px(x2, y2),\n py2 = py(x2, y2),\n px3 = px(x3, y3),\n py3 = py(x3, y3);\n cubicExtrema(lx, px1, px2, px3, addX);\n cubicExtrema(ly, py1, py2, py3, addY);\n addL(px3, py3);\n },\n arc(cx, cy, r, sa, ea, ccw) {\n sa += rot;\n ea += rot;\n\n // store last point on path\n lx = r * Math.cos(ea) + cx;\n ly = r * Math.sin(ea) + cy;\n if (Math.abs(ea - sa) > circleThreshold) {\n // treat as full circle\n add(cx - r, cy - r);\n add(cx + r, cy + r);\n } else {\n const update = a => add(r * Math.cos(a) + cx, r * Math.sin(a) + cy);\n let s, i;\n\n // sample end points\n update(sa);\n update(ea);\n\n // sample interior points aligned with 90 degrees\n if (ea !== sa) {\n sa = sa % Tau;\n if (sa < 0) sa += Tau;\n ea = ea % Tau;\n if (ea < 0) ea += Tau;\n if (ea < sa) {\n ccw = !ccw; // flip direction\n s = sa;\n sa = ea;\n ea = s; // swap end-points\n }\n\n if (ccw) {\n ea -= Tau;\n s = sa - sa % HalfPi;\n for (i = 0; i < 4 && s > ea; ++i, s -= HalfPi) update(s);\n } else {\n s = sa - sa % HalfPi + HalfPi;\n for (i = 0; i < 4 && s < ea; ++i, s = s + HalfPi) update(s);\n }\n }\n }\n }\n};\nfunction quadExtrema(x0, x1, x2, cb) {\n const t = (x0 - x1) / (x0 + x2 - 2 * x1);\n if (0 < t && t < 1) cb(x0 + (x1 - x0) * t);\n}\nfunction cubicExtrema(x0, x1, x2, x3, cb) {\n const a = x3 - x0 + 3 * x1 - 3 * x2,\n b = x0 + x2 - 2 * x1,\n c = x0 - x1;\n let t0 = 0,\n t1 = 0,\n r;\n\n // solve for parameter t\n if (Math.abs(a) > Epsilon) {\n // quadratic equation\n r = b * b + c * a;\n if (r >= 0) {\n r = Math.sqrt(r);\n t0 = (-b + r) / a;\n t1 = (-b - r) / a;\n }\n } else {\n // linear equation\n t0 = 0.5 * c / b;\n }\n\n // calculate position\n if (0 < t0 && t0 < 1) cb(cubic(t0, x0, x1, x2, x3));\n if (0 < t1 && t1 < 1) cb(cubic(t1, x0, x1, x2, x3));\n}\nfunction cubic(t, x0, x1, x2, x3) {\n const s = 1 - t,\n s2 = s * s,\n t2 = t * t;\n return s2 * s * x0 + 3 * s2 * t * x1 + 3 * s * t2 * x2 + t2 * t * x3;\n}\n\nvar context = (context = canvas(1, 1)) ? context.getContext('2d') : null;\n\nconst b = new Bounds();\nfunction intersectPath(draw) {\n return function (item, brush) {\n // rely on (inaccurate) bounds intersection if no context\n if (!context) return true;\n\n // add path to offscreen graphics context\n draw(context, item);\n\n // get bounds intersection region\n b.clear().union(item.bounds).intersect(brush).round();\n const {\n x1,\n y1,\n x2,\n y2\n } = b;\n\n // iterate over intersection region\n // perform fine grained inclusion test\n for (let y = y1; y <= y2; ++y) {\n for (let x = x1; x <= x2; ++x) {\n if (context.isPointInPath(x, y)) {\n return true;\n }\n }\n }\n\n // false if no hits in intersection region\n return false;\n };\n}\nfunction intersectPoint(item, box) {\n return box.contains(item.x || 0, item.y || 0);\n}\nfunction intersectRect(item, box) {\n const x = item.x || 0,\n y = item.y || 0,\n w = item.width || 0,\n h = item.height || 0;\n return box.intersects(b.set(x, y, x + w, y + h));\n}\nfunction intersectRule(item, box) {\n const x = item.x || 0,\n y = item.y || 0,\n x2 = item.x2 != null ? item.x2 : x,\n y2 = item.y2 != null ? item.y2 : y;\n return intersectBoxLine(box, x, y, x2, y2);\n}\nfunction intersectBoxLine(box, x, y, u, v) {\n const {\n x1,\n y1,\n x2,\n y2\n } = box,\n dx = u - x,\n dy = v - y;\n let t0 = 0,\n t1 = 1,\n p,\n q,\n r,\n e;\n for (e = 0; e < 4; ++e) {\n if (e === 0) {\n p = -dx;\n q = -(x1 - x);\n }\n if (e === 1) {\n p = dx;\n q = x2 - x;\n }\n if (e === 2) {\n p = -dy;\n q = -(y1 - y);\n }\n if (e === 3) {\n p = dy;\n q = y2 - y;\n }\n if (Math.abs(p) < 1e-10 && q < 0) return false;\n r = q / p;\n if (p < 0) {\n if (r > t1) return false;else if (r > t0) t0 = r;\n } else if (p > 0) {\n if (r < t0) return false;else if (r < t1) t1 = r;\n }\n }\n return true;\n}\n\nfunction blend (context, item) {\n context.globalCompositeOperation = item.blend || 'source-over';\n}\n\nfunction value (value, dflt) {\n return value == null ? dflt : value;\n}\n\nfunction addStops(gradient, stops) {\n const n = stops.length;\n for (let i = 0; i < n; ++i) {\n gradient.addColorStop(stops[i].offset, stops[i].color);\n }\n return gradient;\n}\nfunction gradient (context, spec, bounds) {\n const w = bounds.width(),\n h = bounds.height();\n let gradient;\n if (spec.gradient === 'radial') {\n gradient = context.createRadialGradient(bounds.x1 + value(spec.x1, 0.5) * w, bounds.y1 + value(spec.y1, 0.5) * h, Math.max(w, h) * value(spec.r1, 0), bounds.x1 + value(spec.x2, 0.5) * w, bounds.y1 + value(spec.y2, 0.5) * h, Math.max(w, h) * value(spec.r2, 0.5));\n } else {\n // linear gradient\n const x1 = value(spec.x1, 0),\n y1 = value(spec.y1, 0),\n x2 = value(spec.x2, 1),\n y2 = value(spec.y2, 0);\n if (x1 === x2 || y1 === y2 || w === h) {\n // axis aligned: use normal gradient\n gradient = context.createLinearGradient(bounds.x1 + x1 * w, bounds.y1 + y1 * h, bounds.x1 + x2 * w, bounds.y1 + y2 * h);\n } else {\n // not axis aligned: render gradient into a pattern (#2365)\n // this allows us to use normalized bounding box coordinates\n const image = canvas(Math.ceil(w), Math.ceil(h)),\n ictx = image.getContext('2d');\n ictx.scale(w, h);\n ictx.fillStyle = addStops(ictx.createLinearGradient(x1, y1, x2, y2), spec.stops);\n ictx.fillRect(0, 0, w, h);\n return context.createPattern(image, 'no-repeat');\n }\n }\n return addStops(gradient, spec.stops);\n}\n\nfunction color (context, item, value) {\n return isGradient(value) ? gradient(context, value, item.bounds) : value;\n}\n\nfunction fill (context, item, opacity) {\n opacity *= item.fillOpacity == null ? 1 : item.fillOpacity;\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.fillStyle = color(context, item, item.fill);\n return true;\n } else {\n return false;\n }\n}\n\nvar Empty = [];\nfunction stroke (context, item, opacity) {\n var lw = (lw = item.strokeWidth) != null ? lw : 1;\n if (lw <= 0) return false;\n opacity *= item.strokeOpacity == null ? 1 : item.strokeOpacity;\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.strokeStyle = color(context, item, item.stroke);\n context.lineWidth = lw;\n context.lineCap = item.strokeCap || 'butt';\n context.lineJoin = item.strokeJoin || 'miter';\n context.miterLimit = item.strokeMiterLimit || 10;\n if (context.setLineDash) {\n context.setLineDash(item.strokeDash || Empty);\n context.lineDashOffset = item.strokeDashOffset || 0;\n }\n return true;\n } else {\n return false;\n }\n}\n\nfunction compare(a, b) {\n return a.zindex - b.zindex || a.index - b.index;\n}\nfunction zorder(scene) {\n if (!scene.zdirty) return scene.zitems;\n var items = scene.items,\n output = [],\n item,\n i,\n n;\n for (i = 0, n = items.length; i < n; ++i) {\n item = items[i];\n item.index = i;\n if (item.zindex) output.push(item);\n }\n scene.zdirty = false;\n return scene.zitems = output.sort(compare);\n}\nfunction visit(scene, visitor) {\n var items = scene.items,\n i,\n n;\n if (!items || !items.length) return;\n const zitems = zorder(scene);\n if (zitems && zitems.length) {\n for (i = 0, n = items.length; i < n; ++i) {\n if (!items[i].zindex) visitor(items[i]);\n }\n items = zitems;\n }\n for (i = 0, n = items.length; i < n; ++i) {\n visitor(items[i]);\n }\n}\nfunction pickVisit(scene, visitor) {\n var items = scene.items,\n hit,\n i;\n if (!items || !items.length) return null;\n const zitems = zorder(scene);\n if (zitems && zitems.length) items = zitems;\n for (i = items.length; --i >= 0;) {\n if (hit = visitor(items[i])) return hit;\n }\n if (items === zitems) {\n for (items = scene.items, i = items.length; --i >= 0;) {\n if (!items[i].zindex) {\n if (hit = visitor(items[i])) return hit;\n }\n }\n }\n return null;\n}\n\nfunction drawAll(path) {\n return function (context, scene, bounds) {\n visit(scene, item => {\n if (!bounds || bounds.intersects(item.bounds)) {\n drawPath(path, context, item, item);\n }\n });\n };\n}\nfunction drawOne(path) {\n return function (context, scene, bounds) {\n if (scene.items.length && (!bounds || bounds.intersects(scene.bounds))) {\n drawPath(path, context, scene.items[0], scene.items);\n }\n };\n}\nfunction drawPath(path, context, item, items) {\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity === 0) return;\n if (path(context, items)) return;\n blend(context, item);\n if (item.fill && fill(context, item, opacity)) {\n context.fill();\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.stroke();\n }\n}\n\nfunction pick$1(test) {\n test = test || truthy;\n return function (context, scene, x, y, gx, gy) {\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return pickVisit(scene, item => {\n const b = item.bounds;\n // first hit test against bounding box\n if (b && !b.contains(gx, gy) || !b) return;\n // if in bounding box, perform more careful test\n if (test(context, item, x, y, gx, gy)) return item;\n });\n };\n}\nfunction hitPath(path, filled) {\n return function (context, o, x, y) {\n var item = Array.isArray(o) ? o[0] : o,\n fill = filled == null ? item.fill : filled,\n stroke = item.stroke && context.isPointInStroke,\n lw,\n lc;\n if (stroke) {\n lw = item.strokeWidth;\n lc = item.strokeCap;\n context.lineWidth = lw != null ? lw : 1;\n context.lineCap = lc != null ? lc : 'butt';\n }\n return path(context, o) ? false : fill && context.isPointInPath(x, y) || stroke && context.isPointInStroke(x, y);\n };\n}\nfunction pickPath(path) {\n return pick$1(hitPath(path));\n}\n\nfunction translate(x, y) {\n return 'translate(' + x + ',' + y + ')';\n}\nfunction rotate(a) {\n return 'rotate(' + a + ')';\n}\nfunction scale(scaleX, scaleY) {\n return 'scale(' + scaleX + ',' + scaleY + ')';\n}\nfunction translateItem(item) {\n return translate(item.x || 0, item.y || 0);\n}\nfunction rotateItem(item) {\n return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '');\n}\nfunction transformItem(item) {\n return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '') + (item.scaleX || item.scaleY ? ' ' + scale(item.scaleX || 1, item.scaleY || 1) : '');\n}\n\nfunction markItemPath (type, shape, isect) {\n function attr(emit, item) {\n emit('transform', rotateItem(item));\n emit('d', shape(null, item));\n }\n function bound(bounds, item) {\n shape(boundContext(bounds, item.angle), item);\n return boundStroke(bounds, item).translate(item.x || 0, item.y || 0);\n }\n function draw(context, item) {\n var x = item.x || 0,\n y = item.y || 0,\n a = item.angle || 0;\n context.translate(x, y);\n if (a) context.rotate(a *= DegToRad);\n context.beginPath();\n shape(context, item);\n if (a) context.rotate(-a);\n context.translate(-x, -y);\n }\n return {\n type: type,\n tag: 'path',\n nested: false,\n attr: attr,\n bound: bound,\n draw: drawAll(draw),\n pick: pickPath(draw),\n isect: isect || intersectPath(draw)\n };\n}\n\nvar arc = markItemPath('arc', arc$1);\n\nfunction pickArea(a, p) {\n var v = a[0].orient === 'horizontal' ? p[1] : p[0],\n z = a[0].orient === 'horizontal' ? 'y' : 'x',\n i = a.length,\n min = +Infinity,\n hit,\n d;\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n d = Math.abs(a[i][z] - v);\n if (d < min) {\n min = d;\n hit = a[i];\n }\n }\n return hit;\n}\nfunction pickLine(a, p) {\n var t = Math.pow(a[0].strokeWidth || 1, 2),\n i = a.length,\n dx,\n dy,\n dd;\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n if (dd < t) return a[i];\n }\n return null;\n}\nfunction pickTrail(a, p) {\n var i = a.length,\n dx,\n dy,\n dd;\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n dx = a[i].size || 1;\n if (dd < dx * dx) return a[i];\n }\n return null;\n}\n\nfunction markMultiItemPath (type, shape, tip) {\n function attr(emit, item) {\n var items = item.mark.items;\n if (items.length) emit('d', shape(null, items));\n }\n function bound(bounds, mark) {\n var items = mark.items;\n if (items.length === 0) {\n return bounds;\n } else {\n shape(boundContext(bounds), items);\n return boundStroke(bounds, items[0]);\n }\n }\n function draw(context, items) {\n context.beginPath();\n shape(context, items);\n }\n const hit = hitPath(draw);\n function pick(context, scene, x, y, gx, gy) {\n var items = scene.items,\n b = scene.bounds;\n if (!items || !items.length || b && !b.contains(gx, gy)) {\n return null;\n }\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return hit(context, items, x, y) ? items[0] : null;\n }\n return {\n type: type,\n tag: 'path',\n nested: true,\n attr: attr,\n bound: bound,\n draw: drawOne(draw),\n pick: pick,\n isect: intersectPoint,\n tip: tip\n };\n}\n\nvar area = markMultiItemPath('area', area$1, pickArea);\n\nfunction clip (context, scene) {\n var clip = scene.clip;\n context.save();\n if (isFunction(clip)) {\n context.beginPath();\n clip(context);\n context.clip();\n } else {\n clipGroup(context, scene.group);\n }\n}\nfunction clipGroup(context, group) {\n context.beginPath();\n hasCornerRadius(group) ? rectangle(context, group, 0, 0) : context.rect(0, 0, group.width || 0, group.height || 0);\n context.clip();\n}\n\nfunction offset$1(item) {\n const sw = value(item.strokeWidth, 1);\n return item.strokeOffset != null ? item.strokeOffset : item.stroke && sw > 0.5 && sw < 1.5 ? 0.5 - Math.abs(sw - 1) : 0;\n}\nfunction attr$5(emit, item) {\n emit('transform', translateItem(item));\n}\nfunction emitRectangle(emit, item) {\n const off = offset$1(item);\n emit('d', rectangle(null, item, off, off));\n}\nfunction background(emit, item) {\n emit('class', 'background');\n emit('aria-hidden', true);\n emitRectangle(emit, item);\n}\nfunction foreground(emit, item) {\n emit('class', 'foreground');\n emit('aria-hidden', true);\n if (item.strokeForeground) {\n emitRectangle(emit, item);\n } else {\n emit('d', '');\n }\n}\nfunction content(emit, item, renderer) {\n const url = item.clip ? clip$1(renderer, item, item) : null;\n emit('clip-path', url);\n}\nfunction bound$5(bounds, group) {\n if (!group.clip && group.items) {\n const items = group.items,\n m = items.length;\n for (let j = 0; j < m; ++j) {\n bounds.union(items[j].bounds);\n }\n }\n if ((group.clip || group.width || group.height) && !group.noBound) {\n bounds.add(0, 0).add(group.width || 0, group.height || 0);\n }\n boundStroke(bounds, group);\n return bounds.translate(group.x || 0, group.y || 0);\n}\nfunction rectanglePath(context, group, x, y) {\n const off = offset$1(group);\n context.beginPath();\n rectangle(context, group, (x || 0) + off, (y || 0) + off);\n}\nconst hitBackground = hitPath(rectanglePath);\nconst hitForeground = hitPath(rectanglePath, false);\nconst hitCorner = hitPath(rectanglePath, true);\nfunction draw$4(context, scene, bounds) {\n visit(scene, group => {\n const gx = group.x || 0,\n gy = group.y || 0,\n fore = group.strokeForeground,\n opacity = group.opacity == null ? 1 : group.opacity;\n\n // draw group background\n if ((group.stroke || group.fill) && opacity) {\n rectanglePath(context, group, gx, gy);\n blend(context, group);\n if (group.fill && fill(context, group, opacity)) {\n context.fill();\n }\n if (group.stroke && !fore && stroke(context, group, opacity)) {\n context.stroke();\n }\n }\n\n // setup graphics context, set clip and bounds\n context.save();\n context.translate(gx, gy);\n if (group.clip) clipGroup(context, group);\n if (bounds) bounds.translate(-gx, -gy);\n\n // draw group contents\n visit(group, item => {\n this.draw(context, item, bounds);\n });\n\n // restore graphics context\n if (bounds) bounds.translate(gx, gy);\n context.restore();\n\n // draw group foreground\n if (fore && group.stroke && opacity) {\n rectanglePath(context, group, gx, gy);\n blend(context, group);\n if (stroke(context, group, opacity)) {\n context.stroke();\n }\n }\n });\n}\nfunction pick(context, scene, x, y, gx, gy) {\n if (scene.bounds && !scene.bounds.contains(gx, gy) || !scene.items) {\n return null;\n }\n const cx = x * context.pixelRatio,\n cy = y * context.pixelRatio;\n return pickVisit(scene, group => {\n let hit, dx, dy;\n\n // first hit test bounding box\n const b = group.bounds;\n if (b && !b.contains(gx, gy)) return;\n\n // passed bounds check, test rectangular clip\n dx = group.x || 0;\n dy = group.y || 0;\n const dw = dx + (group.width || 0),\n dh = dy + (group.height || 0),\n c = group.clip;\n if (c && (gx < dx || gx > dw || gy < dy || gy > dh)) return;\n\n // adjust coordinate system\n context.save();\n context.translate(dx, dy);\n dx = gx - dx;\n dy = gy - dy;\n\n // test background for rounded corner clip\n if (c && hasCornerRadius(group) && !hitCorner(context, group, cx, cy)) {\n context.restore();\n return null;\n }\n const fore = group.strokeForeground,\n ix = scene.interactive !== false;\n\n // hit test against group foreground\n if (ix && fore && group.stroke && hitForeground(context, group, cx, cy)) {\n context.restore();\n return group;\n }\n\n // hit test against contained marks\n hit = pickVisit(group, mark => pickMark(mark, dx, dy) ? this.pick(mark, x, y, dx, dy) : null);\n\n // hit test against group background\n if (!hit && ix && (group.fill || !fore && group.stroke) && hitBackground(context, group, cx, cy)) {\n hit = group;\n }\n\n // restore state and return\n context.restore();\n return hit || null;\n });\n}\nfunction pickMark(mark, x, y) {\n return (mark.interactive !== false || mark.marktype === 'group') && mark.bounds && mark.bounds.contains(x, y);\n}\nvar group = {\n type: 'group',\n tag: 'g',\n nested: false,\n attr: attr$5,\n bound: bound$5,\n draw: draw$4,\n pick: pick,\n isect: intersectRect,\n content: content,\n background: background,\n foreground: foreground\n};\n\nvar metadata = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'version': '1.1'\n};\n\nfunction getImage(item, renderer) {\n var image = item.image;\n if (!image || item.url && item.url !== image.url) {\n image = {\n complete: false,\n width: 0,\n height: 0\n };\n renderer.loadImage(item.url).then(image => {\n item.image = image;\n item.image.url = item.url;\n });\n }\n return image;\n}\nfunction imageWidth(item, image) {\n return item.width != null ? item.width : !image || !image.width ? 0 : item.aspect !== false && item.height ? item.height * image.width / image.height : image.width;\n}\nfunction imageHeight(item, image) {\n return item.height != null ? item.height : !image || !image.height ? 0 : item.aspect !== false && item.width ? item.width * image.height / image.width : image.height;\n}\nfunction imageXOffset(align, w) {\n return align === 'center' ? w / 2 : align === 'right' ? w : 0;\n}\nfunction imageYOffset(baseline, h) {\n return baseline === 'middle' ? h / 2 : baseline === 'bottom' ? h : 0;\n}\nfunction attr$4(emit, item, renderer) {\n const img = getImage(item, renderer),\n w = imageWidth(item, img),\n h = imageHeight(item, img),\n x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h),\n i = !img.src && img.toDataURL ? img.toDataURL() : img.src || '';\n emit('href', i, metadata['xmlns:xlink'], 'xlink:href');\n emit('transform', translate(x, y));\n emit('width', w);\n emit('height', h);\n emit('preserveAspectRatio', item.aspect === false ? 'none' : 'xMidYMid');\n}\nfunction bound$4(bounds, item) {\n const img = item.image,\n w = imageWidth(item, img),\n h = imageHeight(item, img),\n x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h);\n return bounds.set(x, y, x + w, y + h);\n}\nfunction draw$3(context, scene, bounds) {\n visit(scene, item => {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n const img = getImage(item, this);\n let w = imageWidth(item, img);\n let h = imageHeight(item, img);\n if (w === 0 || h === 0) return; // early exit\n\n let x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h),\n opacity,\n ar0,\n ar1,\n t;\n if (item.aspect !== false) {\n ar0 = img.width / img.height;\n ar1 = item.width / item.height;\n if (ar0 === ar0 && ar1 === ar1 && ar0 !== ar1) {\n if (ar1 < ar0) {\n t = w / ar0;\n y += (h - t) / 2;\n h = t;\n } else {\n t = h * ar0;\n x += (w - t) / 2;\n w = t;\n }\n }\n }\n if (img.complete || img.toDataURL) {\n blend(context, item);\n context.globalAlpha = (opacity = item.opacity) != null ? opacity : 1;\n context.imageSmoothingEnabled = item.smooth !== false;\n context.drawImage(img, x, y, w, h);\n }\n });\n}\nvar image = {\n type: 'image',\n tag: 'image',\n nested: false,\n attr: attr$4,\n bound: bound$4,\n draw: draw$3,\n pick: pick$1(),\n isect: truthy,\n // bounds check is sufficient\n get: getImage,\n xOffset: imageXOffset,\n yOffset: imageYOffset\n};\n\nvar line = markMultiItemPath('line', line$1, pickLine);\n\nfunction attr$3(emit, item) {\n var sx = item.scaleX || 1,\n sy = item.scaleY || 1;\n if (sx !== 1 || sy !== 1) {\n emit('vector-effect', 'non-scaling-stroke');\n }\n emit('transform', transformItem(item));\n emit('d', item.path);\n}\nfunction path$1(context, item) {\n var path = item.path;\n if (path == null) return true;\n var x = item.x || 0,\n y = item.y || 0,\n sx = item.scaleX || 1,\n sy = item.scaleY || 1,\n a = (item.angle || 0) * DegToRad,\n cache = item.pathCache;\n if (!cache || cache.path !== path) {\n (item.pathCache = cache = parse(path)).path = path;\n }\n if (a && context.rotate && context.translate) {\n context.translate(x, y);\n context.rotate(a);\n pathRender(context, cache, 0, 0, sx, sy);\n context.rotate(-a);\n context.translate(-x, -y);\n } else {\n pathRender(context, cache, x, y, sx, sy);\n }\n}\nfunction bound$3(bounds, item) {\n return path$1(boundContext(bounds, item.angle), item) ? bounds.set(0, 0, 0, 0) : boundStroke(bounds, item, true);\n}\nvar path$2 = {\n type: 'path',\n tag: 'path',\n nested: false,\n attr: attr$3,\n bound: bound$3,\n draw: drawAll(path$1),\n pick: pickPath(path$1),\n isect: intersectPath(path$1)\n};\n\nfunction attr$2(emit, item) {\n emit('d', rectangle(null, item));\n}\nfunction bound$2(bounds, item) {\n var x, y;\n return boundStroke(bounds.set(x = item.x || 0, y = item.y || 0, x + item.width || 0, y + item.height || 0), item);\n}\nfunction draw$2(context, item) {\n context.beginPath();\n rectangle(context, item);\n}\nvar rect = {\n type: 'rect',\n tag: 'path',\n nested: false,\n attr: attr$2,\n bound: bound$2,\n draw: drawAll(draw$2),\n pick: pickPath(draw$2),\n isect: intersectRect\n};\n\nfunction attr$1(emit, item) {\n emit('transform', translateItem(item));\n emit('x2', item.x2 != null ? item.x2 - (item.x || 0) : 0);\n emit('y2', item.y2 != null ? item.y2 - (item.y || 0) : 0);\n}\nfunction bound$1(bounds, item) {\n var x1, y1;\n return boundStroke(bounds.set(x1 = item.x || 0, y1 = item.y || 0, item.x2 != null ? item.x2 : x1, item.y2 != null ? item.y2 : y1), item);\n}\nfunction path(context, item, opacity) {\n var x1, y1, x2, y2;\n if (item.stroke && stroke(context, item, opacity)) {\n x1 = item.x || 0;\n y1 = item.y || 0;\n x2 = item.x2 != null ? item.x2 : x1;\n y2 = item.y2 != null ? item.y2 : y1;\n context.beginPath();\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n return true;\n }\n return false;\n}\nfunction draw$1(context, scene, bounds) {\n visit(scene, item => {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity && path(context, item, opacity)) {\n blend(context, item);\n context.stroke();\n }\n });\n}\nfunction hit$1(context, item, x, y) {\n if (!context.isPointInStroke) return false;\n return path(context, item, 1) && context.isPointInStroke(x, y);\n}\nvar rule = {\n type: 'rule',\n tag: 'line',\n nested: false,\n attr: attr$1,\n bound: bound$1,\n draw: draw$1,\n pick: pick$1(hit$1),\n isect: intersectRule\n};\n\nvar shape = markItemPath('shape', shape$1);\n\nvar symbol = markItemPath('symbol', symbol$1, intersectPoint);\n\n// memoize text width measurement\nconst widthCache = lruCache();\nvar textMetrics = {\n height: fontSize,\n measureWidth: measureWidth,\n estimateWidth: estimateWidth,\n width: estimateWidth,\n canvas: useCanvas\n};\nuseCanvas(true);\nfunction useCanvas(use) {\n textMetrics.width = use && context ? measureWidth : estimateWidth;\n}\n\n// make simple estimate if no canvas is available\nfunction estimateWidth(item, text) {\n return _estimateWidth(textValue(item, text), fontSize(item));\n}\nfunction _estimateWidth(text, currentFontHeight) {\n return ~~(0.8 * text.length * currentFontHeight);\n}\n\n// measure text width if canvas is available\nfunction measureWidth(item, text) {\n return fontSize(item) <= 0 || !(text = textValue(item, text)) ? 0 : _measureWidth(text, font(item));\n}\nfunction _measureWidth(text, currentFont) {\n const key = `(${currentFont}) ${text}`;\n let width = widthCache.get(key);\n if (width === undefined) {\n context.font = currentFont;\n width = context.measureText(text).width;\n widthCache.set(key, width);\n }\n return width;\n}\nfunction fontSize(item) {\n return item.fontSize != null ? +item.fontSize || 0 : 11;\n}\nfunction lineHeight(item) {\n return item.lineHeight != null ? item.lineHeight : fontSize(item) + 2;\n}\nfunction lineArray(_) {\n return isArray(_) ? _.length > 1 ? _ : _[0] : _;\n}\nfunction textLines(item) {\n return lineArray(item.lineBreak && item.text && !isArray(item.text) ? item.text.split(item.lineBreak) : item.text);\n}\nfunction multiLineOffset(item) {\n const tl = textLines(item);\n return (isArray(tl) ? tl.length - 1 : 0) * lineHeight(item);\n}\nfunction textValue(item, line) {\n const text = line == null ? '' : (line + '').trim();\n return item.limit > 0 && text.length ? truncate(item, text) : text;\n}\nfunction widthGetter(item) {\n if (textMetrics.width === measureWidth) {\n // we are using canvas\n const currentFont = font(item);\n return text => _measureWidth(text, currentFont);\n } else {\n // we are relying on estimates\n const currentFontHeight = fontSize(item);\n return text => _estimateWidth(text, currentFontHeight);\n }\n}\nfunction truncate(item, text) {\n var limit = +item.limit,\n width = widthGetter(item);\n if (width(text) < limit) return text;\n var ellipsis = item.ellipsis || '\\u2026',\n rtl = item.dir === 'rtl',\n lo = 0,\n hi = text.length,\n mid;\n limit -= width(ellipsis);\n if (rtl) {\n while (lo < hi) {\n mid = lo + hi >>> 1;\n if (width(text.slice(mid)) > limit) lo = mid + 1;else hi = mid;\n }\n return ellipsis + text.slice(lo);\n } else {\n while (lo < hi) {\n mid = 1 + (lo + hi >>> 1);\n if (width(text.slice(0, mid)) < limit) lo = mid;else hi = mid - 1;\n }\n return text.slice(0, lo) + ellipsis;\n }\n}\nfunction fontFamily(item, quote) {\n var font = item.font;\n return (quote && font ? String(font).replace(/\"/g, '\\'') : font) || 'sans-serif';\n}\nfunction font(item, quote) {\n return '' + (item.fontStyle ? item.fontStyle + ' ' : '') + (item.fontVariant ? item.fontVariant + ' ' : '') + (item.fontWeight ? item.fontWeight + ' ' : '') + fontSize(item) + 'px ' + fontFamily(item, quote);\n}\nfunction offset(item) {\n // perform our own font baseline calculation\n // why? not all browsers support SVG 1.1 'alignment-baseline' :(\n // this also ensures consistent layout across renderers\n var baseline = item.baseline,\n h = fontSize(item);\n return Math.round(baseline === 'top' ? 0.79 * h : baseline === 'middle' ? 0.30 * h : baseline === 'bottom' ? -0.21 * h : baseline === 'line-top' ? 0.29 * h + 0.5 * lineHeight(item) : baseline === 'line-bottom' ? 0.29 * h - 0.5 * lineHeight(item) : 0);\n}\n\nconst textAlign = {\n 'left': 'start',\n 'center': 'middle',\n 'right': 'end'\n};\nconst tempBounds = new Bounds();\nfunction anchorPoint(item) {\n var x = item.x || 0,\n y = item.y || 0,\n r = item.radius || 0,\n t;\n if (r) {\n t = (item.theta || 0) - HalfPi;\n x += r * Math.cos(t);\n y += r * Math.sin(t);\n }\n tempBounds.x1 = x;\n tempBounds.y1 = y;\n return tempBounds;\n}\nfunction attr(emit, item) {\n var dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item),\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n a = item.angle || 0,\n t;\n emit('text-anchor', textAlign[item.align] || 'start');\n if (a) {\n t = translate(x, y) + ' ' + rotate(a);\n if (dx || dy) t += ' ' + translate(dx, dy);\n } else {\n t = translate(x + dx, y + dy);\n }\n emit('transform', t);\n}\nfunction bound(bounds, item, mode) {\n var h = textMetrics.height(item),\n a = item.align,\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item) - Math.round(0.8 * h),\n // use 4/5 offset\n tl = textLines(item),\n w;\n\n // get dimensions\n if (isArray(tl)) {\n // multi-line text\n h += lineHeight(item) * (tl.length - 1);\n w = tl.reduce((w, t) => Math.max(w, textMetrics.width(item, t)), 0);\n } else {\n // single-line text\n w = textMetrics.width(item, tl);\n }\n\n // horizontal alignment\n if (a === 'center') {\n dx -= w / 2;\n } else if (a === 'right') {\n dx -= w;\n } else ;\n bounds.set(dx += x, dy += y, dx + w, dy + h);\n if (item.angle && !mode) {\n bounds.rotate(item.angle * DegToRad, x, y);\n } else if (mode === 2) {\n return bounds.rotatedPoints(item.angle * DegToRad, x, y);\n }\n return bounds;\n}\nfunction draw(context, scene, bounds) {\n visit(scene, item => {\n var opacity = item.opacity == null ? 1 : item.opacity,\n p,\n x,\n y,\n i,\n lh,\n tl,\n str;\n if (bounds && !bounds.intersects(item.bounds) ||\n // bounds check\n opacity === 0 || item.fontSize <= 0 || item.text == null || item.text.length === 0) return;\n context.font = font(item);\n context.textAlign = item.align || 'left';\n p = anchorPoint(item);\n x = p.x1, y = p.y1;\n if (item.angle) {\n context.save();\n context.translate(x, y);\n context.rotate(item.angle * DegToRad);\n x = y = 0; // reset x, y\n }\n\n x += item.dx || 0;\n y += (item.dy || 0) + offset(item);\n tl = textLines(item);\n blend(context, item);\n if (isArray(tl)) {\n lh = lineHeight(item);\n for (i = 0; i < tl.length; ++i) {\n str = textValue(item, tl[i]);\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n y += lh;\n }\n } else {\n str = textValue(item, tl);\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n }\n if (item.angle) context.restore();\n });\n}\nfunction hit(context, item, x, y, gx, gy) {\n if (item.fontSize <= 0) return false;\n if (!item.angle) return true; // bounds sufficient if no rotation\n\n // project point into space of unrotated bounds\n var p = anchorPoint(item),\n ax = p.x1,\n ay = p.y1,\n b = bound(tempBounds, item, 1),\n a = -item.angle * DegToRad,\n cos = Math.cos(a),\n sin = Math.sin(a),\n px = cos * gx - sin * gy + (ax - cos * ax + sin * ay),\n py = sin * gx + cos * gy + (ay - sin * ax - cos * ay);\n return b.contains(px, py);\n}\nfunction intersectText(item, box) {\n const p = bound(tempBounds, item, 2);\n return intersectBoxLine(box, p[0], p[1], p[2], p[3]) || intersectBoxLine(box, p[0], p[1], p[4], p[5]) || intersectBoxLine(box, p[4], p[5], p[6], p[7]) || intersectBoxLine(box, p[2], p[3], p[6], p[7]);\n}\nvar text = {\n type: 'text',\n tag: 'text',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick$1(hit),\n isect: intersectText\n};\n\nvar trail = markMultiItemPath('trail', trail$1, pickTrail);\n\nvar Marks = {\n arc: arc,\n area: area,\n group: group,\n image: image,\n line: line,\n path: path$2,\n rect: rect,\n rule: rule,\n shape: shape,\n symbol: symbol,\n text: text,\n trail: trail\n};\n\nfunction boundItem (item, func, opt) {\n var type = Marks[item.mark.marktype],\n bound = func || type.bound;\n if (type.nested) item = item.mark;\n return bound(item.bounds || (item.bounds = new Bounds()), item, opt);\n}\n\nvar DUMMY = {\n mark: null\n};\nfunction boundMark (mark, bounds, opt) {\n var type = Marks[mark.marktype],\n bound = type.bound,\n items = mark.items,\n hasItems = items && items.length,\n i,\n n,\n item,\n b;\n if (type.nested) {\n if (hasItems) {\n item = items[0];\n } else {\n // no items, fake it\n DUMMY.mark = mark;\n item = DUMMY;\n }\n b = boundItem(item, bound, opt);\n bounds = bounds && bounds.union(b) || b;\n return bounds;\n }\n bounds = bounds || mark.bounds && mark.bounds.clear() || new Bounds();\n if (hasItems) {\n for (i = 0, n = items.length; i < n; ++i) {\n bounds.union(boundItem(items[i], bound, opt));\n }\n }\n return mark.bounds = bounds;\n}\n\nconst keys = ['marktype', 'name', 'role', 'interactive', 'clip', 'items', 'zindex', 'x', 'y', 'width', 'height', 'align', 'baseline',\n// layout\n'fill', 'fillOpacity', 'opacity', 'blend',\n// fill\n'stroke', 'strokeOpacity', 'strokeWidth', 'strokeCap',\n// stroke\n'strokeDash', 'strokeDashOffset',\n// stroke dash\n'strokeForeground', 'strokeOffset',\n// group\n'startAngle', 'endAngle', 'innerRadius', 'outerRadius',\n// arc\n'cornerRadius', 'padAngle',\n// arc, rect\n'cornerRadiusTopLeft', 'cornerRadiusTopRight',\n// rect, group\n'cornerRadiusBottomLeft', 'cornerRadiusBottomRight', 'interpolate', 'tension', 'orient', 'defined',\n// area, line\n'url', 'aspect', 'smooth',\n// image\n'path', 'scaleX', 'scaleY',\n// path\n'x2', 'y2',\n// rule\n'size', 'shape',\n// symbol\n'text', 'angle', 'theta', 'radius', 'dir', 'dx', 'dy',\n// text\n'ellipsis', 'limit', 'lineBreak', 'lineHeight', 'font', 'fontSize', 'fontWeight', 'fontStyle', 'fontVariant',\n// font\n'description', 'aria', 'ariaRole', 'ariaRoleDescription' // aria\n];\n\nfunction sceneToJSON(scene, indent) {\n return JSON.stringify(scene, keys, indent);\n}\nfunction sceneFromJSON(json) {\n const scene = typeof json === 'string' ? JSON.parse(json) : json;\n return initialize(scene);\n}\nfunction initialize(scene) {\n var type = scene.marktype,\n items = scene.items,\n parent,\n i,\n n;\n if (items) {\n for (i = 0, n = items.length; i < n; ++i) {\n parent = type ? 'mark' : 'group';\n items[i][parent] = scene;\n if (items[i].zindex) items[i][parent].zdirty = true;\n if ('group' === (type || parent)) initialize(items[i]);\n }\n }\n if (type) boundMark(scene);\n return scene;\n}\n\nfunction Scenegraph(scene) {\n if (arguments.length) {\n this.root = sceneFromJSON(scene);\n } else {\n this.root = createMark({\n marktype: 'group',\n name: 'root',\n role: 'frame'\n });\n this.root.items = [new GroupItem(this.root)];\n }\n}\nScenegraph.prototype = {\n toJSON(indent) {\n return sceneToJSON(this.root, indent || 0);\n },\n mark(markdef, group, index) {\n group = group || this.root.items[0];\n const mark = createMark(markdef, group);\n group.items[index] = mark;\n if (mark.zindex) mark.group.zdirty = true;\n return mark;\n }\n};\nfunction createMark(def, group) {\n const mark = {\n bounds: new Bounds(),\n clip: !!def.clip,\n group: group,\n interactive: def.interactive === false ? false : true,\n items: [],\n marktype: def.marktype,\n name: def.name || undefined,\n role: def.role || undefined,\n zindex: def.zindex || 0\n };\n\n // add accessibility properties if defined\n if (def.aria != null) {\n mark.aria = def.aria;\n }\n if (def.description) {\n mark.description = def.description;\n }\n return mark;\n}\n\n// create a new DOM element\nfunction domCreate(doc, tag, ns) {\n if (!doc && typeof document !== 'undefined' && document.createElement) {\n doc = document;\n }\n return doc ? ns ? doc.createElementNS(ns, tag) : doc.createElement(tag) : null;\n}\n\n// find first child element with matching tag\nfunction domFind(el, tag) {\n tag = tag.toLowerCase();\n var nodes = el.childNodes,\n i = 0,\n n = nodes.length;\n for (; i < n; ++i) if (nodes[i].tagName.toLowerCase() === tag) {\n return nodes[i];\n }\n}\n\n// retrieve child element at given index\n// create & insert if doesn't exist or if tags do not match\nfunction domChild(el, index, tag, ns) {\n var a = el.childNodes[index],\n b;\n if (!a || a.tagName.toLowerCase() !== tag.toLowerCase()) {\n b = a || null;\n a = domCreate(el.ownerDocument, tag, ns);\n el.insertBefore(a, b);\n }\n return a;\n}\n\n// remove all child elements at or above the given index\nfunction domClear(el, index) {\n var nodes = el.childNodes,\n curr = nodes.length;\n while (curr > index) el.removeChild(nodes[--curr]);\n return el;\n}\n\n// generate css class name for mark\nfunction cssClass(mark) {\n return 'mark-' + mark.marktype + (mark.role ? ' role-' + mark.role : '') + (mark.name ? ' ' + mark.name : '');\n}\n\nfunction point (event, el) {\n const rect = el.getBoundingClientRect();\n return [event.clientX - rect.left - (el.clientLeft || 0), event.clientY - rect.top - (el.clientTop || 0)];\n}\n\nfunction resolveItem (item, event, el, origin) {\n var mark = item && item.mark,\n mdef,\n p;\n if (mark && (mdef = Marks[mark.marktype]).tip) {\n p = point(event, el);\n p[0] -= origin[0];\n p[1] -= origin[1];\n while (item = item.mark.group) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n }\n item = mdef.tip(mark.items, p);\n }\n return item;\n}\n\n/**\n * Create a new Handler instance.\n * @param {object} [customLoader] - Optional loader instance for\n * href URL sanitization. If not specified, a standard loader\n * instance will be generated.\n * @param {function} [customTooltip] - Optional tooltip handler\n * function for custom tooltip display.\n * @constructor\n */\nfunction Handler(customLoader, customTooltip) {\n this._active = null;\n this._handlers = {};\n this._loader = customLoader || loader();\n this._tooltip = customTooltip || defaultTooltip;\n}\n\n// The default tooltip display handler.\n// Sets the HTML title attribute on the visualization container.\nfunction defaultTooltip(handler, event, item, value) {\n handler.element().setAttribute('title', value || '');\n}\nHandler.prototype = {\n /**\n * Initialize a new Handler instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {object} [obj] - Optional context object that should serve as\n * the \"this\" context for event callbacks.\n * @return {Handler} - This handler instance.\n */\n initialize(el, origin, obj) {\n this._el = el;\n this._obj = obj || null;\n return this.origin(origin);\n },\n /**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\n element() {\n return this._el;\n },\n /**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\n canvas() {\n return this._el && this._el.firstChild;\n },\n /**\n * Get / set the origin coordinates of the visualization.\n */\n origin(origin) {\n if (arguments.length) {\n this._origin = origin || [0, 0];\n return this;\n } else {\n return this._origin.slice();\n }\n },\n /**\n * Get / set the scenegraph root.\n */\n scene(scene) {\n if (!arguments.length) return this._scene;\n this._scene = scene;\n return this;\n },\n /**\n * Add an event handler. Subclasses should override this method.\n */\n on( /*type, handler*/) {},\n /**\n * Remove an event handler. Subclasses should override this method.\n */\n off( /*type, handler*/) {},\n /**\n * Utility method for finding the array index of an event handler.\n * @param {Array} h - An array of registered event handlers.\n * @param {string} type - The event type.\n * @param {function} handler - The event handler instance to find.\n * @return {number} - The handler's array index or -1 if not registered.\n */\n _handlerIndex(h, type, handler) {\n for (let i = h ? h.length : 0; --i >= 0;) {\n if (h[i].type === type && (!handler || h[i].handler === handler)) {\n return i;\n }\n }\n return -1;\n },\n /**\n * Returns an array with registered event handlers.\n * @param {string} [type] - The event type to query. Any annotations\n * are ignored; for example, for the argument \"click.foo\", \".foo\" will\n * be ignored and the method returns all \"click\" handlers. If type is\n * null or unspecified, this method returns handlers for all types.\n * @return {Array} - A new array containing all registered event handlers.\n */\n handlers(type) {\n const h = this._handlers,\n a = [];\n if (type) {\n a.push(...h[this.eventName(type)]);\n } else {\n for (const k in h) {\n a.push(...h[k]);\n }\n }\n return a;\n },\n /**\n * Parses an event name string to return the specific event type.\n * For example, given \"click.foo\" returns \"click\"\n * @param {string} name - The input event type string.\n * @return {string} - A string with the event type only.\n */\n eventName(name) {\n const i = name.indexOf('.');\n return i < 0 ? name : name.slice(0, i);\n },\n /**\n * Handle hyperlink navigation in response to an item.href value.\n * @param {Event} event - The event triggering hyperlink navigation.\n * @param {Item} item - The scenegraph item.\n * @param {string} href - The URL to navigate to.\n */\n handleHref(event, item, href) {\n this._loader.sanitize(href, {\n context: 'href'\n }).then(opt => {\n const e = new MouseEvent(event.type, event),\n a = domCreate(null, 'a');\n for (const name in opt) a.setAttribute(name, opt[name]);\n a.dispatchEvent(e);\n }).catch(() => {/* do nothing */});\n },\n /**\n * Handle tooltip display in response to an item.tooltip value.\n * @param {Event} event - The event triggering tooltip display.\n * @param {Item} item - The scenegraph item.\n * @param {boolean} show - A boolean flag indicating whether\n * to show or hide a tooltip for the given item.\n */\n handleTooltip(event, item, show) {\n if (item && item.tooltip != null) {\n item = resolveItem(item, event, this.canvas(), this._origin);\n const value = show && item && item.tooltip || null;\n this._tooltip.call(this._obj, this, event, item, value);\n }\n },\n /**\n * Returns the size of a scenegraph item and its position relative\n * to the viewport.\n * @param {Item} item - The scenegraph item.\n * @return {object} - A bounding box object (compatible with the\n * DOMRect type) consisting of x, y, width, heigh, top, left,\n * right, and bottom properties.\n */\n getItemBoundingClientRect(item) {\n const el = this.canvas();\n if (!el) return;\n const rect = el.getBoundingClientRect(),\n origin = this._origin,\n bounds = item.bounds,\n width = bounds.width(),\n height = bounds.height();\n let x = bounds.x1 + origin[0] + rect.left,\n y = bounds.y1 + origin[1] + rect.top;\n\n // translate coordinate for each parent group\n while (item.mark && (item = item.mark.group)) {\n x += item.x || 0;\n y += item.y || 0;\n }\n\n // return DOMRect-compatible bounding box\n return {\n x,\n y,\n width,\n height,\n left: x,\n top: y,\n right: x + width,\n bottom: y + height\n };\n }\n};\n\n/**\n * Create a new Renderer instance.\n * @param {object} [loader] - Optional loader instance for\n * image and href URL sanitization. If not specified, a\n * standard loader instance will be generated.\n * @constructor\n */\nfunction Renderer(loader) {\n this._el = null;\n this._bgcolor = null;\n this._loader = new ResourceLoader(loader);\n}\nRenderer.prototype = {\n /**\n * Initialize a new Renderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n this._el = el;\n return this.resize(width, height, origin, scaleFactor);\n },\n /**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\n element() {\n return this._el;\n },\n /**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\n canvas() {\n return this._el && this._el.firstChild;\n },\n /**\n * Get / set the background color.\n */\n background(bgcolor) {\n if (arguments.length === 0) return this._bgcolor;\n this._bgcolor = bgcolor;\n return this;\n },\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n this._width = width;\n this._height = height;\n this._origin = origin || [0, 0];\n this._scale = scaleFactor || 1;\n return this;\n },\n /**\n * Report a dirty item whose bounds should be redrawn.\n * This base class method does nothing. Subclasses that perform\n * incremental should implement this method.\n * @param {Item} item - The dirty item whose bounds should be redrawn.\n */\n dirty( /*item*/) {},\n /**\n * Render an input scenegraph, potentially with a set of dirty items.\n * This method will perform an immediate rendering with available resources.\n * The renderer may also need to perform image loading to perform a complete\n * render. This process can lead to asynchronous re-rendering of the scene\n * after this method returns. To receive notification when rendering is\n * complete, use the renderAsync method instead.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Renderer} - This renderer instance.\n */\n render(scene) {\n const r = this;\n\n // bind arguments into a render call, and cache it\n // this function may be subsequently called for async redraw\n r._call = function () {\n r._render(scene);\n };\n\n // invoke the renderer\n r._call();\n\n // clear the cached call for garbage collection\n // async redraws will stash their own copy\n r._call = null;\n return r;\n },\n /**\n * Internal rendering method. Renderer subclasses should override this\n * method to actually perform rendering.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\n _render( /*scene*/\n ) {\n // subclasses to override\n },\n /**\n * Asynchronous rendering method. Similar to render, but returns a Promise\n * that resolves when all rendering is completed. Sometimes a renderer must\n * perform image loading to get a complete rendering. The returned\n * Promise will not resolve until this process completes.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Promise} - A Promise that resolves when rendering is complete.\n */\n renderAsync(scene) {\n const r = this.render(scene);\n return this._ready ? this._ready.then(() => r) : Promise.resolve(r);\n },\n /**\n * Internal method for asynchronous resource loading.\n * Proxies method calls to the ImageLoader, and tracks loading\n * progress to invoke a re-render once complete.\n * @param {string} method - The method name to invoke on the ImageLoader.\n * @param {string} uri - The URI for the requested resource.\n * @return {Promise} - A Promise that resolves to the requested resource.\n */\n _load(method, uri) {\n var r = this,\n p = r._loader[method](uri);\n if (!r._ready) {\n // re-render the scene when loading completes\n const call = r._call;\n r._ready = r._loader.ready().then(redraw => {\n if (redraw) call();\n r._ready = null;\n });\n }\n return p;\n },\n /**\n * Sanitize a URL to include as a hyperlink in the rendered scene.\n * This method proxies a call to ImageLoader.sanitizeURL, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string to sanitize.\n * @return {Promise} - A Promise that resolves to the sanitized URL.\n */\n sanitizeURL(uri) {\n return this._load('sanitizeURL', uri);\n },\n /**\n * Requests an image to include in the rendered scene.\n * This method proxies a call to ImageLoader.loadImage, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string of the image.\n * @return {Promise} - A Promise that resolves to the loaded Image.\n */\n loadImage(uri) {\n return this._load('loadImage', uri);\n }\n};\n\nconst KeyDownEvent = 'keydown';\nconst KeyPressEvent = 'keypress';\nconst KeyUpEvent = 'keyup';\nconst DragEnterEvent = 'dragenter';\nconst DragLeaveEvent = 'dragleave';\nconst DragOverEvent = 'dragover';\nconst MouseDownEvent = 'mousedown';\nconst MouseUpEvent = 'mouseup';\nconst MouseMoveEvent = 'mousemove';\nconst MouseOutEvent = 'mouseout';\nconst MouseOverEvent = 'mouseover';\nconst ClickEvent = 'click';\nconst DoubleClickEvent = 'dblclick';\nconst WheelEvent = 'wheel';\nconst MouseWheelEvent = 'mousewheel';\nconst TouchStartEvent = 'touchstart';\nconst TouchMoveEvent = 'touchmove';\nconst TouchEndEvent = 'touchend';\nconst Events = [KeyDownEvent, KeyPressEvent, KeyUpEvent, DragEnterEvent, DragLeaveEvent, DragOverEvent, MouseDownEvent, MouseUpEvent, MouseMoveEvent, MouseOutEvent, MouseOverEvent, ClickEvent, DoubleClickEvent, WheelEvent, MouseWheelEvent, TouchStartEvent, TouchMoveEvent, TouchEndEvent];\nconst TooltipShowEvent = MouseMoveEvent;\nconst TooltipHideEvent = MouseOutEvent;\nconst HrefEvent = ClickEvent;\n\nfunction CanvasHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n this._down = null;\n this._touch = null;\n this._first = true;\n this._events = {};\n}\nconst eventBundle = type => type === TouchStartEvent || type === TouchMoveEvent || type === TouchEndEvent ? [TouchStartEvent, TouchMoveEvent, TouchEndEvent] : [type];\n\n// lazily add listeners to the canvas as needed\nfunction eventListenerCheck(handler, type) {\n eventBundle(type).forEach(_ => addEventListener(handler, _));\n}\nfunction addEventListener(handler, type) {\n const canvas = handler.canvas();\n if (canvas && !handler._events[type]) {\n handler._events[type] = 1;\n canvas.addEventListener(type, handler[type] ? evt => handler[type](evt) : evt => handler.fire(type, evt));\n }\n}\nfunction move(moveEvent, overEvent, outEvent) {\n return function (evt) {\n const a = this._active,\n p = this.pickEvent(evt);\n if (p === a) {\n // active item and picked item are the same\n this.fire(moveEvent, evt); // fire move\n } else {\n // active item and picked item are different\n if (!a || !a.exit) {\n // fire out for prior active item\n // suppress if active item was removed from scene\n this.fire(outEvent, evt);\n }\n this._active = p; // set new active item\n this.fire(overEvent, evt); // fire over for new active item\n this.fire(moveEvent, evt); // fire move for new active item\n }\n };\n}\n\nfunction inactive(type) {\n return function (evt) {\n this.fire(type, evt);\n this._active = null;\n };\n}\ninherits(CanvasHandler, Handler, {\n initialize(el, origin, obj) {\n this._canvas = el && domFind(el, 'canvas');\n\n // add minimal events required for proper state management\n [ClickEvent, MouseDownEvent, MouseMoveEvent, MouseOutEvent, DragLeaveEvent].forEach(type => eventListenerCheck(this, type));\n return Handler.prototype.initialize.call(this, el, origin, obj);\n },\n // return the backing canvas instance\n canvas() {\n return this._canvas;\n },\n // retrieve the current canvas context\n context() {\n return this._canvas.getContext('2d');\n },\n // supported events\n events: Events,\n // to keep old versions of firefox happy\n DOMMouseScroll(evt) {\n this.fire(MouseWheelEvent, evt);\n },\n mousemove: move(MouseMoveEvent, MouseOverEvent, MouseOutEvent),\n dragover: move(DragOverEvent, DragEnterEvent, DragLeaveEvent),\n mouseout: inactive(MouseOutEvent),\n dragleave: inactive(DragLeaveEvent),\n mousedown(evt) {\n this._down = this._active;\n this.fire(MouseDownEvent, evt);\n },\n click(evt) {\n if (this._down === this._active) {\n this.fire(ClickEvent, evt);\n this._down = null;\n }\n },\n touchstart(evt) {\n this._touch = this.pickEvent(evt.changedTouches[0]);\n if (this._first) {\n this._active = this._touch;\n this._first = false;\n }\n this.fire(TouchStartEvent, evt, true);\n },\n touchmove(evt) {\n this.fire(TouchMoveEvent, evt, true);\n },\n touchend(evt) {\n this.fire(TouchEndEvent, evt, true);\n this._touch = null;\n },\n // fire an event\n fire(type, evt, touch) {\n const a = touch ? this._touch : this._active,\n h = this._handlers[type];\n\n // set event type relative to scenegraph items\n evt.vegaType = type;\n\n // handle hyperlinks and tooltips first\n if (type === HrefEvent && a && a.href) {\n this.handleHref(evt, a, a.href);\n } else if (type === TooltipShowEvent || type === TooltipHideEvent) {\n this.handleTooltip(evt, a, type !== TooltipHideEvent);\n }\n\n // invoke all registered handlers\n if (h) {\n for (let i = 0, len = h.length; i < len; ++i) {\n h[i].handler.call(this._obj, evt, a);\n }\n }\n },\n // add an event handler\n on(type, handler) {\n const name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n if (i < 0) {\n eventListenerCheck(this, type);\n (h[name] || (h[name] = [])).push({\n type: type,\n handler: handler\n });\n }\n return this;\n },\n // remove an event handler\n off(type, handler) {\n const name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n if (i >= 0) {\n h.splice(i, 1);\n }\n return this;\n },\n pickEvent(evt) {\n const p = point(evt, this._canvas),\n o = this._origin;\n return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]);\n },\n // find the scenegraph item at the current mouse position\n // x, y -- the absolute x, y mouse coordinates on the canvas element\n // gx, gy -- the relative coordinates within the current group\n pick(scene, x, y, gx, gy) {\n const g = this.context(),\n mark = Marks[scene.marktype];\n return mark.pick.call(this, g, scene, x, y, gx, gy);\n }\n});\n\nfunction devicePixelRatio() {\n return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n}\nvar pixelRatio = devicePixelRatio();\nfunction resize (canvas, width, height, origin, scaleFactor, opt) {\n const inDOM = typeof HTMLElement !== 'undefined' && canvas instanceof HTMLElement && canvas.parentNode != null,\n context = canvas.getContext('2d'),\n ratio = inDOM ? pixelRatio : scaleFactor;\n canvas.width = width * ratio;\n canvas.height = height * ratio;\n for (const key in opt) {\n context[key] = opt[key];\n }\n if (inDOM && ratio !== 1) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n context.pixelRatio = ratio;\n context.setTransform(ratio, 0, 0, ratio, ratio * origin[0], ratio * origin[1]);\n return canvas;\n}\n\nfunction CanvasRenderer(loader) {\n Renderer.call(this, loader);\n this._options = {};\n this._redraw = false;\n this._dirty = new Bounds();\n this._tempb = new Bounds();\n}\nconst base$1 = Renderer.prototype;\nconst viewBounds = (origin, width, height) => new Bounds().set(0, 0, width, height).translate(-origin[0], -origin[1]);\nfunction clipToBounds(g, b, origin) {\n // expand bounds by 1 pixel, then round to pixel boundaries\n b.expand(1).round();\n\n // align to base pixel grid in case of non-integer scaling (#2425)\n if (g.pixelRatio % 1) {\n b.scale(g.pixelRatio).round().scale(1 / g.pixelRatio);\n }\n\n // to avoid artifacts translate if origin has fractional pixels\n b.translate(-(origin[0] % 1), -(origin[1] % 1));\n\n // set clip path\n g.beginPath();\n g.rect(b.x1, b.y1, b.width(), b.height());\n g.clip();\n return b;\n}\ninherits(CanvasRenderer, Renderer, {\n initialize(el, width, height, origin, scaleFactor, options) {\n this._options = options || {};\n this._canvas = this._options.externalContext ? null : canvas(1, 1, this._options.type); // instantiate a small canvas\n\n if (el && this._canvas) {\n domClear(el, 0).appendChild(this._canvas);\n this._canvas.setAttribute('class', 'marks');\n }\n\n // this method will invoke resize to size the canvas appropriately\n return base$1.initialize.call(this, el, width, height, origin, scaleFactor);\n },\n resize(width, height, origin, scaleFactor) {\n base$1.resize.call(this, width, height, origin, scaleFactor);\n if (this._canvas) {\n // configure canvas size and transform\n resize(this._canvas, this._width, this._height, this._origin, this._scale, this._options.context);\n } else {\n // external context needs to be scaled and positioned to origin\n const ctx = this._options.externalContext;\n if (!ctx) error('CanvasRenderer is missing a valid canvas or context');\n ctx.scale(this._scale, this._scale);\n ctx.translate(this._origin[0], this._origin[1]);\n }\n this._redraw = true;\n return this;\n },\n canvas() {\n return this._canvas;\n },\n context() {\n return this._options.externalContext || (this._canvas ? this._canvas.getContext('2d') : null);\n },\n dirty(item) {\n const b = this._tempb.clear().union(item.bounds);\n let g = item.mark.group;\n while (g) {\n b.translate(g.x || 0, g.y || 0);\n g = g.mark.group;\n }\n this._dirty.union(b);\n },\n _render(scene) {\n const g = this.context(),\n o = this._origin,\n w = this._width,\n h = this._height,\n db = this._dirty,\n vb = viewBounds(o, w, h);\n\n // setup\n g.save();\n const b = this._redraw || db.empty() ? (this._redraw = false, vb.expand(1)) : clipToBounds(g, vb.intersect(db), o);\n this.clear(-o[0], -o[1], w, h);\n\n // render\n this.draw(g, scene, b);\n\n // takedown\n g.restore();\n db.clear();\n return this;\n },\n draw(ctx, scene, bounds) {\n const mark = Marks[scene.marktype];\n if (scene.clip) clip(ctx, scene);\n mark.draw.call(this, ctx, scene, bounds);\n if (scene.clip) ctx.restore();\n },\n clear(x, y, w, h) {\n const opt = this._options,\n g = this.context();\n if (opt.type !== 'pdf' && !opt.externalContext) {\n // calling clear rect voids vector output in pdf mode\n // and could remove external context content (#2615)\n g.clearRect(x, y, w, h);\n }\n if (this._bgcolor != null) {\n g.fillStyle = this._bgcolor;\n g.fillRect(x, y, w, h);\n }\n }\n});\n\nfunction SVGHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n const h = this;\n h._hrefHandler = listener(h, (evt, item) => {\n if (item && item.href) h.handleHref(evt, item, item.href);\n });\n h._tooltipHandler = listener(h, (evt, item) => {\n h.handleTooltip(evt, item, evt.type !== TooltipHideEvent);\n });\n}\n\n// wrap an event listener for the SVG DOM\nconst listener = (context, handler) => evt => {\n let item = evt.target.__data__;\n item = Array.isArray(item) ? item[0] : item;\n evt.vegaType = evt.type;\n handler.call(context._obj, evt, item);\n};\ninherits(SVGHandler, Handler, {\n initialize(el, origin, obj) {\n let svg = this._svg;\n if (svg) {\n svg.removeEventListener(HrefEvent, this._hrefHandler);\n svg.removeEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.removeEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n this._svg = svg = el && domFind(el, 'svg');\n if (svg) {\n svg.addEventListener(HrefEvent, this._hrefHandler);\n svg.addEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.addEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n return Handler.prototype.initialize.call(this, el, origin, obj);\n },\n canvas() {\n return this._svg;\n },\n // add an event handler\n on(type, handler) {\n const name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n if (i < 0) {\n const x = {\n type,\n handler,\n listener: listener(this, handler)\n };\n (h[name] || (h[name] = [])).push(x);\n if (this._svg) {\n this._svg.addEventListener(name, x.listener);\n }\n }\n return this;\n },\n // remove an event handler\n off(type, handler) {\n const name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n if (i >= 0) {\n if (this._svg) {\n this._svg.removeEventListener(name, h[i].listener);\n }\n h.splice(i, 1);\n }\n return this;\n }\n});\n\nconst ARIA_HIDDEN = 'aria-hidden';\nconst ARIA_LABEL = 'aria-label';\nconst ARIA_ROLE = 'role';\nconst ARIA_ROLEDESCRIPTION = 'aria-roledescription';\nconst GRAPHICS_OBJECT = 'graphics-object';\nconst GRAPHICS_SYMBOL = 'graphics-symbol';\nconst bundle = (role, roledesc, label) => ({\n [ARIA_ROLE]: role,\n [ARIA_ROLEDESCRIPTION]: roledesc,\n [ARIA_LABEL]: label || undefined\n});\n\n// these roles are covered by related roles\n// we can ignore them, no need to generate attributes\nconst AriaIgnore = toSet(['axis-domain', 'axis-grid', 'axis-label', 'axis-tick', 'axis-title', 'legend-band', 'legend-entry', 'legend-gradient', 'legend-label', 'legend-title', 'legend-symbol', 'title']);\n\n// aria attribute generators for guide roles\nconst AriaGuides = {\n 'axis': {\n desc: 'axis',\n caption: axisCaption\n },\n 'legend': {\n desc: 'legend',\n caption: legendCaption\n },\n 'title-text': {\n desc: 'title',\n caption: item => `Title text '${titleCaption(item)}'`\n },\n 'title-subtitle': {\n desc: 'subtitle',\n caption: item => `Subtitle text '${titleCaption(item)}'`\n }\n};\n\n// aria properties generated for mark item encoding channels\nconst AriaEncode = {\n ariaRole: ARIA_ROLE,\n ariaRoleDescription: ARIA_ROLEDESCRIPTION,\n description: ARIA_LABEL\n};\nfunction ariaItemAttributes(emit, item) {\n const hide = item.aria === false;\n emit(ARIA_HIDDEN, hide || undefined);\n if (hide || item.description == null) {\n for (const prop in AriaEncode) {\n emit(AriaEncode[prop], undefined);\n }\n } else {\n const type = item.mark.marktype;\n emit(ARIA_LABEL, item.description);\n emit(ARIA_ROLE, item.ariaRole || (type === 'group' ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL));\n emit(ARIA_ROLEDESCRIPTION, item.ariaRoleDescription || `${type} mark`);\n }\n}\nfunction ariaMarkAttributes(mark) {\n return mark.aria === false ? {\n [ARIA_HIDDEN]: true\n } : AriaIgnore[mark.role] ? null : AriaGuides[mark.role] ? ariaGuide(mark, AriaGuides[mark.role]) : ariaMark(mark);\n}\nfunction ariaMark(mark) {\n const type = mark.marktype;\n const recurse = type === 'group' || type === 'text' || mark.items.some(_ => _.description != null && _.aria !== false);\n return bundle(recurse ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL, `${type} mark container`, mark.description);\n}\nfunction ariaGuide(mark, opt) {\n try {\n const item = mark.items[0],\n caption = opt.caption || (() => '');\n return bundle(opt.role || GRAPHICS_SYMBOL, opt.desc, item.description || caption(item));\n } catch (err) {\n return null;\n }\n}\nfunction titleCaption(item) {\n return array(item.text).join(' ');\n}\nfunction axisCaption(item) {\n const datum = item.datum,\n orient = item.orient,\n title = datum.title ? extractTitle(item) : null,\n ctx = item.context,\n scale = ctx.scales[datum.scale].value,\n locale = ctx.dataflow.locale(),\n type = scale.type,\n xy = orient === 'left' || orient === 'right' ? 'Y' : 'X';\n return `${xy}-axis` + (title ? ` titled '${title}'` : '') + ` for a ${isDiscrete(type) ? 'discrete' : type} scale` + ` with ${domainCaption(locale, scale, item)}`;\n}\nfunction legendCaption(item) {\n const datum = item.datum,\n title = datum.title ? extractTitle(item) : null,\n type = `${datum.type || ''} legend`.trim(),\n scales = datum.scales,\n props = Object.keys(scales),\n ctx = item.context,\n scale = ctx.scales[scales[props[0]]].value,\n locale = ctx.dataflow.locale();\n return capitalize(type) + (title ? ` titled '${title}'` : '') + ` for ${channelCaption(props)}` + ` with ${domainCaption(locale, scale, item)}`;\n}\nfunction extractTitle(item) {\n try {\n return array(peek(item.items).items[0].text).join(' ');\n } catch (err) {\n return null;\n }\n}\nfunction channelCaption(props) {\n props = props.map(p => p + (p === 'fill' || p === 'stroke' ? ' color' : ''));\n return props.length < 2 ? props[0] : props.slice(0, -1).join(', ') + ' and ' + peek(props);\n}\nfunction capitalize(s) {\n return s.length ? s[0].toUpperCase() + s.slice(1) : s;\n}\n\nconst innerText = val => (val + '').replace(/&/g, '&').replace(//g, '>');\nconst attrText = val => innerText(val).replace(/\"/g, '"').replace(/\\t/g, ' ').replace(/\\n/g, ' ').replace(/\\r/g, ' ');\nfunction markup() {\n let buf = '',\n outer = '',\n inner = '';\n const stack = [],\n clear = () => outer = inner = '',\n push = tag => {\n if (outer) {\n buf += `${outer}>${inner}`;\n clear();\n }\n stack.push(tag);\n },\n attr = (name, value) => {\n if (value != null) outer += ` ${name}=\"${attrText(value)}\"`;\n return m;\n },\n m = {\n open(tag) {\n push(tag);\n outer = '<' + tag;\n for (var _len = arguments.length, attrs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n attrs[_key - 1] = arguments[_key];\n }\n for (const set of attrs) {\n for (const key in set) attr(key, set[key]);\n }\n return m;\n },\n close() {\n const tag = stack.pop();\n if (outer) {\n buf += outer + (inner ? `>${inner}` : '/>');\n } else {\n buf += ``;\n }\n clear();\n return m;\n },\n attr,\n text: t => (inner += innerText(t), m),\n toString: () => buf\n };\n return m;\n}\nconst serializeXML = node => _serialize(markup(), node) + '';\nfunction _serialize(m, node) {\n m.open(node.tagName);\n if (node.hasAttributes()) {\n const attrs = node.attributes,\n n = attrs.length;\n for (let i = 0; i < n; ++i) {\n m.attr(attrs[i].name, attrs[i].value);\n }\n }\n if (node.hasChildNodes()) {\n const children = node.childNodes;\n for (const child of children) {\n child.nodeType === 3 // text node\n ? m.text(child.nodeValue) : _serialize(m, child);\n }\n }\n return m.close();\n}\n\nconst stylesAttr = {\n fill: 'fill',\n fillOpacity: 'fill-opacity',\n stroke: 'stroke',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n strokeCap: 'stroke-linecap',\n strokeJoin: 'stroke-linejoin',\n strokeDash: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeMiterLimit: 'stroke-miterlimit',\n opacity: 'opacity'\n};\nconst stylesCss = {\n blend: 'mix-blend-mode'\n};\n\n// ensure miter limit default is consistent with canvas (#2498)\nconst rootAttributes = {\n 'fill': 'none',\n 'stroke-miterlimit': 10\n};\n\nconst RootIndex = 0,\n xmlns = 'http://www.w3.org/2000/xmlns/',\n svgns = metadata.xmlns;\nfunction SVGRenderer(loader) {\n Renderer.call(this, loader);\n this._dirtyID = 0;\n this._dirty = [];\n this._svg = null;\n this._root = null;\n this._defs = null;\n}\nconst base = Renderer.prototype;\ninherits(SVGRenderer, Renderer, {\n /**\n * Initialize a new SVGRenderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n // create the svg definitions cache\n this._defs = {};\n this._clearDefs();\n if (el) {\n this._svg = domChild(el, 0, 'svg', svgns);\n this._svg.setAttributeNS(xmlns, 'xmlns', svgns);\n this._svg.setAttributeNS(xmlns, 'xmlns:xlink', metadata['xmlns:xlink']);\n this._svg.setAttribute('version', metadata['version']);\n this._svg.setAttribute('class', 'marks');\n domClear(el, 1);\n\n // set the svg root group\n this._root = domChild(this._svg, RootIndex, 'g', svgns);\n setAttributes(this._root, rootAttributes);\n\n // ensure no additional child elements\n domClear(this._svg, RootIndex + 1);\n }\n\n // set background color if defined\n this.background(this._bgcolor);\n return base.initialize.call(this, el, width, height, origin, scaleFactor);\n },\n /**\n * Get / set the background color.\n */\n background(bgcolor) {\n if (arguments.length && this._svg) {\n this._svg.style.setProperty('background-color', bgcolor);\n }\n return base.background.apply(this, arguments);\n },\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n base.resize.call(this, width, height, origin, scaleFactor);\n if (this._svg) {\n setAttributes(this._svg, {\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: `0 0 ${this._width} ${this._height}`\n });\n this._root.setAttribute('transform', `translate(${this._origin})`);\n }\n this._dirty = [];\n return this;\n },\n /**\n * Returns the SVG element of the visualization.\n * @return {DOMElement} - The SVG element.\n */\n canvas() {\n return this._svg;\n },\n /**\n * Returns an SVG text string for the rendered content,\n * or null if this renderer is currently headless.\n */\n svg() {\n const svg = this._svg,\n bg = this._bgcolor;\n if (!svg) return null;\n let node;\n if (bg) {\n svg.removeAttribute('style');\n node = domChild(svg, RootIndex, 'rect', svgns);\n setAttributes(node, {\n width: this._width,\n height: this._height,\n fill: bg\n });\n }\n const text = serializeXML(svg);\n if (bg) {\n svg.removeChild(node);\n this._svg.style.setProperty('background-color', bg);\n }\n return text;\n },\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\n _render(scene) {\n // perform spot updates and re-render markup\n if (this._dirtyCheck()) {\n if (this._dirtyAll) this._clearDefs();\n this.mark(this._root, scene);\n domClear(this._root, 1);\n }\n this.defs();\n this._dirty = [];\n ++this._dirtyID;\n return this;\n },\n // -- Manage rendering of items marked as dirty --\n\n /**\n * Flag a mark item as dirty.\n * @param {Item} item - The mark item.\n */\n dirty(item) {\n if (item.dirty !== this._dirtyID) {\n item.dirty = this._dirtyID;\n this._dirty.push(item);\n }\n },\n /**\n * Check if a mark item is considered dirty.\n * @param {Item} item - The mark item.\n */\n isDirty(item) {\n return this._dirtyAll || !item._svg || !item._svg.ownerSVGElement || item.dirty === this._dirtyID;\n },\n /**\n * Internal method to check dirty status and, if possible,\n * make targetted updates without a full rendering pass.\n */\n _dirtyCheck() {\n this._dirtyAll = true;\n const items = this._dirty;\n if (!items.length || !this._dirtyID) return true;\n const id = ++this._dirtyID;\n let item, mark, type, mdef, i, n, o;\n for (i = 0, n = items.length; i < n; ++i) {\n item = items[i];\n mark = item.mark;\n if (mark.marktype !== type) {\n // memoize mark instance lookup\n type = mark.marktype;\n mdef = Marks[type];\n }\n if (mark.zdirty && mark.dirty !== id) {\n this._dirtyAll = false;\n dirtyParents(item, id);\n mark.items.forEach(i => {\n i.dirty = id;\n });\n }\n if (mark.zdirty) continue; // handle in standard drawing pass\n\n if (item.exit) {\n // EXIT\n if (mdef.nested && mark.items.length) {\n // if nested mark with remaining points, update instead\n o = mark.items[0];\n if (o._svg) this._update(mdef, o._svg, o);\n } else if (item._svg) {\n // otherwise remove from DOM\n o = item._svg.parentNode;\n if (o) o.removeChild(item._svg);\n }\n item._svg = null;\n continue;\n }\n item = mdef.nested ? mark.items[0] : item;\n if (item._update === id) continue; // already visited\n\n if (!item._svg || !item._svg.ownerSVGElement) {\n // ENTER\n this._dirtyAll = false;\n dirtyParents(item, id);\n } else {\n // IN-PLACE UPDATE\n this._update(mdef, item._svg, item);\n }\n item._update = id;\n }\n return !this._dirtyAll;\n },\n // -- Construct & maintain scenegraph to SVG mapping ---\n\n /**\n * Render a set of mark items.\n * @param {SVGElement} el - The parent element in the SVG tree.\n * @param {object} scene - The mark parent to render.\n * @param {SVGElement} prev - The previous sibling in the SVG tree.\n */\n mark(el, scene, prev) {\n if (!this.isDirty(scene)) {\n return scene._svg;\n }\n const svg = this._svg,\n mdef = Marks[scene.marktype],\n events = scene.interactive === false ? 'none' : null,\n isGroup = mdef.tag === 'g';\n const parent = bind(scene, el, prev, 'g', svg);\n parent.setAttribute('class', cssClass(scene));\n\n // apply aria attributes to parent container element\n const aria = ariaMarkAttributes(scene);\n for (const key in aria) setAttribute(parent, key, aria[key]);\n if (!isGroup) {\n setAttribute(parent, 'pointer-events', events);\n }\n setAttribute(parent, 'clip-path', scene.clip ? clip$1(this, scene, scene.group) : null);\n let sibling = null,\n i = 0;\n const process = item => {\n const dirty = this.isDirty(item),\n node = bind(item, parent, sibling, mdef.tag, svg);\n if (dirty) {\n this._update(mdef, node, item);\n if (isGroup) recurse(this, node, item);\n }\n sibling = node;\n ++i;\n };\n if (mdef.nested) {\n if (scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n }\n domClear(parent, i);\n return parent;\n },\n /**\n * Update the attributes of an SVG element for a mark item.\n * @param {object} mdef - The mark definition object\n * @param {SVGElement} el - The SVG element.\n * @param {Item} item - The mark item.\n */\n _update(mdef, el, item) {\n // set dom element and values cache\n // provides access to emit method\n element = el;\n values = el.__values__;\n\n // apply aria-specific properties\n ariaItemAttributes(emit, item);\n\n // apply svg attributes\n mdef.attr(emit, item, this);\n\n // some marks need special treatment\n const extra = mark_extras[mdef.type];\n if (extra) extra.call(this, mdef, el, item);\n\n // apply svg style attributes\n // note: element state may have been modified by 'extra' method\n if (element) this.style(element, item);\n },\n /**\n * Update the presentation attributes of an SVG element for a mark item.\n * @param {SVGElement} el - The SVG element.\n * @param {Item} item - The mark item.\n */\n style(el, item) {\n if (item == null) return;\n for (const prop in stylesAttr) {\n let value = prop === 'font' ? fontFamily(item) : item[prop];\n if (value === values[prop]) continue;\n const name = stylesAttr[prop];\n if (value == null) {\n el.removeAttribute(name);\n } else {\n if (isGradient(value)) {\n value = gradientRef(value, this._defs.gradient, href());\n }\n el.setAttribute(name, value + '');\n }\n values[prop] = value;\n }\n for (const prop in stylesCss) {\n setStyle(el, stylesCss[prop], item[prop]);\n }\n },\n /**\n * Render SVG defs, as needed.\n * Must be called *after* marks have been processed to ensure the\n * collected state is current and accurate.\n */\n defs() {\n const svg = this._svg,\n defs = this._defs;\n let el = defs.el,\n index = 0;\n for (const id in defs.gradient) {\n if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', svgns);\n index = updateGradient(el, defs.gradient[id], index);\n }\n for (const id in defs.clipping) {\n if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', svgns);\n index = updateClipping(el, defs.clipping[id], index);\n }\n\n // clean-up\n if (el) {\n index === 0 ? (svg.removeChild(el), defs.el = null) : domClear(el, index);\n }\n },\n /**\n * Clear defs caches.\n */\n _clearDefs() {\n const def = this._defs;\n def.gradient = {};\n def.clipping = {};\n }\n});\n\n// mark ancestor chain with a dirty id\nfunction dirtyParents(item, id) {\n for (; item && item.dirty !== id; item = item.mark.group) {\n item.dirty = id;\n if (item.mark && item.mark.dirty !== id) {\n item.mark.dirty = id;\n } else return;\n }\n}\n\n// update gradient definitions\nfunction updateGradient(el, grad, index) {\n let i, n, stop;\n if (grad.gradient === 'radial') {\n // SVG radial gradients automatically transform to normalized bbox\n // coordinates, in a way that is cumbersome to replicate in canvas.\n // We wrap the radial gradient in a pattern element, allowing us to\n // maintain a circular gradient that matches what canvas provides.\n let pt = domChild(el, index++, 'pattern', svgns);\n setAttributes(pt, {\n id: patternPrefix + grad.id,\n viewBox: '0,0,1,1',\n width: '100%',\n height: '100%',\n preserveAspectRatio: 'xMidYMid slice'\n });\n pt = domChild(pt, 0, 'rect', svgns);\n setAttributes(pt, {\n width: 1,\n height: 1,\n fill: `url(${href()}#${grad.id})`\n });\n el = domChild(el, index++, 'radialGradient', svgns);\n setAttributes(el, {\n id: grad.id,\n fx: grad.x1,\n fy: grad.y1,\n fr: grad.r1,\n cx: grad.x2,\n cy: grad.y2,\n r: grad.r2\n });\n } else {\n el = domChild(el, index++, 'linearGradient', svgns);\n setAttributes(el, {\n id: grad.id,\n x1: grad.x1,\n x2: grad.x2,\n y1: grad.y1,\n y2: grad.y2\n });\n }\n for (i = 0, n = grad.stops.length; i < n; ++i) {\n stop = domChild(el, i, 'stop', svgns);\n stop.setAttribute('offset', grad.stops[i].offset);\n stop.setAttribute('stop-color', grad.stops[i].color);\n }\n domClear(el, i);\n return index;\n}\n\n// update clipping path definitions\nfunction updateClipping(el, clip, index) {\n let mask;\n el = domChild(el, index, 'clipPath', svgns);\n el.setAttribute('id', clip.id);\n if (clip.path) {\n mask = domChild(el, 0, 'path', svgns);\n mask.setAttribute('d', clip.path);\n } else {\n mask = domChild(el, 0, 'rect', svgns);\n setAttributes(mask, {\n x: 0,\n y: 0,\n width: clip.width,\n height: clip.height\n });\n }\n domClear(el, 1);\n return index + 1;\n}\n\n// Recursively process group contents.\nfunction recurse(renderer, el, group) {\n // child 'g' element is second to last among children (path, g, path)\n // other children here are foreground and background path elements\n el = el.lastChild.previousSibling;\n let prev,\n idx = 0;\n visit(group, item => {\n prev = renderer.mark(el, item, prev);\n ++idx;\n });\n\n // remove any extraneous DOM elements\n domClear(el, 1 + idx);\n}\n\n// Bind a scenegraph item to an SVG DOM element.\n// Create new SVG elements as needed.\nfunction bind(item, el, sibling, tag, svg) {\n let node = item._svg,\n doc;\n\n // create a new dom node if needed\n if (!node) {\n doc = el.ownerDocument;\n node = domCreate(doc, tag, svgns);\n item._svg = node;\n if (item.mark) {\n node.__data__ = item;\n node.__values__ = {\n fill: 'default'\n };\n\n // if group, create background, content, and foreground elements\n if (tag === 'g') {\n const bg = domCreate(doc, 'path', svgns);\n node.appendChild(bg);\n bg.__data__ = item;\n const cg = domCreate(doc, 'g', svgns);\n node.appendChild(cg);\n cg.__data__ = item;\n const fg = domCreate(doc, 'path', svgns);\n node.appendChild(fg);\n fg.__data__ = item;\n fg.__values__ = {\n fill: 'default'\n };\n }\n }\n }\n\n // (re-)insert if (a) not contained in SVG or (b) sibling order has changed\n if (node.ownerSVGElement !== svg || siblingCheck(node, sibling)) {\n el.insertBefore(node, sibling ? sibling.nextSibling : el.firstChild);\n }\n return node;\n}\n\n// check if two nodes are ordered siblings\nfunction siblingCheck(node, sibling) {\n return node.parentNode && node.parentNode.childNodes.length > 1 && node.previousSibling != sibling; // treat null/undefined the same\n}\n\n// -- Set attributes & styles on SVG elements ---\n\nlet element = null,\n // temp var for current SVG element\n values = null; // temp var for current values hash\n\n// Extra configuration for certain mark types\nconst mark_extras = {\n group(mdef, el, item) {\n const fg = element = el.childNodes[2];\n values = fg.__values__;\n mdef.foreground(emit, item, this);\n values = el.__values__; // use parent's values hash\n element = el.childNodes[1];\n mdef.content(emit, item, this);\n const bg = element = el.childNodes[0];\n mdef.background(emit, item, this);\n const value = item.mark.interactive === false ? 'none' : null;\n if (value !== values.events) {\n setAttribute(fg, 'pointer-events', value);\n setAttribute(bg, 'pointer-events', value);\n values.events = value;\n }\n if (item.strokeForeground && item.stroke) {\n const fill = item.fill;\n setAttribute(fg, 'display', null);\n\n // set style of background\n this.style(bg, item);\n setAttribute(bg, 'stroke', null);\n\n // set style of foreground\n if (fill) item.fill = null;\n values = fg.__values__;\n this.style(fg, item);\n if (fill) item.fill = fill;\n\n // leave element null to prevent downstream styling\n element = null;\n } else {\n // ensure foreground is ignored\n setAttribute(fg, 'display', 'none');\n }\n },\n image(mdef, el, item) {\n if (item.smooth === false) {\n setStyle(el, 'image-rendering', 'optimizeSpeed');\n setStyle(el, 'image-rendering', 'pixelated');\n } else {\n setStyle(el, 'image-rendering', null);\n }\n },\n text(mdef, el, item) {\n const tl = textLines(item);\n let key, value, doc, lh;\n if (isArray(tl)) {\n // multi-line text\n value = tl.map(_ => textValue(item, _));\n key = value.join('\\n'); // content cache key\n\n if (key !== values.text) {\n domClear(el, 0);\n doc = el.ownerDocument;\n lh = lineHeight(item);\n value.forEach((t, i) => {\n const ts = domCreate(doc, 'tspan', svgns);\n ts.__data__ = item; // data binding\n ts.textContent = t;\n if (i) {\n ts.setAttribute('x', 0);\n ts.setAttribute('dy', lh);\n }\n el.appendChild(ts);\n });\n values.text = key;\n }\n } else {\n // single-line text\n value = textValue(item, tl);\n if (value !== values.text) {\n el.textContent = value;\n values.text = value;\n }\n }\n setAttribute(el, 'font-family', fontFamily(item));\n setAttribute(el, 'font-size', fontSize(item) + 'px');\n setAttribute(el, 'font-style', item.fontStyle);\n setAttribute(el, 'font-variant', item.fontVariant);\n setAttribute(el, 'font-weight', item.fontWeight);\n }\n};\nfunction emit(name, value, ns) {\n // early exit if value is unchanged\n if (value === values[name]) return;\n\n // use appropriate method given namespace (ns)\n if (ns) {\n setAttributeNS(element, name, value, ns);\n } else {\n setAttribute(element, name, value);\n }\n\n // note current value for future comparison\n values[name] = value;\n}\nfunction setStyle(el, name, value) {\n if (value !== values[name]) {\n if (value == null) {\n el.style.removeProperty(name);\n } else {\n el.style.setProperty(name, value + '');\n }\n values[name] = value;\n }\n}\nfunction setAttributes(el, attrs) {\n for (const key in attrs) {\n setAttribute(el, key, attrs[key]);\n }\n}\nfunction setAttribute(el, name, value) {\n if (value != null) {\n // if value is provided, update DOM attribute\n el.setAttribute(name, value);\n } else {\n // else remove DOM attribute\n el.removeAttribute(name);\n }\n}\nfunction setAttributeNS(el, name, value, ns) {\n if (value != null) {\n // if value is provided, update DOM attribute\n el.setAttributeNS(ns, name, value);\n } else {\n // else remove DOM attribute\n el.removeAttributeNS(ns, name);\n }\n}\nfunction href() {\n let loc;\n return typeof window === 'undefined' ? '' : (loc = window.location).hash ? loc.href.slice(0, -loc.hash.length) : loc.href;\n}\n\nfunction SVGStringRenderer(loader) {\n Renderer.call(this, loader);\n this._text = null;\n this._defs = {\n gradient: {},\n clipping: {}\n };\n}\ninherits(SVGStringRenderer, Renderer, {\n /**\n * Returns the rendered SVG text string,\n * or null if rendering has not yet occurred.\n */\n svg() {\n return this._text;\n },\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\n _render(scene) {\n const m = markup();\n\n // svg tag\n m.open('svg', extend({}, metadata, {\n class: 'marks',\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: `0 0 ${this._width} ${this._height}`\n }));\n\n // background, if defined\n const bg = this._bgcolor;\n if (bg && bg !== 'transparent' && bg !== 'none') {\n m.open('rect', {\n width: this._width,\n height: this._height,\n fill: bg\n }).close();\n }\n\n // root content group\n m.open('g', rootAttributes, {\n transform: 'translate(' + this._origin + ')'\n });\n this.mark(m, scene);\n m.close(); // \n\n // defs\n this.defs(m);\n\n // get SVG text string\n this._text = m.close() + '';\n return this;\n },\n /**\n * Render a set of mark items.\n * @param {object} m - The markup context.\n * @param {object} scene - The mark parent to render.\n */\n mark(m, scene) {\n const mdef = Marks[scene.marktype],\n tag = mdef.tag,\n attrList = [ariaItemAttributes, mdef.attr];\n\n // render opening group tag\n m.open('g', {\n 'class': cssClass(scene),\n 'clip-path': scene.clip ? clip$1(this, scene, scene.group) : null\n }, ariaMarkAttributes(scene), {\n 'pointer-events': tag !== 'g' && scene.interactive === false ? 'none' : null\n });\n\n // render contained elements\n const process = item => {\n const href = this.href(item);\n if (href) m.open('a', href);\n m.open(tag, this.attr(scene, item, attrList, tag !== 'g' ? tag : null));\n if (tag === 'text') {\n const tl = textLines(item);\n if (isArray(tl)) {\n // multi-line text\n const attrs = {\n x: 0,\n dy: lineHeight(item)\n };\n for (let i = 0; i < tl.length; ++i) {\n m.open('tspan', i ? attrs : null).text(textValue(item, tl[i])).close();\n }\n } else {\n // single-line text\n m.text(textValue(item, tl));\n }\n } else if (tag === 'g') {\n const fore = item.strokeForeground,\n fill = item.fill,\n stroke = item.stroke;\n if (fore && stroke) {\n item.stroke = null;\n }\n m.open('path', this.attr(scene, item, mdef.background, 'bgrect')).close();\n\n // recurse for group content\n m.open('g', this.attr(scene, item, mdef.content));\n visit(item, scene => this.mark(m, scene));\n m.close();\n if (fore && stroke) {\n if (fill) item.fill = null;\n item.stroke = stroke;\n m.open('path', this.attr(scene, item, mdef.foreground, 'bgrect')).close();\n if (fill) item.fill = fill;\n } else {\n m.open('path', this.attr(scene, item, mdef.foreground, 'bgfore')).close();\n }\n }\n m.close(); // \n if (href) m.close(); // \n };\n\n if (mdef.nested) {\n if (scene.items && scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n }\n\n // render closing group tag\n return m.close(); // \n },\n\n /**\n * Get href attributes for a hyperlinked mark item.\n * @param {Item} item - The mark item.\n */\n href(item) {\n const href = item.href;\n let attr;\n if (href) {\n if (attr = this._hrefs && this._hrefs[href]) {\n return attr;\n } else {\n this.sanitizeURL(href).then(attr => {\n // rewrite to use xlink namespace\n attr['xlink:href'] = attr.href;\n attr.href = null;\n (this._hrefs || (this._hrefs = {}))[href] = attr;\n });\n }\n }\n return null;\n },\n /**\n * Get an object of SVG attributes for a mark item.\n * @param {object} scene - The mark parent.\n * @param {Item} item - The mark item.\n * @param {array|function} attrs - One or more attribute emitters.\n * @param {string} tag - The tag being rendered.\n */\n attr(scene, item, attrs, tag) {\n const object = {},\n emit = (name, value, ns, prefixed) => {\n object[prefixed || name] = value;\n };\n\n // apply mark specific attributes\n if (Array.isArray(attrs)) {\n attrs.forEach(fn => fn(emit, item, this));\n } else {\n attrs(emit, item, this);\n }\n\n // apply style attributes\n if (tag) {\n style(object, item, scene, tag, this._defs);\n }\n return object;\n },\n /**\n * Render SVG defs, as needed.\n * Must be called *after* marks have been processed to ensure the\n * collected state is current and accurate.\n * @param {object} m - The markup context.\n */\n defs(m) {\n const gradient = this._defs.gradient,\n clipping = this._defs.clipping,\n count = Object.keys(gradient).length + Object.keys(clipping).length;\n if (count === 0) return; // nothing to do\n\n m.open('defs');\n for (const id in gradient) {\n const def = gradient[id],\n stops = def.stops;\n if (def.gradient === 'radial') {\n // SVG radial gradients automatically transform to normalized bbox\n // coordinates, in a way that is cumbersome to replicate in canvas.\n // We wrap the radial gradient in a pattern element, allowing us to\n // maintain a circular gradient that matches what canvas provides.\n\n m.open('pattern', {\n id: patternPrefix + id,\n viewBox: '0,0,1,1',\n width: '100%',\n height: '100%',\n preserveAspectRatio: 'xMidYMid slice'\n });\n m.open('rect', {\n width: '1',\n height: '1',\n fill: 'url(#' + id + ')'\n }).close();\n m.close(); // \n\n m.open('radialGradient', {\n id: id,\n fx: def.x1,\n fy: def.y1,\n fr: def.r1,\n cx: def.x2,\n cy: def.y2,\n r: def.r2\n });\n } else {\n m.open('linearGradient', {\n id: id,\n x1: def.x1,\n x2: def.x2,\n y1: def.y1,\n y2: def.y2\n });\n }\n for (let i = 0; i < stops.length; ++i) {\n m.open('stop', {\n offset: stops[i].offset,\n 'stop-color': stops[i].color\n }).close();\n }\n m.close();\n }\n for (const id in clipping) {\n const def = clipping[id];\n m.open('clipPath', {\n id: id\n });\n if (def.path) {\n m.open('path', {\n d: def.path\n }).close();\n } else {\n m.open('rect', {\n x: 0,\n y: 0,\n width: def.width,\n height: def.height\n }).close();\n }\n m.close();\n }\n m.close();\n }\n});\n\n// Helper function for attr for style presentation attributes\nfunction style(s, item, scene, tag, defs) {\n let styleList;\n if (item == null) return s;\n if (tag === 'bgrect' && scene.interactive === false) {\n s['pointer-events'] = 'none';\n }\n if (tag === 'bgfore') {\n if (scene.interactive === false) {\n s['pointer-events'] = 'none';\n }\n s.display = 'none';\n if (item.fill !== null) return s;\n }\n if (tag === 'image' && item.smooth === false) {\n styleList = ['image-rendering: optimizeSpeed;', 'image-rendering: pixelated;'];\n }\n if (tag === 'text') {\n s['font-family'] = fontFamily(item);\n s['font-size'] = fontSize(item) + 'px';\n s['font-style'] = item.fontStyle;\n s['font-variant'] = item.fontVariant;\n s['font-weight'] = item.fontWeight;\n }\n for (const prop in stylesAttr) {\n let value = item[prop];\n const name = stylesAttr[prop];\n if (value === 'transparent' && (name === 'fill' || name === 'stroke')) ; else if (value != null) {\n if (isGradient(value)) {\n value = gradientRef(value, defs.gradient, '');\n }\n s[name] = value;\n }\n }\n for (const prop in stylesCss) {\n const value = item[prop];\n if (value != null) {\n styleList = styleList || [];\n styleList.push(`${stylesCss[prop]}: ${value};`);\n }\n }\n if (styleList) {\n s.style = styleList.join(' ');\n }\n return s;\n}\n\nconst Canvas = 'canvas';\nconst PNG = 'png';\nconst SVG = 'svg';\nconst None = 'none';\nconst RenderType = {\n Canvas: Canvas,\n PNG: PNG,\n SVG: SVG,\n None: None\n};\nconst modules = {};\nmodules[Canvas] = modules[PNG] = {\n renderer: CanvasRenderer,\n headless: CanvasRenderer,\n handler: CanvasHandler\n};\nmodules[SVG] = {\n renderer: SVGRenderer,\n headless: SVGStringRenderer,\n handler: SVGHandler\n};\nmodules[None] = {};\nfunction renderModule(name, _) {\n name = String(name || '').toLowerCase();\n if (arguments.length > 1) {\n modules[name] = _;\n return this;\n } else {\n return modules[name];\n }\n}\n\nfunction intersect(scene, bounds, filter) {\n const hits = [],\n // intersection results\n box = new Bounds().union(bounds),\n // defensive copy\n type = scene.marktype;\n return type ? intersectMark(scene, box, filter, hits) : type === 'group' ? intersectGroup(scene, box, filter, hits) : error('Intersect scene must be mark node or group item.');\n}\nfunction intersectMark(mark, box, filter, hits) {\n if (visitMark(mark, box, filter)) {\n const items = mark.items,\n type = mark.marktype,\n n = items.length;\n let i = 0;\n if (type === 'group') {\n for (; i < n; ++i) {\n intersectGroup(items[i], box, filter, hits);\n }\n } else {\n for (const test = Marks[type].isect; i < n; ++i) {\n const item = items[i];\n if (intersectItem(item, box, test)) hits.push(item);\n }\n }\n }\n return hits;\n}\nfunction visitMark(mark, box, filter) {\n // process if bounds intersect and if\n // (1) mark is a group mark (so we must recurse), or\n // (2) mark is interactive and passes filter\n return mark.bounds && box.intersects(mark.bounds) && (mark.marktype === 'group' || mark.interactive !== false && (!filter || filter(mark)));\n}\nfunction intersectGroup(group, box, filter, hits) {\n // test intersect against group\n // skip groups by default unless filter says otherwise\n if (filter && filter(group.mark) && intersectItem(group, box, Marks.group.isect)) {\n hits.push(group);\n }\n\n // recursively test children marks\n // translate box to group coordinate space\n const marks = group.items,\n n = marks && marks.length;\n if (n) {\n const x = group.x || 0,\n y = group.y || 0;\n box.translate(-x, -y);\n for (let i = 0; i < n; ++i) {\n intersectMark(marks[i], box, filter, hits);\n }\n box.translate(x, y);\n }\n return hits;\n}\nfunction intersectItem(item, box, test) {\n // test bounds enclosure, bounds intersection, then detailed test\n const bounds = item.bounds;\n return box.encloses(bounds) || box.intersects(bounds) && test(item, box);\n}\n\nconst clipBounds = new Bounds();\nfunction boundClip (mark) {\n const clip = mark.clip;\n if (isFunction(clip)) {\n clip(boundContext(clipBounds.clear()));\n } else if (clip) {\n clipBounds.set(0, 0, mark.group.width, mark.group.height);\n } else return;\n mark.bounds.intersect(clipBounds);\n}\n\nconst TOLERANCE = 1e-9;\nfunction sceneEqual(a, b, key) {\n return a === b ? true : key === 'path' ? pathEqual(a, b) : a instanceof Date && b instanceof Date ? +a === +b : isNumber(a) && isNumber(b) ? Math.abs(a - b) <= TOLERANCE : !a || !b || !isObject(a) && !isObject(b) ? a == b : objectEqual(a, b);\n}\nfunction pathEqual(a, b) {\n return sceneEqual(parse(a), parse(b));\n}\nfunction objectEqual(a, b) {\n var ka = Object.keys(a),\n kb = Object.keys(b),\n key,\n i;\n if (ka.length !== kb.length) return false;\n ka.sort();\n kb.sort();\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) return false;\n }\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!sceneEqual(a[key], b[key], key)) return false;\n }\n return typeof a === typeof b;\n}\n\nfunction resetSVGDefIds() {\n resetSVGClipId();\n resetSVGGradientId();\n}\n\nexport { Bounds, CanvasHandler, CanvasRenderer, Gradient, GroupItem, Handler, Item, Marks, RenderType, Renderer, ResourceLoader, SVGHandler, SVGRenderer, SVGStringRenderer, Scenegraph, boundClip, boundContext, boundItem, boundMark, boundStroke, domChild, domClear, domCreate, domFind, font, fontFamily, fontSize, intersect, intersectBoxLine, intersectPath, intersectPoint, intersectRule, lineHeight, markup, multiLineOffset, curves as pathCurves, pathEqual, parse as pathParse, vg_rect as pathRectangle, pathRender, symbols as pathSymbols, vg_trail as pathTrail, point, renderModule, resetSVGClipId, resetSVGDefIds, sceneEqual, sceneFromJSON, pickVisit as scenePickVisit, sceneToJSON, visit as sceneVisit, zorder as sceneZOrder, serializeXML, textMetrics };\n","import constant from \"./constant.js\";\nimport {withPath} from \"./path.js\";\nimport asterisk from \"./symbol/asterisk.js\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport diamond2 from \"./symbol/diamond2.js\";\nimport plus from \"./symbol/plus.js\";\nimport square from \"./symbol/square.js\";\nimport square2 from \"./symbol/square2.js\";\nimport star from \"./symbol/star.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport triangle2 from \"./symbol/triangle2.js\";\nimport wye from \"./symbol/wye.js\";\nimport times from \"./symbol/times.js\";\n\n// These symbols are designed to be filled.\nexport const symbolsFill = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\n// These symbols are designed to be stroked (with a width of 1.5px and round caps).\nexport const symbolsStroke = [\n circle,\n plus,\n times,\n triangle2,\n asterisk,\n square2,\n diamond2\n];\n\nexport default function Symbol(type, size) {\n let context = null,\n path = withPath(symbol);\n\n type = typeof type === \"function\" ? type : constant(type || circle);\n size = typeof size === \"function\" ? size : constant(size === undefined ? 64 : +size);\n\n function symbol() {\n let buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","import { Transform } from 'vega-dataflow';\nimport { Marks, boundClip, GroupItem, Item, Bounds, multiLineOffset, boundStroke } from 'vega-scenegraph';\nimport { inherits, peek, isObject } from 'vega-util';\n\nconst Top = 'top';\nconst Left = 'left';\nconst Right = 'right';\nconst Bottom = 'bottom';\nconst TopLeft = 'top-left';\nconst TopRight = 'top-right';\nconst BottomLeft = 'bottom-left';\nconst BottomRight = 'bottom-right';\nconst Start = 'start';\nconst Middle = 'middle';\nconst End = 'end';\nconst X = 'x';\nconst Y = 'y';\nconst Group = 'group';\nconst AxisRole = 'axis';\nconst TitleRole = 'title';\nconst FrameRole = 'frame';\nconst ScopeRole = 'scope';\nconst LegendRole = 'legend';\nconst RowHeader = 'row-header';\nconst RowFooter = 'row-footer';\nconst RowTitle = 'row-title';\nconst ColHeader = 'column-header';\nconst ColFooter = 'column-footer';\nconst ColTitle = 'column-title';\nconst Padding = 'padding';\nconst Symbols = 'symbol';\nconst Fit = 'fit';\nconst FitX = 'fit-x';\nconst FitY = 'fit-y';\nconst Pad = 'pad';\nconst None = 'none';\nconst All = 'all';\nconst Each = 'each';\nconst Flush = 'flush';\nconst Column = 'column';\nconst Row = 'row';\n\n/**\n * Calculate bounding boxes for scenegraph items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - The scenegraph mark instance to bound.\n */\nfunction Bound(params) {\n Transform.call(this, null, params);\n}\ninherits(Bound, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow,\n mark = _.mark,\n type = mark.marktype,\n entry = Marks[type],\n bound = entry.bound;\n let markBounds = mark.bounds,\n rebound;\n if (entry.nested) {\n // multi-item marks have a single bounds instance\n if (mark.items.length) view.dirty(mark.items[0]);\n markBounds = boundItem(mark, bound);\n mark.items.forEach(item => {\n item.bounds.clear().union(markBounds);\n });\n } else if (type === Group || _.modified()) {\n // operator parameters modified -> re-bound all items\n // updates group bounds in response to modified group content\n pulse.visit(pulse.MOD, item => view.dirty(item));\n markBounds.clear();\n mark.items.forEach(item => markBounds.union(boundItem(item, bound)));\n\n // force reflow for axes/legends/titles to propagate any layout changes\n switch (mark.role) {\n case AxisRole:\n case LegendRole:\n case TitleRole:\n pulse.reflow();\n }\n } else {\n // incrementally update bounds, re-bound mark as needed\n rebound = pulse.changed(pulse.REM);\n pulse.visit(pulse.ADD, item => {\n markBounds.union(boundItem(item, bound));\n });\n pulse.visit(pulse.MOD, item => {\n rebound = rebound || markBounds.alignsWith(item.bounds);\n view.dirty(item);\n markBounds.union(boundItem(item, bound));\n });\n if (rebound) {\n markBounds.clear();\n mark.items.forEach(item => markBounds.union(item.bounds));\n }\n }\n\n // ensure mark bounds do not exceed any clipping region\n boundClip(mark);\n return pulse.modifies('bounds');\n }\n});\nfunction boundItem(item, bound, opt) {\n return bound(item.bounds.clear(), item, opt);\n}\n\nconst COUNTER_NAME = ':vega_identifier:';\n\n/**\n * Adds a unique identifier to all added tuples.\n * This transform creates a new signal that serves as an id counter.\n * As a result, the id counter is shared across all instances of this\n * transform, generating unique ids across multiple data streams. In\n * addition, this signal value can be included in a snapshot of the\n * dataflow state, enabling correct resumption of id allocation.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.as - The field name for the generated identifier.\n */\nfunction Identifier(params) {\n Transform.call(this, 0, params);\n}\nIdentifier.Definition = {\n 'type': 'Identifier',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'as',\n 'type': 'string',\n 'required': true\n }]\n};\ninherits(Identifier, Transform, {\n transform(_, pulse) {\n const counter = getCounter(pulse.dataflow),\n as = _.as;\n let id = counter.value;\n pulse.visit(pulse.ADD, t => t[as] = t[as] || ++id);\n counter.set(this.value = id);\n return pulse;\n }\n});\nfunction getCounter(view) {\n return view._signals[COUNTER_NAME] || (view._signals[COUNTER_NAME] = view.add(0));\n}\n\n/**\n * Bind scenegraph items to a scenegraph mark instance.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.markdef - The mark definition for creating the mark.\n * This is an object of legal scenegraph mark properties which *must* include\n * the 'marktype' property.\n */\nfunction Mark(params) {\n Transform.call(this, null, params);\n}\ninherits(Mark, Transform, {\n transform(_, pulse) {\n let mark = this.value;\n\n // acquire mark on first invocation, bind context and group\n if (!mark) {\n mark = pulse.dataflow.scenegraph().mark(_.markdef, lookup$1(_), _.index);\n mark.group.context = _.context;\n if (!_.context.group) _.context.group = mark.group;\n mark.source = this.source; // point to upstream collector\n mark.clip = _.clip;\n mark.interactive = _.interactive;\n this.value = mark;\n }\n\n // initialize entering items\n const Init = mark.marktype === Group ? GroupItem : Item;\n pulse.visit(pulse.ADD, item => Init.call(item, mark));\n\n // update clipping and/or interactive status\n if (_.modified('clip') || _.modified('interactive')) {\n mark.clip = _.clip;\n mark.interactive = !!_.interactive;\n mark.zdirty = true; // force scenegraph re-eval\n pulse.reflow();\n }\n\n // bind items array to scenegraph mark\n mark.items = pulse.source;\n return pulse;\n }\n});\nfunction lookup$1(_) {\n const g = _.groups,\n p = _.parent;\n return g && g.size === 1 ? g.get(Object.keys(g.object)[0]) : g && p ? g.lookup(p) : null;\n}\n\n/**\n * Analyze items for overlap, changing opacity to hide items with\n * overlapping bounding boxes. This transform will preserve at least\n * two items (e.g., first and last) even if overlap persists.\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting items.\n * @param {object} [params.method] - The overlap removal method to apply.\n * One of 'parity' (default, hide every other item until there is no\n * more overlap) or 'greedy' (sequentially scan and hide and items that\n * overlap with the last visible item).\n * @param {object} [params.boundScale] - A scale whose range should be used\n * to bound the items. Items exceeding the bounds of the scale range\n * will be treated as overlapping. If null or undefined, no bounds check\n * will be applied.\n * @param {object} [params.boundOrient] - The orientation of the scale\n * (top, bottom, left, or right) used to bound items. This parameter is\n * ignored if boundScale is null or undefined.\n * @param {object} [params.boundTolerance] - The tolerance in pixels for\n * bound inclusion testing (default 1). This specifies by how many pixels\n * an item's bounds may exceed the scale range bounds and not be culled.\n * @constructor\n */\nfunction Overlap(params) {\n Transform.call(this, null, params);\n}\nconst methods = {\n parity: items => items.filter((item, i) => i % 2 ? item.opacity = 0 : 1),\n greedy: (items, sep) => {\n let a;\n return items.filter((b, i) => !i || !intersect(a.bounds, b.bounds, sep) ? (a = b, 1) : b.opacity = 0);\n }\n};\n\n// compute bounding box intersection\n// including padding pixels of separation\nconst intersect = (a, b, sep) => sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\nconst hasOverlap = (items, pad) => {\n for (var i = 1, n = items.length, a = items[0].bounds, b; i < n; a = b, ++i) {\n if (intersect(a, b = items[i].bounds, pad)) return true;\n }\n};\nconst hasBounds = item => {\n const b = item.bounds;\n return b.width() > 1 && b.height() > 1;\n};\nconst boundTest = (scale, orient, tolerance) => {\n var range = scale.range(),\n b = new Bounds();\n if (orient === Top || orient === Bottom) {\n b.set(range[0], -Infinity, range[1], +Infinity);\n } else {\n b.set(-Infinity, range[0], +Infinity, range[1]);\n }\n b.expand(tolerance || 1);\n return item => b.encloses(item.bounds);\n};\n\n// reset all items to be fully opaque\nconst reset = source => {\n source.forEach(item => item.opacity = 1);\n return source;\n};\n\n// add all tuples to mod, fork pulse if parameters were modified\n// fork prevents cross-stream tuple pollution (e.g., pulse from scale)\nconst reflow = (pulse, _) => pulse.reflow(_.modified()).modifies('opacity');\ninherits(Overlap, Transform, {\n transform(_, pulse) {\n const reduce = methods[_.method] || methods.parity,\n sep = _.separation || 0;\n let source = pulse.materialize(pulse.SOURCE).source,\n items,\n test;\n if (!source || !source.length) return;\n if (!_.method) {\n // early exit if method is falsy\n if (_.modified('method')) {\n reset(source);\n pulse = reflow(pulse, _);\n }\n return pulse;\n }\n\n // skip labels with no content\n source = source.filter(hasBounds);\n\n // early exit, nothing to do\n if (!source.length) return;\n if (_.sort) {\n source = source.slice().sort(_.sort);\n }\n items = reset(source);\n pulse = reflow(pulse, _);\n if (items.length >= 3 && hasOverlap(items, sep)) {\n do {\n items = reduce(items, sep);\n } while (items.length >= 3 && hasOverlap(items, sep));\n if (items.length < 3 && !peek(source).opacity) {\n if (items.length > 1) peek(items).opacity = 0;\n peek(source).opacity = 1;\n }\n }\n if (_.boundScale && _.boundTolerance >= 0) {\n test = boundTest(_.boundScale, _.boundOrient, +_.boundTolerance);\n source.forEach(item => {\n if (!test(item)) item.opacity = 0;\n });\n }\n\n // re-calculate mark bounds\n const bounds = items[0].mark.bounds.clear();\n source.forEach(item => {\n if (item.opacity) bounds.union(item.bounds);\n });\n return pulse;\n }\n});\n\n/**\n * Queue modified scenegraph items for rendering.\n * @constructor\n */\nfunction Render(params) {\n Transform.call(this, null, params);\n}\ninherits(Render, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow;\n pulse.visit(pulse.ALL, item => view.dirty(item));\n\n // set z-index dirty flag as needed\n if (pulse.fields && pulse.fields['zindex']) {\n const item = pulse.source && pulse.source[0];\n if (item) item.mark.zdirty = true;\n }\n }\n});\n\nconst tempBounds = new Bounds();\nfunction set(item, property, value) {\n return item[property] === value ? 0 : (item[property] = value, 1);\n}\n\nfunction isYAxis(mark) {\n var orient = mark.items[0].orient;\n return orient === Left || orient === Right;\n}\nfunction axisIndices(datum) {\n let index = +datum.grid;\n return [datum.ticks ? index++ : -1,\n // ticks index\n datum.labels ? index++ : -1,\n // labels index\n index + +datum.domain // title index\n ];\n}\n\nfunction axisLayout(view, axis, width, height) {\n var item = axis.items[0],\n datum = item.datum,\n delta = item.translate != null ? item.translate : 0.5,\n orient = item.orient,\n indices = axisIndices(datum),\n range = item.range,\n offset = item.offset,\n position = item.position,\n minExtent = item.minExtent,\n maxExtent = item.maxExtent,\n title = datum.title && item.items[indices[2]].items[0],\n titlePadding = item.titlePadding,\n bounds = item.bounds,\n dl = title && multiLineOffset(title),\n x = 0,\n y = 0,\n i,\n s;\n tempBounds.clear().union(bounds);\n bounds.clear();\n if ((i = indices[0]) > -1) bounds.union(item.items[i].bounds);\n if ((i = indices[1]) > -1) bounds.union(item.items[i].bounds);\n\n // position axis group and title\n switch (orient) {\n case Top:\n x = position || 0;\n y = -offset;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.y1));\n bounds.add(0, -s).add(range, 0);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 0, -1, bounds);\n break;\n case Left:\n x = -offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.x1));\n bounds.add(-s, 0).add(0, range);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 1, -1, bounds);\n break;\n case Right:\n x = width + offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.x2));\n bounds.add(0, 0).add(s, range);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 1, 1, bounds);\n break;\n case Bottom:\n x = position || 0;\n y = height + offset;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.y2));\n bounds.add(0, 0).add(range, s);\n if (title) axisTitleLayout(view, title, s, titlePadding, 0, 0, 1, bounds);\n break;\n default:\n x = item.x;\n y = item.y;\n }\n\n // update bounds\n boundStroke(bounds.translate(x, y), item);\n if (set(item, 'x', x + delta) | set(item, 'y', y + delta)) {\n item.bounds = tempBounds;\n view.dirty(item);\n item.bounds = bounds;\n view.dirty(item);\n }\n return item.mark.bounds.clear().union(bounds);\n}\nfunction axisTitleLayout(view, title, offset, pad, dl, isYAxis, sign, bounds) {\n const b = title.bounds;\n if (title.auto) {\n const v = sign * (offset + dl + pad);\n let dx = 0,\n dy = 0;\n view.dirty(title);\n isYAxis ? dx = (title.x || 0) - (title.x = v) : dy = (title.y || 0) - (title.y = v);\n title.mark.bounds.clear().union(b.translate(-dx, -dy));\n view.dirty(title);\n }\n bounds.union(b);\n}\n\n// aggregation functions for grid margin determination\nconst min = (a, b) => Math.floor(Math.min(a, b));\nconst max = (a, b) => Math.ceil(Math.max(a, b));\nfunction gridLayoutGroups(group) {\n var groups = group.items,\n n = groups.length,\n i = 0,\n mark,\n items;\n const views = {\n marks: [],\n rowheaders: [],\n rowfooters: [],\n colheaders: [],\n colfooters: [],\n rowtitle: null,\n coltitle: null\n };\n\n // layout axes, gather legends, collect bounds\n for (; i < n; ++i) {\n mark = groups[i];\n items = mark.items;\n if (mark.marktype === Group) {\n switch (mark.role) {\n case AxisRole:\n case LegendRole:\n case TitleRole:\n break;\n case RowHeader:\n views.rowheaders.push(...items);\n break;\n case RowFooter:\n views.rowfooters.push(...items);\n break;\n case ColHeader:\n views.colheaders.push(...items);\n break;\n case ColFooter:\n views.colfooters.push(...items);\n break;\n case RowTitle:\n views.rowtitle = items[0];\n break;\n case ColTitle:\n views.coltitle = items[0];\n break;\n default:\n views.marks.push(...items);\n }\n }\n }\n return views;\n}\nfunction bboxFlush(item) {\n return new Bounds().set(0, 0, item.width || 0, item.height || 0);\n}\nfunction bboxFull(item) {\n const b = item.bounds.clone();\n return b.empty() ? b.set(0, 0, 0, 0) : b.translate(-(item.x || 0), -(item.y || 0));\n}\nfunction get(opt, key, d) {\n const v = isObject(opt) ? opt[key] : opt;\n return v != null ? v : d !== undefined ? d : 0;\n}\nfunction offsetValue(v) {\n return v < 0 ? Math.ceil(-v) : 0;\n}\nfunction gridLayout(view, groups, opt) {\n var dirty = !opt.nodirty,\n bbox = opt.bounds === Flush ? bboxFlush : bboxFull,\n bounds = tempBounds.set(0, 0, 0, 0),\n alignCol = get(opt.align, Column),\n alignRow = get(opt.align, Row),\n padCol = get(opt.padding, Column),\n padRow = get(opt.padding, Row),\n ncols = opt.columns || groups.length,\n nrows = ncols <= 0 ? 1 : Math.ceil(groups.length / ncols),\n n = groups.length,\n xOffset = Array(n),\n xExtent = Array(ncols),\n xMax = 0,\n yOffset = Array(n),\n yExtent = Array(nrows),\n yMax = 0,\n dx = Array(n),\n dy = Array(n),\n boxes = Array(n),\n m,\n i,\n c,\n r,\n b,\n g,\n px,\n py,\n x,\n y,\n offset;\n for (i = 0; i < ncols; ++i) xExtent[i] = 0;\n for (i = 0; i < nrows; ++i) yExtent[i] = 0;\n\n // determine offsets for each group\n for (i = 0; i < n; ++i) {\n g = groups[i];\n b = boxes[i] = bbox(g);\n g.x = g.x || 0;\n dx[i] = 0;\n g.y = g.y || 0;\n dy[i] = 0;\n c = i % ncols;\n r = ~~(i / ncols);\n xMax = Math.max(xMax, px = Math.ceil(b.x2));\n yMax = Math.max(yMax, py = Math.ceil(b.y2));\n xExtent[c] = Math.max(xExtent[c], px);\n yExtent[r] = Math.max(yExtent[r], py);\n xOffset[i] = padCol + offsetValue(b.x1);\n yOffset[i] = padRow + offsetValue(b.y1);\n if (dirty) view.dirty(groups[i]);\n }\n\n // set initial alignment offsets\n for (i = 0; i < n; ++i) {\n if (i % ncols === 0) xOffset[i] = 0;\n if (i < ncols) yOffset[i] = 0;\n }\n\n // enforce column alignment constraints\n if (alignCol === Each) {\n for (c = 1; c < ncols; ++c) {\n for (offset = 0, i = c; i < n; i += ncols) {\n if (offset < xOffset[i]) offset = xOffset[i];\n }\n for (i = c; i < n; i += ncols) {\n xOffset[i] = offset + xExtent[c - 1];\n }\n }\n } else if (alignCol === All) {\n for (offset = 0, i = 0; i < n; ++i) {\n if (i % ncols && offset < xOffset[i]) offset = xOffset[i];\n }\n for (i = 0; i < n; ++i) {\n if (i % ncols) xOffset[i] = offset + xMax;\n }\n } else {\n for (alignCol = false, c = 1; c < ncols; ++c) {\n for (i = c; i < n; i += ncols) {\n xOffset[i] += xExtent[c - 1];\n }\n }\n }\n\n // enforce row alignment constraints\n if (alignRow === Each) {\n for (r = 1; r < nrows; ++r) {\n for (offset = 0, i = r * ncols, m = i + ncols; i < m; ++i) {\n if (offset < yOffset[i]) offset = yOffset[i];\n }\n for (i = r * ncols; i < m; ++i) {\n yOffset[i] = offset + yExtent[r - 1];\n }\n }\n } else if (alignRow === All) {\n for (offset = 0, i = ncols; i < n; ++i) {\n if (offset < yOffset[i]) offset = yOffset[i];\n }\n for (i = ncols; i < n; ++i) {\n yOffset[i] = offset + yMax;\n }\n } else {\n for (alignRow = false, r = 1; r < nrows; ++r) {\n for (i = r * ncols, m = i + ncols; i < m; ++i) {\n yOffset[i] += yExtent[r - 1];\n }\n }\n }\n\n // perform horizontal grid layout\n for (x = 0, i = 0; i < n; ++i) {\n x = xOffset[i] + (i % ncols ? x : 0);\n dx[i] += x - groups[i].x;\n }\n\n // perform vertical grid layout\n for (c = 0; c < ncols; ++c) {\n for (y = 0, i = c; i < n; i += ncols) {\n y += yOffset[i];\n dy[i] += y - groups[i].y;\n }\n }\n\n // perform horizontal centering\n if (alignCol && get(opt.center, Column) && nrows > 1) {\n for (i = 0; i < n; ++i) {\n b = alignCol === All ? xMax : xExtent[i % ncols];\n x = b - boxes[i].x2 - groups[i].x - dx[i];\n if (x > 0) dx[i] += x / 2;\n }\n }\n\n // perform vertical centering\n if (alignRow && get(opt.center, Row) && ncols !== 1) {\n for (i = 0; i < n; ++i) {\n b = alignRow === All ? yMax : yExtent[~~(i / ncols)];\n y = b - boxes[i].y2 - groups[i].y - dy[i];\n if (y > 0) dy[i] += y / 2;\n }\n }\n\n // position grid relative to anchor\n for (i = 0; i < n; ++i) {\n bounds.union(boxes[i].translate(dx[i], dy[i]));\n }\n x = get(opt.anchor, X);\n y = get(opt.anchor, Y);\n switch (get(opt.anchor, Column)) {\n case End:\n x -= bounds.width();\n break;\n case Middle:\n x -= bounds.width() / 2;\n }\n switch (get(opt.anchor, Row)) {\n case End:\n y -= bounds.height();\n break;\n case Middle:\n y -= bounds.height() / 2;\n }\n x = Math.round(x);\n y = Math.round(y);\n\n // update mark positions, bounds, dirty\n bounds.clear();\n for (i = 0; i < n; ++i) {\n groups[i].mark.bounds.clear();\n }\n for (i = 0; i < n; ++i) {\n g = groups[i];\n g.x += dx[i] += x;\n g.y += dy[i] += y;\n bounds.union(g.mark.bounds.union(g.bounds.translate(dx[i], dy[i])));\n if (dirty) view.dirty(g);\n }\n return bounds;\n}\nfunction trellisLayout(view, group, opt) {\n var views = gridLayoutGroups(group),\n groups = views.marks,\n bbox = opt.bounds === Flush ? boundFlush : boundFull,\n off = opt.offset,\n ncols = opt.columns || groups.length,\n nrows = ncols <= 0 ? 1 : Math.ceil(groups.length / ncols),\n cells = nrows * ncols,\n x,\n y,\n x2,\n y2,\n anchor,\n band,\n offset;\n\n // -- initial grid layout\n const bounds = gridLayout(view, groups, opt);\n if (bounds.empty()) bounds.set(0, 0, 0, 0); // empty grid\n\n // -- layout grid headers and footers --\n\n // perform row header layout\n if (views.rowheaders) {\n band = get(opt.headerBand, Row, null);\n x = layoutHeaders(view, views.rowheaders, groups, ncols, nrows, -get(off, 'rowHeader'), min, 0, bbox, 'x1', 0, ncols, 1, band);\n }\n\n // perform column header layout\n if (views.colheaders) {\n band = get(opt.headerBand, Column, null);\n y = layoutHeaders(view, views.colheaders, groups, ncols, ncols, -get(off, 'columnHeader'), min, 1, bbox, 'y1', 0, 1, ncols, band);\n }\n\n // perform row footer layout\n if (views.rowfooters) {\n band = get(opt.footerBand, Row, null);\n x2 = layoutHeaders(view, views.rowfooters, groups, ncols, nrows, get(off, 'rowFooter'), max, 0, bbox, 'x2', ncols - 1, ncols, 1, band);\n }\n\n // perform column footer layout\n if (views.colfooters) {\n band = get(opt.footerBand, Column, null);\n y2 = layoutHeaders(view, views.colfooters, groups, ncols, ncols, get(off, 'columnFooter'), max, 1, bbox, 'y2', cells - ncols, 1, ncols, band);\n }\n\n // perform row title layout\n if (views.rowtitle) {\n anchor = get(opt.titleAnchor, Row);\n offset = get(off, 'rowTitle');\n offset = anchor === End ? x2 + offset : x - offset;\n band = get(opt.titleBand, Row, 0.5);\n layoutTitle(view, views.rowtitle, offset, 0, bounds, band);\n }\n\n // perform column title layout\n if (views.coltitle) {\n anchor = get(opt.titleAnchor, Column);\n offset = get(off, 'columnTitle');\n offset = anchor === End ? y2 + offset : y - offset;\n band = get(opt.titleBand, Column, 0.5);\n layoutTitle(view, views.coltitle, offset, 1, bounds, band);\n }\n}\nfunction boundFlush(item, field) {\n return field === 'x1' ? item.x || 0 : field === 'y1' ? item.y || 0 : field === 'x2' ? (item.x || 0) + (item.width || 0) : field === 'y2' ? (item.y || 0) + (item.height || 0) : undefined;\n}\nfunction boundFull(item, field) {\n return item.bounds[field];\n}\nfunction layoutHeaders(view, headers, groups, ncols, limit, offset, agg, isX, bound, bf, start, stride, back, band) {\n var n = groups.length,\n init = 0,\n edge = 0,\n i,\n j,\n k,\n m,\n b,\n h,\n g,\n x,\n y;\n\n // if no groups, early exit and return 0\n if (!n) return init;\n\n // compute margin\n for (i = start; i < n; i += stride) {\n if (groups[i]) init = agg(init, bound(groups[i], bf));\n }\n\n // if no headers, return margin calculation\n if (!headers.length) return init;\n\n // check if number of headers exceeds number of rows or columns\n if (headers.length > limit) {\n view.warn('Grid headers exceed limit: ' + limit);\n headers = headers.slice(0, limit);\n }\n\n // apply offset\n init += offset;\n\n // clear mark bounds for all headers\n for (j = 0, m = headers.length; j < m; ++j) {\n view.dirty(headers[j]);\n headers[j].mark.bounds.clear();\n }\n\n // layout each header\n for (i = start, j = 0, m = headers.length; j < m; ++j, i += stride) {\n h = headers[j];\n b = h.mark.bounds;\n\n // search for nearest group to align to\n // necessary if table has empty cells\n for (k = i; k >= 0 && (g = groups[k]) == null; k -= back);\n\n // assign coordinates and update bounds\n if (isX) {\n x = band == null ? g.x : Math.round(g.bounds.x1 + band * g.bounds.width());\n y = init;\n } else {\n x = init;\n y = band == null ? g.y : Math.round(g.bounds.y1 + band * g.bounds.height());\n }\n b.union(h.bounds.translate(x - (h.x || 0), y - (h.y || 0)));\n h.x = x;\n h.y = y;\n view.dirty(h);\n\n // update current edge of layout bounds\n edge = agg(edge, b[bf]);\n }\n return edge;\n}\nfunction layoutTitle(view, g, offset, isX, bounds, band) {\n if (!g) return;\n view.dirty(g);\n\n // compute title coordinates\n var x = offset,\n y = offset;\n isX ? x = Math.round(bounds.x1 + band * bounds.width()) : y = Math.round(bounds.y1 + band * bounds.height());\n\n // assign coordinates and update bounds\n g.bounds.translate(x - (g.x || 0), y - (g.y || 0));\n g.mark.bounds.clear().union(g.bounds);\n g.x = x;\n g.y = y;\n\n // queue title for redraw\n view.dirty(g);\n}\n\n// utility for looking up legend layout configuration\nfunction lookup(config, orient) {\n const opt = config[orient] || {};\n return (key, d) => opt[key] != null ? opt[key] : config[key] != null ? config[key] : d;\n}\n\n// if legends specify offset directly, use the maximum specified value\nfunction offsets(legends, value) {\n let max = -Infinity;\n legends.forEach(item => {\n if (item.offset != null) max = Math.max(max, item.offset);\n });\n return max > -Infinity ? max : value;\n}\nfunction legendParams(g, orient, config, xb, yb, w, h) {\n const _ = lookup(config, orient),\n offset = offsets(g, _('offset', 0)),\n anchor = _('anchor', Start),\n mult = anchor === End ? 1 : anchor === Middle ? 0.5 : 0;\n const p = {\n align: Each,\n bounds: _('bounds', Flush),\n columns: _('direction') === 'vertical' ? 1 : g.length,\n padding: _('margin', 8),\n center: _('center'),\n nodirty: true\n };\n switch (orient) {\n case Left:\n p.anchor = {\n x: Math.floor(xb.x1) - offset,\n column: End,\n y: mult * (h || xb.height() + 2 * xb.y1),\n row: anchor\n };\n break;\n case Right:\n p.anchor = {\n x: Math.ceil(xb.x2) + offset,\n y: mult * (h || xb.height() + 2 * xb.y1),\n row: anchor\n };\n break;\n case Top:\n p.anchor = {\n y: Math.floor(yb.y1) - offset,\n row: End,\n x: mult * (w || yb.width() + 2 * yb.x1),\n column: anchor\n };\n break;\n case Bottom:\n p.anchor = {\n y: Math.ceil(yb.y2) + offset,\n x: mult * (w || yb.width() + 2 * yb.x1),\n column: anchor\n };\n break;\n case TopLeft:\n p.anchor = {\n x: offset,\n y: offset\n };\n break;\n case TopRight:\n p.anchor = {\n x: w - offset,\n y: offset,\n column: End\n };\n break;\n case BottomLeft:\n p.anchor = {\n x: offset,\n y: h - offset,\n row: End\n };\n break;\n case BottomRight:\n p.anchor = {\n x: w - offset,\n y: h - offset,\n column: End,\n row: End\n };\n break;\n }\n return p;\n}\nfunction legendLayout(view, legend) {\n var item = legend.items[0],\n datum = item.datum,\n orient = item.orient,\n bounds = item.bounds,\n x = item.x,\n y = item.y,\n w,\n h;\n\n // cache current bounds for later comparison\n item._bounds ? item._bounds.clear().union(bounds) : item._bounds = bounds.clone();\n bounds.clear();\n\n // adjust legend to accommodate padding and title\n legendGroupLayout(view, item, item.items[0].items[0]);\n\n // aggregate bounds to determine size, and include origin\n bounds = legendBounds(item, bounds);\n w = 2 * item.padding;\n h = 2 * item.padding;\n if (!bounds.empty()) {\n w = Math.ceil(bounds.width() + w);\n h = Math.ceil(bounds.height() + h);\n }\n if (datum.type === Symbols) {\n legendEntryLayout(item.items[0].items[0].items[0].items);\n }\n if (orient !== None) {\n item.x = x = 0;\n item.y = y = 0;\n }\n item.width = w;\n item.height = h;\n boundStroke(bounds.set(x, y, x + w, y + h), item);\n item.mark.bounds.clear().union(bounds);\n return item;\n}\nfunction legendBounds(item, b) {\n // aggregate item bounds\n item.items.forEach(_ => b.union(_.bounds));\n\n // anchor to legend origin\n b.x1 = item.padding;\n b.y1 = item.padding;\n return b;\n}\nfunction legendGroupLayout(view, item, entry) {\n var pad = item.padding,\n ex = pad - entry.x,\n ey = pad - entry.y;\n if (!item.datum.title) {\n if (ex || ey) translate(view, entry, ex, ey);\n } else {\n var title = item.items[1].items[0],\n anchor = title.anchor,\n tpad = item.titlePadding || 0,\n tx = pad - title.x,\n ty = pad - title.y;\n switch (title.orient) {\n case Left:\n ex += Math.ceil(title.bounds.width()) + tpad;\n break;\n case Right:\n case Bottom:\n break;\n default:\n ey += title.bounds.height() + tpad;\n }\n if (ex || ey) translate(view, entry, ex, ey);\n switch (title.orient) {\n case Left:\n ty += legendTitleOffset(item, entry, title, anchor, 1, 1);\n break;\n case Right:\n tx += legendTitleOffset(item, entry, title, End, 0, 0) + tpad;\n ty += legendTitleOffset(item, entry, title, anchor, 1, 1);\n break;\n case Bottom:\n tx += legendTitleOffset(item, entry, title, anchor, 0, 0);\n ty += legendTitleOffset(item, entry, title, End, -1, 0, 1) + tpad;\n break;\n default:\n tx += legendTitleOffset(item, entry, title, anchor, 0, 0);\n }\n if (tx || ty) translate(view, title, tx, ty);\n\n // translate legend if title pushes into negative coordinates\n if ((tx = Math.round(title.bounds.x1 - pad)) < 0) {\n translate(view, entry, -tx, 0);\n translate(view, title, -tx, 0);\n }\n }\n}\nfunction legendTitleOffset(item, entry, title, anchor, y, lr, noBar) {\n const grad = item.datum.type !== 'symbol',\n vgrad = title.datum.vgrad,\n e = grad && (lr || !vgrad) && !noBar ? entry.items[0] : entry,\n s = e.bounds[y ? 'y2' : 'x2'] - item.padding,\n u = vgrad && lr ? s : 0,\n v = vgrad && lr ? 0 : s,\n o = y <= 0 ? 0 : multiLineOffset(title);\n return Math.round(anchor === Start ? u : anchor === End ? v - o : 0.5 * (s - o));\n}\nfunction translate(view, item, dx, dy) {\n item.x += dx;\n item.y += dy;\n item.bounds.translate(dx, dy);\n item.mark.bounds.translate(dx, dy);\n view.dirty(item);\n}\nfunction legendEntryLayout(entries) {\n // get max widths for each column\n const widths = entries.reduce((w, g) => {\n w[g.column] = Math.max(g.bounds.x2 - g.x, w[g.column] || 0);\n return w;\n }, {});\n\n // set dimensions of legend entry groups\n entries.forEach(g => {\n g.width = widths[g.column];\n g.height = g.bounds.y2 - g.y;\n });\n}\n\nfunction titleLayout(view, mark, width, height, viewBounds) {\n var group = mark.items[0],\n frame = group.frame,\n orient = group.orient,\n anchor = group.anchor,\n offset = group.offset,\n padding = group.padding,\n title = group.items[0].items[0],\n subtitle = group.items[1] && group.items[1].items[0],\n end = orient === Left || orient === Right ? height : width,\n start = 0,\n x = 0,\n y = 0,\n sx = 0,\n sy = 0,\n pos;\n if (frame !== Group) {\n orient === Left ? (start = viewBounds.y2, end = viewBounds.y1) : orient === Right ? (start = viewBounds.y1, end = viewBounds.y2) : (start = viewBounds.x1, end = viewBounds.x2);\n } else if (orient === Left) {\n start = height, end = 0;\n }\n pos = anchor === Start ? start : anchor === End ? end : (start + end) / 2;\n if (subtitle && subtitle.text) {\n // position subtitle\n switch (orient) {\n case Top:\n case Bottom:\n sy = title.bounds.height() + padding;\n break;\n case Left:\n sx = title.bounds.width() + padding;\n break;\n case Right:\n sx = -title.bounds.width() - padding;\n break;\n }\n tempBounds.clear().union(subtitle.bounds);\n tempBounds.translate(sx - (subtitle.x || 0), sy - (subtitle.y || 0));\n if (set(subtitle, 'x', sx) | set(subtitle, 'y', sy)) {\n view.dirty(subtitle);\n subtitle.bounds.clear().union(tempBounds);\n subtitle.mark.bounds.clear().union(tempBounds);\n view.dirty(subtitle);\n }\n tempBounds.clear().union(subtitle.bounds);\n } else {\n tempBounds.clear();\n }\n tempBounds.union(title.bounds);\n\n // position title group\n switch (orient) {\n case Top:\n x = pos;\n y = viewBounds.y1 - tempBounds.height() - offset;\n break;\n case Left:\n x = viewBounds.x1 - tempBounds.width() - offset;\n y = pos;\n break;\n case Right:\n x = viewBounds.x2 + tempBounds.width() + offset;\n y = pos;\n break;\n case Bottom:\n x = pos;\n y = viewBounds.y2 + offset;\n break;\n default:\n x = group.x;\n y = group.y;\n }\n if (set(group, 'x', x) | set(group, 'y', y)) {\n tempBounds.translate(x, y);\n view.dirty(group);\n group.bounds.clear().union(tempBounds);\n mark.bounds.clear().union(tempBounds);\n view.dirty(group);\n }\n return group.bounds;\n}\n\n/**\n * Layout view elements such as axes and legends.\n * Also performs size adjustments.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - Scenegraph mark of groups to layout.\n */\nfunction ViewLayout(params) {\n Transform.call(this, null, params);\n}\ninherits(ViewLayout, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow;\n _.mark.items.forEach(group => {\n if (_.layout) trellisLayout(view, group, _.layout);\n layoutGroup(view, group, _);\n });\n return shouldReflow(_.mark.group) ? pulse.reflow() : pulse;\n }\n});\nfunction shouldReflow(group) {\n // We typically should reflow if layout is invoked (#2568), as child items\n // may have resized and reflow ensures group bounds are re-calculated.\n // However, legend entries have a special exception to avoid instability.\n // For example, if a selected legend symbol gains a stroke on hover,\n // we don't want to re-position subsequent elements in the legend.\n return group && group.mark.role !== 'legend-entry';\n}\nfunction layoutGroup(view, group, _) {\n var items = group.items,\n width = Math.max(0, group.width || 0),\n height = Math.max(0, group.height || 0),\n viewBounds = new Bounds().set(0, 0, width, height),\n xBounds = viewBounds.clone(),\n yBounds = viewBounds.clone(),\n legends = [],\n title,\n mark,\n orient,\n b,\n i,\n n;\n\n // layout axes, gather legends, collect bounds\n for (i = 0, n = items.length; i < n; ++i) {\n mark = items[i];\n switch (mark.role) {\n case AxisRole:\n b = isYAxis(mark) ? xBounds : yBounds;\n b.union(axisLayout(view, mark, width, height));\n break;\n case TitleRole:\n title = mark;\n break;\n case LegendRole:\n legends.push(legendLayout(view, mark));\n break;\n case FrameRole:\n case ScopeRole:\n case RowHeader:\n case RowFooter:\n case RowTitle:\n case ColHeader:\n case ColFooter:\n case ColTitle:\n xBounds.union(mark.bounds);\n yBounds.union(mark.bounds);\n break;\n default:\n viewBounds.union(mark.bounds);\n }\n }\n\n // layout legends, adjust viewBounds\n if (legends.length) {\n // group legends by orient\n const l = {};\n legends.forEach(item => {\n orient = item.orient || Right;\n if (orient !== None) (l[orient] || (l[orient] = [])).push(item);\n });\n\n // perform grid layout for each orient group\n for (const orient in l) {\n const g = l[orient];\n gridLayout(view, g, legendParams(g, orient, _.legends, xBounds, yBounds, width, height));\n }\n\n // update view bounds\n legends.forEach(item => {\n const b = item.bounds;\n if (!b.equals(item._bounds)) {\n item.bounds = item._bounds;\n view.dirty(item); // dirty previous location\n item.bounds = b;\n view.dirty(item);\n }\n if (_.autosize && (_.autosize.type === Fit || _.autosize.type === FitX || _.autosize.type === FitY)) {\n // For autosize fit, incorporate the orthogonal dimension only.\n // Legends that overrun the chart area will then be clipped;\n // otherwise the chart area gets reduced to nothing!\n switch (item.orient) {\n case Left:\n case Right:\n viewBounds.add(b.x1, 0).add(b.x2, 0);\n break;\n case Top:\n case Bottom:\n viewBounds.add(0, b.y1).add(0, b.y2);\n }\n } else {\n viewBounds.union(b);\n }\n });\n }\n\n // combine bounding boxes\n viewBounds.union(xBounds).union(yBounds);\n\n // layout title, adjust bounds\n if (title) {\n viewBounds.union(titleLayout(view, title, width, height, viewBounds));\n }\n\n // override aggregated view bounds if content is clipped\n if (group.clip) {\n viewBounds.set(0, 0, group.width || 0, group.height || 0);\n }\n\n // perform size adjustment\n viewSizeLayout(view, group, viewBounds, _);\n}\nfunction viewSizeLayout(view, group, viewBounds, _) {\n const auto = _.autosize || {},\n type = auto.type;\n if (view._autosize < 1 || !type) return;\n let viewWidth = view._width,\n viewHeight = view._height,\n width = Math.max(0, group.width || 0),\n left = Math.max(0, Math.ceil(-viewBounds.x1)),\n height = Math.max(0, group.height || 0),\n top = Math.max(0, Math.ceil(-viewBounds.y1));\n const right = Math.max(0, Math.ceil(viewBounds.x2 - width)),\n bottom = Math.max(0, Math.ceil(viewBounds.y2 - height));\n if (auto.contains === Padding) {\n const padding = view.padding();\n viewWidth -= padding.left + padding.right;\n viewHeight -= padding.top + padding.bottom;\n }\n if (type === None) {\n left = 0;\n top = 0;\n width = viewWidth;\n height = viewHeight;\n } else if (type === Fit) {\n width = Math.max(0, viewWidth - left - right);\n height = Math.max(0, viewHeight - top - bottom);\n } else if (type === FitX) {\n width = Math.max(0, viewWidth - left - right);\n viewHeight = height + top + bottom;\n } else if (type === FitY) {\n viewWidth = width + left + right;\n height = Math.max(0, viewHeight - top - bottom);\n } else if (type === Pad) {\n viewWidth = width + left + right;\n viewHeight = height + top + bottom;\n }\n view._resizeView(viewWidth, viewHeight, width, height, [left, top], auto.resize);\n}\n\nexport { Bound as bound, Identifier as identifier, Mark as mark, Overlap as overlap, Render as render, ViewLayout as viewlayout };\n","import { Transform, ingest, tupleid, stableCompare } from 'vega-dataflow';\nimport { tickCount, tickFormat, validTicks, tickValues, SymbolLegend, labelFormat, labelValues, GradientLegend, scaleFraction, labelFraction, scale, Sequential, Linear, isContinuous, Time, UTC, Ordinal, scaleImplicit, Log, Sqrt, Pow, Symlog, isLogarithmic, BinOrdinal, isInterpolating, interpolateColors, interpolate, Band, Point, bandSpace, scheme, Threshold, Quantile, Quantize, quantizeInterpolator, interpolateRange, Diverging } from 'vega-scale';\nimport { inherits, isArray, error, fastmap, falsy, isFunction, constant, peek, one, toSet, isString, zoomLog, zoomPow, zoomSymlog, zoomLinear, stringValue } from 'vega-util';\nimport { sum, range } from 'd3-array';\nimport { interpolateRound, interpolate as interpolate$1 } from 'd3-interpolate';\n\n/**\n * Generates axis ticks for visualizing a spatial scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate ticks for.\n * @param {*} [params.count=10] - The approximate number of ticks, or\n * desired tick interval, to use.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {function(*):string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid d3 4.0 format specifier.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\nfunction AxisTicks(params) {\n Transform.call(this, null, params);\n}\ninherits(AxisTicks, Transform, {\n transform(_, pulse) {\n if (this.value && !_.modified()) {\n return pulse.StopPropagation;\n }\n var locale = pulse.dataflow.locale(),\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n ticks = this.value,\n scale = _.scale,\n tally = _.count == null ? _.values ? _.values.length : 10 : _.count,\n count = tickCount(scale, tally, _.minstep),\n format = _.format || tickFormat(locale, scale, count, _.formatSpecifier, _.formatType, !!_.values),\n values = _.values ? validTicks(scale, _.values, count) : tickValues(scale, count);\n if (ticks) out.rem = ticks;\n ticks = values.map((value, i) => ingest({\n index: i / (values.length - 1 || 1),\n value: value,\n label: format(value)\n }));\n if (_.extra && ticks.length) {\n // add an extra tick pegged to the initial domain value\n // this is used to generate axes with 'binned' domains\n ticks.push(ingest({\n index: -1,\n extra: {\n value: ticks[0].value\n },\n label: ''\n }));\n }\n out.source = ticks;\n out.add = ticks;\n this.value = ticks;\n return out;\n }\n});\n\n/**\n * Joins a set of data elements against a set of visual items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): object} [params.item] - An item generator function.\n * @param {function(object): *} [params.key] - The key field associating data and visual items.\n */\nfunction DataJoin(params) {\n Transform.call(this, null, params);\n}\nfunction defaultItemCreate() {\n return ingest({});\n}\nfunction newMap(key) {\n const map = fastmap().test(t => t.exit);\n map.lookup = t => map.get(key(t));\n return map;\n}\ninherits(DataJoin, Transform, {\n transform(_, pulse) {\n var df = pulse.dataflow,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n item = _.item || defaultItemCreate,\n key = _.key || tupleid,\n map = this.value;\n\n // prevent transient (e.g., hover) requests from\n // cascading across marks derived from marks\n if (isArray(out.encode)) {\n out.encode = null;\n }\n if (map && (_.modified('key') || pulse.modified(key))) {\n error('DataJoin does not support modified key function or fields.');\n }\n if (!map) {\n pulse = pulse.addAll();\n this.value = map = newMap(key);\n }\n pulse.visit(pulse.ADD, t => {\n const k = key(t);\n let x = map.get(k);\n if (x) {\n if (x.exit) {\n map.empty--;\n out.add.push(x);\n } else {\n out.mod.push(x);\n }\n } else {\n x = item(t);\n map.set(k, x);\n out.add.push(x);\n }\n x.datum = t;\n x.exit = false;\n });\n pulse.visit(pulse.MOD, t => {\n const k = key(t),\n x = map.get(k);\n if (x) {\n x.datum = t;\n out.mod.push(x);\n }\n });\n pulse.visit(pulse.REM, t => {\n const k = key(t),\n x = map.get(k);\n if (t === x.datum && !x.exit) {\n out.rem.push(x);\n x.exit = true;\n ++map.empty;\n }\n });\n if (pulse.changed(pulse.ADD_MOD)) out.modifies('datum');\n if (pulse.clean() || _.clean && map.empty > df.cleanThreshold) {\n df.runAfter(map.clean);\n }\n return out;\n }\n});\n\n/**\n * Invokes encoding functions for visual items.\n * @constructor\n * @param {object} params - The parameters to the encoding functions. This\n * parameter object will be passed through to all invoked encoding functions.\n * @param {object} [params.mod=false] - Flag indicating if tuples in the input\n * mod set that are unmodified by encoders should be included in the output.\n * @param {object} param.encoders - The encoding functions\n * @param {function(object, object): boolean} [param.encoders.update] - Update encoding set\n * @param {function(object, object): boolean} [param.encoders.enter] - Enter encoding set\n * @param {function(object, object): boolean} [param.encoders.exit] - Exit encoding set\n */\nfunction Encode(params) {\n Transform.call(this, null, params);\n}\ninherits(Encode, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ADD_REM),\n fmod = _.mod || false,\n encoders = _.encoders,\n encode = pulse.encode;\n\n // if an array, the encode directive includes additional sets\n // that must be defined in order for the primary set to be invoked\n // e.g., only run the update set if the hover set is defined\n if (isArray(encode)) {\n if (out.changed() || encode.every(e => encoders[e])) {\n encode = encode[0];\n out.encode = null; // consume targeted encode directive\n } else {\n return pulse.StopPropagation;\n }\n }\n\n // marshall encoder functions\n var reenter = encode === 'enter',\n update = encoders.update || falsy,\n enter = encoders.enter || falsy,\n exit = encoders.exit || falsy,\n set = (encode && !reenter ? encoders[encode] : update) || falsy;\n if (pulse.changed(pulse.ADD)) {\n pulse.visit(pulse.ADD, t => {\n enter(t, _);\n update(t, _);\n });\n out.modifies(enter.output);\n out.modifies(update.output);\n if (set !== falsy && set !== update) {\n pulse.visit(pulse.ADD, t => {\n set(t, _);\n });\n out.modifies(set.output);\n }\n }\n if (pulse.changed(pulse.REM) && exit !== falsy) {\n pulse.visit(pulse.REM, t => {\n exit(t, _);\n });\n out.modifies(exit.output);\n }\n if (reenter || set !== falsy) {\n const flag = pulse.MOD | (_.modified() ? pulse.REFLOW : 0);\n if (reenter) {\n pulse.visit(flag, t => {\n const mod = enter(t, _) || fmod;\n if (set(t, _) || mod) out.mod.push(t);\n });\n if (out.mod.length) out.modifies(enter.output);\n } else {\n pulse.visit(flag, t => {\n if (set(t, _) || fmod) out.mod.push(t);\n });\n }\n if (out.mod.length) out.modifies(set.output);\n }\n return out.changed() ? out : pulse.StopPropagation;\n }\n});\n\n/**\n * Generates legend entries for visualizing a scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate items for.\n * @param {*} [params.count=5] - The approximate number of items, or\n * desired tick interval, to use.\n * @param {*} [params.limit] - The maximum number of entries to\n * include in a symbol legend.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid D3 format specifier string.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\nfunction LegendEntries(params) {\n Transform.call(this, [], params);\n}\ninherits(LegendEntries, Transform, {\n transform(_, pulse) {\n if (this.value != null && !_.modified()) {\n return pulse.StopPropagation;\n }\n var locale = pulse.dataflow.locale(),\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n items = this.value,\n type = _.type || SymbolLegend,\n scale = _.scale,\n limit = +_.limit,\n count = tickCount(scale, _.count == null ? 5 : _.count, _.minstep),\n lskip = !!_.values || type === SymbolLegend,\n format = _.format || labelFormat(locale, scale, count, type, _.formatSpecifier, _.formatType, lskip),\n values = _.values || labelValues(scale, count),\n domain,\n fraction,\n size,\n offset,\n ellipsis;\n if (items) out.rem = items;\n if (type === SymbolLegend) {\n if (limit && values.length > limit) {\n pulse.dataflow.warn('Symbol legend count exceeds limit, filtering items.');\n items = values.slice(0, limit - 1);\n ellipsis = true;\n } else {\n items = values;\n }\n if (isFunction(size = _.size)) {\n // if first value maps to size zero, remove from list (vega#717)\n if (!_.values && scale(items[0]) === 0) {\n items = items.slice(1);\n }\n // compute size offset for legend entries\n offset = items.reduce((max, value) => Math.max(max, size(value, _)), 0);\n } else {\n size = constant(offset = size || 8);\n }\n items = items.map((value, index) => ingest({\n index: index,\n label: format(value, index, items),\n value: value,\n offset: offset,\n size: size(value, _)\n }));\n if (ellipsis) {\n ellipsis = values[items.length];\n items.push(ingest({\n index: items.length,\n label: `\\u2026${values.length - items.length} entries`,\n value: ellipsis,\n offset: offset,\n size: size(ellipsis, _)\n }));\n }\n } else if (type === GradientLegend) {\n domain = scale.domain(), fraction = scaleFraction(scale, domain[0], peek(domain));\n\n // if automatic label generation produces 2 or fewer values,\n // use the domain end points instead (fixes vega/vega#1364)\n if (values.length < 3 && !_.values && domain[0] !== peek(domain)) {\n values = [domain[0], peek(domain)];\n }\n items = values.map((value, index) => ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: fraction(value)\n }));\n } else {\n size = values.length - 1;\n fraction = labelFraction(scale);\n items = values.map((value, index) => ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: index ? fraction(value) : 0,\n perc2: index === size ? 1 : fraction(values[index + 1])\n }));\n }\n out.source = items;\n out.add = items;\n this.value = items;\n return out;\n }\n});\n\nconst sourceX = t => t.source.x;\nconst sourceY = t => t.source.y;\nconst targetX = t => t.target.x;\nconst targetY = t => t.target.y;\n\n/**\n * Layout paths linking source and target elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction LinkPath(params) {\n Transform.call(this, {}, params);\n}\nLinkPath.Definition = {\n 'type': 'LinkPath',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'sourceX',\n 'type': 'field',\n 'default': 'source.x'\n }, {\n 'name': 'sourceY',\n 'type': 'field',\n 'default': 'source.y'\n }, {\n 'name': 'targetX',\n 'type': 'field',\n 'default': 'target.x'\n }, {\n 'name': 'targetY',\n 'type': 'field',\n 'default': 'target.y'\n }, {\n 'name': 'orient',\n 'type': 'enum',\n 'default': 'vertical',\n 'values': ['horizontal', 'vertical', 'radial']\n }, {\n 'name': 'shape',\n 'type': 'enum',\n 'default': 'line',\n 'values': ['line', 'arc', 'curve', 'diagonal', 'orthogonal']\n }, {\n 'name': 'require',\n 'type': 'signal'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\ninherits(LinkPath, Transform, {\n transform(_, pulse) {\n var sx = _.sourceX || sourceX,\n sy = _.sourceY || sourceY,\n tx = _.targetX || targetX,\n ty = _.targetY || targetY,\n as = _.as || 'path',\n orient = _.orient || 'vertical',\n shape = _.shape || 'line',\n path = Paths.get(shape + '-' + orient) || Paths.get(shape);\n if (!path) {\n error('LinkPath unsupported type: ' + _.shape + (_.orient ? '-' + _.orient : ''));\n }\n pulse.visit(pulse.SOURCE, t => {\n t[as] = path(sx(t), sy(t), tx(t), ty(t));\n });\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\nconst line = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'L' + tx + ',' + ty;\nconst lineR = (sa, sr, ta, tr) => line(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\nconst arc = (sx, sy, tx, ty) => {\n var dx = tx - sx,\n dy = ty - sy,\n rr = Math.hypot(dx, dy) / 2,\n ra = 180 * Math.atan2(dy, dx) / Math.PI;\n return 'M' + sx + ',' + sy + 'A' + rr + ',' + rr + ' ' + ra + ' 0 1' + ' ' + tx + ',' + ty;\n};\nconst arcR = (sa, sr, ta, tr) => arc(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\nconst curve = (sx, sy, tx, ty) => {\n const dx = tx - sx,\n dy = ty - sy,\n ix = 0.2 * (dx + dy),\n iy = 0.2 * (dy - dx);\n return 'M' + sx + ',' + sy + 'C' + (sx + ix) + ',' + (sy + iy) + ' ' + (tx + iy) + ',' + (ty - ix) + ' ' + tx + ',' + ty;\n};\nconst curveR = (sa, sr, ta, tr) => curve(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\nconst orthoX = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'V' + ty + 'H' + tx;\nconst orthoY = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'H' + tx + 'V' + ty;\nconst orthoR = (sa, sr, ta, tr) => {\n const sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n sf = Math.abs(ta - sa) > Math.PI ? ta <= sa : ta > sa;\n return 'M' + sr * sc + ',' + sr * ss + 'A' + sr + ',' + sr + ' 0 0,' + (sf ? 1 : 0) + ' ' + sr * tc + ',' + sr * ts + 'L' + tr * tc + ',' + tr * ts;\n};\nconst diagonalX = (sx, sy, tx, ty) => {\n const m = (sx + tx) / 2;\n return 'M' + sx + ',' + sy + 'C' + m + ',' + sy + ' ' + m + ',' + ty + ' ' + tx + ',' + ty;\n};\nconst diagonalY = (sx, sy, tx, ty) => {\n const m = (sy + ty) / 2;\n return 'M' + sx + ',' + sy + 'C' + sx + ',' + m + ' ' + tx + ',' + m + ' ' + tx + ',' + ty;\n};\nconst diagonalR = (sa, sr, ta, tr) => {\n const sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n mr = (sr + tr) / 2;\n return 'M' + sr * sc + ',' + sr * ss + 'C' + mr * sc + ',' + mr * ss + ' ' + mr * tc + ',' + mr * ts + ' ' + tr * tc + ',' + tr * ts;\n};\nconst Paths = fastmap({\n 'line': line,\n 'line-radial': lineR,\n 'arc': arc,\n 'arc-radial': arcR,\n 'curve': curve,\n 'curve-radial': curveR,\n 'orthogonal-horizontal': orthoX,\n 'orthogonal-vertical': orthoY,\n 'orthogonal-radial': orthoR,\n 'diagonal-horizontal': diagonalX,\n 'diagonal-vertical': diagonalY,\n 'diagonal-radial': diagonalR\n});\n\n/**\n * Pie and donut chart layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size pie segments.\n * @param {number} [params.startAngle=0] - The start angle (in radians) of the layout.\n * @param {number} [params.endAngle=2π] - The end angle (in radians) of the layout.\n * @param {boolean} [params.sort] - Boolean flag for sorting sectors by value.\n */\nfunction Pie(params) {\n Transform.call(this, null, params);\n}\nPie.Definition = {\n 'type': 'Pie',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'startAngle',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'endAngle',\n 'type': 'number',\n 'default': 6.283185307179586\n }, {\n 'name': 'sort',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['startAngle', 'endAngle']\n }]\n};\ninherits(Pie, Transform, {\n transform(_, pulse) {\n var as = _.as || ['startAngle', 'endAngle'],\n startAngle = as[0],\n endAngle = as[1],\n field = _.field || one,\n start = _.startAngle || 0,\n stop = _.endAngle != null ? _.endAngle : 2 * Math.PI,\n data = pulse.source,\n values = data.map(field),\n n = values.length,\n a = start,\n k = (stop - start) / sum(values),\n index = range(n),\n i,\n t,\n v;\n if (_.sort) {\n index.sort((a, b) => values[a] - values[b]);\n }\n for (i = 0; i < n; ++i) {\n v = values[index[i]];\n t = data[index[i]];\n t[startAngle] = a;\n t[endAngle] = a += v * k;\n }\n this.value = values;\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\n\nconst DEFAULT_COUNT = 5;\nfunction includeZero(scale) {\n const type = scale.type;\n return !scale.bins && (type === Linear || type === Pow || type === Sqrt);\n}\nfunction includePad(type) {\n return isContinuous(type) && type !== Sequential;\n}\nconst SKIP = toSet(['set', 'modified', 'clear', 'type', 'scheme', 'schemeExtent', 'schemeCount', 'domain', 'domainMin', 'domainMid', 'domainMax', 'domainRaw', 'domainImplicit', 'nice', 'zero', 'bins', 'range', 'rangeStep', 'round', 'reverse', 'interpolate', 'interpolateGamma']);\n\n/**\n * Maintains a scale function mapping data values to visual channels.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Scale(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\n\ninherits(Scale, Transform, {\n transform(_, pulse) {\n var df = pulse.dataflow,\n scale$1 = this.value,\n key = scaleKey(_);\n if (!scale$1 || key !== scale$1.type) {\n this.value = scale$1 = scale(key)();\n }\n for (key in _) if (!SKIP[key]) {\n // padding is a scale property for band/point but not others\n if (key === 'padding' && includePad(scale$1.type)) continue;\n // invoke scale property setter, raise warning if not found\n isFunction(scale$1[key]) ? scale$1[key](_[key]) : df.warn('Unsupported scale property: ' + key);\n }\n configureRange(scale$1, _, configureBins(scale$1, _, configureDomain(scale$1, _, df)));\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n }\n});\nfunction scaleKey(_) {\n var t = _.type,\n d = '',\n n;\n\n // backwards compatibility pre Vega 5.\n if (t === Sequential) return Sequential + '-' + Linear;\n if (isContinuousColor(_)) {\n n = _.rawDomain ? _.rawDomain.length : _.domain ? _.domain.length + +(_.domainMid != null) : 0;\n d = n === 2 ? Sequential + '-' : n === 3 ? Diverging + '-' : '';\n }\n return (d + t || Linear).toLowerCase();\n}\nfunction isContinuousColor(_) {\n const t = _.type;\n return isContinuous(t) && t !== Time && t !== UTC && (_.scheme || _.range && _.range.length && _.range.every(isString));\n}\nfunction configureDomain(scale, _, df) {\n // check raw domain, if provided use that and exit early\n const raw = rawDomain(scale, _.domainRaw, df);\n if (raw > -1) return raw;\n var domain = _.domain,\n type = scale.type,\n zero = _.zero || _.zero === undefined && includeZero(scale),\n n,\n mid;\n if (!domain) return 0;\n\n // adjust continuous domain for minimum pixel padding\n if (includePad(type) && _.padding && domain[0] !== peek(domain)) {\n domain = padDomain(type, domain, _.range, _.padding, _.exponent, _.constant);\n }\n\n // adjust domain based on zero, min, max settings\n if (zero || _.domainMin != null || _.domainMax != null || _.domainMid != null) {\n n = (domain = domain.slice()).length - 1 || 1;\n if (zero) {\n if (domain[0] > 0) domain[0] = 0;\n if (domain[n] < 0) domain[n] = 0;\n }\n if (_.domainMin != null) domain[0] = _.domainMin;\n if (_.domainMax != null) domain[n] = _.domainMax;\n if (_.domainMid != null) {\n mid = _.domainMid;\n const i = mid > domain[n] ? n + 1 : mid < domain[0] ? 0 : n;\n if (i !== n) df.warn('Scale domainMid exceeds domain min or max.', mid);\n domain.splice(i, 0, mid);\n }\n }\n\n // set the scale domain\n scale.domain(domainCheck(type, domain, df));\n\n // if ordinal scale domain is defined, prevent implicit\n // domain construction as side-effect of scale lookup\n if (type === Ordinal) {\n scale.unknown(_.domainImplicit ? scaleImplicit : undefined);\n }\n\n // perform 'nice' adjustment as requested\n if (_.nice && scale.nice) {\n scale.nice(_.nice !== true && tickCount(scale, _.nice) || null);\n }\n\n // return the cardinality of the domain\n return domain.length;\n}\nfunction rawDomain(scale, raw, df) {\n if (raw) {\n scale.domain(domainCheck(scale.type, raw, df));\n return raw.length;\n } else {\n return -1;\n }\n}\nfunction padDomain(type, domain, range, pad, exponent, constant) {\n var span = Math.abs(peek(range) - range[0]),\n frac = span / (span - 2 * pad),\n d = type === Log ? zoomLog(domain, null, frac) : type === Sqrt ? zoomPow(domain, null, frac, 0.5) : type === Pow ? zoomPow(domain, null, frac, exponent || 1) : type === Symlog ? zoomSymlog(domain, null, frac, constant || 1) : zoomLinear(domain, null, frac);\n domain = domain.slice();\n domain[0] = d[0];\n domain[domain.length - 1] = d[1];\n return domain;\n}\nfunction domainCheck(type, domain, df) {\n if (isLogarithmic(type)) {\n // sum signs of domain values\n // if all pos or all neg, abs(sum) === domain.length\n var s = Math.abs(domain.reduce((s, v) => s + (v < 0 ? -1 : v > 0 ? 1 : 0), 0));\n if (s !== domain.length) {\n df.warn('Log scale domain includes zero: ' + stringValue(domain));\n }\n }\n return domain;\n}\nfunction configureBins(scale, _, count) {\n let bins = _.bins;\n if (bins && !isArray(bins)) {\n // generate bin boundary array\n const domain = scale.domain(),\n lo = domain[0],\n hi = peek(domain),\n step = bins.step;\n let start = bins.start == null ? lo : bins.start,\n stop = bins.stop == null ? hi : bins.stop;\n if (!step) error('Scale bins parameter missing step property.');\n if (start < lo) start = step * Math.ceil(lo / step);\n if (stop > hi) stop = step * Math.floor(hi / step);\n bins = range(start, stop + step / 2, step);\n }\n if (bins) {\n // assign bin boundaries to scale instance\n scale.bins = bins;\n } else if (scale.bins) {\n // no current bins, remove bins if previously set\n delete scale.bins;\n }\n\n // special handling for bin-ordinal scales\n if (scale.type === BinOrdinal) {\n if (!bins) {\n // the domain specifies the bins\n scale.bins = scale.domain();\n } else if (!_.domain && !_.domainRaw) {\n // the bins specify the domain\n scale.domain(bins);\n count = bins.length;\n }\n }\n\n // return domain cardinality\n return count;\n}\nfunction configureRange(scale, _, count) {\n var type = scale.type,\n round = _.round || false,\n range = _.range;\n\n // if range step specified, calculate full range extent\n if (_.rangeStep != null) {\n range = configureRangeStep(type, _, count);\n }\n\n // else if a range scheme is defined, use that\n else if (_.scheme) {\n range = configureScheme(type, _, count);\n if (isFunction(range)) {\n if (scale.interpolator) {\n return scale.interpolator(range);\n } else {\n error(`Scale type ${type} does not support interpolating color schemes.`);\n }\n }\n }\n\n // given a range array for an interpolating scale, convert to interpolator\n if (range && isInterpolating(type)) {\n return scale.interpolator(interpolateColors(flip(range, _.reverse), _.interpolate, _.interpolateGamma));\n }\n\n // configure rounding / interpolation\n if (range && _.interpolate && scale.interpolate) {\n scale.interpolate(interpolate(_.interpolate, _.interpolateGamma));\n } else if (isFunction(scale.round)) {\n scale.round(round);\n } else if (isFunction(scale.rangeRound)) {\n scale.interpolate(round ? interpolateRound : interpolate$1);\n }\n if (range) scale.range(flip(range, _.reverse));\n}\nfunction configureRangeStep(type, _, count) {\n if (type !== Band && type !== Point) {\n error('Only band and point scales support rangeStep.');\n }\n\n // calculate full range based on requested step size and padding\n var outer = (_.paddingOuter != null ? _.paddingOuter : _.padding) || 0,\n inner = type === Point ? 1 : (_.paddingInner != null ? _.paddingInner : _.padding) || 0;\n return [0, _.rangeStep * bandSpace(count, inner, outer)];\n}\nfunction configureScheme(type, _, count) {\n var extent = _.schemeExtent,\n name,\n scheme$1;\n if (isArray(_.scheme)) {\n scheme$1 = interpolateColors(_.scheme, _.interpolate, _.interpolateGamma);\n } else {\n name = _.scheme.toLowerCase();\n scheme$1 = scheme(name);\n if (!scheme$1) error(`Unrecognized scheme name: ${_.scheme}`);\n }\n\n // determine size for potential discrete range\n count = type === Threshold ? count + 1 : type === BinOrdinal ? count - 1 : type === Quantile || type === Quantize ? +_.schemeCount || DEFAULT_COUNT : count;\n\n // adjust and/or quantize scheme as appropriate\n return isInterpolating(type) ? adjustScheme(scheme$1, extent, _.reverse) : isFunction(scheme$1) ? quantizeInterpolator(adjustScheme(scheme$1, extent), count) : type === Ordinal ? scheme$1 : scheme$1.slice(0, count);\n}\nfunction adjustScheme(scheme, extent, reverse) {\n return isFunction(scheme) && (extent || reverse) ? interpolateRange(scheme, flip(extent || [0, 1], reverse)) : scheme;\n}\nfunction flip(array, reverse) {\n return reverse ? array.slice().reverse() : array;\n}\n\n/**\n * Sorts scenegraph items in the pulse source array.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting tuples.\n */\nfunction SortItems(params) {\n Transform.call(this, null, params);\n}\ninherits(SortItems, Transform, {\n transform(_, pulse) {\n const mod = _.modified('sort') || pulse.changed(pulse.ADD) || pulse.modified(_.sort.fields) || pulse.modified('datum');\n if (mod) pulse.source.sort(stableCompare(_.sort));\n this.modified(mod);\n return pulse;\n }\n});\n\nconst Zero = 'zero',\n Center = 'center',\n Normalize = 'normalize',\n DefOutput = ['y0', 'y1'];\n\n/**\n * Stack layout for visualization elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to stack.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {function(object,object): number} [params.sort] - A comparator for stack sorting.\n * @param {string} [offset='zero'] - Stack baseline offset. One of 'zero', 'center', 'normalize'.\n */\nfunction Stack(params) {\n Transform.call(this, null, params);\n}\nStack.Definition = {\n 'type': 'Stack',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'offset',\n 'type': 'enum',\n 'default': Zero,\n 'values': [Zero, Center, Normalize]\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': DefOutput\n }]\n};\ninherits(Stack, Transform, {\n transform(_, pulse) {\n var as = _.as || DefOutput,\n y0 = as[0],\n y1 = as[1],\n sort = stableCompare(_.sort),\n field = _.field || one,\n stack = _.offset === Center ? stackCenter : _.offset === Normalize ? stackNormalize : stackZero,\n groups,\n i,\n n,\n max;\n\n // partition, sum, and sort the stack groups\n groups = partition(pulse.source, _.groupby, sort, field);\n\n // compute stack layouts per group\n for (i = 0, n = groups.length, max = groups.max; i < n; ++i) {\n stack(groups[i], max, field, y0, y1);\n }\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\nfunction stackCenter(group, max, field, y0, y1) {\n var last = (max - group.sum) / 2,\n m = group.length,\n j = 0,\n t;\n for (; j < m; ++j) {\n t = group[j];\n t[y0] = last;\n t[y1] = last += Math.abs(field(t));\n }\n}\nfunction stackNormalize(group, max, field, y0, y1) {\n var scale = 1 / group.sum,\n last = 0,\n m = group.length,\n j = 0,\n v = 0,\n t;\n for (; j < m; ++j) {\n t = group[j];\n t[y0] = last;\n t[y1] = last = scale * (v += Math.abs(field(t)));\n }\n}\nfunction stackZero(group, max, field, y0, y1) {\n var lastPos = 0,\n lastNeg = 0,\n m = group.length,\n j = 0,\n v,\n t;\n for (; j < m; ++j) {\n t = group[j];\n v = +field(t);\n if (v < 0) {\n t[y0] = lastNeg;\n t[y1] = lastNeg += v;\n } else {\n t[y0] = lastPos;\n t[y1] = lastPos += v;\n }\n }\n}\nfunction partition(data, groupby, sort, field) {\n var groups = [],\n get = f => f(t),\n map,\n i,\n n,\n m,\n t,\n k,\n g,\n s,\n max;\n\n // partition data points into stack groups\n if (groupby == null) {\n groups.push(data.slice());\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n groups.push(g);\n }\n g.push(t);\n }\n }\n\n // compute sums of groups, sort groups as needed\n for (k = 0, max = 0, m = groups.length; k < m; ++k) {\n g = groups[k];\n for (i = 0, s = 0, n = g.length; i < n; ++i) {\n s += Math.abs(field(g[i]));\n }\n g.sum = s;\n if (s > max) max = s;\n if (sort) g.sort(sort);\n }\n groups.max = max;\n return groups;\n}\n\nexport { AxisTicks as axisticks, DataJoin as datajoin, Encode as encode, LegendEntries as legendentries, LinkPath as linkpath, Pie as pie, Scale as scale, SortItems as sortitems, Stack as stack };\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","import {Adder} from \"d3-array\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nexport var areaRingSum = new Adder();\n\n// hello?\n\nvar areaSum = new Adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum = new Adder();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum = new Adder();\n stream(object, areaStream);\n return areaSum * 2;\n}\n","import {Adder} from \"d3-array\";\nimport {areaStream, areaRingSum} from \"./area.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport {abs, degrees, epsilon, radians} from \"./math.js\";\nimport stream from \"./stream.js\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum,\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum = new Adder();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n },\n sphere: function() {\n lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import {Adder} from \"d3-array\";\nimport {asin, atan2, cos, degrees, epsilon, epsilon2, hypot, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar W0, W1,\n X0, Y0, Z0,\n X1, Y1, Z1,\n X2, Y2, Z2,\n lambda00, phi00, // first point\n x0, y0, z0; // previous point\n\nvar centroidStream = {\n sphere: noop,\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n centroidRingPoint(lambda00, phi00);\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n cx = y0 * z - z0 * y,\n cy = z0 * x - x0 * z,\n cz = x0 * y - y0 * x,\n m = hypot(cx, cy, cz),\n w = asin(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2.add(v * cx);\n Y2.add(v * cy);\n Z2.add(v * cz);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 = 0;\n X2 = new Adder();\n Y2 = new Adder();\n Z2 = new Adder();\n stream(object, centroidStream);\n\n var x = +X2,\n y = +Y2,\n z = +Z2,\n m = hypot(x, y, z);\n\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < epsilon2) {\n x = X1, y = Y1, z = Z1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n m = hypot(x, y, z);\n // If the feature still has an undefined ccentroid, then return.\n if (m < epsilon2) return [NaN, NaN];\n }\n\n return [atan2(y, x) * degrees, asin(z / m) * degrees];\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n return [lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n lambda += deltaLambda;\n if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n return [lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y, m) {\n line.push([x, y, m]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n if (pointEqual(p0, p1)) {\n if (!p0[2] && !p1[2]) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n // handle degenerate cases by moving the point\n p1[0] += 2 * epsilon;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n var lambda = longitude(point),\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n var sum = new Adder();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = longitude(point0),\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = longitude(point1),\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n point1[2] = 1;\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1], 2);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1], 3);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math.js\";\n\nfunction graticuleX(y0, y1, dy) {\n var y = range(y0, y1 - epsilon, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = range(x0, x1 - epsilon, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: \"MultiLineString\", coordinates: lines()};\n }\n\n function lines() {\n return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n return graticule()();\n}\n","export default x => x;\n","import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n areaRingSum = new Adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum = new Adder();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum = new Adder();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum = new Adder();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","// Simple caching for constant-radius points.\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\n\nexport default class PathString {\n constructor(digits) {\n this._append = digits == null ? append : appendRound(digits);\n this._radius = 4.5;\n this._ = \"\";\n }\n pointRadius(_) {\n this._radius = +_;\n return this;\n }\n polygonStart() {\n this._line = 0;\n }\n polygonEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {\n if (this._line === 0) this._ += \"Z\";\n this._point = NaN;\n }\n point(x, y) {\n switch (this._point) {\n case 0: {\n this._append`M${x},${y}`;\n this._point = 1;\n break;\n }\n case 1: {\n this._append`L${x},${y}`;\n break;\n }\n default: {\n this._append`M${x},${y}`;\n if (this._radius !== cacheRadius || this._append !== cacheAppend) {\n const r = this._radius;\n const s = this._;\n this._ = \"\"; // stash the old string so we can cache the circle path fragment\n this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\n cacheRadius = r;\n cacheAppend = this._append;\n cacheCircle = this._;\n this._ = s;\n }\n this._ += cacheCircle;\n break;\n }\n }\n }\n result() {\n const result = this._;\n this._ = \"\";\n return result.length ? result : null;\n }\n}\n\nfunction append(strings) {\n let i = 1;\n this._ += strings[0];\n for (const j = strings.length; i < j; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n const d = Math.floor(digits);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\n if (d > 15) return append;\n if (d !== cacheDigits) {\n const k = 10 ** d;\n cacheDigits = d;\n cacheAppend = function append(strings) {\n let i = 1;\n this._ += strings[0];\n for (const j = strings.length; i < j; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n }\n return cacheAppend;\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n let digits = 3,\n pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n if (!arguments.length) return projection;\n projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream;\n return path;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString(digits)) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n path.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) digits = null;\n else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n if (context === null) contextStream = new PathString(digits);\n return path;\n };\n\n return path.projection(projection).digits(digits).context(context);\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n function transform(x, y) {\n x *= sx; y *= sy;\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k * sx, (dy - y) / k * sy];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n x *= sx; y *= sy;\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n };\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate angle\n sx = 1, // reflectX\n sy = 1, // reflectX\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n };\n\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n","import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y,\n l = atan2(x, abs(r0y)) * sign(r0y);\n if (r0y * n < 0)\n l -= pi * sign(x) * sign(r0y);\n return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n","import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n","import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n if (k === Infinity) return [2, 0];\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\n\nfunction tany(y) {\n return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n f = cy0 * pow(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n l = atan2(x, abs(fy)) * sign(fy);\n if (fy * n < 0)\n l -= pi * sign(x) * sign(fy);\n return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n","import projection from \"./index.js\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {abs, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {equirectangularRaw} from \"./equirectangular.js\";\n\nexport function conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs(n) < epsilon) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y,\n l = atan2(x, abs(gy)) * sign(gy);\n if (gy * n < 0)\n l -= pi * sign(x) * sign(gy);\n return [l / n, g - sign(n) * sqrt(x * x + gy * gy)];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = sqrt(3) / 2,\n iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs(delta) < epsilon2) break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n asin(sin(l) / M)\n ];\n};\n\nexport default function() {\n return projection(equalEarthRaw)\n .scale(177.158);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n","import projection from \"./index.js\";\nimport {abs, epsilon} from \"../math.js\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\nexport default function() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math.js\";\nimport {mercatorProjection} from \"./mercator.js\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n","export var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var ceil = Math.ceil;\nexport var cos = Math.cos;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var pow = Math.pow;\nexport var round = Math.round;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sin = Math.sin;\nexport var tan = Math.tan;\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var sqrt1_2 = Math.SQRT1_2;\nexport var sqrt2 = sqrt(2);\nexport var sqrtPi = sqrt(pi);\nexport var tau = pi * 2;\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport function sinci(x) {\n return x ? x / Math.sin(x) : 1;\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function sqrt(x) {\n return x > 0 ? Math.sqrt(x) : 0;\n}\n\nexport function tanh(x) {\n x = exp(2 * x);\n return (x - 1) / (x + 1);\n}\n\nexport function sinh(x) {\n return (exp(x) - exp(-x)) / 2;\n}\n\nexport function cosh(x) {\n return (exp(x) + exp(-x)) / 2;\n}\n\nexport function arsinh(x) {\n return log(x + sqrt(x * x + 1));\n}\n\nexport function arcosh(x) {\n return log(x + sqrt(x * x - 1));\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, cos, epsilon, halfPi, pi, sin, sqrt2} from \"./math.js\";\n\nexport function mollweideBromleyTheta(cp, phi) {\n var cpsinPhi = cp * sin(phi), i = 30, delta;\n do phi -= delta = (phi + sin(phi) - cpsinPhi) / (1 + cos(phi));\n while (abs(delta) > epsilon && --i > 0);\n return phi / 2;\n}\n\nexport function mollweideBromleyRaw(cx, cy, cp) {\n\n function forward(lambda, phi) {\n return [cx * lambda * cos(phi = mollweideBromleyTheta(cp, phi)), cy * sin(phi)];\n }\n\n forward.invert = function(x, y) {\n return y = asin(y / cy), [x / (cx * cos(y)), asin((2 * y + sin(2 * y)) / cp)];\n };\n\n return forward;\n}\n\nexport var mollweideRaw = mollweideBromleyRaw(sqrt2 / halfPi, sqrt2, pi);\n\nexport default function() {\n return projection(mollweideRaw)\n .scale(169.529);\n}\n","import { geoPath, geoAlbers, geoAlbersUsa, geoAzimuthalEqualArea, geoAzimuthalEquidistant, geoConicConformal, geoConicEqualArea, geoConicEquidistant, geoEqualEarth, geoEquirectangular, geoGnomonic, geoIdentity, geoMercator, geoNaturalEarth1, geoOrthographic, geoStereographic, geoTransverseMercator } from 'd3-geo';\nimport { geoMollweide } from 'd3-geo-projection';\nimport { registerScale } from 'vega-scale';\n\nconst defaultPath = geoPath();\nconst projectionProperties = [\n// standard properties in d3-geo\n'clipAngle', 'clipExtent', 'scale', 'translate', 'center', 'rotate', 'parallels', 'precision', 'reflectX', 'reflectY',\n// extended properties in d3-geo-projections\n'coefficient', 'distance', 'fraction', 'lobes', 'parallel', 'radius', 'ratio', 'spacing', 'tilt'];\n\n/**\n * Augment projections with their type and a copy method.\n */\nfunction create(type, constructor) {\n return function projection() {\n const p = constructor();\n p.type = type;\n p.path = geoPath().projection(p);\n p.copy = p.copy || function () {\n const c = projection();\n projectionProperties.forEach(prop => {\n if (p[prop]) c[prop](p[prop]());\n });\n c.path.pointRadius(p.path.pointRadius());\n return c;\n };\n return registerScale(p);\n };\n}\nfunction projection(type, proj) {\n if (!type || typeof type !== 'string') {\n throw new Error('Projection type must be a name string.');\n }\n type = type.toLowerCase();\n if (arguments.length > 1) {\n projections[type] = create(type, proj);\n return this;\n } else {\n return projections[type] || null;\n }\n}\nfunction getProjectionPath(proj) {\n return proj && proj.path || defaultPath;\n}\nconst projections = {\n // base d3-geo projection types\n albers: geoAlbers,\n albersusa: geoAlbersUsa,\n azimuthalequalarea: geoAzimuthalEqualArea,\n azimuthalequidistant: geoAzimuthalEquidistant,\n conicconformal: geoConicConformal,\n conicequalarea: geoConicEqualArea,\n conicequidistant: geoConicEquidistant,\n equalEarth: geoEqualEarth,\n equirectangular: geoEquirectangular,\n gnomonic: geoGnomonic,\n identity: geoIdentity,\n mercator: geoMercator,\n mollweide: geoMollweide,\n naturalEarth1: geoNaturalEarth1,\n orthographic: geoOrthographic,\n stereographic: geoStereographic,\n transversemercator: geoTransverseMercator\n};\nfor (const key in projections) {\n projection(key, projections[key]);\n}\n\nexport { getProjectionPath, projection, projectionProperties };\n","import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n","import clipRectangle from \"../clip/rectangle.js\";\nimport identity from \"../identity.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport {cos, degrees, radians, sin} from \"../math.js\";\n\nexport default function() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\n alpha = 0, ca, sa, // angle\n x0 = null, y0, x1, y1, // clip extent\n kx = 1, ky = 1,\n transform = transformer({\n point: function(x, y) {\n var p = projection([x, y])\n this.stream.point(p[0], p[1]);\n }\n }),\n postclip = identity,\n cache,\n cacheStream;\n\n function reset() {\n kx = k * sx;\n ky = k * sy;\n cache = cacheStream = null;\n return projection;\n }\n\n function projection (p) {\n var x = p[0] * kx, y = p[1] * ky;\n if (alpha) {\n var t = y * ca - x * sa;\n x = x * ca + y * sa;\n y = t;\n } \n return [x + tx, y + ty];\n }\n projection.invert = function(p) {\n var x = p[0] - tx, y = p[1] - ty;\n if (alpha) {\n var t = y * ca + x * sa;\n x = x * ca - y * sa;\n y = t;\n }\n return [x / kx, y / ky];\n };\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n };\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n projection.scale = function(_) {\n return arguments.length ? (k = +_, reset()) : k;\n };\n projection.translate = function(_) {\n return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\n }\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;\n };\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\n };\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\n };\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n return projection;\n}\n","import { Transform, rederive, ingest, replace } from 'vega-dataflow';\nimport { error, extent, inherits, identity, isArray, isFunction, isNumber, array, constant, one, accessorName, accessorFields, field, extend, toSet, zero } from 'vega-util';\nimport { tickStep, range, max, sum } from 'd3-array';\nimport { bandwidthNRD } from 'vega-statistics';\nimport { getProjectionPath, projectionProperties, projection } from 'vega-projection';\nimport { geoGraticule } from 'd3-geo';\nimport { rgb } from 'd3-color';\nimport { canvas } from 'vega-canvas';\n\nfunction noop() {}\nconst cases = [[], [[[1.0, 1.5], [0.5, 1.0]]], [[[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [0.5, 1.0]]], [[[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 0.5], [1.0, 1.5]]], [[[1.0, 0.5], [0.5, 1.0]]], [[[0.5, 1.0], [1.0, 0.5]]], [[[1.0, 1.5], [1.0, 0.5]]], [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [1.0, 0.5]]], [[[0.5, 1.0], [1.5, 1.0]]], [[[1.0, 1.5], [1.5, 1.0]]], [[[0.5, 1.0], [1.0, 1.5]]], []];\n\n// Implementation adapted from d3/d3-contour. Thanks!\nfunction contours () {\n var dx = 1,\n dy = 1,\n smooth = smoothLinear;\n function contours(values, tz) {\n return tz.map(value => contour(values, value));\n }\n\n // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n function contour(values, value) {\n var polygons = [],\n holes = [];\n isorings(values, value, ring => {\n smooth(ring, values, value);\n if (area(ring) > 0) polygons.push([ring]);else holes.push(ring);\n });\n holes.forEach(hole => {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n return {\n type: 'MultiPolygon',\n value: value,\n coordinates: polygons\n };\n }\n\n // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n function isorings(values, value, callback) {\n var fragmentByStart = new Array(),\n fragmentByEnd = new Array(),\n x,\n y,\n t0,\n t1,\n t2,\n t3;\n\n // Special case for the first row (y = -1, t2 = t3 = 0).\n x = y = -1;\n t1 = values[0] >= value;\n cases[t1 << 1].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[x + 1] >= value;\n cases[t0 | t1 << 1].forEach(stitch);\n }\n cases[t1 << 0].forEach(stitch);\n\n // General case for the intermediate rows.\n while (++y < dy - 1) {\n x = -1;\n t1 = values[y * dx + dx] >= value;\n t2 = values[y * dx] >= value;\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t1 | t2 << 3].forEach(stitch);\n }\n\n // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t2 << 3].forEach(stitch);\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f,\n g;\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {\n start: f.start,\n end: g.end,\n ring: f.ring.concat(g.ring)\n };\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {\n start: g.start,\n end: f.end,\n ring: g.ring.concat(f.ring)\n };\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {\n start: startIndex,\n end: endIndex,\n ring: [start, end]\n };\n }\n }\n }\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n function smoothLinear(ring, values, value) {\n ring.forEach(point => {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v0,\n v1 = values[yt * dx + xt];\n if (x > 0 && x < dx && xt === x) {\n v0 = values[yt * dx + xt - 1];\n point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n }\n if (y > 0 && y < dy && yt === y) {\n v0 = values[(yt - 1) * dx + xt];\n point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n }\n });\n }\n contours.contour = contour;\n contours.size = function (_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.floor(_[0]),\n _1 = Math.floor(_[1]);\n if (!(_0 >= 0 && _1 >= 0)) error('invalid size');\n return dx = _0, dy = _1, contours;\n };\n contours.smooth = function (_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n };\n return contours;\n}\nfunction area(ring) {\n var i = 0,\n n = ring.length,\n area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n return area;\n}\nfunction contains(ring, hole) {\n var i = -1,\n n = hole.length,\n c;\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n return 0;\n}\nfunction ringContains(ring, point) {\n var x = point[0],\n y = point[1],\n contains = -1;\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i],\n xi = pi[0],\n yi = pi[1],\n pj = ring[j],\n xj = pj[0],\n yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi) contains = -contains;\n }\n return contains;\n}\nfunction segmentContains(a, b, c) {\n var i;\n return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n\nfunction quantize (k, nice, zero) {\n return function (values) {\n var ex = extent(values),\n start = zero ? Math.min(ex[0], 0) : ex[0],\n stop = ex[1],\n span = stop - start,\n step = nice ? tickStep(start, stop, k) : span / (k + 1);\n return range(start + step, stop, step);\n };\n}\n\n/**\n * Generate isocontours (level sets) based on input raster grid data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} [params.field] - The field with raster grid\n * data. If unspecified, the tuple itself is interpreted as a raster grid.\n * @param {Array} [params.thresholds] - Contour threshold array. If\n * specified, the levels, nice, resolve, and zero parameters are ignored.\n * @param {number} [params.levels] - The desired number of contour levels.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified levels.\n * @param {string} [params.resolve] - The method for resolving thresholds\n * across multiple input grids. If 'independent' (the default), threshold\n * calculation will be performed separately for each grid. If 'shared', a\n * single set of threshold values will be used for all input grids.\n * @param {boolean} [params.zero] - Boolean flag indicating if the contour\n * threshold values should include zero.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n * @param {boolean} [params.scale] - Optional numerical value by which to\n * scale the output isocontour coordinates. This parameter can be useful\n * to scale the contours to match a desired output resolution.\n * @param {string} [params.as='contour'] - The output field in which to store\n * the generated isocontour data (default 'contour').\n */\nfunction Isocontour(params) {\n Transform.call(this, null, params);\n}\nIsocontour.Definition = {\n 'type': 'Isocontour',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'thresholds',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'levels',\n 'type': 'number'\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'zero',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'scale',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'translate',\n 'type': 'number',\n 'array': true,\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'default': 'contour'\n }]\n};\ninherits(Isocontour, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n source = pulse.materialize(pulse.SOURCE).source,\n field = _.field || identity,\n contour = contours().smooth(_.smooth !== false),\n tz = _.thresholds || levels(source, field, _),\n as = _.as === null ? null : _.as || 'contour',\n values = [];\n source.forEach(t => {\n const grid = field(t);\n\n // generate contour paths in GeoJSON format\n const paths = contour.size([grid.width, grid.height])(grid.values, isArray(tz) ? tz : tz(grid.values));\n\n // adjust contour path coordinates as needed\n transformPaths(paths, grid, t, _);\n\n // ingest; copy source data properties to output\n paths.forEach(p => {\n values.push(rederive(t, ingest(as != null ? {\n [as]: p\n } : p)));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = values;\n return out;\n }\n});\nfunction levels(values, f, _) {\n const q = quantize(_.levels || 10, _.nice, _.zero !== false);\n return _.resolve !== 'shared' ? q : q(values.map(t => max(f(t).values)));\n}\nfunction transformPaths(paths, grid, datum, _) {\n let s = _.scale || grid.scale,\n t = _.translate || grid.translate;\n if (isFunction(s)) s = s(datum, _);\n if (isFunction(t)) t = t(datum, _);\n if ((s === 1 || s == null) && !t) return;\n const sx = (isNumber(s) ? s : s[0]) || 1,\n sy = (isNumber(s) ? s : s[1]) || 1,\n tx = t && t[0] || 0,\n ty = t && t[1] || 0;\n paths.forEach(transform(grid, sx, sy, tx, ty));\n}\nfunction transform(grid, sx, sy, tx, ty) {\n const x1 = grid.x1 || 0,\n y1 = grid.y1 || 0,\n flip = sx * sy < 0;\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n function transformRing(coordinates) {\n if (flip) coordinates.reverse(); // maintain winding order\n coordinates.forEach(transformPoint);\n }\n function transformPoint(coordinates) {\n coordinates[0] = (coordinates[0] - x1) * sx + tx;\n coordinates[1] = (coordinates[1] - y1) * sy + ty;\n }\n return function (geometry) {\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n };\n}\n\nfunction radius(bw, data, f) {\n const v = bw >= 0 ? bw : bandwidthNRD(data, f);\n return Math.round((Math.sqrt(4 * v * v + 1) - 1) / 2);\n}\nfunction number(_) {\n return isFunction(_) ? _ : constant(+_);\n}\n\n// Implementation adapted from d3/d3-contour. Thanks!\nfunction density2D () {\n var x = d => d[0],\n y = d => d[1],\n weight = one,\n bandwidth = [-1, -1],\n dx = 960,\n dy = 500,\n k = 2; // log2(cellSize)\n\n function density(data, counts) {\n const rx = radius(bandwidth[0], data, x) >> k,\n // blur x-radius\n ry = radius(bandwidth[1], data, y) >> k,\n // blur y-radius\n ox = rx ? rx + 2 : 0,\n // x-offset padding for blur\n oy = ry ? ry + 2 : 0,\n // y-offset padding for blur\n n = 2 * ox + (dx >> k),\n // grid width\n m = 2 * oy + (dy >> k),\n // grid height\n values0 = new Float32Array(n * m),\n values1 = new Float32Array(n * m);\n let values = values0;\n data.forEach(d => {\n const xi = ox + (+x(d) >> k),\n yi = oy + (+y(d) >> k);\n if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n values0[xi + yi * n] += +weight(d);\n }\n });\n if (rx > 0 && ry > 0) {\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n } else if (rx > 0) {\n blurX(n, m, values0, values1, rx);\n blurX(n, m, values1, values0, rx);\n blurX(n, m, values0, values1, rx);\n values = values1;\n } else if (ry > 0) {\n blurY(n, m, values0, values1, ry);\n blurY(n, m, values1, values0, ry);\n blurY(n, m, values0, values1, ry);\n values = values1;\n }\n\n // scale density estimates\n // density in points per square pixel or probability density\n const s = counts ? Math.pow(2, -2 * k) : 1 / sum(values);\n for (let i = 0, sz = n * m; i < sz; ++i) values[i] *= s;\n return {\n values: values,\n scale: 1 << k,\n width: n,\n height: m,\n x1: ox,\n y1: oy,\n x2: ox + (dx >> k),\n y2: oy + (dy >> k)\n };\n }\n density.x = function (_) {\n return arguments.length ? (x = number(_), density) : x;\n };\n density.y = function (_) {\n return arguments.length ? (y = number(_), density) : y;\n };\n density.weight = function (_) {\n return arguments.length ? (weight = number(_), density) : weight;\n };\n density.size = function (_) {\n if (!arguments.length) return [dx, dy];\n var _0 = +_[0],\n _1 = +_[1];\n if (!(_0 >= 0 && _1 >= 0)) error('invalid size');\n return dx = _0, dy = _1, density;\n };\n density.cellSize = function (_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) error('invalid cell size');\n k = Math.floor(Math.log(_) / Math.LN2);\n return density;\n };\n density.bandwidth = function (_) {\n if (!arguments.length) return bandwidth;\n _ = array(_);\n if (_.length === 1) _ = [+_[0], +_[0]];\n if (_.length !== 2) error('invalid bandwidth');\n return bandwidth = _, density;\n };\n return density;\n}\nfunction blurX(n, m, source, target, r) {\n const w = (r << 1) + 1;\n for (let j = 0; j < m; ++j) {\n for (let i = 0, sr = 0; i < n + r; ++i) {\n if (i < n) {\n sr += source[i + j * n];\n }\n if (i >= r) {\n if (i >= w) {\n sr -= source[i - w + j * n];\n }\n target[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n }\n }\n }\n}\nfunction blurY(n, m, source, target, r) {\n const w = (r << 1) + 1;\n for (let i = 0; i < n; ++i) {\n for (let j = 0, sr = 0; j < m + r; ++j) {\n if (j < m) {\n sr += source[i + j * n];\n }\n if (j >= r) {\n if (j >= w) {\n sr -= source[i + (j - w) * n];\n }\n target[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n }\n }\n }\n}\n\n/**\n * Perform 2D kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The [width, height] extent (in\n * units of input pixels) over which to perform density estimation.\n * @param {function(object): number} params.x - The x-coordinate accessor.\n * @param {function(object): number} params.y - The y-coordinate accessor.\n * @param {function(object): number} [params.weight] - The weight accessor.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * This parameter determines the level of spatial approximation. For example,\n * the default value of 4 maps to 2x reductions in both x- and y- dimensions.\n * A value of 1 will result in an output raster grid whose dimensions exactly\n * matches the size parameter.\n * @param {Array} [params.bandwidth] - The KDE kernel bandwidths,\n * in pixels. The input can be a two-element array specifying separate\n * x and y bandwidths, or a single-element array specifying both. If the\n * bandwidth is unspecified or less than zero, the bandwidth will be\n * automatically determined.\n * @param {boolean} [params.counts=false] - A boolean flag indicating if the\n * output values should be probability estimates (false, default) or\n * smoothed counts (true).\n * @param {string} [params.as='grid'] - The output field in which to store\n * the generated raster grid (default 'grid').\n */\nfunction KDE2D(params) {\n Transform.call(this, null, params);\n}\nKDE2D.Definition = {\n 'type': 'KDE2D',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'weight',\n 'type': 'field'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'cellSize',\n 'type': 'number'\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'counts',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'grid'\n }]\n};\nconst PARAMS = ['x', 'y', 'weight', 'size', 'cellSize', 'bandwidth'];\nfunction params(obj, _) {\n PARAMS.forEach(param => _[param] != null ? obj[param](_[param]) : 0);\n return obj;\n}\ninherits(KDE2D, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) return pulse.StopPropagation;\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n kde = params(density2D(), _),\n as = _.as || 'grid',\n values = [];\n function set(t, vals) {\n for (let i = 0; i < names.length; ++i) t[names[i]] = vals[i];\n return t;\n }\n\n // generate density raster grids\n values = groups.map(g => ingest(set({\n [as]: kde(g, _.counts)\n }, g.dims)));\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = values;\n return out;\n }\n});\nfunction partition(data, groupby) {\n var groups = [],\n get = f => f(t),\n map,\n i,\n n,\n t,\n k,\n g;\n\n // partition data points into groups\n if (groupby == null) {\n groups.push(data);\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n g.push(t);\n }\n }\n return groups;\n}\n\n/**\n * Generate contours based on kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The dimensions [width, height] over which to compute contours.\n * If the values parameter is provided, this must be the dimensions of the input data.\n * If density estimation is performed, this is the output view dimensions in pixels.\n * @param {Array} [params.values] - An array of numeric values representing an\n * width x height grid of values over which to compute contours. If unspecified, this\n * transform will instead attempt to compute contours for the kernel density estimate\n * using values drawn from data tuples in the input pulse.\n * @param {function(object): number} [params.x] - The pixel x-coordinate accessor for density estimation.\n * @param {function(object): number} [params.y] - The pixel y-coordinate accessor for density estimation.\n * @param {function(object): number} [params.weight] - The data point weight accessor for density estimation.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * @param {number} [params.bandwidth] - Kernel density estimation bandwidth.\n * @param {Array} [params.thresholds] - Contour threshold array. If\n * this parameter is set, the count and nice parameters will be ignored.\n * @param {number} [params.count] - The desired number of contours.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified count.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n */\nfunction Contour(params) {\n Transform.call(this, null, params);\n}\nContour.Definition = {\n 'type': 'Contour',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'values',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'x',\n 'type': 'field'\n }, {\n 'name': 'y',\n 'type': 'field'\n }, {\n 'name': 'weight',\n 'type': 'field'\n }, {\n 'name': 'cellSize',\n 'type': 'number'\n }, {\n 'name': 'bandwidth',\n 'type': 'number'\n }, {\n 'name': 'count',\n 'type': 'number'\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'thresholds',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': true\n }]\n};\ninherits(Contour, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n contour = contours().smooth(_.smooth !== false),\n values = _.values,\n thresh = _.thresholds || quantize(_.count || 10, _.nice, !!values),\n size = _.size,\n grid,\n post;\n if (!values) {\n values = pulse.materialize(pulse.SOURCE).source;\n grid = params(density2D(), _)(values, true);\n post = transform(grid, grid.scale || 1, grid.scale || 1, 0, 0);\n size = [grid.width, grid.height];\n values = grid.values;\n }\n thresh = isArray(thresh) ? thresh : thresh(values);\n values = contour.size(size)(values, thresh);\n if (post) values.forEach(post);\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = (values || []).map(ingest);\n return out;\n }\n});\n\nconst Feature = 'Feature';\nconst FeatureCollection = 'FeatureCollection';\nconst MultiPoint = 'MultiPoint';\n\n/**\n * Consolidate an array of [longitude, latitude] points or GeoJSON features\n * into a combined GeoJSON object. This transform is particularly useful for\n * combining geo data for a Projection's fit argument. The resulting GeoJSON\n * data is available as this transform's value. Input pulses are unchanged.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.fields] - A two-element array\n * of field accessors for the longitude and latitude values.\n * @param {function(object): *} params.geojson - A field accessor for\n * retrieving GeoJSON feature data.\n */\nfunction GeoJSON(params) {\n Transform.call(this, null, params);\n}\nGeoJSON.Definition = {\n 'type': 'GeoJSON',\n 'metadata': {},\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'geojson',\n 'type': 'field'\n }]\n};\ninherits(GeoJSON, Transform, {\n transform(_, pulse) {\n var features = this._features,\n points = this._points,\n fields = _.fields,\n lon = fields && fields[0],\n lat = fields && fields[1],\n geojson = _.geojson || !fields && identity,\n flag = pulse.ADD,\n mod;\n mod = _.modified() || pulse.changed(pulse.REM) || pulse.modified(accessorFields(geojson)) || lon && pulse.modified(accessorFields(lon)) || lat && pulse.modified(accessorFields(lat));\n if (!this.value || mod) {\n flag = pulse.SOURCE;\n this._features = features = [];\n this._points = points = [];\n }\n if (geojson) {\n pulse.visit(flag, t => features.push(geojson(t)));\n }\n if (lon && lat) {\n pulse.visit(flag, t => {\n var x = lon(t),\n y = lat(t);\n if (x != null && y != null && (x = +x) === x && (y = +y) === y) {\n points.push([x, y]);\n }\n });\n features = features.concat({\n type: Feature,\n geometry: {\n type: MultiPoint,\n coordinates: points\n }\n });\n }\n this.value = {\n type: FeatureCollection,\n features: features\n };\n }\n});\n\n/**\n * Map GeoJSON data to an SVG path string.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='path'] - The output field in which to store\n * the generated path data (default 'path').\n */\nfunction GeoPath(params) {\n Transform.call(this, null, params);\n}\nGeoPath.Definition = {\n 'type': 'GeoPath',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection'\n }, {\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'pointRadius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\ninherits(GeoPath, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n path = this.value,\n field = _.field || identity,\n as = _.as || 'path',\n flag = out.SOURCE;\n if (!path || _.modified()) {\n // parameters updated, reset and reflow\n this.value = path = getProjectionPath(_.projection);\n out.materialize().reflow();\n } else {\n flag = field === identity || pulse.modified(field.fields) ? out.ADD_MOD : out.ADD;\n }\n const prev = initPath(path, _.pointRadius);\n out.visit(flag, t => t[as] = path(field(t)));\n path.pointRadius(prev);\n return out.modifies(as);\n }\n});\nfunction initPath(path, pointRadius) {\n const prev = path.pointRadius();\n path.context(null);\n if (pointRadius != null) {\n path.pointRadius(pointRadius);\n }\n return prev;\n}\n\n/**\n * Geo-code a longitude/latitude point to an x/y coordinate.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {Array} params.fields - A two-element array of\n * field accessors for the longitude and latitude values.\n * @param {Array} [params.as] - A two-element array of field names\n * under which to store the result. Defaults to ['x','y'].\n */\nfunction GeoPoint(params) {\n Transform.call(this, null, params);\n}\nGeoPoint.Definition = {\n 'type': 'GeoPoint',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection',\n 'required': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['x', 'y']\n }]\n};\ninherits(GeoPoint, Transform, {\n transform(_, pulse) {\n var proj = _.projection,\n lon = _.fields[0],\n lat = _.fields[1],\n as = _.as || ['x', 'y'],\n x = as[0],\n y = as[1],\n mod;\n function set(t) {\n const xy = proj([lon(t), lat(t)]);\n if (xy) {\n t[x] = xy[0];\n t[y] = xy[1];\n } else {\n t[x] = undefined;\n t[y] = undefined;\n }\n }\n if (_.modified()) {\n // parameters updated, reflow\n pulse = pulse.materialize().reflow(true).visit(pulse.SOURCE, set);\n } else {\n mod = pulse.modified(lon.fields) || pulse.modified(lat.fields);\n pulse.visit(mod ? pulse.ADD_MOD : pulse.ADD, set);\n }\n return pulse.modifies(as);\n }\n});\n\n/**\n * Annotate items with a geopath shape generator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='shape'] - The output field in which to store\n * the generated path data (default 'shape').\n */\nfunction GeoShape(params) {\n Transform.call(this, null, params);\n}\nGeoShape.Definition = {\n 'type': 'GeoShape',\n 'metadata': {\n 'modifies': true,\n 'nomod': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection'\n }, {\n 'name': 'field',\n 'type': 'field',\n 'default': 'datum'\n }, {\n 'name': 'pointRadius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'shape'\n }]\n};\ninherits(GeoShape, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n shape = this.value,\n as = _.as || 'shape',\n flag = out.ADD;\n if (!shape || _.modified()) {\n // parameters updated, reset and reflow\n this.value = shape = shapeGenerator(getProjectionPath(_.projection), _.field || field('datum'), _.pointRadius);\n out.materialize().reflow();\n flag = out.SOURCE;\n }\n out.visit(flag, t => t[as] = shape);\n return out.modifies(as);\n }\n});\nfunction shapeGenerator(path, field, pointRadius) {\n const shape = pointRadius == null ? _ => path(field(_)) : _ => {\n var prev = path.pointRadius(),\n value = path.pointRadius(pointRadius)(field(_));\n path.pointRadius(prev);\n return value;\n };\n shape.context = _ => {\n path.context(_);\n return shape;\n };\n return shape;\n}\n\n/**\n * GeoJSON feature generator for creating graticules.\n * @constructor\n */\nfunction Graticule(params) {\n Transform.call(this, [], params);\n this.generator = geoGraticule();\n}\nGraticule.Definition = {\n 'type': 'Graticule',\n 'metadata': {\n 'changes': true,\n 'generates': true\n },\n 'params': [{\n 'name': 'extent',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'extentMajor',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'extentMinor',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'step',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'stepMajor',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'default': [90, 360]\n }, {\n 'name': 'stepMinor',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'default': [10, 10]\n }, {\n 'name': 'precision',\n 'type': 'number',\n 'default': 2.5\n }]\n};\ninherits(Graticule, Transform, {\n transform(_, pulse) {\n var src = this.value,\n gen = this.generator,\n t;\n if (!src.length || _.modified()) {\n for (const prop in _) {\n if (isFunction(gen[prop])) {\n gen[prop](_[prop]);\n }\n }\n }\n t = gen();\n if (src.length) {\n pulse.mod.push(replace(src[0], t));\n } else {\n pulse.add.push(ingest(t));\n }\n src[0] = t;\n return pulse;\n }\n});\n\n/**\n * Render a heatmap image for input raster grid data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} [params.field] - The field with raster grid\n * data. If unspecified, the tuple itself is interpreted as a raster grid.\n * @param {string} [params.color] - A constant color value or function for\n * individual pixel color. If a function, it will be invoked with an input\n * object that includes $x, $y, $value, and $max fields for the grid.\n * @param {number} [params.opacity] - A constant opacity value or function for\n * individual pixel opacity. If a function, it will be invoked with an input\n * object that includes $x, $y, $value, and $max fields for the grid.\n * @param {string} [params.resolve] - The method for resolving maximum values\n * across multiple input grids. If 'independent' (the default), maximum\n * calculation will be performed separately for each grid. If 'shared',\n * a single global maximum will be used for all input grids.\n * @param {string} [params.as='image'] - The output field in which to store\n * the generated bitmap canvas images (default 'image').\n */\nfunction Heatmap(params) {\n Transform.call(this, null, params);\n}\nHeatmap.Definition = {\n 'type': 'heatmap',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'color',\n 'type': 'string',\n 'expr': true\n }, {\n 'name': 'opacity',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'image'\n }]\n};\ninherits(Heatmap, Transform, {\n transform(_, pulse) {\n if (!pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n var source = pulse.materialize(pulse.SOURCE).source,\n shared = _.resolve === 'shared',\n field = _.field || identity,\n opacity = opacity_(_.opacity, _),\n color = color_(_.color, _),\n as = _.as || 'image',\n obj = {\n $x: 0,\n $y: 0,\n $value: 0,\n $max: shared ? max(source.map(t => max(field(t).values))) : 0\n };\n source.forEach(t => {\n const v = field(t);\n\n // build proxy data object\n const o = extend({}, t, obj);\n // set maximum value if not globally shared\n if (!shared) o.$max = max(v.values || []);\n\n // generate canvas image\n // optimize color/opacity if not pixel-dependent\n t[as] = toCanvas(v, o, color.dep ? color : constant(color(o)), opacity.dep ? opacity : constant(opacity(o)));\n });\n return pulse.reflow(true).modifies(as);\n }\n});\n\n// get image color function\nfunction color_(color, _) {\n let f;\n if (isFunction(color)) {\n f = obj => rgb(color(obj, _));\n f.dep = dependency(color);\n } else {\n // default to mid-grey\n f = constant(rgb(color || '#888'));\n }\n return f;\n}\n\n// get image opacity function\nfunction opacity_(opacity, _) {\n let f;\n if (isFunction(opacity)) {\n f = obj => opacity(obj, _);\n f.dep = dependency(opacity);\n } else if (opacity) {\n f = constant(opacity);\n } else {\n // default to [0, max] opacity gradient\n f = obj => obj.$value / obj.$max || 0;\n f.dep = true;\n }\n return f;\n}\n\n// check if function depends on individual pixel data\nfunction dependency(f) {\n if (!isFunction(f)) return false;\n const set = toSet(accessorFields(f));\n return set.$x || set.$y || set.$value || set.$max;\n}\n\n// render raster grid to canvas\nfunction toCanvas(grid, obj, color, opacity) {\n const n = grid.width,\n m = grid.height,\n x1 = grid.x1 || 0,\n y1 = grid.y1 || 0,\n x2 = grid.x2 || n,\n y2 = grid.y2 || m,\n val = grid.values,\n value = val ? i => val[i] : zero,\n can = canvas(x2 - x1, y2 - y1),\n ctx = can.getContext('2d'),\n img = ctx.getImageData(0, 0, x2 - x1, y2 - y1),\n pix = img.data;\n for (let j = y1, k = 0; j < y2; ++j) {\n obj.$y = j - y1;\n for (let i = x1, r = j * n; i < x2; ++i, k += 4) {\n obj.$x = i - x1;\n obj.$value = value(i + r);\n const v = color(obj);\n pix[k + 0] = v.r;\n pix[k + 1] = v.g;\n pix[k + 2] = v.b;\n pix[k + 3] = ~~(255 * opacity(obj));\n }\n }\n ctx.putImageData(img, 0, 0);\n return can;\n}\n\n/**\n * Maintains a cartographic projection.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Projection(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\n\ninherits(Projection, Transform, {\n transform(_, pulse) {\n let proj = this.value;\n if (!proj || _.modified('type')) {\n this.value = proj = create(_.type);\n projectionProperties.forEach(prop => {\n if (_[prop] != null) set(proj, prop, _[prop]);\n });\n } else {\n projectionProperties.forEach(prop => {\n if (_.modified(prop)) set(proj, prop, _[prop]);\n });\n }\n if (_.pointRadius != null) proj.path.pointRadius(_.pointRadius);\n if (_.fit) fit(proj, _);\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n }\n});\nfunction fit(proj, _) {\n const data = collectGeoJSON(_.fit);\n _.extent ? proj.fitExtent(_.extent, data) : _.size ? proj.fitSize(_.size, data) : 0;\n}\nfunction create(type) {\n const constructor = projection((type || 'mercator').toLowerCase());\n if (!constructor) error('Unrecognized projection type: ' + type);\n return constructor();\n}\nfunction set(proj, key, value) {\n if (isFunction(proj[key])) proj[key](value);\n}\nfunction collectGeoJSON(data) {\n data = array(data);\n return data.length === 1 ? data[0] : {\n type: FeatureCollection,\n features: data.reduce((a, f) => a.concat(featurize(f)), [])\n };\n}\nfunction featurize(f) {\n return f.type === FeatureCollection ? f.features : array(f).filter(d => d != null).map(d => d.type === Feature ? d : {\n type: Feature,\n geometry: d\n });\n}\n\nexport { Contour as contour, GeoJSON as geojson, GeoPath as geopath, GeoPoint as geopoint, GeoShape as geoshape, Graticule as graticule, Heatmap as heatmap, Isocontour as isocontour, KDE2D as kde2d, Projection as projection };\n","export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n random,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n y = target.y + target.vy - source.y - source.vy || jiggle(random);\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import { Transform } from 'vega-dataflow';\nimport { inherits, array, isFunction, accessorFields, hasOwnProperty, error } from 'vega-util';\nimport { forceSimulation, forceCenter, forceCollide, forceManyBody, forceLink, forceX, forceY } from 'd3-force';\n\nconst ForceMap = {\n center: forceCenter,\n collide: forceCollide,\n nbody: forceManyBody,\n link: forceLink,\n x: forceX,\n y: forceY\n};\nconst Forces = 'forces',\n ForceParams = ['alpha', 'alphaMin', 'alphaTarget', 'velocityDecay', 'forces'],\n ForceConfig = ['static', 'iterations'],\n ForceOutput = ['x', 'y', 'vx', 'vy'];\n\n/**\n * Force simulation layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.forces - The forces to apply.\n */\nfunction Force(params) {\n Transform.call(this, null, params);\n}\nForce.Definition = {\n 'type': 'Force',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'static',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'restart',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 300\n }, {\n 'name': 'alpha',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'alphaMin',\n 'type': 'number',\n 'default': 0.001\n }, {\n 'name': 'alphaTarget',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'velocityDecay',\n 'type': 'number',\n 'default': 0.4\n }, {\n 'name': 'forces',\n 'type': 'param',\n 'array': true,\n 'params': [{\n 'key': {\n 'force': 'center'\n },\n 'params': [{\n 'name': 'x',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'y',\n 'type': 'number',\n 'default': 0\n }]\n }, {\n 'key': {\n 'force': 'collide'\n },\n 'params': [{\n 'name': 'radius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.7\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 1\n }]\n }, {\n 'key': {\n 'force': 'nbody'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': -30,\n 'expr': true\n }, {\n 'name': 'theta',\n 'type': 'number',\n 'default': 0.9\n }, {\n 'name': 'distanceMin',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'distanceMax',\n 'type': 'number'\n }]\n }, {\n 'key': {\n 'force': 'link'\n },\n 'params': [{\n 'name': 'links',\n 'type': 'data'\n }, {\n 'name': 'id',\n 'type': 'field'\n }, {\n 'name': 'distance',\n 'type': 'number',\n 'default': 30,\n 'expr': true\n }, {\n 'name': 'strength',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 1\n }]\n }, {\n 'key': {\n 'force': 'x'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.1\n }, {\n 'name': 'x',\n 'type': 'field'\n }]\n }, {\n 'key': {\n 'force': 'y'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.1\n }, {\n 'name': 'y',\n 'type': 'field'\n }]\n }]\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'modify': false,\n 'default': ForceOutput\n }]\n};\ninherits(Force, Transform, {\n transform(_, pulse) {\n var sim = this.value,\n change = pulse.changed(pulse.ADD_REM),\n params = _.modified(ForceParams),\n iters = _.iterations || 300;\n\n // configure simulation\n if (!sim) {\n this.value = sim = simulation(pulse.source, _);\n sim.on('tick', rerun(pulse.dataflow, this));\n if (!_.static) {\n change = true;\n sim.tick(); // ensure we run on init\n }\n\n pulse.modifies('index');\n } else {\n if (change) {\n pulse.modifies('index');\n sim.nodes(pulse.source);\n }\n if (params || pulse.changed(pulse.MOD)) {\n setup(sim, _, 0, pulse);\n }\n }\n\n // run simulation\n if (params || change || _.modified(ForceConfig) || pulse.changed() && _.restart) {\n sim.alpha(Math.max(sim.alpha(), _.alpha || 1)).alphaDecay(1 - Math.pow(sim.alphaMin(), 1 / iters));\n if (_.static) {\n for (sim.stop(); --iters >= 0;) sim.tick();\n } else {\n if (sim.stopped()) sim.restart();\n if (!change) return pulse.StopPropagation; // defer to sim ticks\n }\n }\n\n return this.finish(_, pulse);\n },\n finish(_, pulse) {\n const dataflow = pulse.dataflow;\n\n // inspect dependencies, touch link source data\n for (let args = this._argops, j = 0, m = args.length, arg; j < m; ++j) {\n arg = args[j];\n if (arg.name !== Forces || arg.op._argval.force !== 'link') {\n continue;\n }\n for (var ops = arg.op._argops, i = 0, n = ops.length, op; i < n; ++i) {\n if (ops[i].name === 'links' && (op = ops[i].op.source)) {\n dataflow.pulse(op, dataflow.changeset().reflow());\n break;\n }\n }\n }\n\n // reflow all nodes\n return pulse.reflow(_.modified()).modifies(ForceOutput);\n }\n});\nfunction rerun(df, op) {\n return () => df.touch(op).run();\n}\nfunction simulation(nodes, _) {\n const sim = forceSimulation(nodes),\n stop = sim.stop,\n restart = sim.restart;\n let stopped = false;\n sim.stopped = () => stopped;\n sim.restart = () => (stopped = false, restart());\n sim.stop = () => (stopped = true, stop());\n return setup(sim, _, true).on('end', () => stopped = true);\n}\nfunction setup(sim, _, init, pulse) {\n var f = array(_.forces),\n i,\n n,\n p,\n name;\n for (i = 0, n = ForceParams.length; i < n; ++i) {\n p = ForceParams[i];\n if (p !== Forces && _.modified(p)) sim[p](_[p]);\n }\n for (i = 0, n = f.length; i < n; ++i) {\n name = Forces + i;\n p = init || _.modified(Forces, i) ? getForce(f[i]) : pulse && modified(f[i], pulse) ? sim.force(name) : null;\n if (p) sim.force(name, p);\n }\n for (n = sim.numForces || 0; i < n; ++i) {\n sim.force(Forces + i, null); // remove\n }\n\n sim.numForces = f.length;\n return sim;\n}\nfunction modified(f, pulse) {\n var k, v;\n for (k in f) {\n if (isFunction(v = f[k]) && pulse.modified(accessorFields(v))) return 1;\n }\n return 0;\n}\nfunction getForce(_) {\n var f, p;\n if (!hasOwnProperty(ForceMap, _.force)) {\n error('Unrecognized force: ' + _.force);\n }\n f = ForceMap[_.force]();\n for (p in _) {\n if (isFunction(f[p])) setForceParam(f[p], _[p], _);\n }\n return f;\n}\nfunction setForceParam(f, v, _) {\n f(isFunction(v) ? d => v(d, _) : v);\n}\n\nexport { Force as force };\n","export default function(x, y) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n node,\n random,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(y) {\n var strength = constant(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n };\n\n return force;\n}\n","function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {shuffle} from \"../array.js\";\nimport lcg from \"../lcg.js\";\n\nexport default function(circles) {\n return packEncloseRandom(circles, lcg());\n}\n\nexport function packEncloseRandom(circles, random) {\n var i = 0, n = (circles = shuffle(Array.from(circles), random)).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","import array from \"../array.js\";\nimport lcg from \"../lcg.js\";\nimport {packEncloseRandom} from \"./enclose.js\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packSiblingsRandom(circles, random) {\n if (!(n = (circles = array(circles)).length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = packEncloseRandom(a, random);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packSiblingsRandom(circles, lcg());\n return circles;\n}\n","export default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array, random) {\n let m = array.length,\n t,\n i;\n\n while (m) {\n i = random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","import {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\nimport lcg from \"../lcg.js\";\nimport {packSiblingsRandom} from \"./siblings.js\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n const random = lcg();\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildrenRandom(padding, 0.5, random))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildrenRandom(constantZero, 1, random))\n .eachAfter(packChildrenRandom(padding, root.r / Math.min(dx, dy), random))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildrenRandom(padding, k, random) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packSiblingsRandom(children, random);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","import {optional} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar preroot = {depth: -1},\n ambiguous = {},\n imputed = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nexport default function() {\n var id = defaultId,\n parentId = defaultParentId,\n path;\n\n function stratify(data) {\n var nodes = Array.from(data),\n currentId = id,\n currentParentId = parentId,\n n,\n d,\n i,\n root,\n parent,\n node,\n nodeId,\n nodeKey,\n nodeByKey = new Map;\n\n if (path != null) {\n const I = nodes.map((d, i) => normalize(path(d, i, data)));\n const P = I.map(parentof);\n const S = new Set(I).add(\"\");\n for (const i of P) {\n if (!S.has(i)) {\n S.add(i);\n I.push(i);\n P.push(parentof(i));\n nodes.push(imputed);\n }\n }\n currentId = (_, i) => I[i];\n currentParentId = (_, i) => P[i];\n }\n\n for (i = 0, n = nodes.length; i < n; ++i) {\n d = nodes[i], node = nodes[i] = new Node(d);\n if ((nodeId = currentId(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = node.id = nodeId;\n nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n }\n if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += \"\")) {\n node.parent = nodeId;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (nodeId = node.parent) {\n parent = nodeByKey.get(nodeId);\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n } else {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n\n // When imputing internal nodes, only introduce roots if needed.\n // Then replace the imputed marker data with null.\n if (path != null) {\n while (root.data === imputed && root.children.length === 1) {\n root = root.children[0], --n;\n }\n for (let i = nodes.length - 1; i >= 0; --i) {\n node = nodes[i];\n if (node.data !== imputed) break;\n node.data = null;\n }\n }\n\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = optional(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = optional(x), stratify) : parentId;\n };\n\n stratify.path = function(x) {\n return arguments.length ? (path = optional(x), stratify) : path;\n };\n\n return stratify;\n}\n\n// To normalize a path, we coerce to a string, strip the trailing slash if any\n// (as long as the trailing slash is not immediately preceded by another slash),\n// and add leading slash if missing.\nfunction normalize(path) {\n path = `${path}`;\n let i = path.length;\n if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1);\n return path[0] === \"/\" ? path : `/${path}`;\n}\n\n// Walk backwards to find the first slash that is not the leading slash, e.g.:\n// \"/foo/bar\" ⇥ \"/foo\", \"/foo\" ⇥ \"/\", \"/\" ↦ \"\". (The root is special-cased\n// because the id of the root must be a truthy value.)\nfunction parentof(path) {\n let i = path.length;\n if (i < 2) return \"\";\n while (--i > 1) if (slash(path, i)) break;\n return path.slice(0, i);\n}\n\n// Slashes can be escaped; to determine whether a slash is a path delimiter, we\n// count the number of preceding backslashes escaping the forward slash: an odd\n// number indicates an escaped forward slash.\nfunction slash(path, i) {\n if (path[i] === \"/\") {\n let k = 0;\n while (i > 0 && path[--i] === \"\\\\\") ++k;\n if ((k & 1) === 0) return true;\n }\n return false;\n}\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\nimport {phi, squarifyRatio} from \"./squarify.js\";\n\nexport default (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n","import { Transform, isTuple, ingest, tupleid, stableCompare } from 'vega-dataflow';\nimport { inherits, error, array, one, truthy, hasOwnProperty } from 'vega-util';\nimport { hierarchy, pack, partition, stratify, tree, cluster, treemap, treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, treemapResquarify } from 'd3-hierarchy';\n\n// Build lookup table mapping tuple keys to tree node instances\nfunction lookup (tree, key, filter) {\n const map = {};\n tree.each(node => {\n const t = node.data;\n if (filter(t)) map[key(t)] = node;\n });\n tree.lookup = map;\n return tree;\n}\n\n/**\n * Nest tuples into a tree structure, grouped by key values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.keys - The key fields to nest by, in order.\n * @param {boolean} [params.generate=false] - A boolean flag indicating if\n * non-leaf nodes generated by this transform should be included in the\n * output. The default (false) includes only the input data (leaf nodes)\n * in the data stream.\n */\nfunction Nest(params) {\n Transform.call(this, null, params);\n}\nNest.Definition = {\n 'type': 'Nest',\n 'metadata': {\n 'treesource': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'keys',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'generate',\n 'type': 'boolean'\n }]\n};\nconst children = n => n.values;\ninherits(Nest, Transform, {\n transform(_, pulse) {\n if (!pulse.source) {\n error('Nest transform requires an upstream data source.');\n }\n var gen = _.generate,\n mod = _.modified(),\n out = pulse.clone(),\n tree = this.value;\n if (!tree || mod || pulse.changed()) {\n // collect nodes to remove\n if (tree) {\n tree.each(node => {\n if (node.children && isTuple(node.data)) {\n out.rem.push(node.data);\n }\n });\n }\n\n // generate new tree structure\n this.value = tree = hierarchy({\n values: array(_.keys).reduce((n, k) => {\n n.key(k);\n return n;\n }, nest()).entries(out.source)\n }, children);\n\n // collect nodes to add\n if (gen) {\n tree.each(node => {\n if (node.children) {\n node = ingest(node.data);\n out.add.push(node);\n out.source.push(node);\n }\n });\n }\n\n // build lookup table\n lookup(tree, tupleid, tupleid);\n }\n out.source.root = tree;\n return out;\n }\n});\nfunction nest() {\n const keys = [],\n nest = {\n entries: array => entries(apply(array, 0), 0),\n key: d => (keys.push(d), nest)\n };\n function apply(array, depth) {\n if (depth >= keys.length) {\n return array;\n }\n const n = array.length,\n key = keys[depth++],\n valuesByKey = {},\n result = {};\n let i = -1,\n keyValue,\n value,\n values;\n while (++i < n) {\n keyValue = key(value = array[i]) + '';\n if (values = valuesByKey[keyValue]) {\n values.push(value);\n } else {\n valuesByKey[keyValue] = [value];\n }\n }\n for (keyValue in valuesByKey) {\n result[keyValue] = apply(valuesByKey[keyValue], depth);\n }\n return result;\n }\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n const array = [];\n for (const key in map) {\n array.push({\n key,\n values: entries(map[key], depth)\n });\n }\n return array;\n }\n return nest;\n}\n\n/**\n * Abstract class for tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction HierarchyLayout(params) {\n Transform.call(this, null, params);\n}\nconst defaultSeparation = (a, b) => a.parent === b.parent ? 1 : 2;\ninherits(HierarchyLayout, Transform, {\n transform(_, pulse) {\n if (!pulse.source || !pulse.source.root) {\n error(this.constructor.name + ' transform requires a backing tree data source.');\n }\n const layout = this.layout(_.method),\n fields = this.fields,\n root = pulse.source.root,\n as = _.as || fields;\n if (_.field) root.sum(_.field);else root.count();\n if (_.sort) root.sort(stableCompare(_.sort, d => d.data));\n setParams(layout, this.params, _);\n if (layout.separation) {\n layout.separation(_.separation !== false ? defaultSeparation : one);\n }\n try {\n this.value = layout(root);\n } catch (err) {\n error(err);\n }\n root.each(node => setFields(node, fields, as));\n return pulse.reflow(_.modified()).modifies(as).modifies('leaf');\n }\n});\nfunction setParams(layout, params, _) {\n for (let p, i = 0, n = params.length; i < n; ++i) {\n p = params[i];\n if (p in _) layout[p](_[p]);\n }\n}\nfunction setFields(node, fields, as) {\n const t = node.data,\n n = fields.length - 1;\n for (let i = 0; i < n; ++i) {\n t[as[i]] = node[fields[i]];\n }\n t[as[n]] = node.children ? node.children.length : 0;\n}\n\nconst Output$3 = ['x', 'y', 'r', 'depth', 'children'];\n\n/**\n * Packed circle tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\nfunction Pack(params) {\n HierarchyLayout.call(this, params);\n}\nPack.Definition = {\n 'type': 'Pack',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'radius',\n 'type': 'field',\n 'default': null\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$3.length,\n 'default': Output$3\n }]\n};\ninherits(Pack, HierarchyLayout, {\n layout: pack,\n params: ['radius', 'size', 'padding'],\n fields: Output$3\n});\n\nconst Output$2 = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n\n/**\n * Partition tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\nfunction Partition(params) {\n HierarchyLayout.call(this, params);\n}\nPartition.Definition = {\n 'type': 'Partition',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'round',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$2.length,\n 'default': Output$2\n }]\n};\ninherits(Partition, HierarchyLayout, {\n layout: partition,\n params: ['size', 'round', 'padding'],\n fields: Output$2\n});\n\n/**\n * Stratify a collection of tuples into a tree structure based on\n * id and parent id fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.key - Unique key field for each tuple.\n * @param {function(object): *} params.parentKey - Field with key for parent tuple.\n */\nfunction Stratify(params) {\n Transform.call(this, null, params);\n}\nStratify.Definition = {\n 'type': 'Stratify',\n 'metadata': {\n 'treesource': true\n },\n 'params': [{\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'parentKey',\n 'type': 'field',\n 'required': true\n }]\n};\ninherits(Stratify, Transform, {\n transform(_, pulse) {\n if (!pulse.source) {\n error('Stratify transform requires an upstream data source.');\n }\n let tree = this.value;\n const mod = _.modified(),\n out = pulse.fork(pulse.ALL).materialize(pulse.SOURCE),\n run = !tree || mod || pulse.changed(pulse.ADD_REM) || pulse.modified(_.key.fields) || pulse.modified(_.parentKey.fields);\n\n // prevent upstream source pollution\n out.source = out.source.slice();\n if (run) {\n tree = out.source.length ? lookup(stratify().id(_.key).parentId(_.parentKey)(out.source), _.key, truthy) : lookup(stratify()([{}]), _.key, _.key);\n }\n out.source.root = this.value = tree;\n return out;\n }\n});\n\nconst Layouts = {\n tidy: tree,\n cluster: cluster\n};\nconst Output$1 = ['x', 'y', 'depth', 'children'];\n\n/**\n * Tree layout. Depending on the method parameter, performs either\n * Reingold-Tilford 'tidy' layout or dendrogram 'cluster' layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Tree(params) {\n HierarchyLayout.call(this, params);\n}\nTree.Definition = {\n 'type': 'Tree',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'tidy',\n 'values': ['tidy', 'cluster']\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'nodeSize',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'separation',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$1.length,\n 'default': Output$1\n }]\n};\ninherits(Tree, HierarchyLayout, {\n /**\n * Tree layout generator. Supports both 'tidy' and 'cluster' layouts.\n */\n layout(method) {\n const m = method || 'tidy';\n if (hasOwnProperty(Layouts, m)) return Layouts[m]();else error('Unrecognized Tree layout method: ' + m);\n },\n params: ['size', 'nodeSize'],\n fields: Output$1\n});\n\n/**\n * Generate tuples representing links between tree nodes.\n * The resulting tuples will contain 'source' and 'target' fields,\n * which point to parent and child node tuples, respectively.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction TreeLinks(params) {\n Transform.call(this, [], params);\n}\nTreeLinks.Definition = {\n 'type': 'TreeLinks',\n 'metadata': {\n 'tree': true,\n 'generates': true,\n 'changes': true\n },\n 'params': []\n};\ninherits(TreeLinks, Transform, {\n transform(_, pulse) {\n const links = this.value,\n tree = pulse.source && pulse.source.root,\n out = pulse.fork(pulse.NO_SOURCE),\n lut = {};\n if (!tree) error('TreeLinks transform requires a tree data source.');\n if (pulse.changed(pulse.ADD_REM)) {\n // remove previous links\n out.rem = links;\n\n // build lookup table of valid tuples\n pulse.visit(pulse.SOURCE, t => lut[tupleid(t)] = 1);\n\n // generate links for all edges incident on valid tuples\n tree.each(node => {\n const t = node.data,\n p = node.parent && node.parent.data;\n if (p && lut[tupleid(t)] && lut[tupleid(p)]) {\n out.add.push(ingest({\n source: p,\n target: t\n }));\n }\n });\n this.value = out.add;\n } else if (pulse.changed(pulse.MOD)) {\n // build lookup table of modified tuples\n pulse.visit(pulse.MOD, t => lut[tupleid(t)] = 1);\n\n // gather links incident on modified tuples\n links.forEach(link => {\n if (lut[tupleid(link.source)] || lut[tupleid(link.target)]) {\n out.mod.push(link);\n }\n });\n }\n return out;\n }\n});\n\nconst Tiles = {\n binary: treemapBinary,\n dice: treemapDice,\n slice: treemapSlice,\n slicedice: treemapSliceDice,\n squarify: treemapSquarify,\n resquarify: treemapResquarify\n};\nconst Output = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n\n/**\n * Treemap layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\nfunction Treemap(params) {\n HierarchyLayout.call(this, params);\n}\nTreemap.Definition = {\n 'type': 'Treemap',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'squarify',\n 'values': ['squarify', 'resquarify', 'binary', 'dice', 'slice', 'slicedice']\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingInner',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingOuter',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingTop',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingRight',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingBottom',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingLeft',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'ratio',\n 'type': 'number',\n 'default': 1.618033988749895\n }, {\n 'name': 'round',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output.length,\n 'default': Output\n }]\n};\ninherits(Treemap, HierarchyLayout, {\n /**\n * Treemap layout generator. Adds 'method' and 'ratio' parameters\n * to configure the underlying tile method.\n */\n layout() {\n const x = treemap();\n x.ratio = _ => {\n const t = x.tile();\n if (t.ratio) x.tile(t.ratio(_));\n };\n x.method = _ => {\n if (hasOwnProperty(Tiles, _)) x.tile(Tiles[_]);else error('Unrecognized Treemap layout method: ' + _);\n };\n return x;\n },\n params: ['method', 'ratio', 'size', 'round', 'padding', 'paddingInner', 'paddingOuter', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'],\n fields: Output\n});\n\nexport { Nest as nest, Pack as pack, Partition as partition, Stratify as stratify, Tree as tree, TreeLinks as treelinks, Treemap as treemap };\n","import roundNode from \"./treemap/round.js\";\nimport treemapDice from \"./treemap/dice.js\";\n\nexport default function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n","import dice from \"./dice.js\";\nimport slice from \"./slice.js\";\n\nexport default function(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","import { Marks, textMetrics } from 'vega-scenegraph';\nimport { canvas } from 'vega-canvas';\nimport { rederive, Transform } from 'vega-dataflow';\nimport { inherits, error, array, isFunction } from 'vega-util';\n\n// bit mask for getting first 2 bytes of alpha value\nconst ALPHA_MASK = 0xff000000;\nfunction baseBitmaps($, data) {\n const bitmap = $.bitmap();\n // when there is no base mark but data points are to be avoided\n (data || []).forEach(d => bitmap.set($(d.boundary[0]), $(d.boundary[3])));\n return [bitmap, undefined];\n}\nfunction markBitmaps($, baseMark, avoidMarks, labelInside, isGroupArea) {\n // create canvas\n const width = $.width,\n height = $.height,\n border = labelInside || isGroupArea,\n context = canvas(width, height).getContext('2d'),\n baseMarkContext = canvas(width, height).getContext('2d'),\n strokeContext = border && canvas(width, height).getContext('2d');\n\n // render all marks to be avoided into canvas\n avoidMarks.forEach(items => draw(context, items, false));\n draw(baseMarkContext, baseMark, false);\n if (border) {\n draw(strokeContext, baseMark, true);\n }\n\n // get canvas buffer, create bitmaps\n const buffer = getBuffer(context, width, height),\n baseMarkBuffer = getBuffer(baseMarkContext, width, height),\n strokeBuffer = border && getBuffer(strokeContext, width, height),\n layer1 = $.bitmap(),\n layer2 = border && $.bitmap();\n\n // populate bitmap layers\n let x, y, u, v, index, alpha, strokeAlpha, baseMarkAlpha;\n for (y = 0; y < height; ++y) {\n for (x = 0; x < width; ++x) {\n index = y * width + x;\n alpha = buffer[index] & ALPHA_MASK;\n baseMarkAlpha = baseMarkBuffer[index] & ALPHA_MASK;\n strokeAlpha = border && strokeBuffer[index] & ALPHA_MASK;\n if (alpha || strokeAlpha || baseMarkAlpha) {\n u = $(x);\n v = $(y);\n if (!isGroupArea && (alpha || baseMarkAlpha)) layer1.set(u, v); // update interior bitmap\n if (border && (alpha || strokeAlpha)) layer2.set(u, v); // update border bitmap\n }\n }\n }\n\n return [layer1, layer2];\n}\nfunction getBuffer(context, width, height) {\n return new Uint32Array(context.getImageData(0, 0, width, height).data.buffer);\n}\nfunction draw(context, items, interior) {\n if (!items.length) return;\n const type = items[0].mark.marktype;\n if (type === 'group') {\n items.forEach(group => {\n group.items.forEach(mark => draw(context, mark.items, interior));\n });\n } else {\n Marks[type].draw(context, {\n items: interior ? items.map(prepare) : items\n });\n }\n}\n\n/**\n * Prepare item before drawing into canvas (setting stroke and opacity)\n * @param {object} source item to be prepared\n * @returns prepared item\n */\nfunction prepare(source) {\n const item = rederive(source, {});\n if (item.stroke && item.strokeOpacity !== 0 || item.fill && item.fillOpacity !== 0) {\n return {\n ...item,\n strokeOpacity: 1,\n stroke: '#000',\n fillOpacity: 0\n };\n }\n return item;\n}\n\nconst DIV = 5,\n // bit shift from x, y index to bit vector array index\n MOD = 31,\n // bit mask for index lookup within a bit vector\n SIZE = 32,\n // individual bit vector size\n RIGHT0 = new Uint32Array(SIZE + 1),\n // left-anchored bit vectors, full -> 0\n RIGHT1 = new Uint32Array(SIZE + 1); // right-anchored bit vectors, 0 -> full\n\nRIGHT1[0] = 0;\nRIGHT0[0] = ~RIGHT1[0];\nfor (let i = 1; i <= SIZE; ++i) {\n RIGHT1[i] = RIGHT1[i - 1] << 1 | 1;\n RIGHT0[i] = ~RIGHT1[i];\n}\nfunction Bitmap (w, h) {\n const array = new Uint32Array(~~((w * h + SIZE) / SIZE));\n function _set(index, mask) {\n array[index] |= mask;\n }\n function _clear(index, mask) {\n array[index] &= mask;\n }\n return {\n array: array,\n get: (x, y) => {\n const index = y * w + x;\n return array[index >>> DIV] & 1 << (index & MOD);\n },\n set: (x, y) => {\n const index = y * w + x;\n _set(index >>> DIV, 1 << (index & MOD));\n },\n clear: (x, y) => {\n const index = y * w + x;\n _clear(index >>> DIV, ~(1 << (index & MOD)));\n },\n getRange: (x, y, x2, y2) => {\n let r = y2,\n start,\n end,\n indexStart,\n indexEnd;\n for (; r >= y; --r) {\n start = r * w + x;\n end = r * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n if (array[indexStart] & RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]) {\n return true;\n }\n } else {\n if (array[indexStart] & RIGHT0[start & MOD]) return true;\n if (array[indexEnd] & RIGHT1[(end & MOD) + 1]) return true;\n for (let i = indexStart + 1; i < indexEnd; ++i) {\n if (array[i]) return true;\n }\n }\n }\n return false;\n },\n setRange: (x, y, x2, y2) => {\n let start, end, indexStart, indexEnd, i;\n for (; y <= y2; ++y) {\n start = y * w + x;\n end = y * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n _set(indexStart, RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]);\n } else {\n _set(indexStart, RIGHT0[start & MOD]);\n _set(indexEnd, RIGHT1[(end & MOD) + 1]);\n for (i = indexStart + 1; i < indexEnd; ++i) _set(i, 0xffffffff);\n }\n }\n },\n clearRange: (x, y, x2, y2) => {\n let start, end, indexStart, indexEnd, i;\n for (; y <= y2; ++y) {\n start = y * w + x;\n end = y * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n _clear(indexStart, RIGHT1[start & MOD] | RIGHT0[(end & MOD) + 1]);\n } else {\n _clear(indexStart, RIGHT1[start & MOD]);\n _clear(indexEnd, RIGHT0[(end & MOD) + 1]);\n for (i = indexStart + 1; i < indexEnd; ++i) _clear(i, 0);\n }\n }\n },\n outOfBounds: (x, y, x2, y2) => x < 0 || y < 0 || y2 >= h || x2 >= w\n };\n}\n\nfunction scaler (width, height, padding) {\n const ratio = Math.max(1, Math.sqrt(width * height / 1e6)),\n w = ~~((width + 2 * padding + ratio) / ratio),\n h = ~~((height + 2 * padding + ratio) / ratio),\n scale = _ => ~~((_ + padding) / ratio);\n scale.invert = _ => _ * ratio - padding;\n scale.bitmap = () => Bitmap(w, h);\n scale.ratio = ratio;\n scale.padding = padding;\n scale.width = width;\n scale.height = height;\n return scale;\n}\n\nfunction placeAreaLabelNaive ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height;\n\n // try to place a label within an input area mark\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text); // label height\n\n let maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n areaWidth;\n\n // for each area sample point\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2;\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n if (areaWidth >= maxAreaWidth) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n }\n }\n x = textWidth / 2;\n y = textHeight / 2;\n x1 = d.x - x;\n x2 = d.x + x;\n y1 = d.y - y;\n y2 = d.y + y;\n d.align = 'center';\n if (x1 < 0 && x2 <= width) {\n d.align = 'left';\n } else if (0 <= x1 && width < x2) {\n d.align = 'right';\n }\n d.baseline = 'middle';\n if (y1 < 0 && y2 <= height) {\n d.baseline = 'top';\n } else if (0 <= y1 && height < y2) {\n d.baseline = 'bottom';\n }\n return true;\n };\n}\n\nfunction outOfBounds(x, y, textWidth, textHeight, width, height) {\n let r = textWidth / 2;\n return x - r < 0 || x + r > width || y - (r = textHeight / 2) < 0 || y + r > height;\n}\nfunction collision($, x, y, textHeight, textWidth, h, bm0, bm1) {\n const w = textWidth * h / (textHeight * 2),\n x1 = $(x - w),\n x2 = $(x + w),\n y1 = $(y - (h = h / 2)),\n y2 = $(y + h);\n return bm0.outOfBounds(x1, y1, x2, y2) || bm0.getRange(x1, y1, x2, y2) || bm1 && bm1.getRange(x1, y1, x2, y2);\n}\n\nfunction placeAreaLabelReducedSearch ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n // where labels have been placed\n bm1 = bitmaps[1]; // area outlines\n\n function tryLabel(_x, _y, maxSize, textWidth, textHeight) {\n const x = $.invert(_x),\n y = $.invert(_y);\n let lo = maxSize,\n hi = height,\n mid;\n if (!outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, lo, bm0, bm1) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n // if the label fits at the current sample point,\n // perform binary search to find the largest font size that fits\n while (hi - lo >= 1) {\n mid = (lo + hi) / 2;\n if (collision($, x, y, textHeight, textWidth, mid, bm0, bm1)) {\n hi = mid;\n } else {\n lo = mid;\n }\n }\n // place label if current lower bound exceeds prior max font size\n if (lo > maxSize) {\n return [x, y, lo, true];\n }\n }\n }\n\n // try to place a label within an input area mark\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text); // label height\n\n let maxSize = avoidBaseMark ? textHeight : 0,\n labelPlaced = false,\n labelPlaced2 = false,\n maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n _x,\n _y,\n _x1,\n _xMid,\n _x2,\n _y1,\n _yMid,\n _y2,\n areaWidth,\n result,\n swapTmp;\n\n // for each area sample point\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n if (x1 > x2) {\n swapTmp = x1;\n x1 = x2;\n x2 = swapTmp;\n }\n if (y1 > y2) {\n swapTmp = y1;\n y1 = y2;\n y2 = swapTmp;\n }\n _x1 = $(x1);\n _x2 = $(x2);\n _xMid = ~~((_x1 + _x2) / 2);\n _y1 = $(y1);\n _y2 = $(y2);\n _yMid = ~~((_y1 + _y2) / 2);\n\n // search along the line from mid point between the 2 border to lower border\n for (_x = _xMid; _x >= _x1; --_x) {\n for (_y = _yMid; _y >= _y1; --_y) {\n result = tryLabel(_x, _y, maxSize, textWidth, textHeight);\n if (result) {\n [d.x, d.y, maxSize, labelPlaced] = result;\n }\n }\n }\n\n // search along the line from mid point between the 2 border to upper border\n for (_x = _xMid; _x <= _x2; ++_x) {\n for (_y = _yMid; _y <= _y2; ++_y) {\n result = tryLabel(_x, _y, maxSize, textWidth, textHeight);\n if (result) {\n [d.x, d.y, maxSize, labelPlaced] = result;\n }\n }\n }\n\n // place label at slice center if not placed through other means\n // and if we're not avoiding overlap with other areas\n if (!labelPlaced && !avoidBaseMark) {\n // one span is zero, hence we can add\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2;\n\n // place label if it fits and improves the max area width\n if (areaWidth >= maxAreaWidth && !outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n labelPlaced2 = true;\n }\n }\n }\n\n // record current label placement information, update label bitmap\n if (labelPlaced || labelPlaced2) {\n x = textWidth / 2;\n y = textHeight / 2;\n bm0.setRange($(d.x - x), $(d.y - y), $(d.x + x), $(d.y + y));\n d.align = 'center';\n d.baseline = 'middle';\n return true;\n } else {\n return false;\n }\n };\n}\n\n// pixel direction offsets for flood fill search\nconst X_DIR = [-1, -1, 1, 1];\nconst Y_DIR = [-1, 1, -1, 1];\nfunction placeAreaLabelFloodFill ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n // where labels have been placed\n bm1 = bitmaps[1],\n // area outlines\n bm2 = $.bitmap(); // flood-fill visitations\n\n // try to place a label within an input area mark\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text),\n // label height\n stack = []; // flood fill stack\n\n let maxSize = avoidBaseMark ? textHeight : 0,\n labelPlaced = false,\n labelPlaced2 = false,\n maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n _x,\n _y,\n lo,\n hi,\n mid,\n areaWidth;\n\n // for each area sample point\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n\n // add scaled center point to stack\n stack.push([$((x1 + x2) / 2), $((y1 + y2) / 2)]);\n\n // perform flood fill, visit points\n while (stack.length) {\n [_x, _y] = stack.pop();\n\n // exit if point already marked\n if (bm0.get(_x, _y) || bm1.get(_x, _y) || bm2.get(_x, _y)) continue;\n\n // mark point in flood fill bitmap\n // add search points for all (in bound) directions\n bm2.set(_x, _y);\n for (let j = 0; j < 4; ++j) {\n x = _x + X_DIR[j];\n y = _y + Y_DIR[j];\n if (!bm2.outOfBounds(x, y, x, y)) stack.push([x, y]);\n }\n\n // unscale point back to x, y space\n x = $.invert(_x);\n y = $.invert(_y);\n lo = maxSize;\n hi = height; // TODO: make this bound smaller\n\n if (!outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, lo, bm0, bm1) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n // if the label fits at the current sample point,\n // perform binary search to find the largest font size that fits\n while (hi - lo >= 1) {\n mid = (lo + hi) / 2;\n if (collision($, x, y, textHeight, textWidth, mid, bm0, bm1)) {\n hi = mid;\n } else {\n lo = mid;\n }\n }\n // place label if current lower bound exceeds prior max font size\n if (lo > maxSize) {\n d.x = x;\n d.y = y;\n maxSize = lo;\n labelPlaced = true;\n }\n }\n }\n\n // place label at slice center if not placed through other means\n // and if we're not avoiding overlap with other areas\n if (!labelPlaced && !avoidBaseMark) {\n // one span is zero, hence we can add\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2;\n\n // place label if it fits and improves the max area width\n if (areaWidth >= maxAreaWidth && !outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n labelPlaced2 = true;\n }\n }\n }\n\n // record current label placement information, update label bitmap\n if (labelPlaced || labelPlaced2) {\n x = textWidth / 2;\n y = textHeight / 2;\n bm0.setRange($(d.x - x), $(d.y - y), $(d.x + x), $(d.y + y));\n d.align = 'center';\n d.baseline = 'middle';\n return true;\n } else {\n return false;\n }\n };\n}\n\nconst Aligns = ['right', 'center', 'left'],\n Baselines = ['bottom', 'middle', 'top'];\nfunction placeMarkLabel ($, bitmaps, anchors, offsets) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n bm1 = bitmaps[1],\n n = offsets.length;\n return function (d) {\n const boundary = d.boundary,\n textHeight = d.datum.fontSize;\n\n // can not be placed if the mark is not visible in the graph bound\n if (boundary[2] < 0 || boundary[5] < 0 || boundary[0] > width || boundary[3] > height) {\n return false;\n }\n let textWidth = d.textWidth ?? 0,\n dx,\n dy,\n isInside,\n sizeFactor,\n insideFactor,\n x1,\n x2,\n y1,\n y2,\n xc,\n yc,\n _x1,\n _x2,\n _y1,\n _y2;\n\n // for each anchor and offset\n for (let i = 0; i < n; ++i) {\n dx = (anchors[i] & 0x3) - 1;\n dy = (anchors[i] >>> 0x2 & 0x3) - 1;\n isInside = dx === 0 && dy === 0 || offsets[i] < 0;\n sizeFactor = dx && dy ? Math.SQRT1_2 : 1;\n insideFactor = offsets[i] < 0 ? -1 : 1;\n x1 = boundary[1 + dx] + offsets[i] * dx * sizeFactor;\n yc = boundary[4 + dy] + insideFactor * textHeight * dy / 2 + offsets[i] * dy * sizeFactor;\n y1 = yc - textHeight / 2;\n y2 = yc + textHeight / 2;\n _x1 = $(x1);\n _y1 = $(y1);\n _y2 = $(y2);\n if (!textWidth) {\n // to avoid finding width of text label,\n if (!test(_x1, _x1, _y1, _y2, bm0, bm1, x1, x1, y1, y2, boundary, isInside)) {\n // skip this anchor/offset option if we fail to place a label with 1px width\n continue;\n } else {\n // Otherwise, find the label width\n textWidth = textMetrics.width(d.datum, d.datum.text);\n }\n }\n xc = x1 + insideFactor * textWidth * dx / 2;\n x1 = xc - textWidth / 2;\n x2 = xc + textWidth / 2;\n _x1 = $(x1);\n _x2 = $(x2);\n if (test(_x1, _x2, _y1, _y2, bm0, bm1, x1, x2, y1, y2, boundary, isInside)) {\n // place label if the position is placeable\n d.x = !dx ? xc : dx * insideFactor < 0 ? x2 : x1;\n d.y = !dy ? yc : dy * insideFactor < 0 ? y2 : y1;\n d.align = Aligns[dx * insideFactor + 1];\n d.baseline = Baselines[dy * insideFactor + 1];\n bm0.setRange(_x1, _y1, _x2, _y2);\n return true;\n }\n }\n return false;\n };\n}\n\n// Test if a label with the given dimensions can be added without overlap\nfunction test(_x1, _x2, _y1, _y2, bm0, bm1, x1, x2, y1, y2, boundary, isInside) {\n return !(bm0.outOfBounds(_x1, _y1, _x2, _y2) || (isInside && bm1 || bm0).getRange(_x1, _y1, _x2, _y2));\n}\n\n// 8-bit representation of anchors\nconst TOP = 0x0,\n MIDDLE = 0x4,\n BOTTOM = 0x8,\n LEFT = 0x0,\n CENTER = 0x1,\n RIGHT = 0x2;\n\n// Mapping from text anchor to number representation\nconst anchorCode = {\n 'top-left': TOP + LEFT,\n 'top': TOP + CENTER,\n 'top-right': TOP + RIGHT,\n 'left': MIDDLE + LEFT,\n 'middle': MIDDLE + CENTER,\n 'right': MIDDLE + RIGHT,\n 'bottom-left': BOTTOM + LEFT,\n 'bottom': BOTTOM + CENTER,\n 'bottom-right': BOTTOM + RIGHT\n};\nconst placeAreaLabel = {\n 'naive': placeAreaLabelNaive,\n 'reduced-search': placeAreaLabelReducedSearch,\n 'floodfill': placeAreaLabelFloodFill\n};\nfunction labelLayout (texts, size, compare, offset, anchor, avoidMarks, avoidBaseMark, lineAnchor, markIndex, padding, method) {\n // early exit for empty data\n if (!texts.length) return texts;\n const positions = Math.max(offset.length, anchor.length),\n offsets = getOffsets(offset, positions),\n anchors = getAnchors(anchor, positions),\n marktype = markType(texts[0].datum),\n grouptype = marktype === 'group' && texts[0].datum.items[markIndex].marktype,\n isGroupArea = grouptype === 'area',\n boundary = markBoundary(marktype, grouptype, lineAnchor, markIndex),\n infPadding = padding === null || padding === Infinity,\n isNaiveGroupArea = isGroupArea && method === 'naive';\n let maxTextWidth = -1,\n maxTextHeight = -1;\n\n // prepare text mark data for placing\n const data = texts.map(d => {\n const textWidth = infPadding ? textMetrics.width(d, d.text) : undefined;\n maxTextWidth = Math.max(maxTextWidth, textWidth);\n maxTextHeight = Math.max(maxTextHeight, d.fontSize);\n return {\n datum: d,\n opacity: 0,\n x: undefined,\n y: undefined,\n align: undefined,\n baseline: undefined,\n boundary: boundary(d),\n textWidth\n };\n });\n padding = padding === null || padding === Infinity ? Math.max(maxTextWidth, maxTextHeight) + Math.max(...offset) : padding;\n const $ = scaler(size[0], size[1], padding);\n let bitmaps;\n if (!isNaiveGroupArea) {\n // sort labels in priority order, if comparator is provided\n if (compare) {\n data.sort((a, b) => compare(a.datum, b.datum));\n }\n\n // flag indicating if label can be placed inside its base mark\n let labelInside = false;\n for (let i = 0; i < anchors.length && !labelInside; ++i) {\n // label inside if anchor is at center\n // label inside if offset to be inside the mark bound\n labelInside = anchors[i] === 0x5 || offsets[i] < 0;\n }\n\n // extract data information from base mark when base mark is to be avoided\n // base mark is implicitly avoided if it is a group area\n const baseMark = (marktype && avoidBaseMark || isGroupArea) && texts.map(d => d.datum);\n\n // generate bitmaps for layout calculation\n bitmaps = avoidMarks.length || baseMark ? markBitmaps($, baseMark || [], avoidMarks, labelInside, isGroupArea) : baseBitmaps($, avoidBaseMark && data);\n }\n\n // generate label placement function\n const place = isGroupArea ? placeAreaLabel[method]($, bitmaps, avoidBaseMark, markIndex) : placeMarkLabel($, bitmaps, anchors, offsets);\n\n // place all labels\n data.forEach(d => d.opacity = +place(d));\n return data;\n}\nfunction getOffsets(_, count) {\n const offsets = new Float64Array(count),\n n = _.length;\n for (let i = 0; i < n; ++i) offsets[i] = _[i] || 0;\n for (let i = n; i < count; ++i) offsets[i] = offsets[n - 1];\n return offsets;\n}\nfunction getAnchors(_, count) {\n const anchors = new Int8Array(count),\n n = _.length;\n for (let i = 0; i < n; ++i) anchors[i] |= anchorCode[_[i]];\n for (let i = n; i < count; ++i) anchors[i] = anchors[n - 1];\n return anchors;\n}\nfunction markType(item) {\n return item && item.mark && item.mark.marktype;\n}\n\n/**\n * Factory function for function for getting base mark boundary, depending\n * on mark and group type. When mark type is undefined, line or area: boundary\n * is the coordinate of each data point. When base mark is grouped line,\n * boundary is either at the start or end of the line depending on the\n * value of lineAnchor. Otherwise, use bounds of base mark.\n */\nfunction markBoundary(marktype, grouptype, lineAnchor, markIndex) {\n const xy = d => [d.x, d.x, d.x, d.y, d.y, d.y];\n if (!marktype) {\n return xy; // no reactive geometry\n } else if (marktype === 'line' || marktype === 'area') {\n return d => xy(d.datum);\n } else if (grouptype === 'line') {\n return d => {\n const items = d.datum.items[markIndex].items;\n return xy(items.length ? items[lineAnchor === 'start' ? 0 : items.length - 1] : {\n x: NaN,\n y: NaN\n });\n };\n } else {\n return d => {\n const b = d.datum.bounds;\n return [b.x1, (b.x1 + b.x2) / 2, b.x2, b.y1, (b.y1 + b.y2) / 2, b.y2];\n };\n }\n}\n\nconst Output = ['x', 'y', 'opacity', 'align', 'baseline'];\nconst Anchors = ['top-left', 'left', 'bottom-left', 'top', 'bottom', 'top-right', 'right', 'bottom-right'];\n\n/**\n * Compute text label layout to annotate marks.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The size of the layout, provided as a [width, height] array.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting label data in priority order.\n * @param {Array} [params.anchor] - Label anchor points relative to the base mark bounding box.\n * The available options are 'top-left', 'left', 'bottom-left', 'top',\n * 'bottom', 'top-right', 'right', 'bottom-right', 'middle'.\n * @param {Array} [params.offset] - Label offsets (in pixels) from the base mark bounding box.\n * This parameter is parallel to the list of anchor points.\n * @param {number | null} [params.padding=0] - The amount (in pixels) that a label may exceed the layout size.\n * If this parameter is null, a label may exceed the layout size without any boundary.\n * @param {string} [params.lineAnchor='end'] - For group line mark labels only, indicates the anchor\n * position for labels. One of 'start' or 'end'.\n * @param {string} [params.markIndex=0] - For group mark labels only, an index indicating\n * which mark within the group should be labeled.\n * @param {Array} [params.avoidMarks] - A list of additional mark names for which the label\n * layout should avoid overlap.\n * @param {boolean} [params.avoidBaseMark=true] - Boolean flag indicating if labels should avoid\n * overlap with the underlying base mark being labeled.\n * @param {string} [params.method='naive'] - For area make labels only, a method for\n * place labels. One of 'naive', 'reduced-search', or 'floodfill'.\n * @param {Array} [params.as] - The output fields written by the transform.\n * The default is ['x', 'y', 'opacity', 'align', 'baseline'].\n */\nfunction Label(params) {\n Transform.call(this, null, params);\n}\nLabel.Definition = {\n type: 'Label',\n metadata: {\n modifies: true\n },\n params: [{\n name: 'size',\n type: 'number',\n array: true,\n length: 2,\n required: true\n }, {\n name: 'sort',\n type: 'compare'\n }, {\n name: 'anchor',\n type: 'string',\n array: true,\n default: Anchors\n }, {\n name: 'offset',\n type: 'number',\n array: true,\n default: [1]\n }, {\n name: 'padding',\n type: 'number',\n default: 0,\n null: true\n }, {\n name: 'lineAnchor',\n type: 'string',\n values: ['start', 'end'],\n default: 'end'\n }, {\n name: 'markIndex',\n type: 'number',\n default: 0\n }, {\n name: 'avoidBaseMark',\n type: 'boolean',\n default: true\n }, {\n name: 'avoidMarks',\n type: 'data',\n array: true\n }, {\n name: 'method',\n type: 'string',\n default: 'naive'\n }, {\n name: 'as',\n type: 'string',\n array: true,\n length: Output.length,\n default: Output\n }]\n};\ninherits(Label, Transform, {\n transform(_, pulse) {\n function modp(param) {\n const p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n const mod = _.modified();\n if (!(mod || pulse.changed(pulse.ADD_REM) || modp('sort'))) return;\n if (!_.size || _.size.length !== 2) {\n error('Size parameter should be specified as a [width, height] array.');\n }\n const as = _.as || Output;\n\n // run label layout\n labelLayout(pulse.materialize(pulse.SOURCE).source || [], _.size, _.sort, array(_.offset == null ? 1 : _.offset), array(_.anchor || Anchors), _.avoidMarks || [], _.avoidBaseMark !== false, _.lineAnchor || 'end', _.markIndex || 0, _.padding === undefined ? 0 : _.padding, _.method || 'naive').forEach(l => {\n // write layout results to data stream\n const t = l.datum;\n t[as[0]] = l.x;\n t[as[1]] = l.y;\n t[as[2]] = l.opacity;\n t[as[3]] = l.align;\n t[as[4]] = l.baseline;\n });\n return pulse.reflow(mod).modifies(as);\n }\n});\n\nexport { Label as label };\n","import { regressionLoess, sampleCurve, regressionConstant, regressionLinear, regressionLog, regressionExp, regressionPow, regressionQuad, regressionPoly } from 'vega-statistics';\nimport { Transform, ingest } from 'vega-dataflow';\nimport { inherits, accessorName, hasOwnProperty, error, extent } from 'vega-util';\n\nfunction partition (data, groupby) {\n var groups = [],\n get = function (f) {\n return f(t);\n },\n map,\n i,\n n,\n t,\n k,\n g;\n\n // partition data points into stack groups\n if (groupby == null) {\n groups.push(data);\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n g.push(t);\n }\n }\n return groups;\n}\n\n/**\n * Compute locally-weighted regression fits for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.x - An accessor for the predictor data field.\n * @param {function(object): *} params.y - An accessor for the predicted data field.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {number} [params.bandwidth=0.3] - The loess bandwidth.\n */\nfunction Loess(params) {\n Transform.call(this, null, params);\n}\nLoess.Definition = {\n 'type': 'Loess',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0.3\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Loess, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n m = names.length,\n as = _.as || [accessorName(_.x), accessorName(_.y)],\n values = [];\n groups.forEach(g => {\n regressionLoess(g, _.x, _.y, _.bandwidth || 0.3).forEach(p => {\n const t = {};\n for (let i = 0; i < m; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = p[0];\n t[as[1]] = p[1];\n values.push(ingest(t));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\n\nconst Methods = {\n constant: regressionConstant,\n linear: regressionLinear,\n log: regressionLog,\n exp: regressionExp,\n pow: regressionPow,\n quad: regressionQuad,\n poly: regressionPoly\n};\nconst degreesOfFreedom = (method, order) => method === 'poly' ? order : method === 'quad' ? 2 : 1;\n\n/**\n * Compute regression fits for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.x - An accessor for the predictor data field.\n * @param {function(object): *} params.y - An accessor for the predicted data field.\n * @param {string} [params.method='linear'] - The regression method to apply.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {Array} [params.extent] - The domain extent over which to plot the regression line.\n * @param {number} [params.order=3] - The polynomial order. Only applies to the 'poly' method.\n */\nfunction Regression(params) {\n Transform.call(this, null, params);\n}\nRegression.Definition = {\n 'type': 'Regression',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'method',\n 'type': 'string',\n 'default': 'linear',\n 'values': Object.keys(Methods)\n }, {\n 'name': 'order',\n 'type': 'number',\n 'default': 3\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'params',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Regression, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n method = _.method || 'linear',\n order = _.order == null ? 3 : _.order,\n dof = degreesOfFreedom(method, order),\n as = _.as || [accessorName(_.x), accessorName(_.y)],\n fit = Methods[method],\n values = [];\n let domain = _.extent;\n if (!hasOwnProperty(Methods, method)) {\n error('Invalid regression method: ' + method);\n }\n if (domain != null) {\n if (method === 'log' && domain[0] <= 0) {\n pulse.dataflow.warn('Ignoring extent with values <= 0 for log regression.');\n domain = null;\n }\n }\n groups.forEach(g => {\n const n = g.length;\n if (n <= dof) {\n pulse.dataflow.warn('Skipping regression with more parameters than data points.');\n return;\n }\n const model = fit(g, _.x, _.y, order);\n if (_.params) {\n // if parameter vectors requested return those\n values.push(ingest({\n keys: g.dims,\n coef: model.coef,\n rSquared: model.rSquared\n }));\n return;\n }\n const dom = domain || extent(g, _.x),\n add = p => {\n const t = {};\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = p[0];\n t[as[1]] = p[1];\n values.push(ingest(t));\n };\n if (method === 'linear' || method === 'constant') {\n // for linear or constant regression we only need the end points\n dom.forEach(x => add([x, model.predict(x)]));\n } else {\n // otherwise return trend line sample points\n sampleCurve(model.predict, dom, 25, 200).forEach(add);\n }\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\n\nexport { Loess as loess, Regression as regression };\n","export const epsilon = 1.1102230246251565e-16;\nexport const splitter = 134217729;\nexport const resulterrbound = (3 + 8 * epsilon) * epsilon;\n\n// fast_expansion_sum_zeroelim routine from oritinal code\nexport function sum(elen, e, flen, f, h) {\n let Q, Qnew, hh, bvirt;\n let enow = e[0];\n let fnow = f[0];\n let eindex = 0;\n let findex = 0;\n if ((fnow > enow) === (fnow > -enow)) {\n Q = enow;\n enow = e[++eindex];\n } else {\n Q = fnow;\n fnow = f[++findex];\n }\n let hindex = 0;\n if (eindex < elen && findex < flen) {\n if ((fnow > enow) === (fnow > -enow)) {\n Qnew = enow + Q;\n hh = Q - (Qnew - enow);\n enow = e[++eindex];\n } else {\n Qnew = fnow + Q;\n hh = Q - (Qnew - fnow);\n fnow = f[++findex];\n }\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n while (eindex < elen && findex < flen) {\n if ((fnow > enow) === (fnow > -enow)) {\n Qnew = Q + enow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (enow - bvirt);\n enow = e[++eindex];\n } else {\n Qnew = Q + fnow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n fnow = f[++findex];\n }\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n }\n while (eindex < elen) {\n Qnew = Q + enow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (enow - bvirt);\n enow = e[++eindex];\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n while (findex < flen) {\n Qnew = Q + fnow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n fnow = f[++findex];\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n if (Q !== 0 || hindex === 0) {\n h[hindex++] = Q;\n }\n return hindex;\n}\n\nexport function sum_three(alen, a, blen, b, clen, c, tmp, out) {\n return sum(sum(alen, a, blen, b, tmp), tmp, clen, c, out);\n}\n\n// scale_expansion_zeroelim routine from oritinal code\nexport function scale(elen, e, b, h) {\n let Q, sum, hh, product1, product0;\n let bvirt, c, ahi, alo, bhi, blo;\n\n c = splitter * b;\n bhi = c - (c - b);\n blo = b - bhi;\n let enow = e[0];\n Q = enow * b;\n c = splitter * enow;\n ahi = c - (c - enow);\n alo = enow - ahi;\n hh = alo * blo - (Q - ahi * bhi - alo * bhi - ahi * blo);\n let hindex = 0;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n for (let i = 1; i < elen; i++) {\n enow = e[i];\n product1 = enow * b;\n c = splitter * enow;\n ahi = c - (c - enow);\n alo = enow - ahi;\n product0 = alo * blo - (product1 - ahi * bhi - alo * bhi - ahi * blo);\n sum = Q + product0;\n bvirt = sum - Q;\n hh = Q - (sum - bvirt) + (product0 - bvirt);\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n Q = product1 + sum;\n hh = sum - (Q - product1);\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n if (Q !== 0 || hindex === 0) {\n h[hindex++] = Q;\n }\n return hindex;\n}\n\nexport function negate(elen, e) {\n for (let i = 0; i < elen; i++) e[i] = -e[i];\n return elen;\n}\n\nexport function estimate(elen, e) {\n let Q = e[0];\n for (let i = 1; i < elen; i++) Q += e[i];\n return Q;\n}\n\nexport function vec(n) {\n return new Float64Array(n);\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum} from './util.js';\n\nconst ccwerrboundA = (3 + 16 * epsilon) * epsilon;\nconst ccwerrboundB = (2 + 12 * epsilon) * epsilon;\nconst ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon;\n\nconst B = vec(4);\nconst C1 = vec(8);\nconst C2 = vec(12);\nconst D = vec(16);\nconst u = vec(4);\n\nfunction orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {\n let acxtail, acytail, bcxtail, bcytail;\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n const acx = ax - cx;\n const bcx = bx - cx;\n const acy = ay - cy;\n const bcy = by - cy;\n\n s1 = acx * bcy;\n c = splitter * acx;\n ahi = c - (c - acx);\n alo = acx - ahi;\n c = splitter * bcy;\n bhi = c - (c - bcy);\n blo = bcy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acy * bcx;\n c = splitter * acy;\n ahi = c - (c - acy);\n alo = acy - ahi;\n c = splitter * bcx;\n bhi = c - (c - bcx);\n blo = bcx - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n B[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n B[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n B[2] = _j - (u3 - bvirt) + (_i - bvirt);\n B[3] = u3;\n\n let det = estimate(4, B);\n let errbound = ccwerrboundB * detsum;\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n bvirt = ax - acx;\n acxtail = ax - (acx + bvirt) + (bvirt - cx);\n bvirt = bx - bcx;\n bcxtail = bx - (bcx + bvirt) + (bvirt - cx);\n bvirt = ay - acy;\n acytail = ay - (acy + bvirt) + (bvirt - cy);\n bvirt = by - bcy;\n bcytail = by - (bcy + bvirt) + (bvirt - cy);\n\n if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {\n return det;\n }\n\n errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);\n det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);\n if (det >= errbound || -det >= errbound) return det;\n\n s1 = acxtail * bcy;\n c = splitter * acxtail;\n ahi = c - (c - acxtail);\n alo = acxtail - ahi;\n c = splitter * bcy;\n bhi = c - (c - bcy);\n blo = bcy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acytail * bcx;\n c = splitter * acytail;\n ahi = c - (c - acytail);\n alo = acytail - ahi;\n c = splitter * bcx;\n bhi = c - (c - bcx);\n blo = bcx - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const C1len = sum(4, B, 4, u, C1);\n\n s1 = acx * bcytail;\n c = splitter * acx;\n ahi = c - (c - acx);\n alo = acx - ahi;\n c = splitter * bcytail;\n bhi = c - (c - bcytail);\n blo = bcytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acy * bcxtail;\n c = splitter * acy;\n ahi = c - (c - acy);\n alo = acy - ahi;\n c = splitter * bcxtail;\n bhi = c - (c - bcxtail);\n blo = bcxtail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const C2len = sum(C1len, C1, 4, u, C2);\n\n s1 = acxtail * bcytail;\n c = splitter * acxtail;\n ahi = c - (c - acxtail);\n alo = acxtail - ahi;\n c = splitter * bcytail;\n bhi = c - (c - bcytail);\n blo = bcytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acytail * bcxtail;\n c = splitter * acytail;\n ahi = c - (c - acytail);\n alo = acytail - ahi;\n c = splitter * bcxtail;\n bhi = c - (c - bcxtail);\n blo = bcxtail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const Dlen = sum(C2len, C2, 4, u, D);\n\n return D[Dlen - 1];\n}\n\nexport function orient2d(ax, ay, bx, by, cx, cy) {\n const detleft = (ay - cy) * (bx - cx);\n const detright = (ax - cx) * (by - cy);\n const det = detleft - detright;\n\n if (detleft === 0 || detright === 0 || (detleft > 0) !== (detright > 0)) return det;\n\n const detsum = Math.abs(detleft + detright);\n if (Math.abs(det) >= ccwerrboundA * detsum) return det;\n\n return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);\n}\n\nexport function orient2dfast(ax, ay, bx, by, cx, cy) {\n return (ay - cy) * (bx - cx) - (ax - cx) * (by - cy);\n}\n","\nconst EPSILON = Math.pow(2, -52);\nconst EDGE_STACK = new Uint32Array(512);\n\nimport {orient2d} from 'robust-predicates';\n\nexport default class Delaunator {\n\n static from(points, getX = defaultGetX, getY = defaultGetY) {\n const n = points.length;\n const coords = new Float64Array(n * 2);\n\n for (let i = 0; i < n; i++) {\n const p = points[i];\n coords[2 * i] = getX(p);\n coords[2 * i + 1] = getY(p);\n }\n\n return new Delaunator(coords);\n }\n\n constructor(coords) {\n const n = coords.length >> 1;\n if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.');\n\n this.coords = coords;\n\n // arrays that will store the triangulation graph\n const maxTriangles = Math.max(2 * n - 5, 0);\n this._triangles = new Uint32Array(maxTriangles * 3);\n this._halfedges = new Int32Array(maxTriangles * 3);\n\n // temporary arrays for tracking the edges of the advancing convex hull\n this._hashSize = Math.ceil(Math.sqrt(n));\n this._hullPrev = new Uint32Array(n); // edge to prev edge\n this._hullNext = new Uint32Array(n); // edge to next edge\n this._hullTri = new Uint32Array(n); // edge to adjacent triangle\n this._hullHash = new Int32Array(this._hashSize).fill(-1); // angular edge hash\n\n // temporary arrays for sorting points\n this._ids = new Uint32Array(n);\n this._dists = new Float64Array(n);\n\n this.update();\n }\n\n update() {\n const {coords, _hullPrev: hullPrev, _hullNext: hullNext, _hullTri: hullTri, _hullHash: hullHash} = this;\n const n = coords.length >> 1;\n\n // populate an array of point indices; calculate input data bbox\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n for (let i = 0; i < n; i++) {\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n this._ids[i] = i;\n }\n const cx = (minX + maxX) / 2;\n const cy = (minY + maxY) / 2;\n\n let minDist = Infinity;\n let i0, i1, i2;\n\n // pick a seed point close to the center\n for (let i = 0; i < n; i++) {\n const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]);\n if (d < minDist) {\n i0 = i;\n minDist = d;\n }\n }\n const i0x = coords[2 * i0];\n const i0y = coords[2 * i0 + 1];\n\n minDist = Infinity;\n\n // find the point closest to the seed\n for (let i = 0; i < n; i++) {\n if (i === i0) continue;\n const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]);\n if (d < minDist && d > 0) {\n i1 = i;\n minDist = d;\n }\n }\n let i1x = coords[2 * i1];\n let i1y = coords[2 * i1 + 1];\n\n let minRadius = Infinity;\n\n // find the third point which forms the smallest circumcircle with the first two\n for (let i = 0; i < n; i++) {\n if (i === i0 || i === i1) continue;\n const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]);\n if (r < minRadius) {\n i2 = i;\n minRadius = r;\n }\n }\n let i2x = coords[2 * i2];\n let i2y = coords[2 * i2 + 1];\n\n if (minRadius === Infinity) {\n // order collinear points by dx (or dy if all x are identical)\n // and return the list as a hull\n for (let i = 0; i < n; i++) {\n this._dists[i] = (coords[2 * i] - coords[0]) || (coords[2 * i + 1] - coords[1]);\n }\n quicksort(this._ids, this._dists, 0, n - 1);\n const hull = new Uint32Array(n);\n let j = 0;\n for (let i = 0, d0 = -Infinity; i < n; i++) {\n const id = this._ids[i];\n if (this._dists[id] > d0) {\n hull[j++] = id;\n d0 = this._dists[id];\n }\n }\n this.hull = hull.subarray(0, j);\n this.triangles = new Uint32Array(0);\n this.halfedges = new Uint32Array(0);\n return;\n }\n\n // swap the order of the seed points for counter-clockwise orientation\n if (orient2d(i0x, i0y, i1x, i1y, i2x, i2y) < 0) {\n const i = i1;\n const x = i1x;\n const y = i1y;\n i1 = i2;\n i1x = i2x;\n i1y = i2y;\n i2 = i;\n i2x = x;\n i2y = y;\n }\n\n const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y);\n this._cx = center.x;\n this._cy = center.y;\n\n for (let i = 0; i < n; i++) {\n this._dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y);\n }\n\n // sort the points by distance from the seed triangle circumcenter\n quicksort(this._ids, this._dists, 0, n - 1);\n\n // set up the seed triangle as the starting hull\n this._hullStart = i0;\n let hullSize = 3;\n\n hullNext[i0] = hullPrev[i2] = i1;\n hullNext[i1] = hullPrev[i0] = i2;\n hullNext[i2] = hullPrev[i1] = i0;\n\n hullTri[i0] = 0;\n hullTri[i1] = 1;\n hullTri[i2] = 2;\n\n hullHash.fill(-1);\n hullHash[this._hashKey(i0x, i0y)] = i0;\n hullHash[this._hashKey(i1x, i1y)] = i1;\n hullHash[this._hashKey(i2x, i2y)] = i2;\n\n this.trianglesLen = 0;\n this._addTriangle(i0, i1, i2, -1, -1, -1);\n\n for (let k = 0, xp, yp; k < this._ids.length; k++) {\n const i = this._ids[k];\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n\n // skip near-duplicate points\n if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue;\n xp = x;\n yp = y;\n\n // skip seed triangle points\n if (i === i0 || i === i1 || i === i2) continue;\n\n // find a visible edge on the convex hull using edge hash\n let start = 0;\n for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) {\n start = hullHash[(key + j) % this._hashSize];\n if (start !== -1 && start !== hullNext[start]) break;\n }\n\n start = hullPrev[start];\n let e = start, q;\n while (q = hullNext[e], orient2d(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1]) >= 0) {\n e = q;\n if (e === start) {\n e = -1;\n break;\n }\n }\n if (e === -1) continue; // likely a near-duplicate point; skip it\n\n // add the first triangle from the point\n let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]);\n\n // recursively flip triangles from the point until they satisfy the Delaunay condition\n hullTri[i] = this._legalize(t + 2);\n hullTri[e] = t; // keep track of boundary triangles on the hull\n hullSize++;\n\n // walk forward through the hull, adding more triangles and flipping recursively\n let n = hullNext[e];\n while (q = hullNext[n], orient2d(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1]) < 0) {\n t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]);\n hullTri[i] = this._legalize(t + 2);\n hullNext[n] = n; // mark as removed\n hullSize--;\n n = q;\n }\n\n // walk backward from the other side, adding more triangles and flipping\n if (e === start) {\n while (q = hullPrev[e], orient2d(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1]) < 0) {\n t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]);\n this._legalize(t + 2);\n hullTri[q] = t;\n hullNext[e] = e; // mark as removed\n hullSize--;\n e = q;\n }\n }\n\n // update the hull indices\n this._hullStart = hullPrev[i] = e;\n hullNext[e] = hullPrev[n] = i;\n hullNext[i] = n;\n\n // save the two new edges in the hash table\n hullHash[this._hashKey(x, y)] = i;\n hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e;\n }\n\n this.hull = new Uint32Array(hullSize);\n for (let i = 0, e = this._hullStart; i < hullSize; i++) {\n this.hull[i] = e;\n e = hullNext[e];\n }\n\n // trim typed triangle mesh arrays\n this.triangles = this._triangles.subarray(0, this.trianglesLen);\n this.halfedges = this._halfedges.subarray(0, this.trianglesLen);\n }\n\n _hashKey(x, y) {\n return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize;\n }\n\n _legalize(a) {\n const {_triangles: triangles, _halfedges: halfedges, coords} = this;\n\n let i = 0;\n let ar = 0;\n\n // recursion eliminated with a fixed-size stack\n while (true) {\n const b = halfedges[a];\n\n /* if the pair of triangles doesn't satisfy the Delaunay condition\n * (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n * then do the same check/flip recursively for the new pair of triangles\n *\n * pl pl\n * /||\\ / \\\n * al/ || \\bl al/ \\a\n * / || \\ / \\\n * / a||b \\ flip /___ar___\\\n * p0\\ || /p1 => p0\\---bl---/p1\n * \\ || / \\ /\n * ar\\ || /br b\\ /br\n * \\||/ \\ /\n * pr pr\n */\n const a0 = a - a % 3;\n ar = a0 + (a + 2) % 3;\n\n if (b === -1) { // convex hull edge\n if (i === 0) break;\n a = EDGE_STACK[--i];\n continue;\n }\n\n const b0 = b - b % 3;\n const al = a0 + (a + 1) % 3;\n const bl = b0 + (b + 2) % 3;\n\n const p0 = triangles[ar];\n const pr = triangles[a];\n const pl = triangles[al];\n const p1 = triangles[bl];\n\n const illegal = inCircle(\n coords[2 * p0], coords[2 * p0 + 1],\n coords[2 * pr], coords[2 * pr + 1],\n coords[2 * pl], coords[2 * pl + 1],\n coords[2 * p1], coords[2 * p1 + 1]);\n\n if (illegal) {\n triangles[a] = p1;\n triangles[b] = p0;\n\n const hbl = halfedges[bl];\n\n // edge swapped on the other side of the hull (rare); fix the halfedge reference\n if (hbl === -1) {\n let e = this._hullStart;\n do {\n if (this._hullTri[e] === bl) {\n this._hullTri[e] = a;\n break;\n }\n e = this._hullPrev[e];\n } while (e !== this._hullStart);\n }\n this._link(a, hbl);\n this._link(b, halfedges[ar]);\n this._link(ar, bl);\n\n const br = b0 + (b + 1) % 3;\n\n // don't worry about hitting the cap: it can only happen on extremely degenerate input\n if (i < EDGE_STACK.length) {\n EDGE_STACK[i++] = br;\n }\n } else {\n if (i === 0) break;\n a = EDGE_STACK[--i];\n }\n }\n\n return ar;\n }\n\n _link(a, b) {\n this._halfedges[a] = b;\n if (b !== -1) this._halfedges[b] = a;\n }\n\n // add a new triangle given vertex indices and adjacent half-edge ids\n _addTriangle(i0, i1, i2, a, b, c) {\n const t = this.trianglesLen;\n\n this._triangles[t] = i0;\n this._triangles[t + 1] = i1;\n this._triangles[t + 2] = i2;\n\n this._link(t, a);\n this._link(t + 1, b);\n this._link(t + 2, c);\n\n this.trianglesLen += 3;\n\n return t;\n }\n}\n\n// monotonically increases with real angle, but doesn't need expensive trigonometry\nfunction pseudoAngle(dx, dy) {\n const p = dx / (Math.abs(dx) + Math.abs(dy));\n return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1]\n}\n\nfunction dist(ax, ay, bx, by) {\n const dx = ax - bx;\n const dy = ay - by;\n return dx * dx + dy * dy;\n}\n\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\n const dx = ax - px;\n const dy = ay - py;\n const ex = bx - px;\n const ey = by - py;\n const fx = cx - px;\n const fy = cy - py;\n\n const ap = dx * dx + dy * dy;\n const bp = ex * ex + ey * ey;\n const cp = fx * fx + fy * fy;\n\n return dx * (ey * cp - bp * fy) -\n dy * (ex * cp - bp * fx) +\n ap * (ex * fy - ey * fx) < 0;\n}\n\nfunction circumradius(ax, ay, bx, by, cx, cy) {\n const dx = bx - ax;\n const dy = by - ay;\n const ex = cx - ax;\n const ey = cy - ay;\n\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const d = 0.5 / (dx * ey - dy * ex);\n\n const x = (ey * bl - dy * cl) * d;\n const y = (dx * cl - ex * bl) * d;\n\n return x * x + y * y;\n}\n\nfunction circumcenter(ax, ay, bx, by, cx, cy) {\n const dx = bx - ax;\n const dy = by - ay;\n const ex = cx - ax;\n const ey = cy - ay;\n\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const d = 0.5 / (dx * ey - dy * ex);\n\n const x = ax + (ey * bl - dy * cl) * d;\n const y = ay + (dx * cl - ex * bl) * d;\n\n return {x, y};\n}\n\nfunction quicksort(ids, dists, left, right) {\n if (right - left <= 20) {\n for (let i = left + 1; i <= right; i++) {\n const temp = ids[i];\n const tempDist = dists[temp];\n let j = i - 1;\n while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--];\n ids[j + 1] = temp;\n }\n } else {\n const median = (left + right) >> 1;\n let i = left + 1;\n let j = right;\n swap(ids, median, i);\n if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right);\n if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right);\n if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i);\n\n const temp = ids[i];\n const tempDist = dists[temp];\n while (true) {\n do i++; while (dists[ids[i]] < tempDist);\n do j--; while (dists[ids[j]] > tempDist);\n if (j < i) break;\n swap(ids, i, j);\n }\n ids[left + 1] = ids[j];\n ids[j] = temp;\n\n if (right - i + 1 >= j - left) {\n quicksort(ids, dists, i, right);\n quicksort(ids, dists, left, j - 1);\n } else {\n quicksort(ids, dists, left, j - 1);\n quicksort(ids, dists, i, right);\n }\n }\n}\n\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction defaultGetX(p) {\n return p[0];\n}\nfunction defaultGetY(p) {\n return p[1];\n}\n","const epsilon = 1e-6;\n\nexport default class Path {\n constructor() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n }\n moveTo(x, y) {\n this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n }\n lineTo(x, y) {\n this._ += `L${this._x1 = +x},${this._y1 = +y}`;\n }\n arc(x, y, r) {\n x = +x, y = +y, r = +r;\n const x0 = x + r;\n const y0 = y;\n if (r < 0) throw new Error(\"negative radius\");\n if (this._x1 === null) this._ += `M${x0},${y0}`;\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) this._ += \"L\" + x0 + \",\" + y0;\n if (!r) return;\n this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`;\n }\n rect(x, y, w, h) {\n this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${+w}v${+h}h${-w}Z`;\n }\n value() {\n return this._ || null;\n }\n}\n","export default class Polygon {\n constructor() {\n this._ = [];\n }\n moveTo(x, y) {\n this._.push([x, y]);\n }\n closePath() {\n this._.push(this._[0].slice());\n }\n lineTo(x, y) {\n this._.push([x, y]);\n }\n value() {\n return this._.length ? this._ : null;\n }\n}\n","import Delaunator from \"delaunator\";\nimport Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\nimport Voronoi from \"./voronoi.js\";\n\nconst tau = 2 * Math.PI, pow = Math.pow;\n\nfunction pointX(p) {\n return p[0];\n}\n\nfunction pointY(p) {\n return p[1];\n}\n\n// A triangulation is collinear if all its triangles have a non-null area\nfunction collinear(d) {\n const {triangles, coords} = d;\n for (let i = 0; i < triangles.length; i += 3) {\n const a = 2 * triangles[i],\n b = 2 * triangles[i + 1],\n c = 2 * triangles[i + 2],\n cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1])\n - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]);\n if (cross > 1e-10) return false;\n }\n return true;\n}\n\nfunction jitter(x, y, r) {\n return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r];\n}\n\nexport default class Delaunay {\n static from(points, fx = pointX, fy = pointY, that) {\n return new Delaunay(\"length\" in points\n ? flatArray(points, fx, fy, that)\n : Float64Array.from(flatIterable(points, fx, fy, that)));\n }\n constructor(points) {\n this._delaunator = new Delaunator(points);\n this.inedges = new Int32Array(points.length / 2);\n this._hullIndex = new Int32Array(points.length / 2);\n this.points = this._delaunator.coords;\n this._init();\n }\n update() {\n this._delaunator.update();\n this._init();\n return this;\n }\n _init() {\n const d = this._delaunator, points = this.points;\n\n // check for collinear\n if (d.hull && d.hull.length > 2 && collinear(d)) {\n this.collinear = Int32Array.from({length: points.length/2}, (_,i) => i)\n .sort((i, j) => points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1]); // for exact neighbors\n const e = this.collinear[0], f = this.collinear[this.collinear.length - 1],\n bounds = [ points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1] ],\n r = 1e-8 * Math.hypot(bounds[3] - bounds[1], bounds[2] - bounds[0]);\n for (let i = 0, n = points.length / 2; i < n; ++i) {\n const p = jitter(points[2 * i], points[2 * i + 1], r);\n points[2 * i] = p[0];\n points[2 * i + 1] = p[1];\n }\n this._delaunator = new Delaunator(points);\n } else {\n delete this.collinear;\n }\n\n const halfedges = this.halfedges = this._delaunator.halfedges;\n const hull = this.hull = this._delaunator.hull;\n const triangles = this.triangles = this._delaunator.triangles;\n const inedges = this.inedges.fill(-1);\n const hullIndex = this._hullIndex.fill(-1);\n\n // Compute an index from each point to an (arbitrary) incoming halfedge\n // Used to give the first neighbor of each point; for this reason,\n // on the hull we give priority to exterior halfedges\n for (let e = 0, n = halfedges.length; e < n; ++e) {\n const p = triangles[e % 3 === 2 ? e - 2 : e + 1];\n if (halfedges[e] === -1 || inedges[p] === -1) inedges[p] = e;\n }\n for (let i = 0, n = hull.length; i < n; ++i) {\n hullIndex[hull[i]] = i;\n }\n\n // degenerate case: 1 or 2 (distinct) points\n if (hull.length <= 2 && hull.length > 0) {\n this.triangles = new Int32Array(3).fill(-1);\n this.halfedges = new Int32Array(3).fill(-1);\n this.triangles[0] = hull[0];\n inedges[hull[0]] = 1;\n if (hull.length === 2) {\n inedges[hull[1]] = 0;\n this.triangles[1] = hull[1];\n this.triangles[2] = hull[1];\n }\n }\n }\n voronoi(bounds) {\n return new Voronoi(this, bounds);\n }\n *neighbors(i) {\n const {inedges, hull, _hullIndex, halfedges, triangles, collinear} = this;\n\n // degenerate case with several collinear points\n if (collinear) {\n const l = collinear.indexOf(i);\n if (l > 0) yield collinear[l - 1];\n if (l < collinear.length - 1) yield collinear[l + 1];\n return;\n }\n\n const e0 = inedges[i];\n if (e0 === -1) return; // coincident point\n let e = e0, p0 = -1;\n do {\n yield p0 = triangles[e];\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) return; // bad triangulation\n e = halfedges[e];\n if (e === -1) {\n const p = hull[(_hullIndex[i] + 1) % hull.length];\n if (p !== p0) yield p;\n return;\n }\n } while (e !== e0);\n }\n find(x, y, i = 0) {\n if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;\n const i0 = i;\n let c;\n while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) i = c;\n return c;\n }\n _step(i, x, y) {\n const {inedges, hull, _hullIndex, halfedges, triangles, points} = this;\n if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1);\n let c = i;\n let dc = pow(x - points[i * 2], 2) + pow(y - points[i * 2 + 1], 2);\n const e0 = inedges[i];\n let e = e0;\n do {\n let t = triangles[e];\n const dt = pow(x - points[t * 2], 2) + pow(y - points[t * 2 + 1], 2);\n if (dt < dc) dc = dt, c = t;\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n e = halfedges[e];\n if (e === -1) {\n e = hull[(_hullIndex[i] + 1) % hull.length];\n if (e !== t) {\n if (pow(x - points[e * 2], 2) + pow(y - points[e * 2 + 1], 2) < dc) return e;\n }\n break;\n }\n } while (e !== e0);\n return c;\n }\n render(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {points, halfedges, triangles} = this;\n for (let i = 0, n = halfedges.length; i < n; ++i) {\n const j = halfedges[i];\n if (j < i) continue;\n const ti = triangles[i] * 2;\n const tj = triangles[j] * 2;\n context.moveTo(points[ti], points[ti + 1]);\n context.lineTo(points[tj], points[tj + 1]);\n }\n this.renderHull(context);\n return buffer && buffer.value();\n }\n renderPoints(context, r) {\n if (r === undefined && (!context || typeof context.moveTo !== \"function\")) r = context, context = null;\n r = r == undefined ? 2 : +r;\n const buffer = context == null ? context = new Path : undefined;\n const {points} = this;\n for (let i = 0, n = points.length; i < n; i += 2) {\n const x = points[i], y = points[i + 1];\n context.moveTo(x + r, y);\n context.arc(x, y, r, 0, tau);\n }\n return buffer && buffer.value();\n }\n renderHull(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {hull, points} = this;\n const h = hull[0] * 2, n = hull.length;\n context.moveTo(points[h], points[h + 1]);\n for (let i = 1; i < n; ++i) {\n const h = 2 * hull[i];\n context.lineTo(points[h], points[h + 1]);\n }\n context.closePath();\n return buffer && buffer.value();\n }\n hullPolygon() {\n const polygon = new Polygon;\n this.renderHull(polygon);\n return polygon.value();\n }\n renderTriangle(i, context) {\n const buffer = context == null ? context = new Path : undefined;\n const {points, triangles} = this;\n const t0 = triangles[i *= 3] * 2;\n const t1 = triangles[i + 1] * 2;\n const t2 = triangles[i + 2] * 2;\n context.moveTo(points[t0], points[t0 + 1]);\n context.lineTo(points[t1], points[t1 + 1]);\n context.lineTo(points[t2], points[t2 + 1]);\n context.closePath();\n return buffer && buffer.value();\n }\n *trianglePolygons() {\n const {triangles} = this;\n for (let i = 0, n = triangles.length / 3; i < n; ++i) {\n yield this.trianglePolygon(i);\n }\n }\n trianglePolygon(i) {\n const polygon = new Polygon;\n this.renderTriangle(i, polygon);\n return polygon.value();\n }\n}\n\nfunction flatArray(points, fx, fy, that) {\n const n = points.length;\n const array = new Float64Array(n * 2);\n for (let i = 0; i < n; ++i) {\n const p = points[i];\n array[i * 2] = fx.call(that, p, i, points);\n array[i * 2 + 1] = fy.call(that, p, i, points);\n }\n return array;\n}\n\nfunction* flatIterable(points, fx, fy, that) {\n let i = 0;\n for (const p of points) {\n yield fx.call(that, p, i, points);\n yield fy.call(that, p, i, points);\n ++i;\n }\n}\n","import Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\n\nexport default class Voronoi {\n constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) {\n if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error(\"invalid bounds\");\n this.delaunay = delaunay;\n this._circumcenters = new Float64Array(delaunay.points.length * 2);\n this.vectors = new Float64Array(delaunay.points.length * 2);\n this.xmax = xmax, this.xmin = xmin;\n this.ymax = ymax, this.ymin = ymin;\n this._init();\n }\n update() {\n this.delaunay.update();\n this._init();\n return this;\n }\n _init() {\n const {delaunay: {points, hull, triangles}, vectors} = this;\n let bx, by; // lazily computed barycenter of the hull\n\n // Compute circumcenters.\n const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2);\n for (let i = 0, j = 0, n = triangles.length, x, y; i < n; i += 3, j += 2) {\n const t1 = triangles[i] * 2;\n const t2 = triangles[i + 1] * 2;\n const t3 = triangles[i + 2] * 2;\n const x1 = points[t1];\n const y1 = points[t1 + 1];\n const x2 = points[t2];\n const y2 = points[t2 + 1];\n const x3 = points[t3];\n const y3 = points[t3 + 1];\n\n const dx = x2 - x1;\n const dy = y2 - y1;\n const ex = x3 - x1;\n const ey = y3 - y1;\n const ab = (dx * ey - dy * ex) * 2;\n\n if (Math.abs(ab) < 1e-9) {\n // For a degenerate triangle, the circumcenter is at the infinity, in a\n // direction orthogonal to the halfedge and away from the “center” of\n // the diagram , defined as the hull’s barycenter.\n if (bx === undefined) {\n bx = by = 0;\n for (const i of hull) bx += points[i * 2], by += points[i * 2 + 1];\n bx /= hull.length, by /= hull.length;\n }\n const a = 1e9 * Math.sign((bx - x1) * ey - (by - y1) * ex);\n x = (x1 + x3) / 2 - a * ey;\n y = (y1 + y3) / 2 + a * ex;\n } else {\n const d = 1 / ab;\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n x = x1 + (ey * bl - dy * cl) * d;\n y = y1 + (dx * cl - ex * bl) * d;\n }\n circumcenters[j] = x;\n circumcenters[j + 1] = y;\n }\n\n // Compute exterior cell rays.\n let h = hull[hull.length - 1];\n let p0, p1 = h * 4;\n let x0, x1 = points[2 * h];\n let y0, y1 = points[2 * h + 1];\n vectors.fill(0);\n for (let i = 0; i < hull.length; ++i) {\n h = hull[i];\n p0 = p1, x0 = x1, y0 = y1;\n p1 = h * 4, x1 = points[2 * h], y1 = points[2 * h + 1];\n vectors[p0 + 2] = vectors[p1] = y0 - y1;\n vectors[p0 + 3] = vectors[p1 + 1] = x1 - x0;\n }\n }\n render(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {delaunay: {halfedges, inedges, hull}, circumcenters, vectors} = this;\n if (hull.length <= 1) return null;\n for (let i = 0, n = halfedges.length; i < n; ++i) {\n const j = halfedges[i];\n if (j < i) continue;\n const ti = Math.floor(i / 3) * 2;\n const tj = Math.floor(j / 3) * 2;\n const xi = circumcenters[ti];\n const yi = circumcenters[ti + 1];\n const xj = circumcenters[tj];\n const yj = circumcenters[tj + 1];\n this._renderSegment(xi, yi, xj, yj, context);\n }\n let h0, h1 = hull[hull.length - 1];\n for (let i = 0; i < hull.length; ++i) {\n h0 = h1, h1 = hull[i];\n const t = Math.floor(inedges[h1] / 3) * 2;\n const x = circumcenters[t];\n const y = circumcenters[t + 1];\n const v = h0 * 4;\n const p = this._project(x, y, vectors[v + 2], vectors[v + 3]);\n if (p) this._renderSegment(x, y, p[0], p[1], context);\n }\n return buffer && buffer.value();\n }\n renderBounds(context) {\n const buffer = context == null ? context = new Path : undefined;\n context.rect(this.xmin, this.ymin, this.xmax - this.xmin, this.ymax - this.ymin);\n return buffer && buffer.value();\n }\n renderCell(i, context) {\n const buffer = context == null ? context = new Path : undefined;\n const points = this._clip(i);\n if (points === null || !points.length) return;\n context.moveTo(points[0], points[1]);\n let n = points.length;\n while (points[0] === points[n-2] && points[1] === points[n-1] && n > 1) n -= 2;\n for (let i = 2; i < n; i += 2) {\n if (points[i] !== points[i-2] || points[i+1] !== points[i-1])\n context.lineTo(points[i], points[i + 1]);\n }\n context.closePath();\n return buffer && buffer.value();\n }\n *cellPolygons() {\n const {delaunay: {points}} = this;\n for (let i = 0, n = points.length / 2; i < n; ++i) {\n const cell = this.cellPolygon(i);\n if (cell) cell.index = i, yield cell;\n }\n }\n cellPolygon(i) {\n const polygon = new Polygon;\n this.renderCell(i, polygon);\n return polygon.value();\n }\n _renderSegment(x0, y0, x1, y1, context) {\n let S;\n const c0 = this._regioncode(x0, y0);\n const c1 = this._regioncode(x1, y1);\n if (c0 === 0 && c1 === 0) {\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n } else if (S = this._clipSegment(x0, y0, x1, y1, c0, c1)) {\n context.moveTo(S[0], S[1]);\n context.lineTo(S[2], S[3]);\n }\n }\n contains(i, x, y) {\n if ((x = +x, x !== x) || (y = +y, y !== y)) return false;\n return this.delaunay._step(i, x, y) === i;\n }\n *neighbors(i) {\n const ci = this._clip(i);\n if (ci) for (const j of this.delaunay.neighbors(i)) {\n const cj = this._clip(j);\n // find the common edge\n if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) {\n for (let aj = 0, lj = cj.length; aj < lj; aj += 2) {\n if (ci[ai] === cj[aj]\n && ci[ai + 1] === cj[aj + 1]\n && ci[(ai + 2) % li] === cj[(aj + lj - 2) % lj]\n && ci[(ai + 3) % li] === cj[(aj + lj - 1) % lj]) {\n yield j;\n break loop;\n }\n }\n }\n }\n }\n _cell(i) {\n const {circumcenters, delaunay: {inedges, halfedges, triangles}} = this;\n const e0 = inedges[i];\n if (e0 === -1) return null; // coincident point\n const points = [];\n let e = e0;\n do {\n const t = Math.floor(e / 3);\n points.push(circumcenters[t * 2], circumcenters[t * 2 + 1]);\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n e = halfedges[e];\n } while (e !== e0 && e !== -1);\n return points;\n }\n _clip(i) {\n // degenerate case (1 valid point: return the box)\n if (i === 0 && this.delaunay.hull.length === 1) {\n return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n }\n const points = this._cell(i);\n if (points === null) return null;\n const {vectors: V} = this;\n const v = i * 4;\n return this._simplify(V[v] || V[v + 1]\n ? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3])\n : this._clipFinite(i, points));\n }\n _clipFinite(i, points) {\n const n = points.length;\n let P = null;\n let x0, y0, x1 = points[n - 2], y1 = points[n - 1];\n let c0, c1 = this._regioncode(x1, y1);\n let e0, e1 = 0;\n for (let j = 0; j < n; j += 2) {\n x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1];\n c0 = c1, c1 = this._regioncode(x1, y1);\n if (c0 === 0 && c1 === 0) {\n e0 = e1, e1 = 0;\n if (P) P.push(x1, y1);\n else P = [x1, y1];\n } else {\n let S, sx0, sy0, sx1, sy1;\n if (c0 === 0) {\n if ((S = this._clipSegment(x0, y0, x1, y1, c0, c1)) === null) continue;\n [sx0, sy0, sx1, sy1] = S;\n } else {\n if ((S = this._clipSegment(x1, y1, x0, y0, c1, c0)) === null) continue;\n [sx1, sy1, sx0, sy0] = S;\n e0 = e1, e1 = this._edgecode(sx0, sy0);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n if (P) P.push(sx0, sy0);\n else P = [sx0, sy0];\n }\n e0 = e1, e1 = this._edgecode(sx1, sy1);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n if (P) P.push(sx1, sy1);\n else P = [sx1, sy1];\n }\n }\n if (P) {\n e0 = e1, e1 = this._edgecode(P[0], P[1]);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n }\n return P;\n }\n _clipSegment(x0, y0, x1, y1, c0, c1) {\n // for more robustness, always consider the segment in the same order\n const flip = c0 < c1;\n if (flip) [x0, y0, x1, y1, c0, c1] = [x1, y1, x0, y0, c1, c0];\n while (true) {\n if (c0 === 0 && c1 === 0) return flip ? [x1, y1, x0, y0] : [x0, y0, x1, y1];\n if (c0 & c1) return null;\n let x, y, c = c0 || c1;\n if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax;\n else if (c & 0b0100) x = x0 + (x1 - x0) * (this.ymin - y0) / (y1 - y0), y = this.ymin;\n else if (c & 0b0010) y = y0 + (y1 - y0) * (this.xmax - x0) / (x1 - x0), x = this.xmax;\n else y = y0 + (y1 - y0) * (this.xmin - x0) / (x1 - x0), x = this.xmin;\n if (c0) x0 = x, y0 = y, c0 = this._regioncode(x0, y0);\n else x1 = x, y1 = y, c1 = this._regioncode(x1, y1);\n }\n }\n _clipInfinite(i, points, vx0, vy0, vxn, vyn) {\n let P = Array.from(points), p;\n if (p = this._project(P[0], P[1], vx0, vy0)) P.unshift(p[0], p[1]);\n if (p = this._project(P[P.length - 2], P[P.length - 1], vxn, vyn)) P.push(p[0], p[1]);\n if (P = this._clipFinite(i, P)) {\n for (let j = 0, n = P.length, c0, c1 = this._edgecode(P[n - 2], P[n - 1]); j < n; j += 2) {\n c0 = c1, c1 = this._edgecode(P[j], P[j + 1]);\n if (c0 && c1) j = this._edge(i, c0, c1, P, j), n = P.length;\n }\n } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n P = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax];\n }\n return P;\n }\n _edge(i, e0, e1, P, j) {\n while (e0 !== e1) {\n let x, y;\n switch (e0) {\n case 0b0101: e0 = 0b0100; continue; // top-left\n case 0b0100: e0 = 0b0110, x = this.xmax, y = this.ymin; break; // top\n case 0b0110: e0 = 0b0010; continue; // top-right\n case 0b0010: e0 = 0b1010, x = this.xmax, y = this.ymax; break; // right\n case 0b1010: e0 = 0b1000; continue; // bottom-right\n case 0b1000: e0 = 0b1001, x = this.xmin, y = this.ymax; break; // bottom\n case 0b1001: e0 = 0b0001; continue; // bottom-left\n case 0b0001: e0 = 0b0101, x = this.xmin, y = this.ymin; break; // left\n }\n // Note: this implicitly checks for out of bounds: if P[j] or P[j+1] are\n // undefined, the conditional statement will be executed.\n if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) {\n P.splice(j, 0, x, y), j += 2;\n }\n }\n return j;\n }\n _project(x0, y0, vx, vy) {\n let t = Infinity, c, x, y;\n if (vy < 0) { // top\n if (y0 <= this.ymin) return null;\n if ((c = (this.ymin - y0) / vy) < t) y = this.ymin, x = x0 + (t = c) * vx;\n } else if (vy > 0) { // bottom\n if (y0 >= this.ymax) return null;\n if ((c = (this.ymax - y0) / vy) < t) y = this.ymax, x = x0 + (t = c) * vx;\n }\n if (vx > 0) { // right\n if (x0 >= this.xmax) return null;\n if ((c = (this.xmax - x0) / vx) < t) x = this.xmax, y = y0 + (t = c) * vy;\n } else if (vx < 0) { // left\n if (x0 <= this.xmin) return null;\n if ((c = (this.xmin - x0) / vx) < t) x = this.xmin, y = y0 + (t = c) * vy;\n }\n return [x, y];\n }\n _edgecode(x, y) {\n return (x === this.xmin ? 0b0001\n : x === this.xmax ? 0b0010 : 0b0000)\n | (y === this.ymin ? 0b0100\n : y === this.ymax ? 0b1000 : 0b0000);\n }\n _regioncode(x, y) {\n return (x < this.xmin ? 0b0001\n : x > this.xmax ? 0b0010 : 0b0000)\n | (y < this.ymin ? 0b0100\n : y > this.ymax ? 0b1000 : 0b0000);\n }\n _simplify(P) {\n if (P && P.length > 4) {\n for (let i = 0; i < P.length; i+= 2) {\n const j = (i + 2) % P.length, k = (i + 4) % P.length;\n if (P[i] === P[j] && P[j] === P[k] || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1]) {\n P.splice(j, 2), i -= 2;\n }\n }\n if (!P.length) P = null;\n }\n return P;\n }\n}\n","import { Transform } from 'vega-dataflow';\nimport { inherits } from 'vega-util';\nimport { Delaunay } from 'd3-delaunay';\n\nfunction Voronoi(params) {\n Transform.call(this, null, params);\n}\nVoronoi.Definition = {\n 'type': 'Voronoi',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'extent',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'default': [[-1e5, -1e5], [1e5, 1e5]],\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\nconst defaultExtent = [-1e5, -1e5, 1e5, 1e5];\ninherits(Voronoi, Transform, {\n transform(_, pulse) {\n const as = _.as || 'path',\n data = pulse.source;\n\n // nothing to do if no data\n if (!data || !data.length) return pulse;\n\n // configure and construct voronoi diagram\n let s = _.size;\n s = s ? [0, 0, s[0], s[1]] : (s = _.extent) ? [s[0][0], s[0][1], s[1][0], s[1][1]] : defaultExtent;\n const voronoi = this.value = Delaunay.from(data, _.x, _.y).voronoi(s);\n\n // map polygons to paths\n for (let i = 0, n = data.length; i < n; ++i) {\n const polygon = voronoi.cellPolygon(i);\n data[i][as] = polygon ? toPathString(polygon) : null;\n }\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\n\n// suppress duplicated end point vertices\nfunction toPathString(p) {\n const x = p[0][0],\n y = p[0][1];\n let n = p.length - 1;\n for (; p[n][0] === x && p[n][1] === y; --n);\n return 'M' + p.slice(0, n + 1).join('L') + 'Z';\n}\n\nexport { Voronoi as voronoi };\n","import { canvas } from 'vega-canvas';\nimport { Transform } from 'vega-dataflow';\nimport { inherits, error, isFunction, constant, extent } from 'vega-util';\nimport { scale } from 'vega-scale';\nimport { random } from 'vega-statistics';\n\n/*\nCopyright (c) 2013, Jason Davies.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * The name Jason Davies may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\nOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\nADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/\n// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf\n\nvar cloudRadians = Math.PI / 180,\n cw = 1 << 11 >> 5,\n ch = 1 << 11;\nfunction cloud () {\n var size = [256, 256],\n text,\n font,\n fontSize,\n fontStyle,\n fontWeight,\n rotate,\n padding,\n spiral = archimedeanSpiral,\n words = [],\n random = Math.random,\n cloud = {};\n cloud.layout = function () {\n var contextAndRatio = getContext(canvas()),\n board = zeroArray((size[0] >> 5) * size[1]),\n bounds = null,\n n = words.length,\n i = -1,\n tags = [],\n data = words.map(d => ({\n text: text(d),\n font: font(d),\n style: fontStyle(d),\n weight: fontWeight(d),\n rotate: rotate(d),\n size: ~~(fontSize(d) + 1e-14),\n padding: padding(d),\n xoff: 0,\n yoff: 0,\n x1: 0,\n y1: 0,\n x0: 0,\n y0: 0,\n hasText: false,\n sprite: null,\n datum: d\n })).sort((a, b) => b.size - a.size);\n while (++i < n) {\n var d = data[i];\n d.x = size[0] * (random() + .5) >> 1;\n d.y = size[1] * (random() + .5) >> 1;\n cloudSprite(contextAndRatio, d, data, i);\n if (d.hasText && place(board, d, bounds)) {\n tags.push(d);\n if (bounds) cloudBounds(bounds, d);else bounds = [{\n x: d.x + d.x0,\n y: d.y + d.y0\n }, {\n x: d.x + d.x1,\n y: d.y + d.y1\n }];\n // Temporary hack\n d.x -= size[0] >> 1;\n d.y -= size[1] >> 1;\n }\n }\n return tags;\n };\n function getContext(canvas) {\n canvas.width = canvas.height = 1;\n var ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);\n canvas.width = (cw << 5) / ratio;\n canvas.height = ch / ratio;\n var context = canvas.getContext('2d');\n context.fillStyle = context.strokeStyle = 'red';\n context.textAlign = 'center';\n return {\n context: context,\n ratio: ratio\n };\n }\n function place(board, tag, bounds) {\n var startX = tag.x,\n startY = tag.y,\n maxDelta = Math.hypot(size[0], size[1]),\n s = spiral(size),\n dt = random() < .5 ? 1 : -1,\n t = -dt,\n dxdy,\n dx,\n dy;\n while (dxdy = s(t += dt)) {\n dx = ~~dxdy[0];\n dy = ~~dxdy[1];\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;\n tag.x = startX + dx;\n tag.y = startY + dy;\n if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue;\n // TODO only check for collisions within current bounds.\n if (!bounds || !cloudCollide(tag, board, size[0])) {\n if (!bounds || collideRects(tag, bounds)) {\n var sprite = tag.sprite,\n w = tag.width >> 5,\n sw = size[0] >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n board[x + i] |= last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n x += sw;\n }\n tag.sprite = null;\n return true;\n }\n }\n }\n return false;\n }\n cloud.words = function (_) {\n if (arguments.length) {\n words = _;\n return cloud;\n } else {\n return words;\n }\n };\n cloud.size = function (_) {\n if (arguments.length) {\n size = [+_[0], +_[1]];\n return cloud;\n } else {\n return size;\n }\n };\n cloud.font = function (_) {\n if (arguments.length) {\n font = functor(_);\n return cloud;\n } else {\n return font;\n }\n };\n cloud.fontStyle = function (_) {\n if (arguments.length) {\n fontStyle = functor(_);\n return cloud;\n } else {\n return fontStyle;\n }\n };\n cloud.fontWeight = function (_) {\n if (arguments.length) {\n fontWeight = functor(_);\n return cloud;\n } else {\n return fontWeight;\n }\n };\n cloud.rotate = function (_) {\n if (arguments.length) {\n rotate = functor(_);\n return cloud;\n } else {\n return rotate;\n }\n };\n cloud.text = function (_) {\n if (arguments.length) {\n text = functor(_);\n return cloud;\n } else {\n return text;\n }\n };\n cloud.spiral = function (_) {\n if (arguments.length) {\n spiral = spirals[_] || _;\n return cloud;\n } else {\n return spiral;\n }\n };\n cloud.fontSize = function (_) {\n if (arguments.length) {\n fontSize = functor(_);\n return cloud;\n } else {\n return fontSize;\n }\n };\n cloud.padding = function (_) {\n if (arguments.length) {\n padding = functor(_);\n return cloud;\n } else {\n return padding;\n }\n };\n cloud.random = function (_) {\n if (arguments.length) {\n random = _;\n return cloud;\n } else {\n return random;\n }\n };\n return cloud;\n}\n\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\nfunction cloudSprite(contextAndRatio, d, data, di) {\n if (d.sprite) return;\n var c = contextAndRatio.context,\n ratio = contextAndRatio.ratio;\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n var x = 0,\n y = 0,\n maxh = 0,\n n = data.length,\n w,\n w32,\n h,\n i,\n j;\n --di;\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.style + ' ' + d.weight + ' ' + ~~((d.size + 1) / ratio) + 'px ' + d.font;\n w = c.measureText(d.text + 'm').width * ratio;\n h = d.size << 1;\n if (d.rotate) {\n var sr = Math.sin(d.rotate * cloudRadians),\n cr = Math.cos(d.rotate * cloudRadians),\n wcr = w * cr,\n wsr = w * sr,\n hcr = h * cr,\n hsr = h * sr;\n w = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f >> 5 << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n } else {\n w = w + 0x1f >> 5 << 5;\n }\n if (h > maxh) maxh = h;\n if (x + w >= cw << 5) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n if (y + h >= ch) break;\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.rotate) c.rotate(d.rotate * cloudRadians);\n c.fillText(d.text, 0, 0);\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,\n sprite = [];\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) continue;\n w = d.width;\n w32 = w >> 5;\n h = d.y1 - d.y0;\n // Zero the buffer\n for (i = 0; i < h * w32; i++) sprite[i] = 0;\n x = d.xoff;\n if (x == null) return;\n y = d.yoff;\n var seen = 0,\n seenRow = -1;\n for (j = 0; j < h; j++) {\n for (i = 0; i < w; i++) {\n var k = w32 * j + (i >> 5),\n m = pixels[(y + j) * (cw << 5) + (x + i) << 2] ? 1 << 31 - i % 32 : 0;\n sprite[k] |= m;\n seen |= m;\n }\n if (seen) seenRow = j;else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n}\n\n// Use mask-based collision detection.\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n var sprite = tag.sprite,\n w = tag.width >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n if ((last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i]) return true;\n }\n x += sw;\n }\n return false;\n}\nfunction cloudBounds(bounds, d) {\n var b0 = bounds[0],\n b1 = bounds[1];\n if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\nfunction collideRects(a, b) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\nfunction archimedeanSpiral(size) {\n var e = size[0] / size[1];\n return function (t) {\n return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\n };\n}\nfunction rectangularSpiral(size) {\n var dy = 4,\n dx = dy * size[0] / size[1],\n x = 0,\n y = 0;\n return function (t) {\n var sign = t < 0 ? -1 : 1;\n // See triangular numbers: T_n = n * (n + 1) / 2.\n switch (Math.sqrt(1 + 4 * sign * t) - sign & 3) {\n case 0:\n x += dx;\n break;\n case 1:\n y += dy;\n break;\n case 2:\n x -= dx;\n break;\n default:\n y -= dy;\n break;\n }\n return [x, y];\n };\n}\n\n// TODO reuse arrays?\nfunction zeroArray(n) {\n var a = [],\n i = -1;\n while (++i < n) a[i] = 0;\n return a;\n}\nfunction functor(d) {\n return typeof d === 'function' ? d : function () {\n return d;\n };\n}\nvar spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n\nconst Output = ['x', 'y', 'font', 'fontSize', 'fontStyle', 'fontWeight', 'angle'];\nconst Params = ['text', 'font', 'rotate', 'fontSize', 'fontStyle', 'fontWeight'];\nfunction Wordcloud(params) {\n Transform.call(this, cloud(), params);\n}\nWordcloud.Definition = {\n 'type': 'Wordcloud',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'font',\n 'type': 'string',\n 'expr': true,\n 'default': 'sans-serif'\n }, {\n 'name': 'fontStyle',\n 'type': 'string',\n 'expr': true,\n 'default': 'normal'\n }, {\n 'name': 'fontWeight',\n 'type': 'string',\n 'expr': true,\n 'default': 'normal'\n }, {\n 'name': 'fontSize',\n 'type': 'number',\n 'expr': true,\n 'default': 14\n }, {\n 'name': 'fontSizeRange',\n 'type': 'number',\n 'array': 'nullable',\n 'default': [10, 50]\n }, {\n 'name': 'rotate',\n 'type': 'number',\n 'expr': true,\n 'default': 0\n }, {\n 'name': 'text',\n 'type': 'field'\n }, {\n 'name': 'spiral',\n 'type': 'string',\n 'values': ['archimedean', 'rectangular']\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 7,\n 'default': Output\n }]\n};\ninherits(Wordcloud, Transform, {\n transform(_, pulse) {\n if (_.size && !(_.size[0] && _.size[1])) {\n error('Wordcloud size dimensions must be non-zero.');\n }\n function modp(param) {\n const p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n const mod = _.modified();\n if (!(mod || pulse.changed(pulse.ADD_REM) || Params.some(modp))) return;\n const data = pulse.materialize(pulse.SOURCE).source,\n layout = this.value,\n as = _.as || Output;\n let fontSize = _.fontSize || 14,\n range;\n isFunction(fontSize) ? range = _.fontSizeRange : fontSize = constant(fontSize);\n\n // create font size scaling function as needed\n if (range) {\n const fsize = fontSize,\n sizeScale = scale('sqrt')().domain(extent(data, fsize)).range(range);\n fontSize = x => sizeScale(fsize(x));\n }\n data.forEach(t => {\n t[as[0]] = NaN;\n t[as[1]] = NaN;\n t[as[3]] = 0;\n });\n\n // configure layout\n const words = layout.words(data).text(_.text).size(_.size || [500, 500]).padding(_.padding || 1).spiral(_.spiral || 'archimedean').rotate(_.rotate || 0).font(_.font || 'sans-serif').fontStyle(_.fontStyle || 'normal').fontWeight(_.fontWeight || 'normal').fontSize(fontSize).random(random).layout();\n const size = layout.size(),\n dx = size[0] >> 1,\n dy = size[1] >> 1,\n n = words.length;\n for (let i = 0, w, t; i < n; ++i) {\n w = words[i];\n t = w.datum;\n t[as[0]] = w.x + dx;\n t[as[1]] = w.y + dy;\n t[as[2]] = w.font;\n t[as[3]] = w.size;\n t[as[4]] = w.style;\n t[as[5]] = w.weight;\n t[as[6]] = w.rotate;\n }\n return pulse.reflow(mod).modifies(as);\n }\n});\n\nexport { Wordcloud as wordcloud };\n","import { bisectLeft, bisectRight, permute } from 'd3-array';\nimport { Transform } from 'vega-dataflow';\nimport { inherits } from 'vega-util';\n\nconst array8 = n => new Uint8Array(n);\nconst array16 = n => new Uint16Array(n);\nconst array32 = n => new Uint32Array(n);\n\n/**\n * Maintains CrossFilter state.\n */\nfunction Bitmaps() {\n let width = 8,\n data = [],\n seen = array32(0),\n curr = array(0, width),\n prev = array(0, width);\n return {\n data: () => data,\n seen: () => seen = lengthen(seen, data.length),\n add(array) {\n for (let i = 0, j = data.length, n = array.length, t; i < n; ++i) {\n t = array[i];\n t._index = j++;\n data.push(t);\n }\n },\n remove(num, map) {\n // map: index -> boolean (true => remove)\n const n = data.length,\n copy = Array(n - num),\n reindex = data; // reuse old data array for index map\n let t, i, j;\n\n // seek forward to first removal\n for (i = 0; !map[i] && i < n; ++i) {\n copy[i] = data[i];\n reindex[i] = i;\n }\n\n // condense arrays\n for (j = i; i < n; ++i) {\n t = data[i];\n if (!map[i]) {\n reindex[i] = j;\n curr[j] = curr[i];\n prev[j] = prev[i];\n copy[j] = t;\n t._index = j++;\n } else {\n reindex[i] = -1;\n }\n curr[i] = 0; // clear unused bits\n }\n\n data = copy;\n return reindex;\n },\n size: () => data.length,\n curr: () => curr,\n prev: () => prev,\n reset: k => prev[k] = curr[k],\n all: () => width < 0x101 ? 0xff : width < 0x10001 ? 0xffff : 0xffffffff,\n set(k, one) {\n curr[k] |= one;\n },\n clear(k, one) {\n curr[k] &= ~one;\n },\n resize(n, m) {\n const k = curr.length;\n if (n > k || m > width) {\n width = Math.max(m, width);\n curr = array(n, width, curr);\n prev = array(n, width);\n }\n }\n };\n}\nfunction lengthen(array, length, copy) {\n if (array.length >= length) return array;\n copy = copy || new array.constructor(length);\n copy.set(array);\n return copy;\n}\nfunction array(n, m, array) {\n const copy = (m < 0x101 ? array8 : m < 0x10001 ? array16 : array32)(n);\n if (array) copy.set(array);\n return copy;\n}\n\nfunction Dimension (index, i, query) {\n const bit = 1 << i;\n return {\n one: bit,\n zero: ~bit,\n range: query.slice(),\n bisect: index.bisect,\n index: index.index,\n size: index.size,\n onAdd(added, curr) {\n const dim = this,\n range = dim.bisect(dim.range, added.value),\n idx = added.index,\n lo = range[0],\n hi = range[1],\n n1 = idx.length;\n let i;\n for (i = 0; i < lo; ++i) curr[idx[i]] |= bit;\n for (i = hi; i < n1; ++i) curr[idx[i]] |= bit;\n return dim;\n }\n };\n}\n\n/**\n * Maintains a list of values, sorted by key.\n */\nfunction SortedIndex() {\n let index = array32(0),\n value = [],\n size = 0;\n function insert(key, data, base) {\n if (!data.length) return [];\n const n0 = size,\n n1 = data.length,\n addi = array32(n1);\n let addv = Array(n1),\n oldv,\n oldi,\n i;\n for (i = 0; i < n1; ++i) {\n addv[i] = key(data[i]);\n addi[i] = i;\n }\n addv = sort(addv, addi);\n if (n0) {\n oldv = value;\n oldi = index;\n value = Array(n0 + n1);\n index = array32(n0 + n1);\n merge(base, oldv, oldi, n0, addv, addi, n1, value, index);\n } else {\n if (base > 0) for (i = 0; i < n1; ++i) {\n addi[i] += base;\n }\n value = addv;\n index = addi;\n }\n size = n0 + n1;\n return {\n index: addi,\n value: addv\n };\n }\n function remove(num, map) {\n // map: index -> remove\n const n = size;\n let idx, i, j;\n\n // seek forward to first removal\n for (i = 0; !map[index[i]] && i < n; ++i);\n\n // condense index and value arrays\n for (j = i; i < n; ++i) {\n if (!map[idx = index[i]]) {\n index[j] = idx;\n value[j] = value[i];\n ++j;\n }\n }\n size = n - num;\n }\n function reindex(map) {\n for (let i = 0, n = size; i < n; ++i) {\n index[i] = map[index[i]];\n }\n }\n function bisect(range, array) {\n let n;\n if (array) {\n n = array.length;\n } else {\n array = value;\n n = size;\n }\n return [bisectLeft(array, range[0], 0, n), bisectRight(array, range[1], 0, n)];\n }\n return {\n insert: insert,\n remove: remove,\n bisect: bisect,\n reindex: reindex,\n index: () => index,\n size: () => size\n };\n}\nfunction sort(values, index) {\n values.sort.call(index, (a, b) => {\n const x = values[a],\n y = values[b];\n return x < y ? -1 : x > y ? 1 : 0;\n });\n return permute(values, index);\n}\nfunction merge(base, value0, index0, n0, value1, index1, n1, value, index) {\n let i0 = 0,\n i1 = 0,\n i;\n for (i = 0; i0 < n0 && i1 < n1; ++i) {\n if (value0[i0] < value1[i1]) {\n value[i] = value0[i0];\n index[i] = index0[i0++];\n } else {\n value[i] = value1[i1];\n index[i] = index1[i1++] + base;\n }\n }\n for (; i0 < n0; ++i0, ++i) {\n value[i] = value0[i0];\n index[i] = index0[i0];\n }\n for (; i1 < n1; ++i1, ++i) {\n value[i] = value1[i1];\n index[i] = index1[i1] + base;\n }\n}\n\n/**\n * An indexed multi-dimensional filter.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of dimension accessors to filter.\n * @param {Array} params.query - An array of per-dimension range queries.\n */\nfunction CrossFilter(params) {\n Transform.call(this, Bitmaps(), params);\n this._indices = null;\n this._dims = null;\n}\nCrossFilter.Definition = {\n 'type': 'CrossFilter',\n 'metadata': {},\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'query',\n 'type': 'array',\n 'array': true,\n 'required': true,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }]\n};\ninherits(CrossFilter, Transform, {\n transform(_, pulse) {\n if (!this._dims) {\n return this.init(_, pulse);\n } else {\n var init = _.modified('fields') || _.fields.some(f => pulse.modified(f.fields));\n return init ? this.reinit(_, pulse) : this.eval(_, pulse);\n }\n },\n init(_, pulse) {\n const fields = _.fields,\n query = _.query,\n indices = this._indices = {},\n dims = this._dims = [],\n m = query.length;\n let i = 0,\n key,\n index;\n\n // instantiate indices and dimensions\n for (; i < m; ++i) {\n key = fields[i].fname;\n index = indices[key] || (indices[key] = SortedIndex());\n dims.push(Dimension(index, i, query[i]));\n }\n return this.eval(_, pulse);\n },\n reinit(_, pulse) {\n const output = pulse.materialize().fork(),\n fields = _.fields,\n query = _.query,\n indices = this._indices,\n dims = this._dims,\n bits = this.value,\n curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(),\n out = output.rem = output.add,\n mod = output.mod,\n m = query.length,\n adds = {};\n let add, index, key, mods, remMap, modMap, i, n, f;\n\n // set prev to current state\n prev.set(curr);\n\n // if pulse has remove tuples, process them first\n if (pulse.rem.length) {\n remMap = this.remove(_, pulse, output);\n }\n\n // if pulse has added tuples, add them to state\n if (pulse.add.length) {\n bits.add(pulse.add);\n }\n\n // if pulse has modified tuples, create an index map\n if (pulse.mod.length) {\n modMap = {};\n for (mods = pulse.mod, i = 0, n = mods.length; i < n; ++i) {\n modMap[mods[i]._index] = 1;\n }\n }\n\n // re-initialize indices as needed, update curr bitmap\n for (i = 0; i < m; ++i) {\n f = fields[i];\n if (!dims[i] || _.modified('fields', i) || pulse.modified(f.fields)) {\n key = f.fname;\n if (!(add = adds[key])) {\n indices[key] = index = SortedIndex();\n adds[key] = add = index.insert(f, pulse.source, 0);\n }\n dims[i] = Dimension(index, i, query[i]).onAdd(add, curr);\n }\n }\n\n // visit each tuple\n // if filter state changed, push index to add/rem\n // else if in mod and passes a filter, push index to mod\n for (i = 0, n = bits.data().length; i < n; ++i) {\n if (remMap[i]) {\n // skip if removed tuple\n continue;\n } else if (prev[i] !== curr[i]) {\n // add if state changed\n out.push(i);\n } else if (modMap[i] && curr[i] !== all) {\n // otherwise, pass mods through\n mod.push(i);\n }\n }\n bits.mask = (1 << m) - 1;\n return output;\n },\n eval(_, pulse) {\n const output = pulse.materialize().fork(),\n m = this._dims.length;\n let mask = 0;\n if (pulse.rem.length) {\n this.remove(_, pulse, output);\n mask |= (1 << m) - 1;\n }\n if (_.modified('query') && !_.modified('fields')) {\n mask |= this.update(_, pulse, output);\n }\n if (pulse.add.length) {\n this.insert(_, pulse, output);\n mask |= (1 << m) - 1;\n }\n if (pulse.mod.length) {\n this.modify(pulse, output);\n mask |= (1 << m) - 1;\n }\n this.value.mask = mask;\n return output;\n },\n insert(_, pulse, output) {\n const tuples = pulse.add,\n bits = this.value,\n dims = this._dims,\n indices = this._indices,\n fields = _.fields,\n adds = {},\n out = output.add,\n n = bits.size() + tuples.length,\n m = dims.length;\n let k = bits.size(),\n j,\n key,\n add;\n\n // resize bitmaps and add tuples as needed\n bits.resize(n, m);\n bits.add(tuples);\n const curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all();\n\n // add to dimensional indices\n for (j = 0; j < m; ++j) {\n key = fields[j].fname;\n add = adds[key] || (adds[key] = indices[key].insert(fields[j], tuples, k));\n dims[j].onAdd(add, curr);\n }\n\n // set previous filters, output if passes at least one filter\n for (; k < n; ++k) {\n prev[k] = all;\n if (curr[k] !== all) out.push(k);\n }\n },\n modify(pulse, output) {\n const out = output.mod,\n bits = this.value,\n curr = bits.curr(),\n all = bits.all(),\n tuples = pulse.mod;\n let i, n, k;\n for (i = 0, n = tuples.length; i < n; ++i) {\n k = tuples[i]._index;\n if (curr[k] !== all) out.push(k);\n }\n },\n remove(_, pulse, output) {\n const indices = this._indices,\n bits = this.value,\n curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(),\n map = {},\n out = output.rem,\n tuples = pulse.rem;\n let i, n, k, f;\n\n // process tuples, output if passes at least one filter\n for (i = 0, n = tuples.length; i < n; ++i) {\n k = tuples[i]._index;\n map[k] = 1; // build index map\n prev[k] = f = curr[k];\n curr[k] = all;\n if (f !== all) out.push(k);\n }\n\n // remove from dimensional indices\n for (k in indices) {\n indices[k].remove(n, map);\n }\n this.reindex(pulse, n, map);\n return map;\n },\n // reindex filters and indices after propagation completes\n reindex(pulse, num, map) {\n const indices = this._indices,\n bits = this.value;\n pulse.runAfter(() => {\n const indexMap = bits.remove(num, map);\n for (const key in indices) indices[key].reindex(indexMap);\n });\n },\n update(_, pulse, output) {\n const dims = this._dims,\n query = _.query,\n stamp = pulse.stamp,\n m = dims.length;\n let mask = 0,\n i,\n q;\n\n // survey how many queries have changed\n output.filters = 0;\n for (q = 0; q < m; ++q) {\n if (_.modified('query', q)) {\n i = q;\n ++mask;\n }\n }\n if (mask === 1) {\n // only one query changed, use more efficient update\n mask = dims[i].one;\n this.incrementOne(dims[i], query[i], output.add, output.rem);\n } else {\n // multiple queries changed, perform full record keeping\n for (q = 0, mask = 0; q < m; ++q) {\n if (!_.modified('query', q)) continue;\n mask |= dims[q].one;\n this.incrementAll(dims[q], query[q], stamp, output.add);\n output.rem = output.add; // duplicate add/rem for downstream resolve\n }\n }\n\n return mask;\n },\n incrementAll(dim, query, stamp, out) {\n const bits = this.value,\n seen = bits.seen(),\n curr = bits.curr(),\n prev = bits.prev(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one;\n let i, j, k;\n\n // Fast incremental update based on previous lo index.\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n }\n\n // Fast incremental update based on previous hi index.\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n }\n dim.range = query.slice();\n },\n incrementOne(dim, query, add, rem) {\n const bits = this.value,\n curr = bits.curr(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one;\n let i, j, k;\n\n // Fast incremental update based on previous lo index.\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n\n // Fast incremental update based on previous hi index.\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n dim.range = query.slice();\n }\n});\n\n/**\n * Selectively filters tuples by resolving against a filter bitmap.\n * Useful for processing the output of a cross-filter transform.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.ignore - A bit mask indicating which filters to ignore.\n * @param {object} params.filter - The per-tuple filter bitmaps. Typically this\n * parameter value is a reference to a {@link CrossFilter} transform.\n */\nfunction ResolveFilter(params) {\n Transform.call(this, null, params);\n}\nResolveFilter.Definition = {\n 'type': 'ResolveFilter',\n 'metadata': {},\n 'params': [{\n 'name': 'ignore',\n 'type': 'number',\n 'required': true,\n 'description': 'A bit mask indicating which filters to ignore.'\n }, {\n 'name': 'filter',\n 'type': 'object',\n 'required': true,\n 'description': 'Per-tuple filter bitmaps from a CrossFilter transform.'\n }]\n};\ninherits(ResolveFilter, Transform, {\n transform(_, pulse) {\n const ignore = ~(_.ignore || 0),\n // bit mask where zeros -> dims to ignore\n bitmap = _.filter,\n mask = bitmap.mask;\n\n // exit early if no relevant filter changes\n if ((mask & ignore) === 0) return pulse.StopPropagation;\n const output = pulse.fork(pulse.ALL),\n data = bitmap.data(),\n curr = bitmap.curr(),\n prev = bitmap.prev(),\n pass = k => !(curr[k] & ignore) ? data[k] : null;\n\n // propagate all mod tuples that pass the filter\n output.filter(output.MOD, pass);\n\n // determine add & rem tuples via filter functions\n // for efficiency, we do *not* populate new arrays,\n // instead we add filter functions applied downstream\n\n if (!(mask & mask - 1)) {\n // only one filter changed\n output.filter(output.ADD, pass);\n output.filter(output.REM, k => (curr[k] & ignore) === mask ? data[k] : null);\n } else {\n // multiple filters changed\n output.filter(output.ADD, k => {\n const c = curr[k] & ignore,\n f = !c && c ^ prev[k] & ignore;\n return f ? data[k] : null;\n });\n output.filter(output.REM, k => {\n const c = curr[k] & ignore,\n f = c && !(c ^ (c ^ prev[k] & ignore));\n return f ? data[k] : null;\n });\n }\n\n // add filter to source data in case of reflow...\n return output.filter(output.SOURCE, t => pass(t._index));\n }\n});\n\nexport { CrossFilter as crossfilter, ResolveFilter as resolvefilter };\n","export default function permute(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n","import { error, toSet, isFunction, isString, hasOwnProperty } from 'vega-util';\n\nconst RawCode = 'RawCode';\nconst Literal = 'Literal';\nconst Property = 'Property';\nconst Identifier = 'Identifier';\nconst ArrayExpression = 'ArrayExpression';\nconst BinaryExpression = 'BinaryExpression';\nconst CallExpression = 'CallExpression';\nconst ConditionalExpression = 'ConditionalExpression';\nconst LogicalExpression = 'LogicalExpression';\nconst MemberExpression = 'MemberExpression';\nconst ObjectExpression = 'ObjectExpression';\nconst UnaryExpression = 'UnaryExpression';\nfunction ASTNode(type) {\n this.type = type;\n}\nASTNode.prototype.visit = function (visitor) {\n let c, i, n;\n if (visitor(this)) return 1;\n for (c = children(this), i = 0, n = c.length; i < n; ++i) {\n if (c[i].visit(visitor)) return 1;\n }\n};\nfunction children(node) {\n switch (node.type) {\n case ArrayExpression:\n return node.elements;\n case BinaryExpression:\n case LogicalExpression:\n return [node.left, node.right];\n case CallExpression:\n return [node.callee].concat(node.arguments);\n case ConditionalExpression:\n return [node.test, node.consequent, node.alternate];\n case MemberExpression:\n return [node.object, node.property];\n case ObjectExpression:\n return node.properties;\n case Property:\n return [node.key, node.value];\n case UnaryExpression:\n return [node.argument];\n case Identifier:\n case Literal:\n case RawCode:\n default:\n return [];\n }\n}\n\n/*\n The following expression parser is based on Esprima (http://esprima.org/).\n Original header comment and license for Esprima is included here:\n\n Copyright (C) 2013 Ariya Hidayat \n Copyright (C) 2013 Thaddee Tyl \n Copyright (C) 2013 Mathias Bynens \n Copyright (C) 2012 Ariya Hidayat \n Copyright (C) 2012 Mathias Bynens \n Copyright (C) 2012 Joost-Wim Boekesteijn \n Copyright (C) 2012 Kris Kowal \n Copyright (C) 2012 Yusuke Suzuki \n Copyright (C) 2012 Arpad Borsos \n Copyright (C) 2011 Ariya Hidayat \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nvar TokenName, source, index, length, lookahead;\nvar TokenBooleanLiteral = 1,\n TokenEOF = 2,\n TokenIdentifier = 3,\n TokenKeyword = 4,\n TokenNullLiteral = 5,\n TokenNumericLiteral = 6,\n TokenPunctuator = 7,\n TokenStringLiteral = 8,\n TokenRegularExpression = 9;\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\nvar SyntaxArrayExpression = 'ArrayExpression',\n SyntaxBinaryExpression = 'BinaryExpression',\n SyntaxCallExpression = 'CallExpression',\n SyntaxConditionalExpression = 'ConditionalExpression',\n SyntaxIdentifier = 'Identifier',\n SyntaxLiteral = 'Literal',\n SyntaxLogicalExpression = 'LogicalExpression',\n SyntaxMemberExpression = 'MemberExpression',\n SyntaxObjectExpression = 'ObjectExpression',\n SyntaxProperty = 'Property',\n SyntaxUnaryExpression = 'UnaryExpression';\n\n// Error messages should be identical to V8.\nvar MessageUnexpectedToken = 'Unexpected token %0',\n MessageUnexpectedNumber = 'Unexpected number',\n MessageUnexpectedString = 'Unexpected string',\n MessageUnexpectedIdentifier = 'Unexpected identifier',\n MessageUnexpectedReserved = 'Unexpected reserved word',\n MessageUnexpectedEOS = 'Unexpected end of input',\n MessageInvalidRegExp = 'Invalid regular expression',\n MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\nvar ILLEGAL = 'ILLEGAL',\n DISABLED = 'Disabled.';\n\n// See also tools/generate-unicode-regex.py.\nvar RegexNonAsciiIdentifierStart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'),\n // eslint-disable-next-line no-misleading-character-class\n RegexNonAsciiIdentifierPart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]');\n\n// Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n /* istanbul ignore next */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n}\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 && ch <= 0x39; // 0..9\n}\n\nfunction isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\nfunction isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n}\n\n// 7.2 White Space\n\nfunction isWhiteSpace(ch) {\n return ch === 0x20 || ch === 0x09 || ch === 0x0B || ch === 0x0C || ch === 0xA0 || ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0;\n}\n\n// 7.3 Line Terminators\n\nfunction isLineTerminator(ch) {\n return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029;\n}\n\n// 7.6 Identifier Names and Identifiers\n\nfunction isIdentifierStart(ch) {\n return ch === 0x24 || ch === 0x5F ||\n // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A ||\n // A..Z\n ch >= 0x61 && ch <= 0x7A ||\n // a..z\n ch === 0x5C ||\n // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch));\n}\nfunction isIdentifierPart(ch) {\n return ch === 0x24 || ch === 0x5F ||\n // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A ||\n // A..Z\n ch >= 0x61 && ch <= 0x7A ||\n // a..z\n ch >= 0x30 && ch <= 0x39 ||\n // 0..9\n ch === 0x5C ||\n // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch));\n}\n\n// 7.6.1.1 Keywords\n\nconst keywords = {\n 'if': 1,\n 'in': 1,\n 'do': 1,\n 'var': 1,\n 'for': 1,\n 'new': 1,\n 'try': 1,\n 'let': 1,\n 'this': 1,\n 'else': 1,\n 'case': 1,\n 'void': 1,\n 'with': 1,\n 'enum': 1,\n 'while': 1,\n 'break': 1,\n 'catch': 1,\n 'throw': 1,\n 'const': 1,\n 'yield': 1,\n 'class': 1,\n 'super': 1,\n 'return': 1,\n 'typeof': 1,\n 'delete': 1,\n 'switch': 1,\n 'export': 1,\n 'import': 1,\n 'public': 1,\n 'static': 1,\n 'default': 1,\n 'finally': 1,\n 'extends': 1,\n 'package': 1,\n 'private': 1,\n 'function': 1,\n 'continue': 1,\n 'debugger': 1,\n 'interface': 1,\n 'protected': 1,\n 'instanceof': 1,\n 'implements': 1\n};\nfunction skipComment() {\n while (index < length) {\n const ch = source.charCodeAt(index);\n if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n ++index;\n } else {\n break;\n }\n }\n}\nfunction scanHexEscape(prefix) {\n var i,\n len,\n ch,\n code = 0;\n len = prefix === 'u' ? 4 : 2;\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n return String.fromCharCode(code);\n}\nfunction scanUnicodeCodePointEscape() {\n var ch, code, cu1, cu2;\n ch = source[index];\n code = 0;\n\n // At least, one hex digit is required.\n if (ch === '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n while (index < length) {\n ch = source[index++];\n if (!isHexDigit(ch)) {\n break;\n }\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n if (code > 0x10FFFF || ch !== '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n // UTF-16 Encoding\n if (code <= 0xFFFF) {\n return String.fromCharCode(code);\n }\n cu1 = (code - 0x10000 >> 10) + 0xD800;\n cu2 = (code - 0x10000 & 1023) + 0xDC00;\n return String.fromCharCode(cu1, cu2);\n}\nfunction getEscapedIdentifier() {\n var ch, id;\n ch = source.charCodeAt(index++);\n id = String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id = ch;\n }\n while (index < length) {\n ch = source.charCodeAt(index);\n if (!isIdentifierPart(ch)) {\n break;\n }\n ++index;\n id += String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n id = id.substr(0, id.length - 1);\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id += ch;\n }\n }\n return id;\n}\nfunction getIdentifier() {\n var start, ch;\n start = index++;\n while (index < length) {\n ch = source.charCodeAt(index);\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getEscapedIdentifier();\n }\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n return source.slice(start, index);\n}\nfunction scanIdentifier() {\n var start, id, type;\n start = index;\n\n // Backslash (U+005C) starts an escaped character.\n id = source.charCodeAt(index) === 0x5C ? getEscapedIdentifier() : getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n if (id.length === 1) {\n type = TokenIdentifier;\n } else if (keywords.hasOwnProperty(id)) {\n // eslint-disable-line no-prototype-builtins\n type = TokenKeyword;\n } else if (id === 'null') {\n type = TokenNullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = TokenBooleanLiteral;\n } else {\n type = TokenIdentifier;\n }\n return {\n type: type,\n value: id,\n start: start,\n end: index\n };\n}\n\n// 7.7 Punctuators\n\nfunction scanPunctuator() {\n var start = index,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2,\n ch3,\n ch4;\n switch (code) {\n // Check for most common single-character punctuators.\n case 0x2E: // . dot\n case 0x28: // ( open bracket\n case 0x29: // ) close bracket\n case 0x3B: // ; semicolon\n case 0x2C: // , comma\n case 0x7B: // { open curly brace\n case 0x7D: // } close curly brace\n case 0x5B: // [\n case 0x5D: // ]\n case 0x3A: // :\n case 0x3F: // ?\n case 0x7E:\n // ~\n ++index;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code),\n start: start,\n end: index\n };\n default:\n code2 = source.charCodeAt(index + 1);\n\n // '=' (U+003D) marks an assignment or comparison operator.\n if (code2 === 0x3D) {\n switch (code) {\n case 0x2B: // +\n case 0x2D: // -\n case 0x2F: // /\n case 0x3C: // <\n case 0x3E: // >\n case 0x5E: // ^\n case 0x7C: // |\n case 0x25: // %\n case 0x26: // &\n case 0x2A:\n // *\n index += 2;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n start: start,\n end: index\n };\n case 0x21: // !\n case 0x3D:\n // =\n index += 2;\n\n // !== and ===\n if (source.charCodeAt(index) === 0x3D) {\n ++index;\n }\n return {\n type: TokenPunctuator,\n value: source.slice(start, index),\n start: start,\n end: index\n };\n }\n }\n }\n\n // 4-character punctuator: >>>=\n\n ch4 = source.substr(index, 4);\n if (ch4 === '>>>=') {\n index += 4;\n return {\n type: TokenPunctuator,\n value: ch4,\n start: start,\n end: index\n };\n }\n\n // 3-character punctuators: === !== >>> <<= >>=\n\n ch3 = ch4.substr(0, 3);\n if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n index += 3;\n return {\n type: TokenPunctuator,\n value: ch3,\n start: start,\n end: index\n };\n }\n\n // Other 2-character punctuators: ++ -- << >> && ||\n ch2 = ch3.substr(0, 2);\n if (ch1 === ch2[1] && '+-<>&|'.indexOf(ch1) >= 0 || ch2 === '=>') {\n index += 2;\n return {\n type: TokenPunctuator,\n value: ch2,\n start: start,\n end: index\n };\n }\n if (ch2 === '//') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n // 1-character punctuators: < > = ! + - * % & | ^ /\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;\n return {\n type: TokenPunctuator,\n value: ch1,\n start: start,\n end: index\n };\n }\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n}\n\n// 7.8.3 Numeric Literals\n\nfunction scanHexLiteral(start) {\n let number = '';\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n if (number.length === 0) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenNumericLiteral,\n value: parseInt('0x' + number, 16),\n start: start,\n end: index\n };\n}\nfunction scanOctalLiteral(start) {\n let number = '0' + source[index++];\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenNumericLiteral,\n value: parseInt(number, 8),\n octal: true,\n start: start,\n end: index\n };\n}\nfunction scanNumericLiteral() {\n var number, start, ch;\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || ch === '.', 'Numeric literal must start with a decimal digit or a decimal point');\n start = index;\n number = '';\n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex number starts with '0x'.\n // Octal number starts with '0'.\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n if (isOctalDigit(ch)) {\n return scanOctalLiteral(start);\n }\n\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenNumericLiteral,\n value: parseFloat(number),\n start: start,\n end: index\n };\n}\n\n// 7.8.4 String Literals\n\nfunction scanStringLiteral() {\n var str = '',\n quote,\n start,\n ch,\n code,\n octal = false;\n quote = source[index];\n assert(quote === '\\'' || quote === '\"', 'String literal must starts with a quote');\n start = index;\n ++index;\n while (index < length) {\n ch = source[index++];\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n str += scanHexEscape(ch);\n }\n break;\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n default:\n if (isOctalDigit(ch)) {\n code = '01234567'.indexOf(ch);\n\n // \\0 is not octal escape sequence\n if (code !== 0) {\n octal = true;\n }\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]);\n\n // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n if ('0123'.indexOf(ch) >= 0 && index < length && isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n str += String.fromCharCode(code);\n } else {\n str += ch;\n }\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n if (quote !== '') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenStringLiteral,\n value: str,\n octal: octal,\n start: start,\n end: index\n };\n}\nfunction testRegExp(pattern, flags) {\n let tmp = pattern;\n if (flags.indexOf('u') >= 0) {\n // Replace each astral symbol and every Unicode code point\n // escape sequence with a single ASCII symbol to avoid throwing on\n // regular expressions that are only valid in combination with the\n // `/u` flag.\n // Note: replacing with the ASCII symbol `x` might cause false\n // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n // perfectly valid pattern that is equivalent to `[a-b]`, but it\n // would be replaced by `[x-b]` which throws an error.\n tmp = tmp.replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, ($0, $1) => {\n if (parseInt($1, 16) <= 0x10FFFF) {\n return 'x';\n }\n throwError({}, MessageInvalidRegExp);\n }).replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n }\n\n // First, detect invalid regular expressions.\n try {\n new RegExp(tmp);\n } catch (e) {\n throwError({}, MessageInvalidRegExp);\n }\n\n // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n}\nfunction scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n classMarker = false;\n terminated = false;\n while (index < length) {\n ch = source[index++];\n str += ch;\n if (ch === '\\\\') {\n ch = source[index++];\n // ECMA-262 7.8.5\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n }\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n if (!terminated) {\n throwError({}, MessageUnterminatedRegExp);\n }\n\n // Exclude leading and trailing slash.\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n}\nfunction scanRegExpFlags() {\n var ch, str, flags;\n str = '';\n flags = '';\n while (index < length) {\n ch = source[index];\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n ++index;\n if (ch === '\\\\' && index < length) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } else {\n flags += ch;\n str += ch;\n }\n }\n if (flags.search(/[^gimuy]/g) >= 0) {\n throwError({}, MessageInvalidRegExp, flags);\n }\n return {\n value: flags,\n literal: str\n };\n}\nfunction scanRegExp() {\n var start, body, flags, value;\n lookahead = null;\n skipComment();\n start = index;\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n}\nfunction isIdentifierName(token) {\n return token.type === TokenIdentifier || token.type === TokenKeyword || token.type === TokenBooleanLiteral || token.type === TokenNullLiteral;\n}\nfunction advance() {\n skipComment();\n if (index >= length) {\n return {\n type: TokenEOF,\n start: index,\n end: index\n };\n }\n const ch = source.charCodeAt(index);\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n }\n\n // Very common: ( and ) and ;\n if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (U+0027) or double quote (U+0022).\n if (ch === 0x27 || ch === 0x22) {\n return scanStringLiteral();\n }\n\n // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n if (ch === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n}\nfunction lex() {\n const token = lookahead;\n index = token.end;\n lookahead = advance();\n index = token.end;\n return token;\n}\nfunction peek() {\n const pos = index;\n lookahead = advance();\n index = pos;\n}\nfunction finishArrayExpression(elements) {\n const node = new ASTNode(SyntaxArrayExpression);\n node.elements = elements;\n return node;\n}\nfunction finishBinaryExpression(operator, left, right) {\n const node = new ASTNode(operator === '||' || operator === '&&' ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n node.operator = operator;\n node.left = left;\n node.right = right;\n return node;\n}\nfunction finishCallExpression(callee, args) {\n const node = new ASTNode(SyntaxCallExpression);\n node.callee = callee;\n node.arguments = args;\n return node;\n}\nfunction finishConditionalExpression(test, consequent, alternate) {\n const node = new ASTNode(SyntaxConditionalExpression);\n node.test = test;\n node.consequent = consequent;\n node.alternate = alternate;\n return node;\n}\nfunction finishIdentifier(name) {\n const node = new ASTNode(SyntaxIdentifier);\n node.name = name;\n return node;\n}\nfunction finishLiteral(token) {\n const node = new ASTNode(SyntaxLiteral);\n node.value = token.value;\n node.raw = source.slice(token.start, token.end);\n if (token.regex) {\n if (node.raw === '//') {\n node.raw = '/(?:)/';\n }\n node.regex = token.regex;\n }\n return node;\n}\nfunction finishMemberExpression(accessor, object, property) {\n const node = new ASTNode(SyntaxMemberExpression);\n node.computed = accessor === '[';\n node.object = object;\n node.property = property;\n if (!node.computed) property.member = true;\n return node;\n}\nfunction finishObjectExpression(properties) {\n const node = new ASTNode(SyntaxObjectExpression);\n node.properties = properties;\n return node;\n}\nfunction finishProperty(kind, key, value) {\n const node = new ASTNode(SyntaxProperty);\n node.key = key;\n node.value = value;\n node.kind = kind;\n return node;\n}\nfunction finishUnaryExpression(operator, argument) {\n const node = new ASTNode(SyntaxUnaryExpression);\n node.operator = operator;\n node.argument = argument;\n node.prefix = true;\n return node;\n}\n\n// Throw an exception\n\nfunction throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(/%(\\d)/g, (whole, index) => {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n });\n error = new Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n}\n\n// Throw an exception because of the token.\n\nfunction throwUnexpected(token) {\n if (token.type === TokenEOF) {\n throwError(token, MessageUnexpectedEOS);\n }\n if (token.type === TokenNumericLiteral) {\n throwError(token, MessageUnexpectedNumber);\n }\n if (token.type === TokenStringLiteral) {\n throwError(token, MessageUnexpectedString);\n }\n if (token.type === TokenIdentifier) {\n throwError(token, MessageUnexpectedIdentifier);\n }\n if (token.type === TokenKeyword) {\n throwError(token, MessageUnexpectedReserved);\n }\n\n // BooleanLiteral, NullLiteral, or Punctuator.\n throwError(token, MessageUnexpectedToken, token.value);\n}\n\n// Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\nfunction expect(value) {\n const token = lex();\n if (token.type !== TokenPunctuator || token.value !== value) {\n throwUnexpected(token);\n }\n}\n\n// Return true if the next token matches the specified punctuator.\n\nfunction match(value) {\n return lookahead.type === TokenPunctuator && lookahead.value === value;\n}\n\n// Return true if the next token matches the specified keyword\n\nfunction matchKeyword(keyword) {\n return lookahead.type === TokenKeyword && lookahead.value === keyword;\n}\n\n// 11.1.4 Array Initialiser\n\nfunction parseArrayInitialiser() {\n const elements = [];\n index = lookahead.start;\n expect('[');\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseConditionalExpression());\n if (!match(']')) {\n expect(',');\n }\n }\n }\n lex();\n return finishArrayExpression(elements);\n}\n\n// 11.1.5 Object Initialiser\n\nfunction parseObjectPropertyKey() {\n index = lookahead.start;\n const token = lex();\n\n // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n if (token.octal) {\n throwError(token, MessageStrictOctalLiteral);\n }\n return finishLiteral(token);\n }\n return finishIdentifier(token.value);\n}\nfunction parseObjectProperty() {\n var token, key, id, value;\n index = lookahead.start;\n token = lookahead;\n if (token.type === TokenIdentifier) {\n id = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', id, value);\n }\n if (token.type === TokenEOF || token.type === TokenPunctuator) {\n throwUnexpected(token);\n } else {\n key = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', key, value);\n }\n}\nfunction parseObjectInitialiser() {\n var properties = [],\n property,\n name,\n key,\n map = {},\n toString = String;\n index = lookahead.start;\n expect('{');\n while (!match('}')) {\n property = parseObjectProperty();\n if (property.key.type === SyntaxIdentifier) {\n name = property.key.name;\n } else {\n name = toString(property.key.value);\n }\n key = '$' + name;\n if (Object.prototype.hasOwnProperty.call(map, key)) {\n throwError({}, MessageStrictDuplicateProperty);\n } else {\n map[key] = true;\n }\n properties.push(property);\n if (!match('}')) {\n expect(',');\n }\n }\n expect('}');\n return finishObjectExpression(properties);\n}\n\n// 11.1.6 The Grouping Operator\n\nfunction parseGroupExpression() {\n expect('(');\n const expr = parseExpression();\n expect(')');\n return expr;\n}\n\n// 11.1 Primary Expressions\n\nconst legalKeywords = {\n 'if': 1\n};\nfunction parsePrimaryExpression() {\n var type, token, expr;\n if (match('(')) {\n return parseGroupExpression();\n }\n if (match('[')) {\n return parseArrayInitialiser();\n }\n if (match('{')) {\n return parseObjectInitialiser();\n }\n type = lookahead.type;\n index = lookahead.start;\n if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n expr = finishIdentifier(lex().value);\n } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n if (lookahead.octal) {\n throwError(lookahead, MessageStrictOctalLiteral);\n }\n expr = finishLiteral(lex());\n } else if (type === TokenKeyword) {\n throw new Error(DISABLED);\n } else if (type === TokenBooleanLiteral) {\n token = lex();\n token.value = token.value === 'true';\n expr = finishLiteral(token);\n } else if (type === TokenNullLiteral) {\n token = lex();\n token.value = null;\n expr = finishLiteral(token);\n } else if (match('/') || match('/=')) {\n expr = finishLiteral(scanRegExp());\n peek();\n } else {\n throwUnexpected(lex());\n }\n return expr;\n}\n\n// 11.2 Left-Hand-Side Expressions\n\nfunction parseArguments() {\n const args = [];\n expect('(');\n if (!match(')')) {\n while (index < length) {\n args.push(parseConditionalExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n expect(')');\n return args;\n}\nfunction parseNonComputedProperty() {\n index = lookahead.start;\n const token = lex();\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n return finishIdentifier(token.value);\n}\nfunction parseNonComputedMember() {\n expect('.');\n return parseNonComputedProperty();\n}\nfunction parseComputedMember() {\n expect('[');\n const expr = parseExpression();\n expect(']');\n return expr;\n}\nfunction parseLeftHandSideExpressionAllowCall() {\n var expr, args, property;\n expr = parsePrimaryExpression();\n for (;;) {\n if (match('.')) {\n property = parseNonComputedMember();\n expr = finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = finishCallExpression(expr, args);\n } else if (match('[')) {\n property = parseComputedMember();\n expr = finishMemberExpression('[', expr, property);\n } else {\n break;\n }\n }\n return expr;\n}\n\n// 11.3 Postfix Expressions\n\nfunction parsePostfixExpression() {\n const expr = parseLeftHandSideExpressionAllowCall();\n if (lookahead.type === TokenPunctuator) {\n if (match('++') || match('--')) {\n throw new Error(DISABLED);\n }\n }\n return expr;\n}\n\n// 11.4 Unary Operators\n\nfunction parseUnaryExpression() {\n var token, expr;\n if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n throw new Error(DISABLED);\n } else if (match('+') || match('-') || match('~') || match('!')) {\n token = lex();\n expr = parseUnaryExpression();\n expr = finishUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw new Error(DISABLED);\n } else {\n expr = parsePostfixExpression();\n }\n return expr;\n}\nfunction binaryPrecedence(token) {\n let prec = 0;\n if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n return 0;\n }\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n case '&&':\n prec = 2;\n break;\n case '|':\n prec = 3;\n break;\n case '^':\n prec = 4;\n break;\n case '&':\n prec = 5;\n break;\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n case 'in':\n prec = 7;\n break;\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n case '+':\n case '-':\n prec = 9;\n break;\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n }\n return prec;\n}\n\n// 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\nfunction parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n marker = lookahead;\n left = parseUnaryExpression();\n token = lookahead;\n prec = binaryPrecedence(token);\n if (prec === 0) {\n return left;\n }\n token.prec = prec;\n lex();\n markers = [marker, lookahead];\n right = parseUnaryExpression();\n stack = [left, token, right];\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n // Reduce: make a binary expression from the three topmost entries.\n while (stack.length > 2 && prec <= stack[stack.length - 2].prec) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = finishBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = parseUnaryExpression();\n stack.push(expr);\n }\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n while (i > 1) {\n markers.pop();\n expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n return expr;\n}\n\n// 11.12 Conditional Operator\n\nfunction parseConditionalExpression() {\n var expr, consequent, alternate;\n expr = parseBinaryExpression();\n if (match('?')) {\n lex();\n consequent = parseConditionalExpression();\n expect(':');\n alternate = parseConditionalExpression();\n expr = finishConditionalExpression(expr, consequent, alternate);\n }\n return expr;\n}\n\n// 11.14 Comma Operator\n\nfunction parseExpression() {\n const expr = parseConditionalExpression();\n if (match(',')) {\n throw new Error(DISABLED); // no sequence expressions\n }\n\n return expr;\n}\nfunction parser (code) {\n source = code;\n index = 0;\n length = source.length;\n lookahead = null;\n peek();\n const expr = parseExpression();\n if (lookahead.type !== TokenEOF) {\n throw new Error('Unexpect token after expression.');\n }\n return expr;\n}\n\nvar Constants = {\n NaN: 'NaN',\n E: 'Math.E',\n LN2: 'Math.LN2',\n LN10: 'Math.LN10',\n LOG2E: 'Math.LOG2E',\n LOG10E: 'Math.LOG10E',\n PI: 'Math.PI',\n SQRT1_2: 'Math.SQRT1_2',\n SQRT2: 'Math.SQRT2',\n MIN_VALUE: 'Number.MIN_VALUE',\n MAX_VALUE: 'Number.MAX_VALUE'\n};\n\nfunction Functions (codegen) {\n function fncall(name, args, cast, type) {\n let obj = codegen(args[0]);\n if (cast) {\n obj = cast + '(' + obj + ')';\n if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n }\n return obj + '.' + name + (type < 0 ? '' : type === 0 ? '()' : '(' + args.slice(1).map(codegen).join(',') + ')');\n }\n function fn(name, cast, type) {\n return args => fncall(name, args, cast, type);\n }\n const DATE = 'new Date',\n STRING = 'String',\n REGEXP = 'RegExp';\n return {\n // MATH functions\n isNaN: 'Number.isNaN',\n isFinite: 'Number.isFinite',\n abs: 'Math.abs',\n acos: 'Math.acos',\n asin: 'Math.asin',\n atan: 'Math.atan',\n atan2: 'Math.atan2',\n ceil: 'Math.ceil',\n cos: 'Math.cos',\n exp: 'Math.exp',\n floor: 'Math.floor',\n hypot: 'Math.hypot',\n log: 'Math.log',\n max: 'Math.max',\n min: 'Math.min',\n pow: 'Math.pow',\n random: 'Math.random',\n round: 'Math.round',\n sin: 'Math.sin',\n sqrt: 'Math.sqrt',\n tan: 'Math.tan',\n clamp: function (args) {\n if (args.length < 3) error('Missing arguments to clamp function.');\n if (args.length > 3) error('Too many arguments to clamp function.');\n const a = args.map(codegen);\n return 'Math.max(' + a[1] + ', Math.min(' + a[2] + ',' + a[0] + '))';\n },\n // DATE functions\n now: 'Date.now',\n utc: 'Date.UTC',\n datetime: DATE,\n date: fn('getDate', DATE, 0),\n day: fn('getDay', DATE, 0),\n year: fn('getFullYear', DATE, 0),\n month: fn('getMonth', DATE, 0),\n hours: fn('getHours', DATE, 0),\n minutes: fn('getMinutes', DATE, 0),\n seconds: fn('getSeconds', DATE, 0),\n milliseconds: fn('getMilliseconds', DATE, 0),\n time: fn('getTime', DATE, 0),\n timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n utcdate: fn('getUTCDate', DATE, 0),\n utcday: fn('getUTCDay', DATE, 0),\n utcyear: fn('getUTCFullYear', DATE, 0),\n utcmonth: fn('getUTCMonth', DATE, 0),\n utchours: fn('getUTCHours', DATE, 0),\n utcminutes: fn('getUTCMinutes', DATE, 0),\n utcseconds: fn('getUTCSeconds', DATE, 0),\n utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n // sequence functions\n length: fn('length', null, -1),\n // STRING functions\n parseFloat: 'parseFloat',\n parseInt: 'parseInt',\n upper: fn('toUpperCase', STRING, 0),\n lower: fn('toLowerCase', STRING, 0),\n substring: fn('substring', STRING),\n split: fn('split', STRING),\n trim: fn('trim', STRING, 0),\n // REGEXP functions\n regexp: REGEXP,\n test: fn('test', REGEXP),\n // Control Flow functions\n if: function (args) {\n if (args.length < 3) error('Missing arguments to if function.');\n if (args.length > 3) error('Too many arguments to if function.');\n const a = args.map(codegen);\n return '(' + a[0] + '?' + a[1] + ':' + a[2] + ')';\n }\n };\n}\n\nfunction stripQuotes(s) {\n const n = s && s.length - 1;\n return n && (s[0] === '\"' && s[n] === '\"' || s[0] === '\\'' && s[n] === '\\'') ? s.slice(1, -1) : s;\n}\nfunction codegen (opt) {\n opt = opt || {};\n const allowed = opt.allowed ? toSet(opt.allowed) : {},\n forbidden = opt.forbidden ? toSet(opt.forbidden) : {},\n constants = opt.constants || Constants,\n functions = (opt.functions || Functions)(visit),\n globalvar = opt.globalvar,\n fieldvar = opt.fieldvar,\n outputGlobal = isFunction(globalvar) ? globalvar : id => `${globalvar}[\"${id}\"]`;\n let globals = {},\n fields = {},\n memberDepth = 0;\n function visit(ast) {\n if (isString(ast)) return ast;\n const generator = Generators[ast.type];\n if (generator == null) error('Unsupported type: ' + ast.type);\n return generator(ast);\n }\n const Generators = {\n Literal: n => n.raw,\n Identifier: n => {\n const id = n.name;\n if (memberDepth > 0) {\n return id;\n } else if (hasOwnProperty(forbidden, id)) {\n return error('Illegal identifier: ' + id);\n } else if (hasOwnProperty(constants, id)) {\n return constants[id];\n } else if (hasOwnProperty(allowed, id)) {\n return id;\n } else {\n globals[id] = 1;\n return outputGlobal(id);\n }\n },\n MemberExpression: n => {\n const d = !n.computed,\n o = visit(n.object);\n if (d) memberDepth += 1;\n const p = visit(n.property);\n if (o === fieldvar) {\n // strip quotes to sanitize field name (#1653)\n fields[stripQuotes(p)] = 1;\n }\n if (d) memberDepth -= 1;\n return o + (d ? '.' + p : '[' + p + ']');\n },\n CallExpression: n => {\n if (n.callee.type !== 'Identifier') {\n error('Illegal callee type: ' + n.callee.type);\n }\n const callee = n.callee.name,\n args = n.arguments,\n fn = hasOwnProperty(functions, callee) && functions[callee];\n if (!fn) error('Unrecognized function: ' + callee);\n return isFunction(fn) ? fn(args) : fn + '(' + args.map(visit).join(',') + ')';\n },\n ArrayExpression: n => '[' + n.elements.map(visit).join(',') + ']',\n BinaryExpression: n => '(' + visit(n.left) + ' ' + n.operator + ' ' + visit(n.right) + ')',\n UnaryExpression: n => '(' + n.operator + visit(n.argument) + ')',\n ConditionalExpression: n => '(' + visit(n.test) + '?' + visit(n.consequent) + ':' + visit(n.alternate) + ')',\n LogicalExpression: n => '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n ObjectExpression: n => '{' + n.properties.map(visit).join(',') + '}',\n Property: n => {\n memberDepth += 1;\n const k = visit(n.key);\n memberDepth -= 1;\n return k + ':' + visit(n.value);\n }\n };\n function codegen(ast) {\n const result = {\n code: visit(ast),\n globals: Object.keys(globals),\n fields: Object.keys(fields)\n };\n globals = {};\n fields = {};\n return result;\n }\n codegen.functions = functions;\n codegen.constants = constants;\n return codegen;\n}\n\nexport { ASTNode, ArrayExpression, BinaryExpression, CallExpression, ConditionalExpression, Identifier, Literal, LogicalExpression, MemberExpression, ObjectExpression, Property, RawCode, UnaryExpression, codegen as codegenExpression, Constants as constants, Functions as functions, parser as parseExpression };\n","import { bisector, union, intersection } from 'd3-array';\nimport { field, isDate, toNumber, isArray, inrange, extend, array, error, peek, hasOwnProperty } from 'vega-util';\nimport { Literal } from 'vega-expression';\n\nconst Intersect = 'intersect';\nconst Union = 'union';\nconst VlMulti = 'vlMulti';\nconst VlPoint = 'vlPoint';\nconst Or = 'or';\nconst And = 'and';\nconst SelectionId = '_vgsid_';\nconst $selectionId = field(SelectionId);\n\nconst TYPE_ENUM = 'E',\n TYPE_RANGE_INC = 'R',\n TYPE_RANGE_EXC = 'R-E',\n TYPE_RANGE_LE = 'R-LE',\n TYPE_RANGE_RE = 'R-RE',\n UNIT_INDEX = 'index:unit';\n\n// TODO: revisit date coercion?\nfunction testPoint(datum, entry) {\n var fields = entry.fields,\n values = entry.values,\n n = fields.length,\n i = 0,\n dval,\n f;\n for (; i < n; ++i) {\n f = fields[i];\n f.getter = field.getter || field(f.field);\n dval = f.getter(datum);\n if (isDate(dval)) dval = toNumber(dval);\n if (isDate(values[i])) values[i] = toNumber(values[i]);\n if (isDate(values[i][0])) values[i] = values[i].map(toNumber);\n if (f.type === TYPE_ENUM) {\n // Enumerated fields can either specify individual values (single/multi selections)\n // or an array of values (interval selections).\n if (isArray(values[i]) ? values[i].indexOf(dval) < 0 : dval !== values[i]) {\n return false;\n }\n } else {\n if (f.type === TYPE_RANGE_INC) {\n if (!inrange(dval, values[i])) return false;\n } else if (f.type === TYPE_RANGE_RE) {\n // Discrete selection of bins test within the range [bin_start, bin_end).\n if (!inrange(dval, values[i], true, false)) return false;\n } else if (f.type === TYPE_RANGE_EXC) {\n // 'R-E'/'R-LE' included for completeness.\n if (!inrange(dval, values[i], false, false)) return false;\n } else if (f.type === TYPE_RANGE_LE) {\n if (!inrange(dval, values[i], false, true)) return false;\n }\n }\n }\n return true;\n}\n\n/**\n * Tests if a tuple is contained within an interactive selection.\n * @param {string} name - The name of the data set representing the selection.\n * Tuples in the dataset are of the form\n * {unit: string, fields: array, values: array<*>}.\n * Fielddef is of the form\n * {field: string, channel: string, type: 'E' | 'R'} where\n * 'type' identifies whether tuples in the dataset enumerate\n * values for the field, or specify a continuous range.\n * @param {object} datum - The tuple to test for inclusion.\n * @param {string} op - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @return {boolean} - True if the datum is in the selection, false otherwise.\n */\nfunction selectionTest(name, datum, op) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === Intersect,\n n = entries.length,\n i = 0,\n entry,\n miss,\n count,\n unit,\n b;\n for (; i < n; ++i) {\n entry = entries[i];\n if (unitIdx && intersect) {\n // multi selections union within the same unit and intersect across units.\n miss = miss || {};\n count = miss[unit = entry.unit] || 0;\n\n // if we've already matched this unit, skip.\n if (count === -1) continue;\n b = testPoint(datum, entry);\n miss[unit] = b ? -1 : ++count;\n\n // if we match and there are no other units return true\n // if we've missed against all tuples in this unit return false\n if (b && unitIdx.size === 1) return true;\n if (!b && count === unitIdx.get(unit).count) return false;\n } else {\n b = testPoint(datum, entry);\n\n // if we find a miss and we do require intersection return false\n // if we find a match and we don't require intersection return true\n if (intersect ^ b) return b;\n }\n }\n\n // if intersecting and we made it here, then we saw no misses\n // if not intersecting, then we saw no matches\n // if no active selections, return false\n return n && intersect;\n}\nconst bisect = bisector($selectionId),\n bisectLeft = bisect.left,\n bisectRight = bisect.right;\nfunction selectionIdTest(name, datum, op) {\n const data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === Intersect,\n value = $selectionId(datum),\n index = bisectLeft(entries, value);\n if (index === entries.length) return false;\n if ($selectionId(entries[index]) !== value) return false;\n if (unitIdx && intersect) {\n if (unitIdx.size === 1) return true;\n if (bisectRight(entries, value) - index < unitIdx.size) return false;\n }\n return true;\n}\n\n/**\n * Maps an array of scene graph items to an array of selection tuples.\n * @param {string} name - The name of the dataset representing the selection.\n * @param {string} base - The base object that generated tuples extend.\n *\n * @returns {array} An array of selection entries for the given unit.\n */\nfunction selectionTuples(array, base) {\n return array.map(x => extend(base.fields ? {\n values: base.fields.map(f => (f.getter || (f.getter = field(f.field)))(x.datum))\n } : {\n [SelectionId]: $selectionId(x.datum)\n }, base));\n}\n\n/**\n * Resolves selection for use as a scale domain or reads via the API.\n * @param {string} name - The name of the dataset representing the selection\n * @param {string} [op='union'] - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @param {boolean} isMulti - Identifies a \"multi\" selection to perform more\n * expensive resolution computation.\n * @param {boolean} vl5 - With Vega-Lite v5, \"multi\" selections are now called \"point\"\n * selections, and thus the resolved tuple should reflect this name.\n * This parameter allows us to reflect this change without triggering\n * a major version bump for Vega.\n * @returns {object} An object of selected fields and values.\n */\nfunction selectionResolve(name, op, isMulti, vl5) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n resolved = {},\n multiRes = {},\n types = {},\n entry,\n fields,\n values,\n unit,\n field,\n value,\n res,\n resUnit,\n type,\n union,\n n = entries.length,\n i = 0,\n j,\n m;\n\n // First union all entries within the same unit.\n for (; i < n; ++i) {\n entry = entries[i];\n unit = entry.unit;\n fields = entry.fields;\n values = entry.values;\n if (fields && values) {\n // Intentional selection stores\n for (j = 0, m = fields.length; j < m; ++j) {\n field = fields[j];\n res = resolved[field.field] || (resolved[field.field] = {});\n resUnit = res[unit] || (res[unit] = []);\n types[field.field] = type = field.type.charAt(0);\n union = ops[`${type}_union`];\n res[unit] = union(resUnit, array(values[j]));\n }\n\n // If the same multi-selection is repeated over views and projected over\n // an encoding, it may operate over different fields making it especially\n // tricky to reliably resolve it. At best, we can de-dupe identical entries\n // but doing so may be more computationally expensive than it is worth.\n // Instead, for now, we simply transform our store representation into\n // a more human-friendly one.\n if (isMulti) {\n resUnit = multiRes[unit] || (multiRes[unit] = []);\n resUnit.push(array(values).reduce((obj, curr, j) => (obj[fields[j].field] = curr, obj), {}));\n }\n } else {\n // Short circuit extensional selectionId stores which hold sorted IDs unique to each unit.\n field = SelectionId;\n value = $selectionId(entry);\n res = resolved[field] || (resolved[field] = {});\n resUnit = res[unit] || (res[unit] = []);\n resUnit.push(value);\n if (isMulti) {\n resUnit = multiRes[unit] || (multiRes[unit] = []);\n resUnit.push({\n [SelectionId]: value\n });\n }\n }\n }\n\n // Then resolve fields across units as per the op.\n op = op || Union;\n if (resolved[SelectionId]) {\n resolved[SelectionId] = ops[`${SelectionId}_${op}`](...Object.values(resolved[SelectionId]));\n } else {\n Object.keys(resolved).forEach(field => {\n resolved[field] = Object.keys(resolved[field]).map(unit => resolved[field][unit]).reduce((acc, curr) => acc === undefined ? curr : ops[`${types[field]}_${op}`](acc, curr));\n });\n }\n entries = Object.keys(multiRes);\n if (isMulti && entries.length) {\n const key = vl5 ? VlPoint : VlMulti;\n resolved[key] = op === Union ? {\n [Or]: entries.reduce((acc, k) => (acc.push(...multiRes[k]), acc), [])\n } : {\n [And]: entries.map(k => ({\n [Or]: multiRes[k]\n }))\n };\n }\n return resolved;\n}\nvar ops = {\n [`${SelectionId}_union`]: union,\n [`${SelectionId}_intersect`]: intersection,\n E_union: function (base, value) {\n if (!base.length) return value;\n var i = 0,\n n = value.length;\n for (; i < n; ++i) if (base.indexOf(value[i]) < 0) base.push(value[i]);\n return base;\n },\n E_intersect: function (base, value) {\n return !base.length ? value : base.filter(v => value.indexOf(v) >= 0);\n },\n R_union: function (base, value) {\n var lo = toNumber(value[0]),\n hi = toNumber(value[1]);\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n if (!base.length) return [lo, hi];\n if (base[0] > lo) base[0] = lo;\n if (base[1] < hi) base[1] = hi;\n return base;\n },\n R_intersect: function (base, value) {\n var lo = toNumber(value[0]),\n hi = toNumber(value[1]);\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n if (!base.length) return [lo, hi];\n if (hi < base[0] || base[1] < lo) {\n return [];\n } else {\n if (base[0] < lo) base[0] = lo;\n if (base[1] > hi) base[1] = hi;\n }\n return base;\n }\n};\n\nconst DataPrefix = ':',\n IndexPrefix = '@';\nfunction selectionVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to selection functions must be a string literal.');\n const data = args[0].value,\n op = args.length >= 2 && peek(args).value,\n field = 'unit',\n indexName = IndexPrefix + field,\n dataName = DataPrefix + data;\n\n // eslint-disable-next-line no-prototype-builtins\n if (op === Intersect && !hasOwnProperty(params, indexName)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n\n // eslint-disable-next-line no-prototype-builtins\n if (!hasOwnProperty(params, dataName)) {\n params[dataName] = scope.getData(data).tuplesRef();\n }\n}\n\nexport { selectionIdTest, selectionResolve, selectionTest, selectionTuples, selectionVisitor };\n","import {InternSet} from \"internmap\";\n\nexport default function union(...others) {\n const set = new InternSet();\n for (const other of others) {\n for (const o of other) {\n set.add(o);\n }\n }\n return set;\n}\n","import { truthy, error, hasOwnProperty, isFunction, isString, stringValue, extend, isArray, isObject, field, peek, identity, array as array$1, isBoolean, isDate, isNumber, isRegExp, toBoolean, toDate, toNumber, toString, flush, lerp, pad, span, inrange, truncate, quarter, utcquarter, extent, clampRange, panLinear, panLog, panPow, panSymlog, zoomLinear, zoomLog, zoomPow, zoomSymlog } from 'vega-util';\nimport { Literal, codegenExpression, constants, functions, parseExpression, CallExpression } from 'vega-expression';\nimport { isRegisteredScale, bandSpace, scale as scale$1, scaleFraction } from 'vega-scale';\nimport { geoArea as geoArea$1, geoBounds as geoBounds$1, geoCentroid as geoCentroid$1 } from 'd3-geo';\nimport { rgb, lab, hcl, hsl } from 'd3-color';\nimport { isTuple } from 'vega-dataflow';\nimport { Gradient, pathRender, pathParse, Bounds, intersect as intersect$1 } from 'vega-scenegraph';\nimport { selectionVisitor, selectionTest, selectionIdTest, selectionResolve, selectionTuples } from 'vega-selections';\nimport { random, cumulativeNormal, cumulativeLogNormal, cumulativeUniform, densityNormal, densityLogNormal, densityUniform, quantileNormal, quantileLogNormal, quantileUniform, sampleNormal, sampleLogNormal, sampleUniform } from 'vega-statistics';\nimport { utcOffset, utcSequence, timeOffset, timeSequence, timeUnitSpecifier, week, utcweek, dayofyear, utcdayofyear } from 'vega-time';\nimport { range as range$1 } from 'd3-array';\n\nfunction data(name) {\n const data = this.context.data[name];\n return data ? data.values.value : [];\n}\nfunction indata(name, field, value) {\n const index = this.context.data[name]['index:' + field],\n entry = index ? index.value.get(value) : undefined;\n return entry ? entry.count : entry;\n}\nfunction setdata(name, tuples) {\n const df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input;\n df.pulse(input, df.changeset().remove(truthy).insert(tuples));\n return 1;\n}\n\nfunction encode (item, name, retval) {\n if (item) {\n const df = this.context.dataflow,\n target = item.mark.source;\n df.pulse(target, df.changeset().encode(item, name));\n }\n return retval !== undefined ? retval : item;\n}\n\nconst wrap = method => function (value, spec) {\n const locale = this.context.dataflow.locale();\n return locale[method](spec)(value);\n};\nconst format = wrap('format');\nconst timeFormat = wrap('timeFormat');\nconst utcFormat = wrap('utcFormat');\nconst timeParse = wrap('timeParse');\nconst utcParse = wrap('utcParse');\nconst dateObj = new Date(2000, 0, 1);\nfunction time(month, day, specifier) {\n if (!Number.isInteger(month) || !Number.isInteger(day)) return '';\n dateObj.setYear(2000);\n dateObj.setMonth(month);\n dateObj.setDate(day);\n return timeFormat.call(this, dateObj, specifier);\n}\nfunction monthFormat(month) {\n return time.call(this, month, 1, '%B');\n}\nfunction monthAbbrevFormat(month) {\n return time.call(this, month, 1, '%b');\n}\nfunction dayFormat(day) {\n return time.call(this, 0, 2 + day, '%A');\n}\nfunction dayAbbrevFormat(day) {\n return time.call(this, 0, 2 + day, '%a');\n}\n\nconst DataPrefix = ':';\nconst IndexPrefix = '@';\nconst ScalePrefix = '%';\nconst SignalPrefix = '$';\n\nfunction dataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) {\n error('First argument to data functions must be a string literal.');\n }\n const data = args[0].value,\n dataName = DataPrefix + data;\n if (!hasOwnProperty(dataName, params)) {\n try {\n params[dataName] = scope.getData(data).tuplesRef();\n } catch (err) {\n // if data set does not exist, there's nothing to track\n }\n }\n}\nfunction indataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to indata must be a string literal.');\n if (args[1].type !== Literal) error('Second argument to indata must be a string literal.');\n const data = args[0].value,\n field = args[1].value,\n indexName = IndexPrefix + field;\n if (!hasOwnProperty(indexName, params)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n}\nfunction scaleVisitor(name, args, scope, params) {\n if (args[0].type === Literal) {\n // add scale dependency\n addScaleDependency(scope, params, args[0].value);\n } else {\n // indirect scale lookup; add all scales as parameters\n for (name in scope.scales) {\n addScaleDependency(scope, params, name);\n }\n }\n}\nfunction addScaleDependency(scope, params, name) {\n const scaleName = ScalePrefix + name;\n if (!hasOwnProperty(params, scaleName)) {\n try {\n params[scaleName] = scope.scaleRef(name);\n } catch (err) {\n // TODO: error handling? warning?\n }\n }\n}\n\nfunction getScale(nameOrFunction, ctx) {\n if (isFunction(nameOrFunction)) {\n return nameOrFunction;\n }\n if (isString(nameOrFunction)) {\n const maybeScale = ctx.scales[nameOrFunction];\n return maybeScale && isRegisteredScale(maybeScale.value) ? maybeScale.value : undefined;\n }\n return undefined;\n}\nfunction internalScaleFunctions(codegen, fnctx, visitors) {\n // add helper method to the 'this' expression function context\n fnctx.__bandwidth = s => s && s.bandwidth ? s.bandwidth() : 0;\n\n // register AST visitors for internal scale functions\n visitors._bandwidth = scaleVisitor;\n visitors._range = scaleVisitor;\n visitors._scale = scaleVisitor;\n\n // resolve scale reference directly to the signal hash argument\n const ref = arg => '_[' + (arg.type === Literal ? stringValue(ScalePrefix + arg.value) : stringValue(ScalePrefix) + '+' + codegen(arg)) + ']';\n\n // define and return internal scale function code generators\n // these internal functions are called by mark encoders\n return {\n _bandwidth: args => `this.__bandwidth(${ref(args[0])})`,\n _range: args => `${ref(args[0])}.range()`,\n _scale: args => `${ref(args[0])}(${codegen(args[1])})`\n };\n}\n\nfunction geoMethod(methodName, globalMethod) {\n return function (projection, geojson, group) {\n if (projection) {\n // projection defined, use it\n const p = getScale(projection, (group || this).context);\n return p && p.path[methodName](geojson);\n } else {\n // projection undefined, use global method\n return globalMethod(geojson);\n }\n };\n}\nconst geoArea = geoMethod('area', geoArea$1);\nconst geoBounds = geoMethod('bounds', geoBounds$1);\nconst geoCentroid = geoMethod('centroid', geoCentroid$1);\n\nfunction inScope (item) {\n const group = this.context.group;\n let value = false;\n if (group) while (item) {\n if (item === group) {\n value = true;\n break;\n }\n item = item.mark.group;\n }\n return value;\n}\n\nfunction log(df, method, args) {\n try {\n df[method].apply(df, ['EXPRESSION'].concat([].slice.call(args)));\n } catch (err) {\n df.warn(err);\n }\n return args[args.length - 1];\n}\nfunction warn() {\n return log(this.context.dataflow, 'warn', arguments);\n}\nfunction info() {\n return log(this.context.dataflow, 'info', arguments);\n}\nfunction debug() {\n return log(this.context.dataflow, 'debug', arguments);\n}\n\n// https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\nfunction channel_luminance_value(channelValue) {\n const val = channelValue / 255;\n if (val <= 0.03928) {\n return val / 12.92;\n }\n return Math.pow((val + 0.055) / 1.055, 2.4);\n}\nfunction luminance(color) {\n const c = rgb(color),\n r = channel_luminance_value(c.r),\n g = channel_luminance_value(c.g),\n b = channel_luminance_value(c.b);\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n\n// https://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\nfunction contrast(color1, color2) {\n const lum1 = luminance(color1),\n lum2 = luminance(color2),\n lumL = Math.max(lum1, lum2),\n lumD = Math.min(lum1, lum2);\n return (lumL + 0.05) / (lumD + 0.05);\n}\n\nfunction merge () {\n const args = [].slice.call(arguments);\n args.unshift({});\n return extend(...args);\n}\n\nfunction equal(a, b) {\n return a === b || a !== a && b !== b ? true : isArray(a) ? isArray(b) && a.length === b.length ? equalArray(a, b) : false : isObject(a) && isObject(b) ? equalObject(a, b) : false;\n}\nfunction equalArray(a, b) {\n for (let i = 0, n = a.length; i < n; ++i) {\n if (!equal(a[i], b[i])) return false;\n }\n return true;\n}\nfunction equalObject(a, b) {\n for (const key in a) {\n if (!equal(a[key], b[key])) return false;\n }\n return true;\n}\nfunction removePredicate(props) {\n return _ => equalObject(props, _);\n}\nfunction modify (name, insert, remove, toggle, modify, values) {\n const df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input,\n stamp = df.stamp();\n let changes = data.changes,\n predicate,\n key;\n if (df._trigger === false || !(input.value.length || insert || toggle)) {\n // nothing to do!\n return 0;\n }\n if (!changes || changes.stamp < stamp) {\n data.changes = changes = df.changeset();\n changes.stamp = stamp;\n df.runAfter(() => {\n data.modified = true;\n df.pulse(input, changes).run();\n }, true, 1);\n }\n if (remove) {\n predicate = remove === true ? truthy : isArray(remove) || isTuple(remove) ? remove : removePredicate(remove);\n changes.remove(predicate);\n }\n if (insert) {\n changes.insert(insert);\n }\n if (toggle) {\n predicate = removePredicate(toggle);\n if (input.value.some(predicate)) {\n changes.remove(predicate);\n } else {\n changes.insert(toggle);\n }\n }\n if (modify) {\n for (key in values) {\n changes.modify(modify, key, values[key]);\n }\n }\n return 1;\n}\n\nfunction pinchDistance(event) {\n const t = event.touches,\n dx = t[0].clientX - t[1].clientX,\n dy = t[0].clientY - t[1].clientY;\n return Math.hypot(dx, dy);\n}\nfunction pinchAngle(event) {\n const t = event.touches;\n return Math.atan2(t[0].clientY - t[1].clientY, t[0].clientX - t[1].clientX);\n}\n\n// memoize accessor functions\nconst accessors = {};\nfunction pluck (data, name) {\n const accessor = accessors[name] || (accessors[name] = field(name));\n return isArray(data) ? data.map(accessor) : accessor(data);\n}\n\nfunction array(seq) {\n return isArray(seq) || ArrayBuffer.isView(seq) ? seq : null;\n}\nfunction sequence(seq) {\n return array(seq) || (isString(seq) ? seq : null);\n}\nfunction join(seq) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return array(seq).join(...args);\n}\nfunction indexof(seq) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n return sequence(seq).indexOf(...args);\n}\nfunction lastindexof(seq) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return sequence(seq).lastIndexOf(...args);\n}\nfunction slice(seq) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n return sequence(seq).slice(...args);\n}\nfunction replace(str, pattern, repl) {\n if (isFunction(repl)) error('Function argument passed to replace.');\n return String(str).replace(pattern, repl);\n}\nfunction reverse(seq) {\n return array(seq).slice().reverse();\n}\n\nfunction bandspace(count, paddingInner, paddingOuter) {\n return bandSpace(count || 0, paddingInner || 0, paddingOuter || 0);\n}\nfunction bandwidth(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.bandwidth ? s.bandwidth() : 0;\n}\nfunction copy(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.copy() : undefined;\n}\nfunction domain(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.domain() : [];\n}\nfunction invert(name, range, group) {\n const s = getScale(name, (group || this).context);\n return !s ? undefined : isArray(range) ? (s.invertRange || s.invert)(range) : (s.invert || s.invertExtent)(range);\n}\nfunction range(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.range ? s.range() : [];\n}\nfunction scale(name, value, group) {\n const s = getScale(name, (group || this).context);\n return s ? s(value) : undefined;\n}\n\nfunction scaleGradient (scale, p0, p1, count, group) {\n scale = getScale(scale, (group || this).context);\n const gradient = Gradient(p0, p1);\n let stops = scale.domain(),\n min = stops[0],\n max = peek(stops),\n fraction = identity;\n if (!(max - min)) {\n // expand scale if domain has zero span, fix #1479\n scale = (scale.interpolator ? scale$1('sequential')().interpolator(scale.interpolator()) : scale$1('linear')().interpolate(scale.interpolate()).range(scale.range())).domain([min = 0, max = 1]);\n } else {\n fraction = scaleFraction(scale, min, max);\n }\n if (scale.ticks) {\n stops = scale.ticks(+count || 15);\n if (min !== stops[0]) stops.unshift(min);\n if (max !== peek(stops)) stops.push(max);\n }\n stops.forEach(_ => gradient.stop(fraction(_), scale(_)));\n return gradient;\n}\n\nfunction geoShape(projection, geojson, group) {\n const p = getScale(projection, (group || this).context);\n return function (context) {\n return p ? p.path.context(context)(geojson) : '';\n };\n}\nfunction pathShape(path) {\n let p = null;\n return function (context) {\n return context ? pathRender(context, p = p || pathParse(path)) : path;\n };\n}\n\nconst datum = d => d.data;\nfunction treeNodes(name, context) {\n const tree = data.call(context, name);\n return tree.root && tree.root.lookup || {};\n}\nfunction treePath(name, source, target) {\n const nodes = treeNodes(name, this),\n s = nodes[source],\n t = nodes[target];\n return s && t ? s.path(t).map(datum) : undefined;\n}\nfunction treeAncestors(name, node) {\n const n = treeNodes(name, this)[node];\n return n ? n.ancestors().map(datum) : undefined;\n}\n\nconst _window = () => typeof window !== 'undefined' && window || null;\nfunction screen() {\n const w = _window();\n return w ? w.screen : {};\n}\nfunction windowSize() {\n const w = _window();\n return w ? [w.innerWidth, w.innerHeight] : [undefined, undefined];\n}\nfunction containerSize() {\n const view = this.context.dataflow,\n el = view.container && view.container();\n return el ? [el.clientWidth, el.clientHeight] : [undefined, undefined];\n}\n\nfunction intersect (b, opt, group) {\n if (!b) return [];\n const [u, v] = b,\n box = new Bounds().set(u[0], u[1], v[0], v[1]),\n scene = group || this.context.dataflow.scenegraph().root;\n return intersect$1(scene, box, filter(opt));\n}\nfunction filter(opt) {\n let p = null;\n if (opt) {\n const types = array$1(opt.marktype),\n names = array$1(opt.markname);\n p = _ => (!types.length || types.some(t => _.marktype === t)) && (!names.length || names.some(s => _.name === s));\n }\n return p;\n}\n\n/**\n * Appends a new point to the lasso\n *\n * @param {*} lasso the lasso in pixel space\n * @param {*} x the x coordinate in pixel space\n * @param {*} y the y coordinate in pixel space\n * @param {*} minDist the minimum distance, in pixels, that thenew point needs to be apart from the last point\n * @returns a new array containing the lasso with the new point\n */\nfunction lassoAppend(lasso, x, y) {\n let minDist = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 5;\n lasso = array$1(lasso);\n const last = lasso[lasso.length - 1];\n\n // Add point to lasso if its the first point or distance to last point exceed minDist\n return last === undefined || Math.hypot(last[0] - x, last[1] - y) > minDist ? [...lasso, [x, y]] : lasso;\n}\n\n/**\n * Generates a svg path command which draws a lasso\n *\n * @param {*} lasso the lasso in pixel space in the form [[x,y], [x,y], ...]\n * @returns the svg path command that draws the lasso\n */\nfunction lassoPath(lasso) {\n return array$1(lasso).reduce((svg, _ref, i) => {\n let [x, y] = _ref;\n return svg += i == 0 ? `M ${x},${y} ` : i === lasso.length - 1 ? ' Z' : `L ${x},${y} `;\n }, '');\n}\n\n/**\n * Inverts the lasso from pixel space to an array of vega scenegraph tuples\n *\n * @param {*} data the dataset\n * @param {*} pixelLasso the lasso in pixel space, [[x,y], [x,y], ...]\n * @param {*} unit the unit where the lasso is defined\n *\n * @returns an array of vega scenegraph tuples\n */\nfunction intersectLasso(markname, pixelLasso, unit) {\n const {\n x,\n y,\n mark\n } = unit;\n const bb = new Bounds().set(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER, Number.MIN_SAFE_INTEGER);\n\n // Get bounding box around lasso\n for (const [px, py] of pixelLasso) {\n if (px < bb.x1) bb.x1 = px;\n if (px > bb.x2) bb.x2 = px;\n if (py < bb.y1) bb.y1 = py;\n if (py > bb.y2) bb.y2 = py;\n }\n\n // Translate bb against unit coordinates\n bb.translate(x, y);\n const intersection = intersect([[bb.x1, bb.y1], [bb.x2, bb.y2]], markname, mark);\n\n // Check every point against the lasso\n return intersection.filter(tuple => pointInPolygon(tuple.x, tuple.y, pixelLasso));\n}\n\n/**\n * Performs a test if a point is inside a polygon based on the idea from\n * https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html\n *\n * This method will not need the same start/end point since it wraps around the edges of the array\n *\n * @param {*} test a point to test against\n * @param {*} polygon a polygon in the form [[x,y], [x,y], ...]\n * @returns true if the point lies inside the polygon, false otherwise\n */\nfunction pointInPolygon(testx, testy, polygon) {\n let intersections = 0;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const [prevX, prevY] = polygon[j];\n const [x, y] = polygon[i];\n\n // count intersections\n if (y > testy != prevY > testy && testx < (prevX - x) * (testy - y) / (prevY - y) + x) {\n intersections++;\n }\n }\n\n // point is in polygon if intersection count is odd\n return intersections & 1;\n}\n\n// Expression function context object\nconst functionContext = {\n random() {\n return random();\n },\n // override default\n cumulativeNormal,\n cumulativeLogNormal,\n cumulativeUniform,\n densityNormal,\n densityLogNormal,\n densityUniform,\n quantileNormal,\n quantileLogNormal,\n quantileUniform,\n sampleNormal,\n sampleLogNormal,\n sampleUniform,\n isArray,\n isBoolean,\n isDate,\n isDefined(_) {\n return _ !== undefined;\n },\n isNumber,\n isObject,\n isRegExp,\n isString,\n isTuple,\n isValid(_) {\n return _ != null && _ === _;\n },\n toBoolean,\n toDate(_) {\n return toDate(_);\n },\n // suppress extra arguments\n toNumber,\n toString,\n indexof,\n join,\n lastindexof,\n replace,\n reverse,\n slice,\n flush,\n lerp,\n merge,\n pad,\n peek,\n pluck,\n span,\n inrange,\n truncate,\n rgb,\n lab,\n hcl,\n hsl,\n luminance,\n contrast,\n sequence: range$1,\n format,\n utcFormat,\n utcParse,\n utcOffset,\n utcSequence,\n timeFormat,\n timeParse,\n timeOffset,\n timeSequence,\n timeUnitSpecifier,\n monthFormat,\n monthAbbrevFormat,\n dayFormat,\n dayAbbrevFormat,\n quarter,\n utcquarter,\n week,\n utcweek,\n dayofyear,\n utcdayofyear,\n warn,\n info,\n debug,\n extent(_) {\n return extent(_);\n },\n // suppress extra arguments\n inScope,\n intersect,\n clampRange,\n pinchDistance,\n pinchAngle,\n screen,\n containerSize,\n windowSize,\n bandspace,\n setdata,\n pathShape,\n panLinear,\n panLog,\n panPow,\n panSymlog,\n zoomLinear,\n zoomLog,\n zoomPow,\n zoomSymlog,\n encode,\n modify,\n lassoAppend,\n lassoPath,\n intersectLasso\n};\nconst eventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'],\n // event functions\n eventPrefix = 'event.vega.',\n // event function prefix\n thisPrefix = 'this.',\n // function context prefix\n astVisitors = {}; // AST visitors for dependency analysis\n\n// export code generator parameters\nconst codegenParams = {\n forbidden: ['_'],\n allowed: ['datum', 'event', 'item'],\n fieldvar: 'datum',\n globalvar: id => `_[${stringValue(SignalPrefix + id)}]`,\n functions: buildFunctions,\n constants: constants,\n visitors: astVisitors\n};\n\n// export code generator\nconst codeGenerator = codegenExpression(codegenParams);\n\n// Build expression function registry\nfunction buildFunctions(codegen) {\n const fn = functions(codegen);\n eventFunctions.forEach(name => fn[name] = eventPrefix + name);\n for (const name in functionContext) {\n fn[name] = thisPrefix + name;\n }\n extend(fn, internalScaleFunctions(codegen, functionContext, astVisitors));\n return fn;\n}\n\n// Register an expression function\nfunction expressionFunction(name, fn, visitor) {\n if (arguments.length === 1) {\n return functionContext[name];\n }\n\n // register with the functionContext\n functionContext[name] = fn;\n\n // if there is an astVisitor register that, too\n if (visitor) astVisitors[name] = visitor;\n\n // if the code generator has already been initialized,\n // we need to also register the function with it\n if (codeGenerator) codeGenerator.functions[name] = thisPrefix + name;\n return this;\n}\n\n// register expression functions with ast visitors\nexpressionFunction('bandwidth', bandwidth, scaleVisitor);\nexpressionFunction('copy', copy, scaleVisitor);\nexpressionFunction('domain', domain, scaleVisitor);\nexpressionFunction('range', range, scaleVisitor);\nexpressionFunction('invert', invert, scaleVisitor);\nexpressionFunction('scale', scale, scaleVisitor);\nexpressionFunction('gradient', scaleGradient, scaleVisitor);\nexpressionFunction('geoArea', geoArea, scaleVisitor);\nexpressionFunction('geoBounds', geoBounds, scaleVisitor);\nexpressionFunction('geoCentroid', geoCentroid, scaleVisitor);\nexpressionFunction('geoShape', geoShape, scaleVisitor);\nexpressionFunction('indata', indata, indataVisitor);\nexpressionFunction('data', data, dataVisitor);\nexpressionFunction('treePath', treePath, dataVisitor);\nexpressionFunction('treeAncestors', treeAncestors, dataVisitor);\n\n// register Vega-Lite selection functions\nexpressionFunction('vlSelectionTest', selectionTest, selectionVisitor);\nexpressionFunction('vlSelectionIdTest', selectionIdTest, selectionVisitor);\nexpressionFunction('vlSelectionResolve', selectionResolve, selectionVisitor);\nexpressionFunction('vlSelectionTuples', selectionTuples);\n\nfunction parser (expr, scope) {\n const params = {};\n\n // parse the expression to an abstract syntax tree (ast)\n let ast;\n try {\n expr = isString(expr) ? expr : stringValue(expr) + '';\n ast = parseExpression(expr);\n } catch (err) {\n error('Expression parse error: ' + expr);\n }\n\n // analyze ast function calls for dependencies\n ast.visit(node => {\n if (node.type !== CallExpression) return;\n const name = node.callee.name,\n visit = codegenParams.visitors[name];\n if (visit) visit(name, node.arguments, scope, params);\n });\n\n // perform code generation\n const gen = codeGenerator(ast);\n\n // collect signal dependencies\n gen.globals.forEach(name => {\n const signalName = SignalPrefix + name;\n if (!hasOwnProperty(params, signalName) && scope.getSignal(name)) {\n params[signalName] = scope.signalRef(name);\n }\n });\n\n // return generated expression code and dependencies\n return {\n $expr: extend({\n code: gen.code\n }, scope.options.ast ? {\n ast\n } : null),\n $fields: gen.fields,\n $params: params\n };\n}\n\nexport { DataPrefix, IndexPrefix, ScalePrefix, SignalPrefix, bandspace, bandwidth, codeGenerator, codegenParams, containerSize, contrast, copy, data, dataVisitor, dayAbbrevFormat, dayFormat, debug, domain, encode, expressionFunction, format, functionContext, geoArea, geoBounds, geoCentroid, geoShape, inScope, indata, indataVisitor, indexof, info, invert, join, lastindexof, luminance, merge, modify, monthAbbrevFormat, monthFormat, parser as parseExpression, pathShape, pinchAngle, pinchDistance, pluck, range, replace, reverse, scale, scaleGradient, scaleVisitor, screen, setdata, slice, timeFormat, timeParse, treeAncestors, treePath, utcFormat, utcParse, warn, windowSize };\n","import { toSet, stringValue, error, isArray, isObject, hasOwnProperty, accessor, key, field, array, compare, truthy } from 'vega-util';\nimport { tupleid } from 'vega-dataflow';\n\n/**\n * Parse a serialized dataflow specification.\n */\nfunction parse (spec) {\n const ctx = this,\n operators = spec.operators || [];\n\n // parse background\n if (spec.background) {\n ctx.background = spec.background;\n }\n\n // parse event configuration\n if (spec.eventConfig) {\n ctx.eventConfig = spec.eventConfig;\n }\n\n // parse locale configuration\n if (spec.locale) {\n ctx.locale = spec.locale;\n }\n\n // parse operators\n operators.forEach(entry => ctx.parseOperator(entry));\n\n // parse operator parameters\n operators.forEach(entry => ctx.parseOperatorParameters(entry));\n\n // parse streams\n (spec.streams || []).forEach(entry => ctx.parseStream(entry));\n\n // parse updates\n (spec.updates || []).forEach(entry => ctx.parseUpdate(entry));\n return ctx.resolve();\n}\n\nconst Skip = toSet(['rule']),\n Swap = toSet(['group', 'image', 'rect']);\nfunction adjustSpatial(encode, marktype) {\n let code = '';\n if (Skip[marktype]) return code;\n if (encode.x2) {\n if (encode.x) {\n if (Swap[marktype]) {\n code += 'if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;';\n }\n code += 'o.width=o.x2-o.x;';\n } else {\n code += 'o.x=o.x2-(o.width||0);';\n }\n }\n if (encode.xc) {\n code += 'o.x=o.xc-(o.width||0)/2;';\n }\n if (encode.y2) {\n if (encode.y) {\n if (Swap[marktype]) {\n code += 'if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;';\n }\n code += 'o.height=o.y2-o.y;';\n } else {\n code += 'o.y=o.y2-(o.height||0);';\n }\n }\n if (encode.yc) {\n code += 'o.y=o.yc-(o.height||0)/2;';\n }\n return code;\n}\nfunction canonicalType(type) {\n return (type + '').toLowerCase();\n}\nfunction isOperator(type) {\n return canonicalType(type) === 'operator';\n}\nfunction isCollect(type) {\n return canonicalType(type) === 'collect';\n}\n\nfunction expression(ctx, args, code) {\n // wrap code in return statement if expression does not terminate\n if (!code.endsWith(';')) {\n code = 'return(' + code + ');';\n }\n const fn = Function(...args.concat(code));\n return ctx && ctx.functions ? fn.bind(ctx.functions) : fn;\n}\n\n// generate code for comparing a single field\nfunction _compare(u, v, lt, gt) {\n return `((u = ${u}) < (v = ${v}) || u == null) && v != null ? ${lt}\n : (u > v || v == null) && u != null ? ${gt}\n : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? ${lt}\n : v !== v && u === u ? ${gt} : `;\n}\nvar expressionCodegen = {\n /**\n * Parse an expression used to update an operator value.\n */\n operator: (ctx, expr) => expression(ctx, ['_'], expr.code),\n /**\n * Parse an expression provided as an operator parameter value.\n */\n parameter: (ctx, expr) => expression(ctx, ['datum', '_'], expr.code),\n /**\n * Parse an expression applied to an event stream.\n */\n event: (ctx, expr) => expression(ctx, ['event'], expr.code),\n /**\n * Parse an expression used to handle an event-driven operator update.\n */\n handler: (ctx, expr) => {\n const code = `var datum=event.item&&event.item.datum;return ${expr.code};`;\n return expression(ctx, ['_', 'event'], code);\n },\n /**\n * Parse an expression that performs visual encoding.\n */\n encode: (ctx, encode) => {\n const {\n marktype,\n channels\n } = encode;\n let code = 'var o=item,datum=o.datum,m=0,$;';\n for (const name in channels) {\n const o = 'o[' + stringValue(name) + ']';\n code += `$=${channels[name].code};if(${o}!==$)${o}=$,m=1;`;\n }\n code += adjustSpatial(channels, marktype);\n code += 'return m;';\n return expression(ctx, ['item', '_'], code);\n },\n /**\n * Optimized code generators for access and comparison.\n */\n codegen: {\n get(path) {\n const ref = `[${path.map(stringValue).join('][')}]`;\n const get = Function('_', `return _${ref};`);\n get.path = ref;\n return get;\n },\n comparator(fields, orders) {\n let t;\n const map = (f, i) => {\n const o = orders[i];\n let u, v;\n if (f.path) {\n u = `a${f.path}`;\n v = `b${f.path}`;\n } else {\n (t = t || {})['f' + i] = f;\n u = `this.f${i}(a)`;\n v = `this.f${i}(b)`;\n }\n return _compare(u, v, -o, o);\n };\n const fn = Function('a', 'b', 'var u, v; return ' + fields.map(map).join('') + '0;');\n return t ? fn.bind(t) : fn;\n }\n }\n};\n\n/**\n * Parse a dataflow operator.\n */\nfunction parseOperator(spec) {\n const ctx = this;\n if (isOperator(spec.type) || !spec.type) {\n ctx.operator(spec, spec.update ? ctx.operatorExpression(spec.update) : null);\n } else {\n ctx.transform(spec, spec.type);\n }\n}\n\n/**\n * Parse and assign operator parameters.\n */\nfunction parseOperatorParameters(spec) {\n const ctx = this;\n if (spec.params) {\n const op = ctx.get(spec.id);\n if (!op) error('Invalid operator id: ' + spec.id);\n ctx.dataflow.connect(op, op.parameters(ctx.parseParameters(spec.params), spec.react, spec.initonly));\n }\n}\n\n/**\n * Parse a set of operator parameters.\n */\nfunction parseParameters(spec, params) {\n params = params || {};\n const ctx = this;\n for (const key in spec) {\n const value = spec[key];\n params[key] = isArray(value) ? value.map(v => parseParameter(v, ctx, params)) : parseParameter(value, ctx, params);\n }\n return params;\n}\n\n/**\n * Parse a single parameter.\n */\nfunction parseParameter(spec, ctx, params) {\n if (!spec || !isObject(spec)) return spec;\n for (let i = 0, n = PARSERS.length, p; i < n; ++i) {\n p = PARSERS[i];\n if (hasOwnProperty(spec, p.key)) {\n return p.parse(spec, ctx, params);\n }\n }\n return spec;\n}\n\n/** Reference parsers. */\nvar PARSERS = [{\n key: '$ref',\n parse: getOperator\n}, {\n key: '$key',\n parse: getKey\n}, {\n key: '$expr',\n parse: getExpression\n}, {\n key: '$field',\n parse: getField\n}, {\n key: '$encode',\n parse: getEncode\n}, {\n key: '$compare',\n parse: getCompare\n}, {\n key: '$context',\n parse: getContext\n}, {\n key: '$subflow',\n parse: getSubflow\n}, {\n key: '$tupleid',\n parse: getTupleId\n}];\n\n/**\n * Resolve an operator reference.\n */\nfunction getOperator(_, ctx) {\n return ctx.get(_.$ref) || error('Operator not defined: ' + _.$ref);\n}\n\n/**\n * Resolve an expression reference.\n */\nfunction getExpression(_, ctx, params) {\n if (_.$params) {\n // parse expression parameters\n ctx.parseParameters(_.$params, params);\n }\n const k = 'e:' + _.$expr.code;\n return ctx.fn[k] || (ctx.fn[k] = accessor(ctx.parameterExpression(_.$expr), _.$fields));\n}\n\n/**\n * Resolve a key accessor reference.\n */\nfunction getKey(_, ctx) {\n const k = 'k:' + _.$key + '_' + !!_.$flat;\n return ctx.fn[k] || (ctx.fn[k] = key(_.$key, _.$flat, ctx.expr.codegen));\n}\n\n/**\n * Resolve a field accessor reference.\n */\nfunction getField(_, ctx) {\n if (!_.$field) return null;\n const k = 'f:' + _.$field + '_' + _.$name;\n return ctx.fn[k] || (ctx.fn[k] = field(_.$field, _.$name, ctx.expr.codegen));\n}\n\n/**\n * Resolve a comparator function reference.\n */\nfunction getCompare(_, ctx) {\n // As of Vega 5.5.3, $tupleid sort is no longer used.\n // Keep here for now for backwards compatibility.\n const k = 'c:' + _.$compare + '_' + _.$order,\n c = array(_.$compare).map(_ => _ && _.$tupleid ? tupleid : _);\n return ctx.fn[k] || (ctx.fn[k] = compare(c, _.$order, ctx.expr.codegen));\n}\n\n/**\n * Resolve an encode operator reference.\n */\nfunction getEncode(_, ctx) {\n const spec = _.$encode,\n encode = {};\n for (const name in spec) {\n const enc = spec[name];\n encode[name] = accessor(ctx.encodeExpression(enc.$expr), enc.$fields);\n encode[name].output = enc.$output;\n }\n return encode;\n}\n\n/**\n * Resolve a context reference.\n */\nfunction getContext(_, ctx) {\n return ctx;\n}\n\n/**\n * Resolve a recursive subflow specification.\n */\nfunction getSubflow(_, ctx) {\n const spec = _.$subflow;\n return function (dataflow, key, parent) {\n const subctx = ctx.fork().parse(spec),\n op = subctx.get(spec.operators[0].id),\n p = subctx.signals.parent;\n if (p) p.set(parent);\n op.detachSubflow = () => ctx.detach(subctx);\n return op;\n };\n}\n\n/**\n * Resolve a tuple id reference.\n */\nfunction getTupleId() {\n return tupleid;\n}\n\n/**\n * Parse an event stream specification.\n */\nfunction parseStream (spec) {\n var ctx = this,\n filter = spec.filter != null ? ctx.eventExpression(spec.filter) : undefined,\n stream = spec.stream != null ? ctx.get(spec.stream) : undefined,\n args;\n if (spec.source) {\n stream = ctx.events(spec.source, spec.type, filter);\n } else if (spec.merge) {\n args = spec.merge.map(_ => ctx.get(_));\n stream = args[0].merge.apply(args[0], args.slice(1));\n }\n if (spec.between) {\n args = spec.between.map(_ => ctx.get(_));\n stream = stream.between(args[0], args[1]);\n }\n if (spec.filter) {\n stream = stream.filter(filter);\n }\n if (spec.throttle != null) {\n stream = stream.throttle(+spec.throttle);\n }\n if (spec.debounce != null) {\n stream = stream.debounce(+spec.debounce);\n }\n if (stream == null) {\n error('Invalid stream definition: ' + JSON.stringify(spec));\n }\n if (spec.consume) stream.consume(true);\n ctx.stream(spec, stream);\n}\n\n/**\n * Parse an event-driven operator update.\n */\nfunction parseUpdate (spec) {\n var ctx = this,\n srcid = isObject(srcid = spec.source) ? srcid.$ref : srcid,\n source = ctx.get(srcid),\n target = null,\n update = spec.update,\n params = undefined;\n if (!source) error('Source not defined: ' + spec.source);\n target = spec.target && spec.target.$expr ? ctx.eventExpression(spec.target.$expr) : ctx.get(spec.target);\n if (update && update.$expr) {\n if (update.$params) {\n params = ctx.parseParameters(update.$params);\n }\n update = ctx.handlerExpression(update.$expr);\n }\n ctx.update(spec, source, target, update, params);\n}\n\nconst SKIP = {\n skip: true\n};\nfunction getState(options) {\n var ctx = this,\n state = {};\n if (options.signals) {\n var signals = state.signals = {};\n Object.keys(ctx.signals).forEach(key => {\n const op = ctx.signals[key];\n if (options.signals(key, op)) {\n signals[key] = op.value;\n }\n });\n }\n if (options.data) {\n var data = state.data = {};\n Object.keys(ctx.data).forEach(key => {\n const dataset = ctx.data[key];\n if (options.data(key, dataset)) {\n data[key] = dataset.input.value;\n }\n });\n }\n if (ctx.subcontext && options.recurse !== false) {\n state.subcontext = ctx.subcontext.map(ctx => ctx.getState(options));\n }\n return state;\n}\nfunction setState(state) {\n var ctx = this,\n df = ctx.dataflow,\n data = state.data,\n signals = state.signals;\n Object.keys(signals || {}).forEach(key => {\n df.update(ctx.signals[key], signals[key], SKIP);\n });\n Object.keys(data || {}).forEach(key => {\n df.pulse(ctx.data[key].input, df.changeset().remove(truthy).insert(data[key]));\n });\n (state.subcontext || []).forEach((substate, i) => {\n const subctx = ctx.subcontext[i];\n if (subctx) subctx.setState(substate);\n });\n}\n\n/**\n * Context objects store the current parse state.\n * Enables lookup of parsed operators, event streams, accessors, etc.\n * Provides a 'fork' method for creating child contexts for subflows.\n */\nfunction context (df, transforms, functions, expr) {\n return new Context(df, transforms, functions, expr);\n}\nfunction Context(df, transforms, functions, expr) {\n this.dataflow = df;\n this.transforms = transforms;\n this.events = df.events.bind(df);\n this.expr = expr || expressionCodegen, this.signals = {};\n this.scales = {};\n this.nodes = {};\n this.data = {};\n this.fn = {};\n if (functions) {\n this.functions = Object.create(functions);\n this.functions.context = this;\n }\n}\nfunction Subcontext(ctx) {\n this.dataflow = ctx.dataflow;\n this.transforms = ctx.transforms;\n this.events = ctx.events;\n this.expr = ctx.expr;\n this.signals = Object.create(ctx.signals);\n this.scales = Object.create(ctx.scales);\n this.nodes = Object.create(ctx.nodes);\n this.data = Object.create(ctx.data);\n this.fn = Object.create(ctx.fn);\n if (ctx.functions) {\n this.functions = Object.create(ctx.functions);\n this.functions.context = this;\n }\n}\nContext.prototype = Subcontext.prototype = {\n fork() {\n const ctx = new Subcontext(this);\n (this.subcontext || (this.subcontext = [])).push(ctx);\n return ctx;\n },\n detach(ctx) {\n this.subcontext = this.subcontext.filter(c => c !== ctx);\n\n // disconnect all nodes in the subcontext\n // wipe out targets first for better efficiency\n const keys = Object.keys(ctx.nodes);\n for (const key of keys) ctx.nodes[key]._targets = null;\n for (const key of keys) ctx.nodes[key].detach();\n ctx.nodes = null;\n },\n get(id) {\n return this.nodes[id];\n },\n set(id, node) {\n return this.nodes[id] = node;\n },\n add(spec, op) {\n const ctx = this,\n df = ctx.dataflow,\n data = spec.value;\n ctx.set(spec.id, op);\n if (isCollect(spec.type) && data) {\n if (data.$ingest) {\n df.ingest(op, data.$ingest, data.$format);\n } else if (data.$request) {\n df.preload(op, data.$request, data.$format);\n } else {\n df.pulse(op, df.changeset().insert(data));\n }\n }\n if (spec.root) {\n ctx.root = op;\n }\n if (spec.parent) {\n let p = ctx.get(spec.parent.$ref);\n if (p) {\n df.connect(p, [op]);\n op.targets().add(p);\n } else {\n (ctx.unresolved = ctx.unresolved || []).push(() => {\n p = ctx.get(spec.parent.$ref);\n df.connect(p, [op]);\n op.targets().add(p);\n });\n }\n }\n if (spec.signal) {\n ctx.signals[spec.signal] = op;\n }\n if (spec.scale) {\n ctx.scales[spec.scale] = op;\n }\n if (spec.data) {\n for (const name in spec.data) {\n const data = ctx.data[name] || (ctx.data[name] = {});\n spec.data[name].forEach(role => data[role] = op);\n }\n }\n },\n resolve() {\n (this.unresolved || []).forEach(fn => fn());\n delete this.unresolved;\n return this;\n },\n operator(spec, update) {\n this.add(spec, this.dataflow.add(spec.value, update));\n },\n transform(spec, type) {\n this.add(spec, this.dataflow.add(this.transforms[canonicalType(type)]));\n },\n stream(spec, stream) {\n this.set(spec.id, stream);\n },\n update(spec, stream, target, update, params) {\n this.dataflow.on(stream, target, update, params, spec.options);\n },\n // expression parsing\n operatorExpression(expr) {\n return this.expr.operator(this, expr);\n },\n parameterExpression(expr) {\n return this.expr.parameter(this, expr);\n },\n eventExpression(expr) {\n return this.expr.event(this, expr);\n },\n handlerExpression(expr) {\n return this.expr.handler(this, expr);\n },\n encodeExpression(encode) {\n return this.expr.encode(this, encode);\n },\n // parse methods\n parse,\n parseOperator,\n parseOperatorParameters,\n parseParameters,\n parseStream,\n parseUpdate,\n // state methods\n getState,\n setState\n};\n\nexport { context };\n","import { isString, hasOwnProperty, error, truthy, constant, extend, array, isObject, isArray, toSet, debounce, isDate, inherits, stringValue } from 'vega-util';\nimport { changeset, isChangeSet, EventStream, transforms, Dataflow, asyncCallback } from 'vega-dataflow';\nimport { point, renderModule, CanvasHandler, RenderType, Scenegraph } from 'vega-scenegraph';\nimport { tickStep } from 'd3-array';\nimport { functionContext } from 'vega-functions';\nimport { context } from 'vega-runtime';\nimport { interval } from 'd3-timer';\nimport { locale } from 'vega-format';\n\n// initialize aria role and label attributes\nfunction initializeAria(view) {\n const el = view.container();\n if (el) {\n el.setAttribute('role', 'graphics-document');\n el.setAttribute('aria-roleDescription', 'visualization');\n ariaLabel(el, view.description());\n }\n}\n\n// update aria-label if we have a DOM container element\nfunction ariaLabel(el, desc) {\n if (el) desc == null ? el.removeAttribute('aria-label') : el.setAttribute('aria-label', desc);\n}\n\nfunction background (view) {\n // respond to background signal\n view.add(null, _ => {\n view._background = _.bg;\n view._resize = 1;\n return _.bg;\n }, {\n bg: view._signals.background\n });\n}\n\nconst Default = 'default';\nfunction cursor (view) {\n // get cursor signal, add to dataflow if needed\n const cursor = view._signals.cursor || (view._signals.cursor = view.add({\n user: Default,\n item: null\n }));\n\n // evaluate cursor on each mousemove event\n view.on(view.events('view', 'mousemove'), cursor, (_, event) => {\n const value = cursor.value,\n user = value ? isString(value) ? value : value.user : Default,\n item = event.item && event.item.cursor || null;\n return value && user === value.user && item == value.item ? value : {\n user: user,\n item: item\n };\n });\n\n // when cursor signal updates, set visible cursor\n view.add(null, function (_) {\n let user = _.cursor,\n item = this.value;\n if (!isString(user)) {\n item = user.item;\n user = user.user;\n }\n setCursor(view, user && user !== Default ? user : item || user);\n return item;\n }, {\n cursor: cursor\n });\n}\nfunction setCursor(view, cursor) {\n const el = view.globalCursor() ? typeof document !== 'undefined' && document.body : view.container();\n if (el) {\n return cursor == null ? el.style.removeProperty('cursor') : el.style.cursor = cursor;\n }\n}\n\nfunction dataref(view, name) {\n var data = view._runtime.data;\n if (!hasOwnProperty(data, name)) {\n error('Unrecognized data set: ' + name);\n }\n return data[name];\n}\nfunction data(name, values) {\n return arguments.length < 2 ? dataref(this, name).values.value : change.call(this, name, changeset().remove(truthy).insert(values));\n}\nfunction change(name, changes) {\n if (!isChangeSet(changes)) {\n error('Second argument to changes must be a changeset.');\n }\n const dataset = dataref(this, name);\n dataset.modified = true;\n return this.pulse(dataset.input, changes);\n}\nfunction insert(name, _) {\n return change.call(this, name, changeset().insert(_));\n}\nfunction remove(name, _) {\n return change.call(this, name, changeset().remove(_));\n}\n\nfunction width(view) {\n var padding = view.padding();\n return Math.max(0, view._viewWidth + padding.left + padding.right);\n}\nfunction height(view) {\n var padding = view.padding();\n return Math.max(0, view._viewHeight + padding.top + padding.bottom);\n}\nfunction offset(view) {\n var padding = view.padding(),\n origin = view._origin;\n return [padding.left + origin[0], padding.top + origin[1]];\n}\nfunction resizeRenderer(view) {\n var origin = offset(view),\n w = width(view),\n h = height(view);\n view._renderer.background(view.background());\n view._renderer.resize(w, h, origin);\n view._handler.origin(origin);\n view._resizeListeners.forEach(handler => {\n try {\n handler(w, h);\n } catch (error) {\n view.error(error);\n }\n });\n}\n\n/**\n * Extend an event with additional view-specific methods.\n * Adds a new property ('vega') to an event that provides a number\n * of methods for querying information about the current interaction.\n * The vega object provides the following methods:\n * view - Returns the backing View instance.\n * item - Returns the currently active scenegraph item (if any).\n * group - Returns the currently active scenegraph group (if any).\n * This method accepts a single string-typed argument indicating the name\n * of the desired parent group. The scenegraph will be traversed from\n * the item up towards the root to search for a matching group. If no\n * argument is provided the enclosing group for the active item is\n * returned, unless the item it itself a group, in which case it is\n * returned directly.\n * xy - Returns a two-element array containing the x and y coordinates for\n * mouse or touch events. For touch events, this is based on the first\n * elements in the changedTouches array. This method accepts a single\n * argument: either an item instance or mark name that should serve as\n * the reference coordinate system. If no argument is provided the\n * top-level view coordinate system is assumed.\n * x - Returns the current x-coordinate, accepts the same arguments as xy.\n * y - Returns the current y-coordinate, accepts the same arguments as xy.\n * @param {Event} event - The input event to extend.\n * @param {Item} item - The currently active scenegraph item (if any).\n * @return {Event} - The extended input event.\n */\nfunction eventExtend (view, event, item) {\n var r = view._renderer,\n el = r && r.canvas(),\n p,\n e,\n translate;\n if (el) {\n translate = offset(view);\n e = event.changedTouches ? event.changedTouches[0] : event;\n p = point(e, el);\n p[0] -= translate[0];\n p[1] -= translate[1];\n }\n event.dataflow = view;\n event.item = item;\n event.vega = extension(view, item, p);\n return event;\n}\nfunction extension(view, item, point) {\n const itemGroup = item ? item.mark.marktype === 'group' ? item : item.mark.group : null;\n function group(name) {\n var g = itemGroup,\n i;\n if (name) for (i = item; i; i = i.mark.group) {\n if (i.mark.name === name) {\n g = i;\n break;\n }\n }\n return g && g.mark && g.mark.interactive ? g : {};\n }\n function xy(item) {\n if (!item) return point;\n if (isString(item)) item = group(item);\n const p = point.slice();\n while (item) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n item = item.mark && item.mark.group;\n }\n return p;\n }\n return {\n view: constant(view),\n item: constant(item || {}),\n group: group,\n xy: xy,\n x: item => xy(item)[0],\n y: item => xy(item)[1]\n };\n}\n\nconst VIEW = 'view',\n TIMER = 'timer',\n WINDOW = 'window',\n NO_TRAP = {\n trap: false\n };\n\n/**\n * Initialize event handling configuration.\n * @param {object} config - The configuration settings.\n * @return {object}\n */\nfunction initializeEventConfig(config) {\n const events = extend({\n defaults: {}\n }, config);\n const unpack = (obj, keys) => {\n keys.forEach(k => {\n if (isArray(obj[k])) obj[k] = toSet(obj[k]);\n });\n };\n unpack(events.defaults, ['prevent', 'allow']);\n unpack(events, ['view', 'window', 'selector']);\n return events;\n}\nfunction trackEventListener(view, sources, type, handler) {\n view._eventListeners.push({\n type: type,\n sources: array(sources),\n handler: handler\n });\n}\nfunction prevent(view, type) {\n var def = view._eventConfig.defaults,\n prevent = def.prevent,\n allow = def.allow;\n return prevent === false || allow === true ? false : prevent === true || allow === false ? true : prevent ? prevent[type] : allow ? !allow[type] : view.preventDefault();\n}\nfunction permit(view, key, type) {\n const rule = view._eventConfig && view._eventConfig[key];\n if (rule === false || isObject(rule) && !rule[type]) {\n view.warn(`Blocked ${key} ${type} event listener.`);\n return false;\n }\n return true;\n}\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @return {EventStream}\n */\nfunction events(source, type, filter) {\n var view = this,\n s = new EventStream(filter),\n send = function (e, item) {\n view.runAsync(null, () => {\n if (source === VIEW && prevent(view, type)) {\n e.preventDefault();\n }\n s.receive(eventExtend(view, e, item));\n });\n },\n sources;\n if (source === TIMER) {\n if (permit(view, 'timer', type)) {\n view.timer(send, type);\n }\n } else if (source === VIEW) {\n if (permit(view, 'view', type)) {\n // send traps errors, so use {trap: false} option\n view.addEventListener(type, send, NO_TRAP);\n }\n } else {\n if (source === WINDOW) {\n if (permit(view, 'window', type) && typeof window !== 'undefined') {\n sources = [window];\n }\n } else if (typeof document !== 'undefined') {\n if (permit(view, 'selector', type)) {\n sources = Array.from(document.querySelectorAll(source));\n }\n }\n if (!sources) {\n view.warn('Can not resolve event source: ' + source);\n } else {\n for (var i = 0, n = sources.length; i < n; ++i) {\n sources[i].addEventListener(type, send);\n }\n trackEventListener(view, sources, type, send);\n }\n }\n return s;\n}\n\nfunction itemFilter(event) {\n return event.item;\n}\nfunction markTarget(event) {\n // grab upstream collector feeding the mark operator\n return event.item.mark.source;\n}\nfunction invoke(name) {\n return function (_, event) {\n return event.vega.view().changeset().encode(event.item, name);\n };\n}\nfunction hover (hoverSet, leaveSet) {\n hoverSet = [hoverSet || 'hover'];\n leaveSet = [leaveSet || 'update', hoverSet[0]];\n\n // invoke hover set upon mouseover\n this.on(this.events('view', 'mouseover', itemFilter), markTarget, invoke(hoverSet));\n\n // invoke leave set upon mouseout\n this.on(this.events('view', 'mouseout', itemFilter), markTarget, invoke(leaveSet));\n return this;\n}\n\n/**\n * Finalize a View instance that is being removed.\n * Cancel any running timers.\n * Remove all external event listeners.\n * Remove any currently displayed tooltip.\n */\nfunction finalize () {\n var tooltip = this._tooltip,\n timers = this._timers,\n listeners = this._eventListeners,\n n,\n m,\n e;\n n = timers.length;\n while (--n >= 0) {\n timers[n].stop();\n }\n n = listeners.length;\n while (--n >= 0) {\n e = listeners[n];\n m = e.sources.length;\n while (--m >= 0) {\n e.sources[m].removeEventListener(e.type, e.handler);\n }\n }\n if (tooltip) {\n tooltip.call(this, this._handler, null, null, null);\n }\n return this;\n}\n\nfunction element (tag, attr, text) {\n const el = document.createElement(tag);\n for (const key in attr) el.setAttribute(key, attr[key]);\n if (text != null) el.textContent = text;\n return el;\n}\n\nconst BindClass = 'vega-bind',\n NameClass = 'vega-bind-name',\n RadioClass = 'vega-bind-radio';\n\n/**\n * Bind a signal to an external HTML input element. The resulting two-way\n * binding will propagate input changes to signals, and propagate signal\n * changes to the input element state. If this view instance has no parent\n * element, we assume the view is headless and no bindings are created.\n * @param {Element|string} el - The parent DOM element to which the input\n * element should be appended as a child. If string-valued, this argument\n * will be treated as a CSS selector. If null or undefined, the parent\n * element of this view will be used as the element.\n * @param {object} param - The binding parameters which specify the signal\n * to bind to, the input element type, and type-specific configuration.\n * @return {View} - This view instance.\n */\nfunction bind (view, el, binding) {\n if (!el) return;\n const param = binding.param;\n let bind = binding.state;\n if (!bind) {\n bind = binding.state = {\n elements: null,\n active: false,\n set: null,\n update: value => {\n if (value != view.signal(param.signal)) {\n view.runAsync(null, () => {\n bind.source = true;\n view.signal(param.signal, value);\n });\n }\n }\n };\n if (param.debounce) {\n bind.update = debounce(param.debounce, bind.update);\n }\n }\n const create = param.input == null && param.element ? target : generate;\n create(bind, el, param, view);\n if (!bind.active) {\n view.on(view._signals[param.signal], null, () => {\n bind.source ? bind.source = false : bind.set(view.signal(param.signal));\n });\n bind.active = true;\n }\n return bind;\n}\n\n/**\n * Bind the signal to an external EventTarget.\n */\nfunction target(bind, node, param, view) {\n const type = param.event || 'input';\n const handler = () => bind.update(node.value);\n\n // initialize signal value to external input value\n view.signal(param.signal, node.value);\n\n // listen for changes on the element\n node.addEventListener(type, handler);\n\n // register with view, so we can remove it upon finalization\n trackEventListener(view, node, type, handler);\n\n // propagate change to element\n bind.set = value => {\n node.value = value;\n node.dispatchEvent(event(type));\n };\n}\nfunction event(type) {\n return typeof Event !== 'undefined' ? new Event(type) : {\n type\n };\n}\n\n/**\n * Generate an HTML input form element and bind it to a signal.\n */\nfunction generate(bind, el, param, view) {\n const value = view.signal(param.signal);\n const div = element('div', {\n 'class': BindClass\n });\n const wrapper = param.input === 'radio' ? div : div.appendChild(element('label'));\n wrapper.appendChild(element('span', {\n 'class': NameClass\n }, param.name || param.signal));\n el.appendChild(div);\n let input = form;\n switch (param.input) {\n case 'checkbox':\n input = checkbox;\n break;\n case 'select':\n input = select;\n break;\n case 'radio':\n input = radio;\n break;\n case 'range':\n input = range;\n break;\n }\n input(bind, wrapper, param, value);\n}\n\n/**\n * Generates an arbitrary input form element.\n * The input type is controlled via user-provided parameters.\n */\nfunction form(bind, el, param, value) {\n const node = element('input');\n for (const key in param) {\n if (key !== 'signal' && key !== 'element') {\n node.setAttribute(key === 'input' ? 'type' : key, param[key]);\n }\n }\n node.setAttribute('name', param.signal);\n node.value = value;\n el.appendChild(node);\n node.addEventListener('input', () => bind.update(node.value));\n bind.elements = [node];\n bind.set = value => node.value = value;\n}\n\n/**\n * Generates a checkbox input element.\n */\nfunction checkbox(bind, el, param, value) {\n const attr = {\n type: 'checkbox',\n name: param.signal\n };\n if (value) attr.checked = true;\n const node = element('input', attr);\n el.appendChild(node);\n node.addEventListener('change', () => bind.update(node.checked));\n bind.elements = [node];\n bind.set = value => node.checked = !!value || null;\n}\n\n/**\n * Generates a selection list input element.\n */\nfunction select(bind, el, param, value) {\n const node = element('select', {\n name: param.signal\n }),\n labels = param.labels || [];\n param.options.forEach((option, i) => {\n const attr = {\n value: option\n };\n if (valuesEqual(option, value)) attr.selected = true;\n node.appendChild(element('option', attr, (labels[i] || option) + ''));\n });\n el.appendChild(node);\n node.addEventListener('change', () => {\n bind.update(param.options[node.selectedIndex]);\n });\n bind.elements = [node];\n bind.set = value => {\n for (let i = 0, n = param.options.length; i < n; ++i) {\n if (valuesEqual(param.options[i], value)) {\n node.selectedIndex = i;\n return;\n }\n }\n };\n}\n\n/**\n * Generates a radio button group.\n */\nfunction radio(bind, el, param, value) {\n const group = element('span', {\n 'class': RadioClass\n }),\n labels = param.labels || [];\n el.appendChild(group);\n bind.elements = param.options.map((option, i) => {\n const attr = {\n type: 'radio',\n name: param.signal,\n value: option\n };\n if (valuesEqual(option, value)) attr.checked = true;\n const input = element('input', attr);\n input.addEventListener('change', () => bind.update(option));\n const label = element('label', {}, (labels[i] || option) + '');\n label.prepend(input);\n group.appendChild(label);\n return input;\n });\n bind.set = value => {\n const nodes = bind.elements,\n n = nodes.length;\n for (let i = 0; i < n; ++i) {\n if (valuesEqual(nodes[i].value, value)) nodes[i].checked = true;\n }\n };\n}\n\n/**\n * Generates a slider input element.\n */\nfunction range(bind, el, param, value) {\n value = value !== undefined ? value : (+param.max + +param.min) / 2;\n const max = param.max != null ? param.max : Math.max(100, +value) || 100,\n min = param.min || Math.min(0, max, +value) || 0,\n step = param.step || tickStep(min, max, 100);\n const node = element('input', {\n type: 'range',\n name: param.signal,\n min: min,\n max: max,\n step: step\n });\n node.value = value;\n const span = element('span', {}, +value);\n el.appendChild(node);\n el.appendChild(span);\n const update = () => {\n span.textContent = node.value;\n bind.update(+node.value);\n };\n\n // subscribe to both input and change\n node.addEventListener('input', update);\n node.addEventListener('change', update);\n bind.elements = [node];\n bind.set = value => {\n node.value = value;\n span.textContent = value;\n };\n}\nfunction valuesEqual(a, b) {\n return a === b || a + '' === b + '';\n}\n\nfunction initializeRenderer (view, r, el, constructor, scaleFactor, opt) {\n r = r || new constructor(view.loader());\n return r.initialize(el, width(view), height(view), offset(view), scaleFactor, opt).background(view.background());\n}\n\nfunction trap (view, fn) {\n return !fn ? null : function () {\n try {\n fn.apply(this, arguments);\n } catch (error) {\n view.error(error);\n }\n };\n}\n\nfunction initializeHandler (view, prevHandler, el, constructor) {\n // instantiate scenegraph handler\n const handler = new constructor(view.loader(), trap(view, view.tooltip())).scene(view.scenegraph().root).initialize(el, offset(view), view);\n\n // transfer event handlers\n if (prevHandler) {\n prevHandler.handlers().forEach(h => {\n handler.on(h.type, h.handler);\n });\n }\n return handler;\n}\n\nfunction initialize (el, elBind) {\n const view = this,\n type = view._renderType,\n config = view._eventConfig.bind,\n module = renderModule(type);\n\n // containing dom element\n el = view._el = el ? lookup(view, el, true) : null;\n\n // initialize aria attributes\n initializeAria(view);\n\n // select appropriate renderer & handler\n if (!module) view.error('Unrecognized renderer type: ' + type);\n const Handler = module.handler || CanvasHandler,\n Renderer = el ? module.renderer : module.headless;\n\n // initialize renderer and input handler\n view._renderer = !Renderer ? null : initializeRenderer(view, view._renderer, el, Renderer);\n view._handler = initializeHandler(view, view._handler, el, Handler);\n view._redraw = true;\n\n // initialize signal bindings\n if (el && config !== 'none') {\n elBind = elBind ? view._elBind = lookup(view, elBind, true) : el.appendChild(element('form', {\n 'class': 'vega-bindings'\n }));\n view._bind.forEach(_ => {\n if (_.param.element && config !== 'container') {\n _.element = lookup(view, _.param.element, !!_.param.input);\n }\n });\n view._bind.forEach(_ => {\n bind(view, _.element || elBind, _);\n });\n }\n return view;\n}\nfunction lookup(view, el, clear) {\n if (typeof el === 'string') {\n if (typeof document !== 'undefined') {\n el = document.querySelector(el);\n if (!el) {\n view.error('Signal bind element not found: ' + el);\n return null;\n }\n } else {\n view.error('DOM document instance not found.');\n return null;\n }\n }\n if (el && clear) {\n try {\n el.textContent = '';\n } catch (e) {\n el = null;\n view.error(e);\n }\n }\n return el;\n}\n\nconst number = _ => +_ || 0;\nconst paddingObject = _ => ({\n top: _,\n bottom: _,\n left: _,\n right: _\n});\nfunction padding (_) {\n return isObject(_) ? {\n top: number(_.top),\n bottom: number(_.bottom),\n left: number(_.left),\n right: number(_.right)\n } : paddingObject(number(_));\n}\n\n/**\n * Render the current scene in a headless fashion.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A Promise that resolves to a renderer.\n */\nasync function renderHeadless (view, type, scaleFactor, opt) {\n const module = renderModule(type),\n ctr = module && module.headless;\n if (!ctr) error('Unrecognized renderer type: ' + type);\n await view.runAsync();\n return initializeRenderer(view, null, null, ctr, scaleFactor, opt).renderAsync(view._scenegraph.root);\n}\n\n/**\n * Produce an image URL for the visualization. Depending on the type\n * parameter, the generated URL contains data for either a PNG or SVG image.\n * The URL can be used (for example) to download images of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @param {string} type - The image type. One of 'svg', 'png' or 'canvas'.\n * The 'canvas' and 'png' types are synonyms for a PNG image.\n * @return {Promise} - A promise that resolves to an image URL.\n */\nasync function renderToImageURL (type, scaleFactor) {\n if (type !== RenderType.Canvas && type !== RenderType.SVG && type !== RenderType.PNG) {\n error('Unrecognized image type: ' + type);\n }\n const r = await renderHeadless(this, type, scaleFactor);\n return type === RenderType.SVG ? toBlobURL(r.svg(), 'image/svg+xml') : r.canvas().toDataURL('image/png');\n}\nfunction toBlobURL(data, mime) {\n const blob = new Blob([data], {\n type: mime\n });\n return window.URL.createObjectURL(blob);\n}\n\n/**\n * Produce a Canvas instance containing a rendered visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to a Canvas instance.\n */\nasync function renderToCanvas (scaleFactor, opt) {\n const r = await renderHeadless(this, RenderType.Canvas, scaleFactor, opt);\n return r.canvas();\n}\n\n/**\n * Produce a rendered SVG string of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to an SVG string.\n */\nasync function renderToSVG (scaleFactor) {\n const r = await renderHeadless(this, RenderType.SVG, scaleFactor);\n return r.svg();\n}\n\nfunction runtime (view, spec, expr) {\n return context(view, transforms, functionContext, expr).parse(spec);\n}\n\nfunction scale(name) {\n var scales = this._runtime.scales;\n if (!hasOwnProperty(scales, name)) {\n error('Unrecognized scale or projection: ' + name);\n }\n return scales[name].value;\n}\n\nvar Width = 'width',\n Height = 'height',\n Padding = 'padding',\n Skip = {\n skip: true\n };\nfunction viewWidth(view, width) {\n var a = view.autosize(),\n p = view.padding();\n return width - (a && a.contains === Padding ? p.left + p.right : 0);\n}\nfunction viewHeight(view, height) {\n var a = view.autosize(),\n p = view.padding();\n return height - (a && a.contains === Padding ? p.top + p.bottom : 0);\n}\nfunction initializeResize(view) {\n var s = view._signals,\n w = s[Width],\n h = s[Height],\n p = s[Padding];\n function resetSize() {\n view._autosize = view._resize = 1;\n }\n\n // respond to width signal\n view._resizeWidth = view.add(null, _ => {\n view._width = _.size;\n view._viewWidth = viewWidth(view, _.size);\n resetSize();\n }, {\n size: w\n });\n\n // respond to height signal\n view._resizeHeight = view.add(null, _ => {\n view._height = _.size;\n view._viewHeight = viewHeight(view, _.size);\n resetSize();\n }, {\n size: h\n });\n\n // respond to padding signal\n const resizePadding = view.add(null, resetSize, {\n pad: p\n });\n\n // set rank to run immediately after source signal\n view._resizeWidth.rank = w.rank + 1;\n view._resizeHeight.rank = h.rank + 1;\n resizePadding.rank = p.rank + 1;\n}\nfunction resizeView(viewWidth, viewHeight, width, height, origin, auto) {\n this.runAfter(view => {\n let rerun = 0;\n\n // reset autosize flag\n view._autosize = 0;\n\n // width value changed: update signal, skip resize op\n if (view.width() !== width) {\n rerun = 1;\n view.signal(Width, width, Skip); // set width, skip update calc\n view._resizeWidth.skip(true); // skip width resize handler\n }\n\n // height value changed: update signal, skip resize op\n if (view.height() !== height) {\n rerun = 1;\n view.signal(Height, height, Skip); // set height, skip update calc\n view._resizeHeight.skip(true); // skip height resize handler\n }\n\n // view width changed: update view property, set resize flag\n if (view._viewWidth !== viewWidth) {\n view._resize = 1;\n view._viewWidth = viewWidth;\n }\n\n // view height changed: update view property, set resize flag\n if (view._viewHeight !== viewHeight) {\n view._resize = 1;\n view._viewHeight = viewHeight;\n }\n\n // origin changed: update view property, set resize flag\n if (view._origin[0] !== origin[0] || view._origin[1] !== origin[1]) {\n view._resize = 1;\n view._origin = origin;\n }\n\n // run dataflow on width/height signal change\n if (rerun) view.run('enter');\n if (auto) view.runAfter(v => v.resize());\n }, false, 1);\n}\n\n/**\n * Get the current view state, consisting of signal values and/or data sets.\n * @param {object} [options] - Options flags indicating which state to export.\n * If unspecified, all signals and data sets will be exported.\n * @param {function(string, Operator):boolean} [options.signals] - Optional\n * predicate function for testing if a signal should be included in the\n * exported state. If unspecified, all signals will be included, except for\n * those named 'parent' or those which refer to a Transform value.\n * @param {function(string, object):boolean} [options.data] - Optional\n * predicate function for testing if a data set's input should be included\n * in the exported state. If unspecified, all data sets that have been\n * explicitly modified will be included.\n * @param {boolean} [options.recurse=true] - Flag indicating if the exported\n * state should recursively include state from group mark sub-contexts.\n * @return {object} - An object containing the exported state values.\n */\nfunction getState(options) {\n return this._runtime.getState(options || {\n data: dataTest,\n signals: signalTest,\n recurse: true\n });\n}\nfunction dataTest(name, data) {\n return data.modified && isArray(data.input.value) && name.indexOf('_:vega:_');\n}\nfunction signalTest(name, op) {\n return !(name === 'parent' || op instanceof transforms.proxy);\n}\n\n/**\n * Sets the current view state and updates the view by invoking run.\n * @param {object} state - A state object containing signal and/or\n * data set values, following the format used by the getState method.\n * @return {View} - This view instance.\n */\nfunction setState(state) {\n this.runAsync(null, v => {\n v._trigger = false;\n v._runtime.setState(state);\n }, v => {\n v._trigger = true;\n });\n return this;\n}\n\nfunction timer (callback, delay) {\n function tick(elapsed) {\n callback({\n timestamp: Date.now(),\n elapsed: elapsed\n });\n }\n this._timers.push(interval(tick, delay));\n}\n\nfunction defaultTooltip (handler, event, item, value) {\n const el = handler.element();\n if (el) el.setAttribute('title', formatTooltip(value));\n}\nfunction formatTooltip(value) {\n return value == null ? '' : isArray(value) ? formatArray(value) : isObject(value) && !isDate(value) ? formatObject(value) : value + '';\n}\nfunction formatObject(obj) {\n return Object.keys(obj).map(key => {\n const v = obj[key];\n return key + ': ' + (isArray(v) ? formatArray(v) : formatValue(v));\n }).join('\\n');\n}\nfunction formatArray(value) {\n return '[' + value.map(formatValue).join(', ') + ']';\n}\nfunction formatValue(value) {\n return isArray(value) ? '[\\u2026]' : isObject(value) && !isDate(value) ? '{\\u2026}' : value;\n}\n\n/**\n * Create a new View instance from a Vega dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be performed upon dataflow runs.\n * @constructor\n * @param {object} spec - The Vega dataflow runtime specification.\n */\nfunction View(spec, options) {\n const view = this;\n options = options || {};\n Dataflow.call(view);\n if (options.loader) view.loader(options.loader);\n if (options.logger) view.logger(options.logger);\n if (options.logLevel != null) view.logLevel(options.logLevel);\n if (options.locale || spec.locale) {\n const loc = extend({}, spec.locale, options.locale);\n view.locale(locale(loc.number, loc.time));\n }\n view._el = null;\n view._elBind = null;\n view._renderType = options.renderer || RenderType.Canvas;\n view._scenegraph = new Scenegraph();\n const root = view._scenegraph.root;\n\n // initialize renderer, handler and event management\n view._renderer = null;\n view._tooltip = options.tooltip || defaultTooltip, view._redraw = true;\n view._handler = new CanvasHandler().scene(root);\n view._globalCursor = false;\n view._preventDefault = false;\n view._timers = [];\n view._eventListeners = [];\n view._resizeListeners = [];\n\n // initialize event configuration\n view._eventConfig = initializeEventConfig(spec.eventConfig);\n view.globalCursor(view._eventConfig.globalCursor);\n\n // initialize dataflow graph\n const ctx = runtime(view, spec, options.expr);\n view._runtime = ctx;\n view._signals = ctx.signals;\n view._bind = (spec.bindings || []).map(_ => ({\n state: null,\n param: extend({}, _)\n }));\n\n // initialize scenegraph\n if (ctx.root) ctx.root.set(root);\n root.source = ctx.data.root.input;\n view.pulse(ctx.data.root.input, view.changeset().insert(root.items));\n\n // initialize view size\n view._width = view.width();\n view._height = view.height();\n view._viewWidth = viewWidth(view, view._width);\n view._viewHeight = viewHeight(view, view._height);\n view._origin = [0, 0];\n view._resize = 0;\n view._autosize = 1;\n initializeResize(view);\n\n // initialize background color\n background(view);\n\n // initialize cursor\n cursor(view);\n\n // initialize view description\n view.description(spec.description);\n\n // initialize hover proessing, if requested\n if (options.hover) view.hover();\n\n // initialize DOM container(s) and renderer\n if (options.container) view.initialize(options.container, options.bind);\n}\nfunction lookupSignal(view, name) {\n return hasOwnProperty(view._signals, name) ? view._signals[name] : error('Unrecognized signal name: ' + stringValue(name));\n}\nfunction findOperatorHandler(op, handler) {\n const h = (op._targets || []).filter(op => op._update && op._update.handler === handler);\n return h.length ? h[0] : null;\n}\nfunction addOperatorListener(view, name, op, handler) {\n let h = findOperatorHandler(op, handler);\n if (!h) {\n h = trap(view, () => handler(name, op.value));\n h.handler = handler;\n view.on(op, null, h);\n }\n return view;\n}\nfunction removeOperatorListener(view, op, handler) {\n const h = findOperatorHandler(op, handler);\n if (h) op._targets.remove(h);\n return view;\n}\ninherits(View, Dataflow, {\n // -- DATAFLOW / RENDERING ----\n\n async evaluate(encode, prerun, postrun) {\n // evaluate dataflow and prerun\n await Dataflow.prototype.evaluate.call(this, encode, prerun);\n\n // render as needed\n if (this._redraw || this._resize) {\n try {\n if (this._renderer) {\n if (this._resize) {\n this._resize = 0;\n resizeRenderer(this);\n }\n await this._renderer.renderAsync(this._scenegraph.root);\n }\n this._redraw = false;\n } catch (e) {\n this.error(e);\n }\n }\n\n // evaluate postrun\n if (postrun) asyncCallback(this, postrun);\n return this;\n },\n dirty(item) {\n this._redraw = true;\n this._renderer && this._renderer.dirty(item);\n },\n // -- GET / SET ----\n\n description(text) {\n if (arguments.length) {\n const desc = text != null ? text + '' : null;\n if (desc !== this._desc) ariaLabel(this._el, this._desc = desc);\n return this;\n }\n return this._desc;\n },\n container() {\n return this._el;\n },\n scenegraph() {\n return this._scenegraph;\n },\n origin() {\n return this._origin.slice();\n },\n signal(name, value, options) {\n const op = lookupSignal(this, name);\n return arguments.length === 1 ? op.value : this.update(op, value, options);\n },\n width(_) {\n return arguments.length ? this.signal('width', _) : this.signal('width');\n },\n height(_) {\n return arguments.length ? this.signal('height', _) : this.signal('height');\n },\n padding(_) {\n return arguments.length ? this.signal('padding', padding(_)) : padding(this.signal('padding'));\n },\n autosize(_) {\n return arguments.length ? this.signal('autosize', _) : this.signal('autosize');\n },\n background(_) {\n return arguments.length ? this.signal('background', _) : this.signal('background');\n },\n renderer(type) {\n if (!arguments.length) return this._renderType;\n if (!renderModule(type)) error('Unrecognized renderer type: ' + type);\n if (type !== this._renderType) {\n this._renderType = type;\n this._resetRenderer();\n }\n return this;\n },\n tooltip(handler) {\n if (!arguments.length) return this._tooltip;\n if (handler !== this._tooltip) {\n this._tooltip = handler;\n this._resetRenderer();\n }\n return this;\n },\n loader(loader) {\n if (!arguments.length) return this._loader;\n if (loader !== this._loader) {\n Dataflow.prototype.loader.call(this, loader);\n this._resetRenderer();\n }\n return this;\n },\n resize() {\n // set flag to perform autosize\n this._autosize = 1;\n // touch autosize signal to ensure top-level ViewLayout runs\n return this.touch(lookupSignal(this, 'autosize'));\n },\n _resetRenderer() {\n if (this._renderer) {\n this._renderer = null;\n this.initialize(this._el, this._elBind);\n }\n },\n // -- SIZING ----\n _resizeView: resizeView,\n // -- EVENT HANDLING ----\n\n addEventListener(type, handler, options) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n // wrap callback in error handler\n callback = trap(this, handler);\n callback.raw = handler;\n }\n this._handler.on(type, callback);\n return this;\n },\n removeEventListener(type, handler) {\n var handlers = this._handler.handlers(type),\n i = handlers.length,\n h,\n t;\n\n // search registered handlers, remove if match found\n while (--i >= 0) {\n t = handlers[i].type;\n h = handlers[i].handler;\n if (type === t && (handler === h || handler === h.raw)) {\n this._handler.off(t, h);\n break;\n }\n }\n return this;\n },\n addResizeListener(handler) {\n const l = this._resizeListeners;\n if (l.indexOf(handler) < 0) {\n // add handler if it isn't already registered\n // note: error trapping handled elsewhere, so\n // no need to wrap handlers here\n l.push(handler);\n }\n return this;\n },\n removeResizeListener(handler) {\n var l = this._resizeListeners,\n i = l.indexOf(handler);\n if (i >= 0) {\n l.splice(i, 1);\n }\n return this;\n },\n addSignalListener(name, handler) {\n return addOperatorListener(this, name, lookupSignal(this, name), handler);\n },\n removeSignalListener(name, handler) {\n return removeOperatorListener(this, lookupSignal(this, name), handler);\n },\n addDataListener(name, handler) {\n return addOperatorListener(this, name, dataref(this, name).values, handler);\n },\n removeDataListener(name, handler) {\n return removeOperatorListener(this, dataref(this, name).values, handler);\n },\n globalCursor(_) {\n if (arguments.length) {\n if (this._globalCursor !== !!_) {\n const prev = setCursor(this, null); // clear previous cursor\n this._globalCursor = !!_;\n if (prev) setCursor(this, prev); // swap cursor\n }\n\n return this;\n } else {\n return this._globalCursor;\n }\n },\n preventDefault(_) {\n if (arguments.length) {\n this._preventDefault = _;\n return this;\n } else {\n return this._preventDefault;\n }\n },\n timer,\n events,\n finalize,\n hover,\n // -- DATA ----\n data,\n change,\n insert,\n remove,\n // -- SCALES --\n scale,\n // -- INITIALIZATION ----\n initialize,\n // -- HEADLESS RENDERING ----\n toImageURL: renderToImageURL,\n toCanvas: renderToCanvas,\n toSVG: renderToSVG,\n // -- SAVE / RESTORE STATE ----\n getState,\n setState\n});\n\nexport { View };\n","import {Timer, now} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer, total = delay;\n if (delay == null) return t.restart(callback, delay, time), t;\n t._restart = t.restart;\n t.restart = function(callback, delay, time) {\n delay = +delay, time = time == null ? now() : +time;\n t._restart(function tick(elapsed) {\n elapsed += total;\n t._restart(tick, total += delay, time);\n callback(elapsed);\n }, delay, time);\n }\n t.restart(callback, delay, time);\n return t;\n}\n","const VIEW = 'view',\n LBRACK = '[',\n RBRACK = ']',\n LBRACE = '{',\n RBRACE = '}',\n COLON = ':',\n COMMA = ',',\n NAME = '@',\n GT = '>',\n ILLEGAL = /[[\\]{}]/,\n DEFAULT_MARKS = {\n '*': 1,\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n };\nlet DEFAULT_SOURCE, MARKS;\n\n/**\n * Parse an event selector string.\n * Returns an array of event stream definitions.\n */\nfunction eventSelector (selector, source, marks) {\n DEFAULT_SOURCE = source || VIEW;\n MARKS = marks || DEFAULT_MARKS;\n return parseMerge(selector.trim()).map(parseSelector);\n}\nfunction isMarkType(type) {\n return MARKS[type];\n}\nfunction find(s, i, endChar, pushChar, popChar) {\n const n = s.length;\n let count = 0,\n c;\n for (; i < n; ++i) {\n c = s[i];\n if (!count && c === endChar) return i;else if (popChar && popChar.indexOf(c) >= 0) --count;else if (pushChar && pushChar.indexOf(c) >= 0) ++count;\n }\n return i;\n}\nfunction parseMerge(s) {\n const output = [],\n n = s.length;\n let start = 0,\n i = 0;\n while (i < n) {\n i = find(s, i, COMMA, LBRACK + LBRACE, RBRACK + RBRACE);\n output.push(s.substring(start, i).trim());\n start = ++i;\n }\n if (output.length === 0) {\n throw 'Empty event selector: ' + s;\n }\n return output;\n}\nfunction parseSelector(s) {\n return s[0] === '[' ? parseBetween(s) : parseStream(s);\n}\nfunction parseBetween(s) {\n const n = s.length;\n let i = 1,\n b;\n i = find(s, i, RBRACK, LBRACK, RBRACK);\n if (i === n) {\n throw 'Empty between selector: ' + s;\n }\n b = parseMerge(s.substring(1, i));\n if (b.length !== 2) {\n throw 'Between selector must have two elements: ' + s;\n }\n s = s.slice(i + 1).trim();\n if (s[0] !== GT) {\n throw 'Expected \\'>\\' after between selector: ' + s;\n }\n b = b.map(parseSelector);\n const stream = parseSelector(s.slice(1).trim());\n if (stream.between) {\n return {\n between: b,\n stream: stream\n };\n } else {\n stream.between = b;\n }\n return stream;\n}\nfunction parseStream(s) {\n const stream = {\n source: DEFAULT_SOURCE\n },\n source = [];\n let throttle = [0, 0],\n markname = 0,\n start = 0,\n n = s.length,\n i = 0,\n j,\n filter;\n\n // extract throttle from end\n if (s[n - 1] === RBRACE) {\n i = s.lastIndexOf(LBRACE);\n if (i >= 0) {\n try {\n throttle = parseThrottle(s.substring(i + 1, n - 1));\n } catch (e) {\n throw 'Invalid throttle specification: ' + s;\n }\n s = s.slice(0, i).trim();\n n = s.length;\n } else throw 'Unmatched right brace: ' + s;\n i = 0;\n }\n if (!n) throw s;\n\n // set name flag based on first char\n if (s[0] === NAME) markname = ++i;\n\n // extract first part of multi-part stream selector\n j = find(s, i, COLON);\n if (j < n) {\n source.push(s.substring(start, j).trim());\n start = i = ++j;\n }\n\n // extract remaining part of stream selector\n i = find(s, i, LBRACK);\n if (i === n) {\n source.push(s.substring(start, n).trim());\n } else {\n source.push(s.substring(start, i).trim());\n filter = [];\n start = ++i;\n if (start === n) throw 'Unmatched left bracket: ' + s;\n }\n\n // extract filters\n while (i < n) {\n i = find(s, i, RBRACK);\n if (i === n) throw 'Unmatched left bracket: ' + s;\n filter.push(s.substring(start, i).trim());\n if (i < n - 1 && s[++i] !== LBRACK) throw 'Expected left bracket: ' + s;\n start = ++i;\n }\n\n // marshall event stream specification\n if (!(n = source.length) || ILLEGAL.test(source[n - 1])) {\n throw 'Invalid event selector: ' + s;\n }\n if (n > 1) {\n stream.type = source[1];\n if (markname) {\n stream.markname = source[0].slice(1);\n } else if (isMarkType(source[0])) {\n stream.marktype = source[0];\n } else {\n stream.source = source[0];\n }\n } else {\n stream.type = source[0];\n }\n if (stream.type.slice(-1) === '!') {\n stream.consume = true;\n stream.type = stream.type.slice(0, -1);\n }\n if (filter != null) stream.filter = filter;\n if (throttle[0]) stream.throttle = throttle[0];\n if (throttle[1]) stream.debounce = throttle[1];\n return stream;\n}\nfunction parseThrottle(s) {\n const a = s.split(COMMA);\n if (!s.length || a.length > 2) throw s;\n return a.map(_ => {\n const x = +_;\n if (x !== x) throw s;\n return x;\n });\n}\n\nexport { eventSelector as parseSelector };\n","import { isObject, isArray, extend, hasOwnProperty, array, stringValue, peek, error, isString, splitAccessPath, mergeConfig } from 'vega-util';\nimport { parseExpression } from 'vega-functions';\nimport { parseSelector } from 'vega-event-selector';\nimport { isValidScaleType, isDiscrete, isQuantile, isContinuous, isDiscretizing } from 'vega-scale';\nimport { definition as definition$1 } from 'vega-dataflow';\n\nfunction parseAutosize (spec) {\n return isObject(spec) ? spec : {\n type: spec || 'pad'\n };\n}\n\nconst number = _ => +_ || 0;\nconst paddingObject = _ => ({\n top: _,\n bottom: _,\n left: _,\n right: _\n});\nfunction parsePadding (spec) {\n return !isObject(spec) ? paddingObject(number(spec)) : spec.signal ? spec : {\n top: number(spec.top),\n bottom: number(spec.bottom),\n left: number(spec.left),\n right: number(spec.right)\n };\n}\n\nconst encoder = _ => isObject(_) && !isArray(_) ? extend({}, _) : {\n value: _\n};\nfunction addEncode(object, name, value, set) {\n if (value != null) {\n const isEncoder = isObject(value) && !isArray(value) || isArray(value) && value.length && isObject(value[0]);\n\n // Always assign signal to update, even if the signal is from the enter block\n if (isEncoder) {\n object.update[name] = value;\n } else {\n object[set || 'enter'][name] = {\n value: value\n };\n }\n return 1;\n } else {\n return 0;\n }\n}\nfunction addEncoders(object, enter, update) {\n for (const name in enter) {\n addEncode(object, name, enter[name]);\n }\n for (const name in update) {\n addEncode(object, name, update[name], 'update');\n }\n}\nfunction extendEncode(encode, extra, skip) {\n for (const name in extra) {\n if (skip && hasOwnProperty(skip, name)) continue;\n encode[name] = extend(encode[name] || {}, extra[name]);\n }\n return encode;\n}\nfunction has(key, encode) {\n return encode && (encode.enter && encode.enter[key] || encode.update && encode.update[key]);\n}\n\nconst MarkRole = 'mark';\nconst FrameRole = 'frame';\nconst ScopeRole = 'scope';\nconst AxisRole = 'axis';\nconst AxisDomainRole = 'axis-domain';\nconst AxisGridRole = 'axis-grid';\nconst AxisLabelRole = 'axis-label';\nconst AxisTickRole = 'axis-tick';\nconst AxisTitleRole = 'axis-title';\nconst LegendRole = 'legend';\nconst LegendBandRole = 'legend-band';\nconst LegendEntryRole = 'legend-entry';\nconst LegendGradientRole = 'legend-gradient';\nconst LegendLabelRole = 'legend-label';\nconst LegendSymbolRole = 'legend-symbol';\nconst LegendTitleRole = 'legend-title';\nconst TitleRole = 'title';\nconst TitleTextRole = 'title-text';\nconst TitleSubtitleRole = 'title-subtitle';\n\nfunction applyDefaults (encode, type, role, style, config) {\n const defaults = {},\n enter = {};\n let update, key, skip, props;\n\n // if text mark, apply global lineBreak settings (#2370)\n key = 'lineBreak';\n if (type === 'text' && config[key] != null && !has(key, encode)) {\n applyDefault(defaults, key, config[key]);\n }\n\n // ignore legend and axis roles\n if (role == 'legend' || String(role).startsWith('axis')) {\n role = null;\n }\n\n // resolve mark config\n props = role === FrameRole ? config.group : role === MarkRole ? extend({}, config.mark, config[type]) : null;\n for (key in props) {\n // do not apply defaults if relevant fields are defined\n skip = has(key, encode) || (key === 'fill' || key === 'stroke') && (has('fill', encode) || has('stroke', encode));\n if (!skip) applyDefault(defaults, key, props[key]);\n }\n\n // resolve styles, apply with increasing precedence\n array(style).forEach(name => {\n const props = config.style && config.style[name];\n for (const key in props) {\n if (!has(key, encode)) {\n applyDefault(defaults, key, props[key]);\n }\n }\n });\n encode = extend({}, encode); // defensive copy\n for (key in defaults) {\n props = defaults[key];\n if (props.signal) {\n (update = update || {})[key] = props;\n } else {\n enter[key] = props;\n }\n }\n encode.enter = extend(enter, encode.enter);\n if (update) encode.update = extend(update, encode.update);\n return encode;\n}\nfunction applyDefault(defaults, key, value) {\n defaults[key] = value && value.signal ? {\n signal: value.signal\n } : {\n value: value\n };\n}\n\nconst scaleRef = scale => isString(scale) ? stringValue(scale) : scale.signal ? `(${scale.signal})` : field(scale);\nfunction entry$1(enc) {\n if (enc.gradient != null) {\n return gradient(enc);\n }\n let value = enc.signal ? `(${enc.signal})` : enc.color ? color(enc.color) : enc.field != null ? field(enc.field) : enc.value !== undefined ? stringValue(enc.value) : undefined;\n if (enc.scale != null) {\n value = scale(enc, value);\n }\n if (value === undefined) {\n value = null;\n }\n if (enc.exponent != null) {\n value = `pow(${value},${property(enc.exponent)})`;\n }\n if (enc.mult != null) {\n value += `*${property(enc.mult)}`;\n }\n if (enc.offset != null) {\n value += `+${property(enc.offset)}`;\n }\n if (enc.round) {\n value = `round(${value})`;\n }\n return value;\n}\nconst _color = (type, x, y, z) => `(${type}(${[x, y, z].map(entry$1).join(',')})+'')`;\nfunction color(enc) {\n return enc.c ? _color('hcl', enc.h, enc.c, enc.l) : enc.h || enc.s ? _color('hsl', enc.h, enc.s, enc.l) : enc.l || enc.a ? _color('lab', enc.l, enc.a, enc.b) : enc.r || enc.g || enc.b ? _color('rgb', enc.r, enc.g, enc.b) : null;\n}\nfunction gradient(enc) {\n // map undefined to null; expression lang does not allow undefined\n const args = [enc.start, enc.stop, enc.count].map(_ => _ == null ? null : stringValue(_));\n\n // trim null inputs from the end\n while (args.length && peek(args) == null) args.pop();\n args.unshift(scaleRef(enc.gradient));\n return `gradient(${args.join(',')})`;\n}\nfunction property(property) {\n return isObject(property) ? '(' + entry$1(property) + ')' : property;\n}\nfunction field(ref) {\n return resolveField(isObject(ref) ? ref : {\n datum: ref\n });\n}\nfunction resolveField(ref) {\n let object, level, field;\n if (ref.signal) {\n object = 'datum';\n field = ref.signal;\n } else if (ref.group || ref.parent) {\n level = Math.max(1, ref.level || 1);\n object = 'item';\n while (level-- > 0) {\n object += '.mark.group';\n }\n if (ref.parent) {\n field = ref.parent;\n object += '.datum';\n } else {\n field = ref.group;\n }\n } else if (ref.datum) {\n object = 'datum';\n field = ref.datum;\n } else {\n error('Invalid field reference: ' + stringValue(ref));\n }\n if (!ref.signal) {\n field = isString(field) ? splitAccessPath(field).map(stringValue).join('][') : resolveField(field);\n }\n return object + '[' + field + ']';\n}\nfunction scale(enc, value) {\n const scale = scaleRef(enc.scale);\n if (enc.range != null) {\n // pull value from scale range\n value = `lerp(_range(${scale}), ${+enc.range})`;\n } else {\n // run value through scale and/or pull scale bandwidth\n if (value !== undefined) value = `_scale(${scale}, ${value})`;\n if (enc.band) {\n value = (value ? value + '+' : '') + `_bandwidth(${scale})` + (+enc.band === 1 ? '' : '*' + property(enc.band));\n if (enc.extra) {\n // include logic to handle extraneous elements\n value = `(datum.extra ? _scale(${scale}, datum.extra.value) : ${value})`;\n }\n }\n if (value == null) value = '0';\n }\n return value;\n}\n\nfunction rule (enc) {\n let code = '';\n enc.forEach(rule => {\n const value = entry$1(rule);\n code += rule.test ? `(${rule.test})?${value}:` : value;\n });\n\n // if no else clause, terminate with null (#1366)\n if (peek(code) === ':') {\n code += 'null';\n }\n return code;\n}\n\nfunction parseEncode (encode, type, role, style, scope, params) {\n const enc = {};\n params = params || {};\n params.encoders = {\n $encode: enc\n };\n encode = applyDefaults(encode, type, role, style, scope.config);\n for (const key in encode) {\n enc[key] = parseBlock(encode[key], type, params, scope);\n }\n return params;\n}\nfunction parseBlock(block, marktype, params, scope) {\n const channels = {},\n fields = {};\n for (const name in block) {\n if (block[name] != null) {\n // skip any null entries\n channels[name] = parse$1(expr(block[name]), scope, params, fields);\n }\n }\n return {\n $expr: {\n marktype,\n channels\n },\n $fields: Object.keys(fields),\n $output: Object.keys(block)\n };\n}\nfunction expr(enc) {\n return isArray(enc) ? rule(enc) : entry$1(enc);\n}\nfunction parse$1(code, scope, params, fields) {\n const expr = parseExpression(code, scope);\n expr.$fields.forEach(name => fields[name] = 1);\n extend(params, expr.$params);\n return expr.$expr;\n}\n\nconst OUTER = 'outer',\n OUTER_INVALID = ['value', 'update', 'init', 'react', 'bind'];\nfunction outerError(prefix, name) {\n error(prefix + ' for \"outer\" push: ' + stringValue(name));\n}\nfunction parseSignal (signal, scope) {\n const name = signal.name;\n if (signal.push === OUTER) {\n // signal must already be defined, raise error if not\n if (!scope.signals[name]) outerError('No prior signal definition', name);\n // signal push must not use properties reserved for standard definition\n OUTER_INVALID.forEach(prop => {\n if (signal[prop] !== undefined) outerError('Invalid property ', prop);\n });\n } else {\n // define a new signal in the current scope\n const op = scope.addSignal(name, signal.value);\n if (signal.react === false) op.react = false;\n if (signal.bind) scope.addBinding(name, signal.bind);\n }\n}\n\nfunction Entry(type, value, params, parent) {\n this.id = -1;\n this.type = type;\n this.value = value;\n this.params = params;\n if (parent) this.parent = parent;\n}\nfunction entry(type, value, params, parent) {\n return new Entry(type, value, params, parent);\n}\nfunction operator(value, params) {\n return entry('operator', value, params);\n}\n\n// -----\n\nfunction ref(op) {\n const ref = {\n $ref: op.id\n };\n // if operator not yet registered, cache ref to resolve later\n if (op.id < 0) (op.refs = op.refs || []).push(ref);\n return ref;\n}\nfunction fieldRef$1(field, name) {\n return name ? {\n $field: field,\n $name: name\n } : {\n $field: field\n };\n}\nconst keyFieldRef = fieldRef$1('key');\nfunction compareRef(fields, orders) {\n return {\n $compare: fields,\n $order: orders\n };\n}\nfunction keyRef(fields, flat) {\n const ref = {\n $key: fields\n };\n if (flat) ref.$flat = true;\n return ref;\n}\n\n// -----\n\nconst Ascending = 'ascending';\nconst Descending = 'descending';\nfunction sortKey(sort) {\n return !isObject(sort) ? '' : (sort.order === Descending ? '-' : '+') + aggrField(sort.op, sort.field);\n}\nfunction aggrField(op, field) {\n return (op && op.signal ? '$' + op.signal : op || '') + (op && field ? '_' : '') + (field && field.signal ? '$' + field.signal : field || '');\n}\n\n// -----\n\nconst Scope$1 = 'scope';\nconst View = 'view';\nfunction isSignal(_) {\n return _ && _.signal;\n}\nfunction isExpr$1(_) {\n return _ && _.expr;\n}\nfunction hasSignal(_) {\n if (isSignal(_)) return true;\n if (isObject(_)) for (const key in _) {\n if (hasSignal(_[key])) return true;\n }\n return false;\n}\nfunction value(specValue, defaultValue) {\n return specValue != null ? specValue : defaultValue;\n}\nfunction deref(v) {\n return v && v.signal || v;\n}\n\nconst Timer = 'timer';\nfunction parseStream(stream, scope) {\n const method = stream.merge ? mergeStream : stream.stream ? nestedStream : stream.type ? eventStream : error('Invalid stream specification: ' + stringValue(stream));\n return method(stream, scope);\n}\nfunction eventSource(source) {\n return source === Scope$1 ? View : source || View;\n}\nfunction mergeStream(stream, scope) {\n const list = stream.merge.map(s => parseStream(s, scope)),\n entry = streamParameters({\n merge: list\n }, stream, scope);\n return scope.addStream(entry).id;\n}\nfunction nestedStream(stream, scope) {\n const id = parseStream(stream.stream, scope),\n entry = streamParameters({\n stream: id\n }, stream, scope);\n return scope.addStream(entry).id;\n}\nfunction eventStream(stream, scope) {\n let id;\n if (stream.type === Timer) {\n id = scope.event(Timer, stream.throttle);\n stream = {\n between: stream.between,\n filter: stream.filter\n };\n } else {\n id = scope.event(eventSource(stream.source), stream.type);\n }\n const entry = streamParameters({\n stream: id\n }, stream, scope);\n return Object.keys(entry).length === 1 ? id : scope.addStream(entry).id;\n}\nfunction streamParameters(entry, stream, scope) {\n let param = stream.between;\n if (param) {\n if (param.length !== 2) {\n error('Stream \"between\" parameter must have 2 entries: ' + stringValue(stream));\n }\n entry.between = [parseStream(param[0], scope), parseStream(param[1], scope)];\n }\n param = stream.filter ? [].concat(stream.filter) : [];\n if (stream.marktype || stream.markname || stream.markrole) {\n // add filter for mark type, name and/or role\n param.push(filterMark(stream.marktype, stream.markname, stream.markrole));\n }\n if (stream.source === Scope$1) {\n // add filter to limit events from sub-scope only\n param.push('inScope(event.item)');\n }\n if (param.length) {\n entry.filter = parseExpression('(' + param.join(')&&(') + ')', scope).$expr;\n }\n if ((param = stream.throttle) != null) {\n entry.throttle = +param;\n }\n if ((param = stream.debounce) != null) {\n entry.debounce = +param;\n }\n if (stream.consume) {\n entry.consume = true;\n }\n return entry;\n}\nfunction filterMark(type, name, role) {\n const item = 'event.item';\n return item + (type && type !== '*' ? '&&' + item + '.mark.marktype===\\'' + type + '\\'' : '') + (role ? '&&' + item + '.mark.role===\\'' + role + '\\'' : '') + (name ? '&&' + item + '.mark.name===\\'' + name + '\\'' : '');\n}\n\n// bypass expression parser for internal operator references\nconst OP_VALUE_EXPR = {\n code: '_.$value',\n ast: {\n type: 'Identifier',\n value: 'value'\n }\n};\nfunction parseUpdate (spec, scope, target) {\n const encode = spec.encode,\n entry = {\n target: target\n };\n let events = spec.events,\n update = spec.update,\n sources = [];\n if (!events) {\n error('Signal update missing events specification.');\n }\n\n // interpret as an event selector string\n if (isString(events)) {\n events = parseSelector(events, scope.isSubscope() ? Scope$1 : View);\n }\n\n // separate event streams from signal updates\n events = array(events).filter(s => s.signal || s.scale ? (sources.push(s), 0) : 1);\n\n // merge internal operator listeners\n if (sources.length > 1) {\n sources = [mergeSources(sources)];\n }\n\n // merge event streams, include as source\n if (events.length) {\n sources.push(events.length > 1 ? {\n merge: events\n } : events[0]);\n }\n if (encode != null) {\n if (update) error('Signal encode and update are mutually exclusive.');\n update = 'encode(item(),' + stringValue(encode) + ')';\n }\n\n // resolve update value\n entry.update = isString(update) ? parseExpression(update, scope) : update.expr != null ? parseExpression(update.expr, scope) : update.value != null ? update.value : update.signal != null ? {\n $expr: OP_VALUE_EXPR,\n $params: {\n $value: scope.signalRef(update.signal)\n }\n } : error('Invalid signal update specification.');\n if (spec.force) {\n entry.options = {\n force: true\n };\n }\n sources.forEach(source => scope.addUpdate(extend(streamSource(source, scope), entry)));\n}\nfunction streamSource(stream, scope) {\n return {\n source: stream.signal ? scope.signalRef(stream.signal) : stream.scale ? scope.scaleRef(stream.scale) : parseStream(stream, scope)\n };\n}\nfunction mergeSources(sources) {\n return {\n signal: '[' + sources.map(s => s.scale ? 'scale(\"' + s.scale + '\")' : s.signal) + ']'\n };\n}\n\nfunction parseSignalUpdates (signal, scope) {\n const op = scope.getSignal(signal.name);\n let expr = signal.update;\n if (signal.init) {\n if (expr) {\n error('Signals can not include both init and update expressions.');\n } else {\n expr = signal.init;\n op.initonly = true;\n }\n }\n if (expr) {\n expr = parseExpression(expr, scope);\n op.update = expr.$expr;\n op.params = expr.$params;\n }\n if (signal.on) {\n signal.on.forEach(_ => parseUpdate(_, scope, op.id));\n }\n}\n\nconst transform = name => (params, value, parent) => entry(name, value, params || undefined, parent);\nconst Aggregate = transform('aggregate');\nconst AxisTicks = transform('axisticks');\nconst Bound = transform('bound');\nconst Collect = transform('collect');\nconst Compare = transform('compare');\nconst DataJoin = transform('datajoin');\nconst Encode = transform('encode');\nconst Expression = transform('expression');\nconst Facet = transform('facet');\nconst Field = transform('field');\nconst Key = transform('key');\nconst LegendEntries = transform('legendentries');\nconst Load = transform('load');\nconst Mark = transform('mark');\nconst MultiExtent = transform('multiextent');\nconst MultiValues = transform('multivalues');\nconst Overlap = transform('overlap');\nconst Params = transform('params');\nconst PreFacet = transform('prefacet');\nconst Projection = transform('projection');\nconst Proxy = transform('proxy');\nconst Relay = transform('relay');\nconst Render = transform('render');\nconst Scale = transform('scale');\nconst Sieve = transform('sieve');\nconst SortItems = transform('sortitems');\nconst ViewLayout = transform('viewlayout');\nconst Values = transform('values');\n\nlet FIELD_REF_ID = 0;\nconst MULTIDOMAIN_SORT_OPS = {\n min: 'min',\n max: 'max',\n count: 'sum'\n};\nfunction initScale(spec, scope) {\n const type = spec.type || 'linear';\n if (!isValidScaleType(type)) {\n error('Unrecognized scale type: ' + stringValue(type));\n }\n scope.addScale(spec.name, {\n type,\n domain: undefined\n });\n}\nfunction parseScale(spec, scope) {\n const params = scope.getScale(spec.name).params;\n let key;\n params.domain = parseScaleDomain(spec.domain, spec, scope);\n if (spec.range != null) {\n params.range = parseScaleRange(spec, scope, params);\n }\n if (spec.interpolate != null) {\n parseScaleInterpolate(spec.interpolate, params);\n }\n if (spec.nice != null) {\n params.nice = parseScaleNice(spec.nice);\n }\n if (spec.bins != null) {\n params.bins = parseScaleBins(spec.bins, scope);\n }\n for (key in spec) {\n if (hasOwnProperty(params, key) || key === 'name') continue;\n params[key] = parseLiteral(spec[key], scope);\n }\n}\nfunction parseLiteral(v, scope) {\n return !isObject(v) ? v : v.signal ? scope.signalRef(v.signal) : error('Unsupported object: ' + stringValue(v));\n}\nfunction parseArray(v, scope) {\n return v.signal ? scope.signalRef(v.signal) : v.map(v => parseLiteral(v, scope));\n}\nfunction dataLookupError(name) {\n error('Can not find data set: ' + stringValue(name));\n}\n\n// -- SCALE DOMAIN ----\n\nfunction parseScaleDomain(domain, spec, scope) {\n if (!domain) {\n if (spec.domainMin != null || spec.domainMax != null) {\n error('No scale domain defined for domainMin/domainMax to override.');\n }\n return; // default domain\n }\n\n return domain.signal ? scope.signalRef(domain.signal) : (isArray(domain) ? explicitDomain : domain.fields ? multipleDomain : singularDomain)(domain, spec, scope);\n}\nfunction explicitDomain(domain, spec, scope) {\n return domain.map(v => parseLiteral(v, scope));\n}\nfunction singularDomain(domain, spec, scope) {\n const data = scope.getData(domain.data);\n if (!data) dataLookupError(domain.data);\n return isDiscrete(spec.type) ? data.valuesRef(scope, domain.field, parseSort(domain.sort, false)) : isQuantile(spec.type) ? data.domainRef(scope, domain.field) : data.extentRef(scope, domain.field);\n}\nfunction multipleDomain(domain, spec, scope) {\n const data = domain.data,\n fields = domain.fields.reduce((dom, d) => {\n d = isString(d) ? {\n data: data,\n field: d\n } : isArray(d) || d.signal ? fieldRef(d, scope) : d;\n dom.push(d);\n return dom;\n }, []);\n return (isDiscrete(spec.type) ? ordinalMultipleDomain : isQuantile(spec.type) ? quantileMultipleDomain : numericMultipleDomain)(domain, scope, fields);\n}\nfunction fieldRef(data, scope) {\n const name = '_:vega:_' + FIELD_REF_ID++,\n coll = Collect({});\n if (isArray(data)) {\n coll.value = {\n $ingest: data\n };\n } else if (data.signal) {\n const code = 'setdata(' + stringValue(name) + ',' + data.signal + ')';\n coll.params.input = scope.signalRef(code);\n }\n scope.addDataPipeline(name, [coll, Sieve({})]);\n return {\n data: name,\n field: 'data'\n };\n}\nfunction ordinalMultipleDomain(domain, scope, fields) {\n const sort = parseSort(domain.sort, true);\n let a, v;\n\n // get value counts for each domain field\n const counts = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.countsRef(scope, f.field, sort);\n });\n\n // aggregate the results from each domain field\n const p = {\n groupby: keyFieldRef,\n pulse: counts\n };\n if (sort) {\n a = sort.op || 'count';\n v = sort.field ? aggrField(a, sort.field) : 'count';\n p.ops = [MULTIDOMAIN_SORT_OPS[a]];\n p.fields = [scope.fieldRef(v)];\n p.as = [v];\n }\n a = scope.add(Aggregate(p));\n\n // collect aggregate output\n const c = scope.add(Collect({\n pulse: ref(a)\n }));\n\n // extract values for combined domain\n v = scope.add(Values({\n field: keyFieldRef,\n sort: scope.sortRef(sort),\n pulse: ref(c)\n }));\n return ref(v);\n}\nfunction parseSort(sort, multidomain) {\n if (sort) {\n if (!sort.field && !sort.op) {\n if (isObject(sort)) sort.field = 'key';else sort = {\n field: 'key'\n };\n } else if (!sort.field && sort.op !== 'count') {\n error('No field provided for sort aggregate op: ' + sort.op);\n } else if (multidomain && sort.field) {\n if (sort.op && !MULTIDOMAIN_SORT_OPS[sort.op]) {\n error('Multiple domain scales can not be sorted using ' + sort.op);\n }\n }\n }\n return sort;\n}\nfunction quantileMultipleDomain(domain, scope, fields) {\n // get value arrays for each domain field\n const values = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.domainRef(scope, f.field);\n });\n\n // combine value arrays\n return ref(scope.add(MultiValues({\n values: values\n })));\n}\nfunction numericMultipleDomain(domain, scope, fields) {\n // get extents for each domain field\n const extents = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.extentRef(scope, f.field);\n });\n\n // combine extents\n return ref(scope.add(MultiExtent({\n extents: extents\n })));\n}\n\n// -- SCALE BINS -----\n\nfunction parseScaleBins(v, scope) {\n return v.signal || isArray(v) ? parseArray(v, scope) : scope.objectProperty(v);\n}\n\n// -- SCALE NICE -----\n\nfunction parseScaleNice(nice) {\n return isObject(nice) ? {\n interval: parseLiteral(nice.interval),\n step: parseLiteral(nice.step)\n } : parseLiteral(nice);\n}\n\n// -- SCALE INTERPOLATION -----\n\nfunction parseScaleInterpolate(interpolate, params) {\n params.interpolate = parseLiteral(interpolate.type || interpolate);\n if (interpolate.gamma != null) {\n params.interpolateGamma = parseLiteral(interpolate.gamma);\n }\n}\n\n// -- SCALE RANGE -----\n\nfunction parseScaleRange(spec, scope, params) {\n const config = scope.config.range;\n let range = spec.range;\n if (range.signal) {\n return scope.signalRef(range.signal);\n } else if (isString(range)) {\n if (config && hasOwnProperty(config, range)) {\n spec = extend({}, spec, {\n range: config[range]\n });\n return parseScaleRange(spec, scope, params);\n } else if (range === 'width') {\n range = [0, {\n signal: 'width'\n }];\n } else if (range === 'height') {\n range = isDiscrete(spec.type) ? [0, {\n signal: 'height'\n }] : [{\n signal: 'height'\n }, 0];\n } else {\n error('Unrecognized scale range value: ' + stringValue(range));\n }\n } else if (range.scheme) {\n params.scheme = isArray(range.scheme) ? parseArray(range.scheme, scope) : parseLiteral(range.scheme, scope);\n if (range.extent) params.schemeExtent = parseArray(range.extent, scope);\n if (range.count) params.schemeCount = parseLiteral(range.count, scope);\n return;\n } else if (range.step) {\n params.rangeStep = parseLiteral(range.step, scope);\n return;\n } else if (isDiscrete(spec.type) && !isArray(range)) {\n return parseScaleDomain(range, spec, scope);\n } else if (!isArray(range)) {\n error('Unsupported range type: ' + stringValue(range));\n }\n return range.map(v => (isArray(v) ? parseArray : parseLiteral)(v, scope));\n}\n\nfunction parseProjection (proj, scope) {\n const config = scope.config.projection || {},\n params = {};\n for (const name in proj) {\n if (name === 'name') continue;\n params[name] = parseParameter$1(proj[name], name, scope);\n }\n\n // apply projection defaults from config\n for (const name in config) {\n if (params[name] == null) {\n params[name] = parseParameter$1(config[name], name, scope);\n }\n }\n scope.addProjection(proj.name, params);\n}\nfunction parseParameter$1(_, name, scope) {\n return isArray(_) ? _.map(_ => parseParameter$1(_, name, scope)) : !isObject(_) ? _ : _.signal ? scope.signalRef(_.signal) : name === 'fit' ? _ : error('Unsupported parameter object: ' + stringValue(_));\n}\n\nconst Top = 'top';\nconst Left = 'left';\nconst Right = 'right';\nconst Bottom = 'bottom';\nconst Center = 'center';\nconst Vertical = 'vertical';\nconst Start = 'start';\nconst Middle = 'middle';\nconst End = 'end';\nconst Index = 'index';\nconst Label = 'label';\nconst Offset = 'offset';\nconst Perc = 'perc';\nconst Perc2 = 'perc2';\nconst Value = 'value';\nconst GuideLabelStyle = 'guide-label';\nconst GuideTitleStyle = 'guide-title';\nconst GroupTitleStyle = 'group-title';\nconst GroupSubtitleStyle = 'group-subtitle';\nconst Symbols = 'symbol';\nconst Gradient = 'gradient';\nconst Discrete = 'discrete';\nconst Size = 'size';\nconst Shape = 'shape';\nconst Fill = 'fill';\nconst Stroke = 'stroke';\nconst StrokeWidth = 'strokeWidth';\nconst StrokeDash = 'strokeDash';\nconst Opacity = 'opacity';\n\n// Encoding channels supported by legends\n// In priority order of 'canonical' scale\nconst LegendScales = [Size, Shape, Fill, Stroke, StrokeWidth, StrokeDash, Opacity];\nconst Skip = {\n name: 1,\n style: 1,\n interactive: 1\n};\nconst zero = {\n value: 0\n};\nconst one = {\n value: 1\n};\n\nconst GroupMark = 'group';\nconst RectMark = 'rect';\nconst RuleMark = 'rule';\nconst SymbolMark = 'symbol';\nconst TextMark = 'text';\n\nfunction guideGroup (mark) {\n mark.type = GroupMark;\n mark.interactive = mark.interactive || false;\n return mark;\n}\n\nfunction lookup(spec, config) {\n const _ = (name, dflt) => value(spec[name], value(config[name], dflt));\n _.isVertical = s => Vertical === value(spec.direction, config.direction || (s ? config.symbolDirection : config.gradientDirection));\n _.gradientLength = () => value(spec.gradientLength, config.gradientLength || config.gradientWidth);\n _.gradientThickness = () => value(spec.gradientThickness, config.gradientThickness || config.gradientHeight);\n _.entryColumns = () => value(spec.columns, value(config.columns, +_.isVertical(true)));\n return _;\n}\nfunction getEncoding(name, encode) {\n const v = encode && (encode.update && encode.update[name] || encode.enter && encode.enter[name]);\n return v && v.signal ? v : v ? v.value : null;\n}\nfunction getStyle(name, scope, style) {\n const s = scope.config.style[style];\n return s && s[name];\n}\nfunction anchorExpr(s, e, m) {\n return `item.anchor === '${Start}' ? ${s} : item.anchor === '${End}' ? ${e} : ${m}`;\n}\nconst alignExpr$1 = anchorExpr(stringValue(Left), stringValue(Right), stringValue(Center));\nfunction tickBand(_) {\n const v = _('tickBand');\n let offset = _('tickOffset'),\n band,\n extra;\n if (!v) {\n // if no tick band entry, fall back on other properties\n band = _('bandPosition');\n extra = _('tickExtra');\n } else if (v.signal) {\n // if signal, augment code to interpret values\n band = {\n signal: `(${v.signal}) === 'extent' ? 1 : 0.5`\n };\n extra = {\n signal: `(${v.signal}) === 'extent'`\n };\n if (!isObject(offset)) {\n offset = {\n signal: `(${v.signal}) === 'extent' ? 0 : ${offset}`\n };\n }\n } else if (v === 'extent') {\n // if constant, simply set values\n band = 1;\n extra = true;\n offset = 0;\n } else {\n band = 0.5;\n extra = false;\n }\n return {\n extra,\n band,\n offset\n };\n}\nfunction extendOffset(value, offset) {\n return !offset ? value : !value ? offset : !isObject(value) ? {\n value,\n offset\n } : Object.assign({}, value, {\n offset: extendOffset(value.offset, offset)\n });\n}\n\nfunction guideMark (mark, extras) {\n if (extras) {\n mark.name = extras.name;\n mark.style = extras.style || mark.style;\n mark.interactive = !!extras.interactive;\n mark.encode = extendEncode(mark.encode, extras, Skip);\n } else {\n mark.interactive = false;\n }\n return mark;\n}\n\nfunction legendGradient (spec, scale, config, userEncode) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = _.gradientThickness(),\n length = _.gradientLength();\n let enter, start, stop, width, height;\n if (vertical) {\n start = [0, 1];\n stop = [0, 0];\n width = thickness;\n height = length;\n } else {\n start = [0, 0];\n stop = [1, 0];\n width = length;\n height = thickness;\n }\n const encode = {\n enter: enter = {\n opacity: zero,\n x: zero,\n y: zero,\n width: encoder(width),\n height: encoder(height)\n },\n update: extend({}, enter, {\n opacity: one,\n fill: {\n gradient: scale,\n start: start,\n stop: stop\n }\n }),\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gradientStrokeColor'),\n strokeWidth: _('gradientStrokeWidth')\n }, {\n // update\n opacity: _('gradientOpacity')\n });\n return guideMark({\n type: RectMark,\n role: LegendGradientRole,\n encode\n }, userEncode);\n}\n\nfunction legendGradientDiscrete (spec, scale, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = _.gradientThickness(),\n length = _.gradientLength();\n let u,\n v,\n uu,\n vv,\n adjust = '';\n vertical ? (u = 'y', uu = 'y2', v = 'x', vv = 'width', adjust = '1-') : (u = 'x', uu = 'x2', v = 'y', vv = 'height');\n const enter = {\n opacity: zero,\n fill: {\n scale: scale,\n field: Value\n }\n };\n enter[u] = {\n signal: adjust + 'datum.' + Perc,\n mult: length\n };\n enter[v] = zero;\n enter[uu] = {\n signal: adjust + 'datum.' + Perc2,\n mult: length\n };\n enter[vv] = encoder(thickness);\n const encode = {\n enter: enter,\n update: extend({}, enter, {\n opacity: one\n }),\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gradientStrokeColor'),\n strokeWidth: _('gradientStrokeWidth')\n }, {\n // update\n opacity: _('gradientOpacity')\n });\n return guideMark({\n type: RectMark,\n role: LegendBandRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nconst alignExpr = `datum.${Perc}<=0?\"${Left}\":datum.${Perc}>=1?\"${Right}\":\"${Center}\"`,\n baselineExpr = `datum.${Perc}<=0?\"${Bottom}\":datum.${Perc}>=1?\"${Top}\":\"${Middle}\"`;\nfunction legendGradientLabels (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = encoder(_.gradientThickness()),\n length = _.gradientLength();\n let overlap = _('labelOverlap'),\n enter,\n update,\n u,\n v,\n adjust = '';\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one,\n text: {\n field: Label\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontStyle: _('labelFontStyle'),\n fontWeight: _('labelFontWeight'),\n limit: value(spec.labelLimit, config.gradientLabelLimit)\n });\n if (vertical) {\n enter.align = {\n value: 'left'\n };\n enter.baseline = update.baseline = {\n signal: baselineExpr\n };\n u = 'y';\n v = 'x';\n adjust = '1-';\n } else {\n enter.align = update.align = {\n signal: alignExpr\n };\n enter.baseline = {\n value: 'top'\n };\n u = 'x';\n v = 'y';\n }\n enter[u] = update[u] = {\n signal: adjust + 'datum.' + Perc,\n mult: length\n };\n enter[v] = update[v] = thickness;\n thickness.offset = value(spec.labelOffset, config.gradientLabelOffset) || 0;\n overlap = overlap ? {\n separation: _('labelSeparation'),\n method: overlap,\n order: 'datum.' + Index\n } : undefined;\n\n // type, role, style, key, dataRef, encode, extras\n return guideMark({\n type: TextMark,\n role: LegendLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: dataRef,\n encode,\n overlap\n }, userEncode);\n}\n\n// userEncode is top-level, includes entries, symbols, labels\nfunction legendSymbolGroups (spec, config, userEncode, dataRef, columns) {\n const _ = lookup(spec, config),\n entries = userEncode.entries,\n interactive = !!(entries && entries.interactive),\n name = entries ? entries.name : undefined,\n height = _('clipHeight'),\n symbolOffset = _('symbolOffset'),\n valueRef = {\n data: 'value'\n },\n xSignal = `(${columns}) ? datum.${Offset} : datum.${Size}`,\n yEncode = height ? encoder(height) : {\n field: Size\n },\n index = `datum.${Index}`,\n ncols = `max(1, ${columns})`;\n let encode, enter, update, nrows, sort;\n yEncode.mult = 0.5;\n\n // -- LEGEND SYMBOLS --\n encode = {\n enter: enter = {\n opacity: zero,\n x: {\n signal: xSignal,\n mult: 0.5,\n offset: symbolOffset\n },\n y: yEncode\n },\n update: update = {\n opacity: one,\n x: enter.x,\n y: enter.y\n },\n exit: {\n opacity: zero\n }\n };\n let baseFill = null,\n baseStroke = null;\n if (!spec.fill) {\n baseFill = config.symbolBaseFillColor;\n baseStroke = config.symbolBaseStrokeColor;\n }\n addEncoders(encode, {\n fill: _('symbolFillColor', baseFill),\n shape: _('symbolType'),\n size: _('symbolSize'),\n stroke: _('symbolStrokeColor', baseStroke),\n strokeDash: _('symbolDash'),\n strokeDashOffset: _('symbolDashOffset'),\n strokeWidth: _('symbolStrokeWidth')\n }, {\n // update\n opacity: _('symbolOpacity')\n });\n LegendScales.forEach(scale => {\n if (spec[scale]) {\n update[scale] = enter[scale] = {\n scale: spec[scale],\n field: Value\n };\n }\n });\n const symbols = guideMark({\n type: SymbolMark,\n role: LegendSymbolRole,\n key: Value,\n from: valueRef,\n clip: height ? true : undefined,\n encode\n }, userEncode.symbols);\n\n // -- LEGEND LABELS --\n const labelOffset = encoder(symbolOffset);\n labelOffset.offset = _('labelOffset');\n encode = {\n enter: enter = {\n opacity: zero,\n x: {\n signal: xSignal,\n offset: labelOffset\n },\n y: yEncode\n },\n update: update = {\n opacity: one,\n text: {\n field: Label\n },\n x: enter.x,\n y: enter.y\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n align: _('labelAlign'),\n baseline: _('labelBaseline'),\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontStyle: _('labelFontStyle'),\n fontWeight: _('labelFontWeight'),\n limit: _('labelLimit')\n });\n const labels = guideMark({\n type: TextMark,\n role: LegendLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: valueRef,\n encode\n }, userEncode.labels);\n\n // -- LEGEND ENTRY GROUPS --\n encode = {\n enter: {\n noBound: {\n value: !height\n },\n // ignore width/height in bounds calc\n width: zero,\n height: height ? encoder(height) : zero,\n opacity: zero\n },\n exit: {\n opacity: zero\n },\n update: update = {\n opacity: one,\n row: {\n signal: null\n },\n column: {\n signal: null\n }\n }\n };\n\n // annotate and sort groups to ensure correct ordering\n if (_.isVertical(true)) {\n nrows = `ceil(item.mark.items.length / ${ncols})`;\n update.row.signal = `${index}%${nrows}`;\n update.column.signal = `floor(${index} / ${nrows})`;\n sort = {\n field: ['row', index]\n };\n } else {\n update.row.signal = `floor(${index} / ${ncols})`;\n update.column.signal = `${index} % ${ncols}`;\n sort = {\n field: index\n };\n }\n // handle zero column case (implies infinite columns)\n update.column.signal = `(${columns})?${update.column.signal}:${index}`;\n\n // facet legend entries into sub-groups\n dataRef = {\n facet: {\n data: dataRef,\n name: 'value',\n groupby: Index\n }\n };\n return guideGroup({\n role: ScopeRole,\n from: dataRef,\n encode: extendEncode(encode, entries, Skip),\n marks: [symbols, labels],\n name,\n interactive,\n sort\n });\n}\nfunction legendSymbolLayout(spec, config) {\n const _ = lookup(spec, config);\n\n // layout parameters for legend entries\n return {\n align: _('gridAlign'),\n columns: _.entryColumns(),\n center: {\n row: true,\n column: false\n },\n padding: {\n row: _('rowPadding'),\n column: _('columnPadding')\n }\n };\n}\n\n// expression logic for align, anchor, angle, and baseline calculation\nconst isL = 'item.orient === \"left\"',\n isR = 'item.orient === \"right\"',\n isLR = `(${isL} || ${isR})`,\n isVG = `datum.vgrad && ${isLR}`,\n baseline = anchorExpr('\"top\"', '\"bottom\"', '\"middle\"'),\n alignFlip = anchorExpr('\"right\"', '\"left\"', '\"center\"'),\n exprAlign = `datum.vgrad && ${isR} ? (${alignFlip}) : (${isLR} && !(datum.vgrad && ${isL})) ? \"left\" : ${alignExpr$1}`,\n exprAnchor = `item._anchor || (${isLR} ? \"middle\" : \"start\")`,\n exprAngle = `${isVG} ? (${isL} ? -90 : 90) : 0`,\n exprBaseline = `${isLR} ? (datum.vgrad ? (${isR} ? \"bottom\" : \"top\") : ${baseline}) : \"top\"`;\nfunction legendTitle (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config);\n const encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: one,\n x: {\n field: {\n group: 'padding'\n }\n },\n y: {\n field: {\n group: 'padding'\n }\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n orient: _('titleOrient'),\n _anchor: _('titleAnchor'),\n anchor: {\n signal: exprAnchor\n },\n angle: {\n signal: exprAngle\n },\n align: {\n signal: exprAlign\n },\n baseline: {\n signal: exprBaseline\n },\n text: spec.title,\n fill: _('titleColor'),\n fillOpacity: _('titleOpacity'),\n font: _('titleFont'),\n fontSize: _('titleFontSize'),\n fontStyle: _('titleFontStyle'),\n fontWeight: _('titleFontWeight'),\n limit: _('titleLimit'),\n lineHeight: _('titleLineHeight')\n }, {\n // require update\n align: _('titleAlign'),\n baseline: _('titleBaseline')\n });\n return guideMark({\n type: TextMark,\n role: LegendTitleRole,\n style: GuideTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction clip (clip, scope) {\n let expr;\n if (isObject(clip)) {\n if (clip.signal) {\n expr = clip.signal;\n } else if (clip.path) {\n expr = 'pathShape(' + param(clip.path) + ')';\n } else if (clip.sphere) {\n expr = 'geoShape(' + param(clip.sphere) + ', {type: \"Sphere\"})';\n }\n }\n return expr ? scope.signalRef(expr) : !!clip;\n}\nfunction param(value) {\n return isObject(value) && value.signal ? value.signal : stringValue(value);\n}\n\nfunction getRole (spec) {\n const role = spec.role || '';\n return !role.indexOf('axis') || !role.indexOf('legend') || !role.indexOf('title') ? role : spec.type === GroupMark ? ScopeRole : role || MarkRole;\n}\n\nfunction definition (spec) {\n return {\n marktype: spec.type,\n name: spec.name || undefined,\n role: spec.role || getRole(spec),\n zindex: +spec.zindex || undefined,\n aria: spec.aria,\n description: spec.description\n };\n}\n\nfunction interactive (spec, scope) {\n return spec && spec.signal ? scope.signalRef(spec.signal) : spec === false ? false : true;\n}\n\n/**\n * Parse a data transform specification.\n */\nfunction parseTransform (spec, scope) {\n const def = definition$1(spec.type);\n if (!def) error('Unrecognized transform type: ' + stringValue(spec.type));\n const t = entry(def.type.toLowerCase(), null, parseParameters(def, spec, scope));\n if (spec.signal) scope.addSignal(spec.signal, scope.proxy(t));\n t.metadata = def.metadata || {};\n return t;\n}\n\n/**\n * Parse all parameters of a data transform.\n */\nfunction parseParameters(def, spec, scope) {\n const params = {},\n n = def.params.length;\n for (let i = 0; i < n; ++i) {\n const pdef = def.params[i];\n params[pdef.name] = parseParameter(pdef, spec, scope);\n }\n return params;\n}\n\n/**\n * Parse a data transform parameter.\n */\nfunction parseParameter(def, spec, scope) {\n const type = def.type,\n value = spec[def.name];\n if (type === 'index') {\n return parseIndexParameter(def, spec, scope);\n } else if (value === undefined) {\n if (def.required) {\n error('Missing required ' + stringValue(spec.type) + ' parameter: ' + stringValue(def.name));\n }\n return;\n } else if (type === 'param') {\n return parseSubParameters(def, spec, scope);\n } else if (type === 'projection') {\n return scope.projectionRef(spec[def.name]);\n }\n return def.array && !isSignal(value) ? value.map(v => parameterValue(def, v, scope)) : parameterValue(def, value, scope);\n}\n\n/**\n * Parse a single parameter value.\n */\nfunction parameterValue(def, value, scope) {\n const type = def.type;\n if (isSignal(value)) {\n return isExpr(type) ? error('Expression references can not be signals.') : isField(type) ? scope.fieldRef(value) : isCompare(type) ? scope.compareRef(value) : scope.signalRef(value.signal);\n } else {\n const expr = def.expr || isField(type);\n return expr && outerExpr(value) ? scope.exprRef(value.expr, value.as) : expr && outerField(value) ? fieldRef$1(value.field, value.as) : isExpr(type) ? parseExpression(value, scope) : isData(type) ? ref(scope.getData(value).values) : isField(type) ? fieldRef$1(value) : isCompare(type) ? scope.compareRef(value) : value;\n }\n}\n\n/**\n * Parse parameter for accessing an index of another data set.\n */\nfunction parseIndexParameter(def, spec, scope) {\n if (!isString(spec.from)) {\n error('Lookup \"from\" parameter must be a string literal.');\n }\n return scope.getData(spec.from).lookupRef(scope, spec.key);\n}\n\n/**\n * Parse a parameter that contains one or more sub-parameter objects.\n */\nfunction parseSubParameters(def, spec, scope) {\n const value = spec[def.name];\n if (def.array) {\n if (!isArray(value)) {\n // signals not allowed!\n error('Expected an array of sub-parameters. Instead: ' + stringValue(value));\n }\n return value.map(v => parseSubParameter(def, v, scope));\n } else {\n return parseSubParameter(def, value, scope);\n }\n}\n\n/**\n * Parse a sub-parameter object.\n */\nfunction parseSubParameter(def, value, scope) {\n const n = def.params.length;\n let pdef;\n\n // loop over defs to find matching key\n for (let i = 0; i < n; ++i) {\n pdef = def.params[i];\n for (const k in pdef.key) {\n if (pdef.key[k] !== value[k]) {\n pdef = null;\n break;\n }\n }\n if (pdef) break;\n }\n // raise error if matching key not found\n if (!pdef) error('Unsupported parameter: ' + stringValue(value));\n\n // parse params, create Params transform, return ref\n const params = extend(parseParameters(pdef, value, scope), pdef.key);\n return ref(scope.add(Params(params)));\n}\n\n// -- Utilities -----\n\nconst outerExpr = _ => _ && _.expr;\nconst outerField = _ => _ && _.field;\nconst isData = _ => _ === 'data';\nconst isExpr = _ => _ === 'expr';\nconst isField = _ => _ === 'field';\nconst isCompare = _ => _ === 'compare';\n\nfunction parseData$1 (from, group, scope) {\n let facet, key, op, dataRef, parent;\n\n // if no source data, generate singleton datum\n if (!from) {\n dataRef = ref(scope.add(Collect(null, [{}])));\n }\n\n // if faceted, process facet specification\n else if (facet = from.facet) {\n if (!group) error('Only group marks can be faceted.');\n\n // use pre-faceted source data, if available\n if (facet.field != null) {\n dataRef = parent = getDataRef(facet, scope);\n } else {\n // generate facet aggregates if no direct data specification\n if (!from.data) {\n op = parseTransform(extend({\n type: 'aggregate',\n groupby: array(facet.groupby)\n }, facet.aggregate), scope);\n op.params.key = scope.keyRef(facet.groupby);\n op.params.pulse = getDataRef(facet, scope);\n dataRef = parent = ref(scope.add(op));\n } else {\n parent = ref(scope.getData(from.data).aggregate);\n }\n key = scope.keyRef(facet.groupby, true);\n }\n }\n\n // if not yet defined, get source data reference\n if (!dataRef) {\n dataRef = getDataRef(from, scope);\n }\n return {\n key: key,\n pulse: dataRef,\n parent: parent\n };\n}\nfunction getDataRef(from, scope) {\n return from.$ref ? from : from.data && from.data.$ref ? from.data : ref(scope.getData(from.data).output);\n}\n\nfunction DataScope(scope, input, output, values, aggr) {\n this.scope = scope; // parent scope object\n this.input = input; // first operator in pipeline (tuple input)\n this.output = output; // last operator in pipeline (tuple output)\n this.values = values; // operator for accessing tuples (but not tuple flow)\n\n // last aggregate in transform pipeline\n this.aggregate = aggr;\n\n // lookup table of field indices\n this.index = {};\n}\nDataScope.fromEntries = function (scope, entries) {\n const n = entries.length,\n values = entries[n - 1],\n output = entries[n - 2];\n let input = entries[0],\n aggr = null,\n i = 1;\n if (input && input.type === 'load') {\n input = entries[1];\n }\n\n // add operator entries to this scope, wire up pulse chain\n scope.add(entries[0]);\n for (; i < n; ++i) {\n entries[i].params.pulse = ref(entries[i - 1]);\n scope.add(entries[i]);\n if (entries[i].type === 'aggregate') aggr = entries[i];\n }\n return new DataScope(scope, input, output, values, aggr);\n};\nfunction fieldKey(field) {\n return isString(field) ? field : null;\n}\nfunction addSortField(scope, p, sort) {\n const as = aggrField(sort.op, sort.field);\n let s;\n if (p.ops) {\n for (let i = 0, n = p.as.length; i < n; ++i) {\n if (p.as[i] === as) return;\n }\n } else {\n p.ops = ['count'];\n p.fields = [null];\n p.as = ['count'];\n }\n if (sort.op) {\n p.ops.push((s = sort.op.signal) ? scope.signalRef(s) : sort.op);\n p.fields.push(scope.fieldRef(sort.field));\n p.as.push(as);\n }\n}\nfunction cache(scope, ds, name, optype, field, counts, index) {\n const cache = ds[name] || (ds[name] = {}),\n sort = sortKey(counts);\n let k = fieldKey(field),\n v,\n op;\n if (k != null) {\n scope = ds.scope;\n k = k + (sort ? '|' + sort : '');\n v = cache[k];\n }\n if (!v) {\n const params = counts ? {\n field: keyFieldRef,\n pulse: ds.countsRef(scope, field, counts)\n } : {\n field: scope.fieldRef(field),\n pulse: ref(ds.output)\n };\n if (sort) params.sort = scope.sortRef(counts);\n op = scope.add(entry(optype, undefined, params));\n if (index) ds.index[field] = op;\n v = ref(op);\n if (k != null) cache[k] = v;\n }\n return v;\n}\nDataScope.prototype = {\n countsRef(scope, field, sort) {\n const ds = this,\n cache = ds.counts || (ds.counts = {}),\n k = fieldKey(field);\n let v, a, p;\n if (k != null) {\n scope = ds.scope;\n v = cache[k];\n }\n if (!v) {\n p = {\n groupby: scope.fieldRef(field, 'key'),\n pulse: ref(ds.output)\n };\n if (sort && sort.field) addSortField(scope, p, sort);\n a = scope.add(Aggregate(p));\n v = scope.add(Collect({\n pulse: ref(a)\n }));\n v = {\n agg: a,\n ref: ref(v)\n };\n if (k != null) cache[k] = v;\n } else if (sort && sort.field) {\n addSortField(scope, v.agg.params, sort);\n }\n return v.ref;\n },\n tuplesRef() {\n return ref(this.values);\n },\n extentRef(scope, field) {\n return cache(scope, this, 'extent', 'extent', field, false);\n },\n domainRef(scope, field) {\n return cache(scope, this, 'domain', 'values', field, false);\n },\n valuesRef(scope, field, sort) {\n return cache(scope, this, 'vals', 'values', field, sort || true);\n },\n lookupRef(scope, field) {\n return cache(scope, this, 'lookup', 'tupleindex', field, false);\n },\n indataRef(scope, field) {\n return cache(scope, this, 'indata', 'tupleindex', field, true, true);\n }\n};\n\nfunction parseFacet (spec, scope, group) {\n const facet = spec.from.facet,\n name = facet.name,\n data = getDataRef(facet, scope);\n let op;\n if (!facet.name) {\n error('Facet must have a name: ' + stringValue(facet));\n }\n if (!facet.data) {\n error('Facet must reference a data set: ' + stringValue(facet));\n }\n if (facet.field) {\n op = scope.add(PreFacet({\n field: scope.fieldRef(facet.field),\n pulse: data\n }));\n } else if (facet.groupby) {\n op = scope.add(Facet({\n key: scope.keyRef(facet.groupby),\n group: ref(scope.proxy(group.parent)),\n pulse: data\n }));\n } else {\n error('Facet must specify groupby or field: ' + stringValue(facet));\n }\n\n // initialize facet subscope\n const subscope = scope.fork(),\n source = subscope.add(Collect()),\n values = subscope.add(Sieve({\n pulse: ref(source)\n }));\n subscope.addData(name, new DataScope(subscope, source, source, values));\n subscope.addSignal('parent', null);\n\n // parse faceted subflow\n op.params.subflow = {\n $subflow: subscope.parse(spec).toRuntime()\n };\n}\n\nfunction parseSubflow (spec, scope, input) {\n const op = scope.add(PreFacet({\n pulse: input.pulse\n })),\n subscope = scope.fork();\n subscope.add(Sieve());\n subscope.addSignal('parent', null);\n\n // parse group mark subflow\n op.params.subflow = {\n $subflow: subscope.parse(spec).toRuntime()\n };\n}\n\nfunction parseTrigger (spec, scope, name) {\n const remove = spec.remove,\n insert = spec.insert,\n toggle = spec.toggle,\n modify = spec.modify,\n values = spec.values,\n op = scope.add(operator());\n const update = 'if(' + spec.trigger + ',modify(\"' + name + '\",' + [insert, remove, toggle, modify, values].map(_ => _ == null ? 'null' : _).join(',') + '),0)';\n const expr = parseExpression(update, scope);\n op.update = expr.$expr;\n op.params = expr.$params;\n}\n\nfunction parseMark (spec, scope) {\n const role = getRole(spec),\n group = spec.type === GroupMark,\n facet = spec.from && spec.from.facet,\n overlap = spec.overlap;\n let layout = spec.layout || role === ScopeRole || role === FrameRole,\n ops,\n op,\n store,\n enc,\n name,\n layoutRef,\n boundRef;\n const nested = role === MarkRole || layout || facet;\n\n // resolve input data\n const input = parseData$1(spec.from, group, scope);\n\n // data join to map tuples to visual items\n op = scope.add(DataJoin({\n key: input.key || (spec.key ? fieldRef$1(spec.key) : undefined),\n pulse: input.pulse,\n clean: !group\n }));\n const joinRef = ref(op);\n\n // collect visual items\n op = store = scope.add(Collect({\n pulse: joinRef\n }));\n\n // connect visual items to scenegraph\n op = scope.add(Mark({\n markdef: definition(spec),\n interactive: interactive(spec.interactive, scope),\n clip: clip(spec.clip, scope),\n context: {\n $context: true\n },\n groups: scope.lookup(),\n parent: scope.signals.parent ? scope.signalRef('parent') : null,\n index: scope.markpath(),\n pulse: ref(op)\n }));\n const markRef = ref(op);\n\n // add visual encoders\n op = enc = scope.add(Encode(parseEncode(spec.encode, spec.type, role, spec.style, scope, {\n mod: false,\n pulse: markRef\n })));\n\n // monitor parent marks to propagate changes\n op.params.parent = scope.encode();\n\n // add post-encoding transforms, if defined\n if (spec.transform) {\n spec.transform.forEach(_ => {\n const tx = parseTransform(_, scope),\n md = tx.metadata;\n if (md.generates || md.changes) {\n error('Mark transforms should not generate new data.');\n }\n if (!md.nomod) enc.params.mod = true; // update encode mod handling\n tx.params.pulse = ref(op);\n scope.add(op = tx);\n });\n }\n\n // if item sort specified, perform post-encoding\n if (spec.sort) {\n op = scope.add(SortItems({\n sort: scope.compareRef(spec.sort),\n pulse: ref(op)\n }));\n }\n const encodeRef = ref(op);\n\n // add view layout operator if needed\n if (facet || layout) {\n layout = scope.add(ViewLayout({\n layout: scope.objectProperty(spec.layout),\n legends: scope.legends,\n mark: markRef,\n pulse: encodeRef\n }));\n layoutRef = ref(layout);\n }\n\n // compute bounding boxes\n const bound = scope.add(Bound({\n mark: markRef,\n pulse: layoutRef || encodeRef\n }));\n boundRef = ref(bound);\n\n // if group mark, recurse to parse nested content\n if (group) {\n // juggle layout & bounds to ensure they run *after* any faceting transforms\n if (nested) {\n ops = scope.operators;\n ops.pop();\n if (layout) ops.pop();\n }\n scope.pushState(encodeRef, layoutRef || boundRef, joinRef);\n facet ? parseFacet(spec, scope, input) // explicit facet\n : nested ? parseSubflow(spec, scope, input) // standard mark group\n : scope.parse(spec); // guide group, we can avoid nested scopes\n scope.popState();\n if (nested) {\n if (layout) ops.push(layout);\n ops.push(bound);\n }\n }\n\n // if requested, add overlap removal transform\n if (overlap) {\n boundRef = parseOverlap(overlap, boundRef, scope);\n }\n\n // render / sieve items\n const render = scope.add(Render({\n pulse: boundRef\n })),\n sieve = scope.add(Sieve({\n pulse: ref(render)\n }, undefined, scope.parent()));\n\n // if mark is named, make accessible as reactive geometry\n // add trigger updates if defined\n if (spec.name != null) {\n name = spec.name;\n scope.addData(name, new DataScope(scope, store, render, sieve));\n if (spec.on) spec.on.forEach(on => {\n if (on.insert || on.remove || on.toggle) {\n error('Marks only support modify triggers.');\n }\n parseTrigger(on, scope, name);\n });\n }\n}\nfunction parseOverlap(overlap, source, scope) {\n const method = overlap.method,\n bound = overlap.bound,\n sep = overlap.separation;\n const params = {\n separation: isSignal(sep) ? scope.signalRef(sep.signal) : sep,\n method: isSignal(method) ? scope.signalRef(method.signal) : method,\n pulse: source\n };\n if (overlap.order) {\n params.sort = scope.compareRef({\n field: overlap.order\n });\n }\n if (bound) {\n const tol = bound.tolerance;\n params.boundTolerance = isSignal(tol) ? scope.signalRef(tol.signal) : +tol;\n params.boundScale = scope.scaleRef(bound.scale);\n params.boundOrient = bound.orient;\n }\n return ref(scope.add(Overlap(params)));\n}\n\nfunction parseLegend (spec, scope) {\n const config = scope.config.legend,\n encode = spec.encode || {},\n _ = lookup(spec, config),\n legendEncode = encode.legend || {},\n name = legendEncode.name || undefined,\n interactive = legendEncode.interactive,\n style = legendEncode.style,\n scales = {};\n let scale = 0,\n entryLayout,\n params,\n children;\n\n // resolve scales and 'canonical' scale name\n LegendScales.forEach(s => spec[s] ? (scales[s] = spec[s], scale = scale || spec[s]) : 0);\n if (!scale) error('Missing valid scale for legend.');\n\n // resolve legend type (symbol, gradient, or discrete gradient)\n const type = legendType(spec, scope.scaleType(scale));\n\n // single-element data source for legend group\n const datum = {\n title: spec.title != null,\n scales: scales,\n type: type,\n vgrad: type !== 'symbol' && _.isVertical()\n };\n const dataRef = ref(scope.add(Collect(null, [datum])));\n\n // encoding properties for legend entry sub-group\n const entryEncode = {\n enter: {\n x: {\n value: 0\n },\n y: {\n value: 0\n }\n }\n };\n\n // data source for legend values\n const entryRef = ref(scope.add(LegendEntries(params = {\n type: type,\n scale: scope.scaleRef(scale),\n count: scope.objectProperty(_('tickCount')),\n limit: scope.property(_('symbolLimit')),\n values: scope.objectProperty(spec.values),\n minstep: scope.property(spec.tickMinStep),\n formatType: scope.property(spec.formatType),\n formatSpecifier: scope.property(spec.format)\n })));\n\n // continuous gradient legend\n if (type === Gradient) {\n children = [legendGradient(spec, scale, config, encode.gradient), legendGradientLabels(spec, config, encode.labels, entryRef)];\n // adjust default tick count based on the gradient length\n params.count = params.count || scope.signalRef(`max(2,2*floor((${deref(_.gradientLength())})/100))`);\n }\n\n // discrete gradient legend\n else if (type === Discrete) {\n children = [legendGradientDiscrete(spec, scale, config, encode.gradient, entryRef), legendGradientLabels(spec, config, encode.labels, entryRef)];\n }\n\n // symbol legend\n else {\n // determine legend symbol group layout\n entryLayout = legendSymbolLayout(spec, config);\n children = [legendSymbolGroups(spec, config, encode, entryRef, deref(entryLayout.columns))];\n // pass symbol size information to legend entry generator\n params.size = sizeExpression(spec, scope, children[0].marks);\n }\n\n // generate legend marks\n children = [guideGroup({\n role: LegendEntryRole,\n from: dataRef,\n encode: entryEncode,\n marks: children,\n layout: entryLayout,\n interactive\n })];\n\n // include legend title if defined\n if (datum.title) {\n children.push(legendTitle(spec, config, encode.title, dataRef));\n }\n\n // parse legend specification\n return parseMark(guideGroup({\n role: LegendRole,\n from: dataRef,\n encode: extendEncode(buildLegendEncode(_, spec, config), legendEncode, Skip),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\nfunction legendType(spec, scaleType) {\n let type = spec.type || Symbols;\n if (!spec.type && scaleCount(spec) === 1 && (spec.fill || spec.stroke)) {\n type = isContinuous(scaleType) ? Gradient : isDiscretizing(scaleType) ? Discrete : Symbols;\n }\n return type !== Gradient ? type : isDiscretizing(scaleType) ? Discrete : Gradient;\n}\nfunction scaleCount(spec) {\n return LegendScales.reduce((count, type) => count + (spec[type] ? 1 : 0), 0);\n}\nfunction buildLegendEncode(_, spec, config) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n offset: _('offset'),\n padding: _('padding'),\n titlePadding: _('titlePadding'),\n cornerRadius: _('cornerRadius'),\n fill: _('fillColor'),\n stroke: _('strokeColor'),\n strokeWidth: config.strokeWidth,\n strokeDash: config.strokeDash,\n x: _('legendX'),\n y: _('legendY'),\n // accessibility support\n format: spec.format,\n formatType: spec.formatType\n });\n return encode;\n}\nfunction sizeExpression(spec, scope, marks) {\n const size = deref(getChannel('size', spec, marks)),\n strokeWidth = deref(getChannel('strokeWidth', spec, marks)),\n fontSize = deref(getFontSize(marks[1].encode, scope, GuideLabelStyle));\n return parseExpression(`max(ceil(sqrt(${size})+${strokeWidth}),${fontSize})`, scope);\n}\nfunction getChannel(name, spec, marks) {\n return spec[name] ? `scale(\"${spec[name]}\",datum)` : getEncoding(name, marks[0].encode);\n}\nfunction getFontSize(encode, scope, style) {\n return getEncoding('fontSize', encode) || getStyle('fontSize', scope, style);\n}\n\nconst angleExpr = `item.orient===\"${Left}\"?-90:item.orient===\"${Right}\"?90:0`;\nfunction parseTitle (spec, scope) {\n spec = isString(spec) ? {\n text: spec\n } : spec;\n const _ = lookup(spec, scope.config.title),\n encode = spec.encode || {},\n userEncode = encode.group || {},\n name = userEncode.name || undefined,\n interactive = userEncode.interactive,\n style = userEncode.style,\n children = [];\n\n // single-element data source for group title\n const datum = {},\n dataRef = ref(scope.add(Collect(null, [datum])));\n\n // include title text\n children.push(buildTitle(spec, _, titleEncode(spec), dataRef));\n\n // include subtitle text\n if (spec.subtitle) {\n children.push(buildSubTitle(spec, _, encode.subtitle, dataRef));\n }\n\n // parse title specification\n return parseMark(guideGroup({\n role: TitleRole,\n from: dataRef,\n encode: groupEncode(_, userEncode),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\n\n// provide backwards-compatibility for title custom encode;\n// the top-level encode block has been *deprecated*.\nfunction titleEncode(spec) {\n const encode = spec.encode;\n return encode && encode.title || extend({\n name: spec.name,\n interactive: spec.interactive,\n style: spec.style\n }, encode);\n}\nfunction groupEncode(_, userEncode) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n anchor: _('anchor'),\n align: {\n signal: alignExpr$1\n },\n angle: {\n signal: angleExpr\n },\n limit: _('limit'),\n frame: _('frame'),\n offset: _('offset') || 0,\n padding: _('subtitlePadding')\n });\n return extendEncode(encode, userEncode, Skip);\n}\nfunction buildTitle(spec, _, userEncode, dataRef) {\n const zero = {\n value: 0\n },\n text = spec.text,\n encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: {\n value: 1\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n text: text,\n align: {\n signal: 'item.mark.group.align'\n },\n angle: {\n signal: 'item.mark.group.angle'\n },\n limit: {\n signal: 'item.mark.group.limit'\n },\n baseline: 'top',\n dx: _('dx'),\n dy: _('dy'),\n fill: _('color'),\n font: _('font'),\n fontSize: _('fontSize'),\n fontStyle: _('fontStyle'),\n fontWeight: _('fontWeight'),\n lineHeight: _('lineHeight')\n }, {\n // update\n align: _('align'),\n angle: _('angle'),\n baseline: _('baseline')\n });\n return guideMark({\n type: TextMark,\n role: TitleTextRole,\n style: GroupTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction buildSubTitle(spec, _, userEncode, dataRef) {\n const zero = {\n value: 0\n },\n text = spec.subtitle,\n encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: {\n value: 1\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n text: text,\n align: {\n signal: 'item.mark.group.align'\n },\n angle: {\n signal: 'item.mark.group.angle'\n },\n limit: {\n signal: 'item.mark.group.limit'\n },\n baseline: 'top',\n dx: _('dx'),\n dy: _('dy'),\n fill: _('subtitleColor'),\n font: _('subtitleFont'),\n fontSize: _('subtitleFontSize'),\n fontStyle: _('subtitleFontStyle'),\n fontWeight: _('subtitleFontWeight'),\n lineHeight: _('subtitleLineHeight')\n }, {\n // update\n align: _('align'),\n angle: _('angle'),\n baseline: _('baseline')\n });\n return guideMark({\n type: TextMark,\n role: TitleSubtitleRole,\n style: GroupSubtitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction parseData(data, scope) {\n const transforms = [];\n if (data.transform) {\n data.transform.forEach(tx => {\n transforms.push(parseTransform(tx, scope));\n });\n }\n if (data.on) {\n data.on.forEach(on => {\n parseTrigger(on, scope, data.name);\n });\n }\n scope.addDataPipeline(data.name, analyze(data, scope, transforms));\n}\n\n/**\n * Analyze a data pipeline, add needed operators.\n */\nfunction analyze(data, scope, ops) {\n const output = [];\n let source = null,\n modify = false,\n generate = false,\n upstream,\n i,\n n,\n t,\n m;\n if (data.values) {\n // hard-wired input data set\n if (isSignal(data.values) || hasSignal(data.format)) {\n // if either values is signal or format has signal, use dynamic loader\n output.push(load(scope, data));\n output.push(source = collect());\n } else {\n // otherwise, ingest upon dataflow init\n output.push(source = collect({\n $ingest: data.values,\n $format: data.format\n }));\n }\n } else if (data.url) {\n // load data from external source\n if (hasSignal(data.url) || hasSignal(data.format)) {\n // if either url or format has signal, use dynamic loader\n output.push(load(scope, data));\n output.push(source = collect());\n } else {\n // otherwise, request load upon dataflow init\n output.push(source = collect({\n $request: data.url,\n $format: data.format\n }));\n }\n } else if (data.source) {\n // derives from one or more other data sets\n source = upstream = array(data.source).map(d => ref(scope.getData(d).output));\n output.push(null); // populate later\n }\n\n // scan data transforms, add collectors as needed\n for (i = 0, n = ops.length; i < n; ++i) {\n t = ops[i];\n m = t.metadata;\n if (!source && !m.source) {\n output.push(source = collect());\n }\n output.push(t);\n if (m.generates) generate = true;\n if (m.modifies && !generate) modify = true;\n if (m.source) source = t;else if (m.changes) source = null;\n }\n if (upstream) {\n n = upstream.length - 1;\n output[0] = Relay({\n derive: modify,\n pulse: n ? upstream : upstream[0]\n });\n if (modify || n) {\n // collect derived and multi-pulse tuples\n output.splice(1, 0, collect());\n }\n }\n if (!source) output.push(collect());\n output.push(Sieve({}));\n return output;\n}\nfunction collect(values) {\n const s = Collect({}, values);\n s.metadata = {\n source: true\n };\n return s;\n}\nfunction load(scope, data) {\n return Load({\n url: data.url ? scope.property(data.url) : undefined,\n async: data.async ? scope.property(data.async) : undefined,\n values: data.values ? scope.property(data.values) : undefined,\n format: scope.objectProperty(data.format)\n });\n}\n\nconst isX = orient => orient === Bottom || orient === Top;\n\n// get sign coefficient based on axis orient\nconst getSign = (orient, a, b) => isSignal(orient) ? ifLeftTopExpr(orient.signal, a, b) : orient === Left || orient === Top ? a : b;\n\n// condition on axis x-direction\nconst ifX = (orient, a, b) => isSignal(orient) ? ifXEnc(orient.signal, a, b) : isX(orient) ? a : b;\n\n// condition on axis y-direction\nconst ifY = (orient, a, b) => isSignal(orient) ? ifYEnc(orient.signal, a, b) : isX(orient) ? b : a;\nconst ifTop = (orient, a, b) => isSignal(orient) ? ifTopExpr(orient.signal, a, b) : orient === Top ? {\n value: a\n} : {\n value: b\n};\nconst ifRight = (orient, a, b) => isSignal(orient) ? ifRightExpr(orient.signal, a, b) : orient === Right ? {\n value: a\n} : {\n value: b\n};\nconst ifXEnc = ($orient, a, b) => ifEnc(`${$orient} === '${Top}' || ${$orient} === '${Bottom}'`, a, b);\nconst ifYEnc = ($orient, a, b) => ifEnc(`${$orient} !== '${Top}' && ${$orient} !== '${Bottom}'`, a, b);\nconst ifLeftTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Left}' || ${$orient} === '${Top}'`, a, b);\nconst ifTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Top}'`, a, b);\nconst ifRightExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Right}'`, a, b);\nconst ifEnc = (test, a, b) => {\n // ensure inputs are encoder objects (or null)\n a = a != null ? encoder(a) : a;\n b = b != null ? encoder(b) : b;\n if (isSimple(a) && isSimple(b)) {\n // if possible generate simple signal expression\n a = a ? a.signal || stringValue(a.value) : null;\n b = b ? b.signal || stringValue(b.value) : null;\n return {\n signal: `${test} ? (${a}) : (${b})`\n };\n } else {\n // otherwise generate rule set\n return [extend({\n test\n }, a)].concat(b || []);\n }\n};\nconst isSimple = enc => enc == null || Object.keys(enc).length === 1;\nconst ifExpr = (test, a, b) => ({\n signal: `${test} ? (${toExpr(a)}) : (${toExpr(b)})`\n});\nconst ifOrient = ($orient, t, b, l, r) => ({\n signal: (l != null ? `${$orient} === '${Left}' ? (${toExpr(l)}) : ` : '') + (b != null ? `${$orient} === '${Bottom}' ? (${toExpr(b)}) : ` : '') + (r != null ? `${$orient} === '${Right}' ? (${toExpr(r)}) : ` : '') + (t != null ? `${$orient} === '${Top}' ? (${toExpr(t)}) : ` : '') + '(null)'\n});\nconst toExpr = v => isSignal(v) ? v.signal : v == null ? null : stringValue(v);\nconst mult = (sign, value) => value === 0 ? 0 : isSignal(sign) ? {\n signal: `(${sign.signal}) * ${value}`\n} : {\n value: sign * value\n};\nconst patch = (value, base) => {\n const s = value.signal;\n return s && s.endsWith('(null)') ? {\n signal: s.slice(0, -6) + base.signal\n } : value;\n};\n\nfunction fallback(prop, config, axisConfig, style) {\n let styleProp;\n if (config && hasOwnProperty(config, prop)) {\n return config[prop];\n } else if (hasOwnProperty(axisConfig, prop)) {\n return axisConfig[prop];\n } else if (prop.startsWith('title')) {\n switch (prop) {\n case 'titleColor':\n styleProp = 'fill';\n break;\n case 'titleFont':\n case 'titleFontSize':\n case 'titleFontWeight':\n styleProp = prop[5].toLowerCase() + prop.slice(6);\n }\n return style[GuideTitleStyle][styleProp];\n } else if (prop.startsWith('label')) {\n switch (prop) {\n case 'labelColor':\n styleProp = 'fill';\n break;\n case 'labelFont':\n case 'labelFontSize':\n styleProp = prop[5].toLowerCase() + prop.slice(6);\n }\n return style[GuideLabelStyle][styleProp];\n }\n return null;\n}\nfunction keys(objects) {\n const map = {};\n for (const obj of objects) {\n if (!obj) continue;\n for (const key in obj) map[key] = 1;\n }\n return Object.keys(map);\n}\nfunction axisConfig (spec, scope) {\n var config = scope.config,\n style = config.style,\n axis = config.axis,\n band = scope.scaleType(spec.scale) === 'band' && config.axisBand,\n orient = spec.orient,\n xy,\n or,\n key;\n if (isSignal(orient)) {\n const xyKeys = keys([config.axisX, config.axisY]),\n orientKeys = keys([config.axisTop, config.axisBottom, config.axisLeft, config.axisRight]);\n xy = {};\n for (key of xyKeys) {\n xy[key] = ifX(orient, fallback(key, config.axisX, axis, style), fallback(key, config.axisY, axis, style));\n }\n or = {};\n for (key of orientKeys) {\n or[key] = ifOrient(orient.signal, fallback(key, config.axisTop, axis, style), fallback(key, config.axisBottom, axis, style), fallback(key, config.axisLeft, axis, style), fallback(key, config.axisRight, axis, style));\n }\n } else {\n xy = orient === Top || orient === Bottom ? config.axisX : config.axisY;\n or = config['axis' + orient[0].toUpperCase() + orient.slice(1)];\n }\n const result = xy || or || band ? extend({}, axis, xy, or, band) : axis;\n return result;\n}\n\nfunction axisDomain (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n orient = spec.orient;\n let enter, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('domainColor'),\n strokeCap: _('domainCap'),\n strokeDash: _('domainDash'),\n strokeDashOffset: _('domainDashOffset'),\n strokeWidth: _('domainWidth'),\n strokeOpacity: _('domainOpacity')\n });\n const pos0 = position(spec, 0);\n const pos1 = position(spec, 1);\n enter.x = update.x = ifX(orient, pos0, zero);\n enter.x2 = update.x2 = ifX(orient, pos1);\n enter.y = update.y = ifY(orient, pos0, zero);\n enter.y2 = update.y2 = ifY(orient, pos1);\n return guideMark({\n type: RuleMark,\n role: AxisDomainRole,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction position(spec, pos) {\n return {\n scale: spec.scale,\n range: pos\n };\n}\n\nfunction axisGrid (spec, config, userEncode, dataRef, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n vscale = spec.gridScale,\n sign = getSign(orient, 1, -1),\n offset = offsetValue(spec.offset, sign);\n let enter, exit, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: exit = {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gridColor'),\n strokeCap: _('gridCap'),\n strokeDash: _('gridDash'),\n strokeDashOffset: _('gridDashOffset'),\n strokeOpacity: _('gridOpacity'),\n strokeWidth: _('gridWidth')\n });\n const tickPos = {\n scale: spec.scale,\n field: Value,\n band: band.band,\n extra: band.extra,\n offset: band.offset,\n round: _('tickRound')\n };\n const sz = ifX(orient, {\n signal: 'height'\n }, {\n signal: 'width'\n });\n const gridStart = vscale ? {\n scale: vscale,\n range: 0,\n mult: sign,\n offset: offset\n } : {\n value: 0,\n offset: offset\n };\n const gridEnd = vscale ? {\n scale: vscale,\n range: 1,\n mult: sign,\n offset: offset\n } : extend(sz, {\n mult: sign,\n offset: offset\n });\n enter.x = update.x = ifX(orient, tickPos, gridStart);\n enter.y = update.y = ifY(orient, tickPos, gridStart);\n enter.x2 = update.x2 = ifY(orient, gridEnd);\n enter.y2 = update.y2 = ifX(orient, gridEnd);\n exit.x = ifX(orient, tickPos);\n exit.y = ifY(orient, tickPos);\n return guideMark({\n type: RuleMark,\n role: AxisGridRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction offsetValue(offset, sign) {\n if (sign === 1) ; else if (!isObject(offset)) {\n offset = isSignal(sign) ? {\n signal: `(${sign.signal}) * (${offset || 0})`\n } : sign * (offset || 0);\n } else {\n let entry = offset = extend({}, offset);\n while (entry.mult != null) {\n if (!isObject(entry.mult)) {\n entry.mult = isSignal(sign) // no offset if sign === 1\n ? {\n signal: `(${entry.mult}) * (${sign.signal})`\n } : entry.mult * sign;\n return offset;\n } else {\n entry = entry.mult = extend({}, entry.mult);\n }\n }\n entry.mult = sign;\n }\n return offset;\n}\n\nfunction axisTicks (spec, config, userEncode, dataRef, size, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n sign = getSign(orient, -1, 1);\n let enter, exit, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: exit = {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('tickColor'),\n strokeCap: _('tickCap'),\n strokeDash: _('tickDash'),\n strokeDashOffset: _('tickDashOffset'),\n strokeOpacity: _('tickOpacity'),\n strokeWidth: _('tickWidth')\n });\n const tickSize = encoder(size);\n tickSize.mult = sign;\n const tickPos = {\n scale: spec.scale,\n field: Value,\n band: band.band,\n extra: band.extra,\n offset: band.offset,\n round: _('tickRound')\n };\n update.y = enter.y = ifX(orient, zero, tickPos);\n update.y2 = enter.y2 = ifX(orient, tickSize);\n exit.x = ifX(orient, tickPos);\n update.x = enter.x = ifY(orient, zero, tickPos);\n update.x2 = enter.x2 = ifY(orient, tickSize);\n exit.y = ifY(orient, tickPos);\n return guideMark({\n type: RuleMark,\n role: AxisTickRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction flushExpr(scale, threshold, a, b, c) {\n return {\n signal: 'flush(range(\"' + scale + '\"), ' + 'scale(\"' + scale + '\", datum.value), ' + threshold + ',' + a + ',' + b + ',' + c + ')'\n };\n}\nfunction axisLabels (spec, config, userEncode, dataRef, size, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n scale = spec.scale,\n sign = getSign(orient, -1, 1),\n flush = deref(_('labelFlush')),\n flushOffset = deref(_('labelFlushOffset')),\n labelAlign = _('labelAlign'),\n labelBaseline = _('labelBaseline');\n let flushOn = flush === 0 || !!flush,\n update;\n const tickSize = encoder(size);\n tickSize.mult = sign;\n tickSize.offset = encoder(_('labelPadding') || 0);\n tickSize.offset.mult = sign;\n const tickPos = {\n scale: scale,\n field: Value,\n band: 0.5,\n offset: extendOffset(band.offset, _('labelOffset'))\n };\n const align = ifX(orient, flushOn ? flushExpr(scale, flush, '\"left\"', '\"right\"', '\"center\"') : {\n value: 'center'\n }, ifRight(orient, 'left', 'right'));\n const baseline = ifX(orient, ifTop(orient, 'bottom', 'top'), flushOn ? flushExpr(scale, flush, '\"top\"', '\"bottom\"', '\"middle\"') : {\n value: 'middle'\n });\n const offsetExpr = flushExpr(scale, flush, `-(${flushOffset})`, flushOffset, 0);\n flushOn = flushOn && flushOffset;\n const enter = {\n opacity: zero,\n x: ifX(orient, tickPos, tickSize),\n y: ifY(orient, tickPos, tickSize)\n };\n const encode = {\n enter: enter,\n update: update = {\n opacity: one,\n text: {\n field: Label\n },\n x: enter.x,\n y: enter.y,\n align,\n baseline\n },\n exit: {\n opacity: zero,\n x: enter.x,\n y: enter.y\n }\n };\n addEncoders(encode, {\n dx: !labelAlign && flushOn ? ifX(orient, offsetExpr) : null,\n dy: !labelBaseline && flushOn ? ifY(orient, offsetExpr) : null\n });\n addEncoders(encode, {\n angle: _('labelAngle'),\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontWeight: _('labelFontWeight'),\n fontStyle: _('labelFontStyle'),\n limit: _('labelLimit'),\n lineHeight: _('labelLineHeight')\n }, {\n align: labelAlign,\n baseline: labelBaseline\n });\n const bound = _('labelBound');\n let overlap = _('labelOverlap');\n\n // if overlap method or bound defined, request label overlap removal\n overlap = overlap || bound ? {\n separation: _('labelSeparation'),\n method: overlap,\n order: 'datum.index',\n bound: bound ? {\n scale,\n orient,\n tolerance: bound\n } : null\n } : undefined;\n if (update.align !== align) {\n update.align = patch(update.align, align);\n }\n if (update.baseline !== baseline) {\n update.baseline = patch(update.baseline, baseline);\n }\n return guideMark({\n type: TextMark,\n role: AxisLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: dataRef,\n encode,\n overlap\n }, userEncode);\n}\n\nfunction axisTitle (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n sign = getSign(orient, -1, 1);\n let enter, update;\n const encode = {\n enter: enter = {\n opacity: zero,\n anchor: encoder(_('titleAnchor', null)),\n align: {\n signal: alignExpr$1\n }\n },\n update: update = extend({}, enter, {\n opacity: one,\n text: encoder(spec.title)\n }),\n exit: {\n opacity: zero\n }\n };\n const titlePos = {\n signal: `lerp(range(\"${spec.scale}\"), ${anchorExpr(0, 1, 0.5)})`\n };\n update.x = ifX(orient, titlePos);\n update.y = ifY(orient, titlePos);\n enter.angle = ifX(orient, zero, mult(sign, 90));\n enter.baseline = ifX(orient, ifTop(orient, Bottom, Top), {\n value: Bottom\n });\n update.angle = enter.angle;\n update.baseline = enter.baseline;\n addEncoders(encode, {\n fill: _('titleColor'),\n fillOpacity: _('titleOpacity'),\n font: _('titleFont'),\n fontSize: _('titleFontSize'),\n fontStyle: _('titleFontStyle'),\n fontWeight: _('titleFontWeight'),\n limit: _('titleLimit'),\n lineHeight: _('titleLineHeight')\n }, {\n // require update\n align: _('titleAlign'),\n angle: _('titleAngle'),\n baseline: _('titleBaseline')\n });\n autoLayout(_, orient, encode, userEncode);\n encode.update.align = patch(encode.update.align, enter.align);\n encode.update.angle = patch(encode.update.angle, enter.angle);\n encode.update.baseline = patch(encode.update.baseline, enter.baseline);\n return guideMark({\n type: TextMark,\n role: AxisTitleRole,\n style: GuideTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction autoLayout(_, orient, encode, userEncode) {\n const auto = (value, dim) => value != null ? (encode.update[dim] = patch(encoder(value), encode.update[dim]), false) : !has(dim, userEncode) ? true : false;\n const autoY = auto(_('titleX'), 'x'),\n autoX = auto(_('titleY'), 'y');\n encode.enter.auto = autoX === autoY ? encoder(autoX) : ifX(orient, encoder(autoX), encoder(autoY));\n}\n\nfunction parseAxis (spec, scope) {\n const config = axisConfig(spec, scope),\n encode = spec.encode || {},\n axisEncode = encode.axis || {},\n name = axisEncode.name || undefined,\n interactive = axisEncode.interactive,\n style = axisEncode.style,\n _ = lookup(spec, config),\n band = tickBand(_);\n\n // single-element data source for axis group\n const datum = {\n scale: spec.scale,\n ticks: !!_('ticks'),\n labels: !!_('labels'),\n grid: !!_('grid'),\n domain: !!_('domain'),\n title: spec.title != null\n };\n const dataRef = ref(scope.add(Collect({}, [datum])));\n\n // data source for axis ticks\n const ticksRef = ref(scope.add(AxisTicks({\n scale: scope.scaleRef(spec.scale),\n extra: scope.property(band.extra),\n count: scope.objectProperty(spec.tickCount),\n values: scope.objectProperty(spec.values),\n minstep: scope.property(spec.tickMinStep),\n formatType: scope.property(spec.formatType),\n formatSpecifier: scope.property(spec.format)\n })));\n\n // generate axis marks\n const children = [];\n let size;\n\n // include axis gridlines if requested\n if (datum.grid) {\n children.push(axisGrid(spec, config, encode.grid, ticksRef, band));\n }\n\n // include axis ticks if requested\n if (datum.ticks) {\n size = _('tickSize');\n children.push(axisTicks(spec, config, encode.ticks, ticksRef, size, band));\n }\n\n // include axis labels if requested\n if (datum.labels) {\n size = datum.ticks ? size : 0;\n children.push(axisLabels(spec, config, encode.labels, ticksRef, size, band));\n }\n\n // include axis domain path if requested\n if (datum.domain) {\n children.push(axisDomain(spec, config, encode.domain, dataRef));\n }\n\n // include axis title if defined\n if (datum.title) {\n children.push(axisTitle(spec, config, encode.title, dataRef));\n }\n\n // parse axis specification\n return parseMark(guideGroup({\n role: AxisRole,\n from: dataRef,\n encode: extendEncode(buildAxisEncode(_, spec), axisEncode, Skip),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\nfunction buildAxisEncode(_, spec) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n offset: _('offset') || 0,\n position: value(spec.position, 0),\n titlePadding: _('titlePadding'),\n minExtent: _('minExtent'),\n maxExtent: _('maxExtent'),\n range: {\n signal: `abs(span(range(\"${spec.scale}\")))`\n },\n translate: _('translate'),\n // accessibility support\n format: spec.format,\n formatType: spec.formatType\n });\n return encode;\n}\n\nfunction parseScope (spec, scope, preprocessed) {\n const signals = array(spec.signals),\n scales = array(spec.scales);\n\n // parse signal definitions, if not already preprocessed\n if (!preprocessed) signals.forEach(_ => parseSignal(_, scope));\n\n // parse cartographic projection definitions\n array(spec.projections).forEach(_ => parseProjection(_, scope));\n\n // initialize scale references\n scales.forEach(_ => initScale(_, scope));\n\n // parse data sources\n array(spec.data).forEach(_ => parseData(_, scope));\n\n // parse scale definitions\n scales.forEach(_ => parseScale(_, scope));\n\n // parse signal updates\n (preprocessed || signals).forEach(_ => parseSignalUpdates(_, scope));\n\n // parse axis definitions\n array(spec.axes).forEach(_ => parseAxis(_, scope));\n\n // parse mark definitions\n array(spec.marks).forEach(_ => parseMark(_, scope));\n\n // parse legend definitions\n array(spec.legends).forEach(_ => parseLegend(_, scope));\n\n // parse title, if defined\n if (spec.title) parseTitle(spec.title, scope);\n\n // parse collected lambda (anonymous) expressions\n scope.parseLambdas();\n return scope;\n}\n\nconst rootEncode = spec => extendEncode({\n enter: {\n x: {\n value: 0\n },\n y: {\n value: 0\n }\n },\n update: {\n width: {\n signal: 'width'\n },\n height: {\n signal: 'height'\n }\n }\n}, spec);\nfunction parseView(spec, scope) {\n const config = scope.config;\n\n // add scenegraph root\n const root = ref(scope.root = scope.add(operator()));\n\n // parse top-level signal definitions\n const signals = collectSignals(spec, config);\n signals.forEach(_ => parseSignal(_, scope));\n\n // assign description, event, legend, and locale configuration\n scope.description = spec.description || config.description;\n scope.eventConfig = config.events;\n scope.legends = scope.objectProperty(config.legend && config.legend.layout);\n scope.locale = config.locale;\n\n // store root group item\n const input = scope.add(Collect());\n\n // encode root group item\n const encode = scope.add(Encode(parseEncode(rootEncode(spec.encode), GroupMark, FrameRole, spec.style, scope, {\n pulse: ref(input)\n })));\n\n // perform view layout\n const parent = scope.add(ViewLayout({\n layout: scope.objectProperty(spec.layout),\n legends: scope.legends,\n autosize: scope.signalRef('autosize'),\n mark: root,\n pulse: ref(encode)\n }));\n scope.operators.pop();\n\n // parse remainder of specification\n scope.pushState(ref(encode), ref(parent), null);\n parseScope(spec, scope, signals);\n scope.operators.push(parent);\n\n // bound / render / sieve root item\n let op = scope.add(Bound({\n mark: root,\n pulse: ref(parent)\n }));\n op = scope.add(Render({\n pulse: ref(op)\n }));\n op = scope.add(Sieve({\n pulse: ref(op)\n }));\n\n // track metadata for root item\n scope.addData('root', new DataScope(scope, input, input, op));\n return scope;\n}\nfunction signalObject(name, value) {\n return value && value.signal ? {\n name,\n update: value.signal\n } : {\n name,\n value\n };\n}\n\n/**\n * Collect top-level signals, merging values as needed. Signals\n * defined in the config signals arrays are added only if that\n * signal is not explicitly defined in the specification.\n * Built-in signals (autosize, background, padding, width, height)\n * receive special treatment. They are initialized using the\n * top-level spec property, or, if undefined in the spec, using\n * the corresponding top-level config property. If this property\n * is a signal reference object, the signal expression maps to the\n * signal 'update' property. If the spec's top-level signal array\n * contains an entry that matches a built-in signal, that entry\n * will be merged with the built-in specification, potentially\n * overwriting existing 'value' or 'update' properties.\n */\nfunction collectSignals(spec, config) {\n const _ = name => value(spec[name], config[name]),\n signals = [signalObject('background', _('background')), signalObject('autosize', parseAutosize(_('autosize'))), signalObject('padding', parsePadding(_('padding'))), signalObject('width', _('width') || 0), signalObject('height', _('height') || 0)],\n pre = signals.reduce((p, s) => (p[s.name] = s, p), {}),\n map = {};\n\n // add spec signal array\n array(spec.signals).forEach(s => {\n if (hasOwnProperty(pre, s.name)) {\n // merge if built-in signal\n s = extend(pre[s.name], s);\n } else {\n // otherwise add to signal list\n signals.push(s);\n }\n map[s.name] = s;\n });\n\n // add config signal array\n array(config.signals).forEach(s => {\n if (!hasOwnProperty(map, s.name) && !hasOwnProperty(pre, s.name)) {\n // add to signal list if not already defined\n signals.push(s);\n }\n });\n return signals;\n}\n\nfunction Scope(config, options) {\n this.config = config || {};\n this.options = options || {};\n this.bindings = [];\n this.field = {};\n this.signals = {};\n this.lambdas = {};\n this.scales = {};\n this.events = {};\n this.data = {};\n this.streams = [];\n this.updates = [];\n this.operators = [];\n this.eventConfig = null;\n this.locale = null;\n this._id = 0;\n this._subid = 0;\n this._nextsub = [0];\n this._parent = [];\n this._encode = [];\n this._lookup = [];\n this._markpath = [];\n}\nfunction Subscope(scope) {\n this.config = scope.config;\n this.options = scope.options;\n this.legends = scope.legends;\n this.field = Object.create(scope.field);\n this.signals = Object.create(scope.signals);\n this.lambdas = Object.create(scope.lambdas);\n this.scales = Object.create(scope.scales);\n this.events = Object.create(scope.events);\n this.data = Object.create(scope.data);\n this.streams = [];\n this.updates = [];\n this.operators = [];\n this._id = 0;\n this._subid = ++scope._nextsub[0];\n this._nextsub = scope._nextsub;\n this._parent = scope._parent.slice();\n this._encode = scope._encode.slice();\n this._lookup = scope._lookup.slice();\n this._markpath = scope._markpath;\n}\nScope.prototype = Subscope.prototype = {\n parse(spec) {\n return parseScope(spec, this);\n },\n fork() {\n return new Subscope(this);\n },\n isSubscope() {\n return this._subid > 0;\n },\n toRuntime() {\n this.finish();\n return {\n description: this.description,\n operators: this.operators,\n streams: this.streams,\n updates: this.updates,\n bindings: this.bindings,\n eventConfig: this.eventConfig,\n locale: this.locale\n };\n },\n id() {\n return (this._subid ? this._subid + ':' : 0) + this._id++;\n },\n add(op) {\n this.operators.push(op);\n op.id = this.id();\n // if pre-registration references exist, resolve them now\n if (op.refs) {\n op.refs.forEach(ref => {\n ref.$ref = op.id;\n });\n op.refs = null;\n }\n return op;\n },\n proxy(op) {\n const vref = op instanceof Entry ? ref(op) : op;\n return this.add(Proxy({\n value: vref\n }));\n },\n addStream(stream) {\n this.streams.push(stream);\n stream.id = this.id();\n return stream;\n },\n addUpdate(update) {\n this.updates.push(update);\n return update;\n },\n // Apply metadata\n finish() {\n let name, ds;\n\n // annotate root\n if (this.root) this.root.root = true;\n\n // annotate signals\n for (name in this.signals) {\n this.signals[name].signal = name;\n }\n\n // annotate scales\n for (name in this.scales) {\n this.scales[name].scale = name;\n }\n\n // annotate data sets\n function annotate(op, name, type) {\n let data, list;\n if (op) {\n data = op.data || (op.data = {});\n list = data[name] || (data[name] = []);\n list.push(type);\n }\n }\n for (name in this.data) {\n ds = this.data[name];\n annotate(ds.input, name, 'input');\n annotate(ds.output, name, 'output');\n annotate(ds.values, name, 'values');\n for (const field in ds.index) {\n annotate(ds.index[field], name, 'index:' + field);\n }\n }\n return this;\n },\n // ----\n\n pushState(encode, parent, lookup) {\n this._encode.push(ref(this.add(Sieve({\n pulse: encode\n }))));\n this._parent.push(parent);\n this._lookup.push(lookup ? ref(this.proxy(lookup)) : null);\n this._markpath.push(-1);\n },\n popState() {\n this._encode.pop();\n this._parent.pop();\n this._lookup.pop();\n this._markpath.pop();\n },\n parent() {\n return peek(this._parent);\n },\n encode() {\n return peek(this._encode);\n },\n lookup() {\n return peek(this._lookup);\n },\n markpath() {\n const p = this._markpath;\n return ++p[p.length - 1];\n },\n // ----\n\n fieldRef(field, name) {\n if (isString(field)) return fieldRef$1(field, name);\n if (!field.signal) {\n error('Unsupported field reference: ' + stringValue(field));\n }\n const s = field.signal;\n let f = this.field[s];\n if (!f) {\n const params = {\n name: this.signalRef(s)\n };\n if (name) params.as = name;\n this.field[s] = f = ref(this.add(Field(params)));\n }\n return f;\n },\n compareRef(cmp) {\n let signal = false;\n const check = _ => isSignal(_) ? (signal = true, this.signalRef(_.signal)) : isExpr$1(_) ? (signal = true, this.exprRef(_.expr)) : _;\n const fields = array(cmp.field).map(check),\n orders = array(cmp.order).map(check);\n return signal ? ref(this.add(Compare({\n fields: fields,\n orders: orders\n }))) : compareRef(fields, orders);\n },\n keyRef(fields, flat) {\n let signal = false;\n const check = _ => isSignal(_) ? (signal = true, ref(sig[_.signal])) : _;\n const sig = this.signals;\n fields = array(fields).map(check);\n return signal ? ref(this.add(Key({\n fields: fields,\n flat: flat\n }))) : keyRef(fields, flat);\n },\n sortRef(sort) {\n if (!sort) return sort;\n\n // including id ensures stable sorting\n const a = aggrField(sort.op, sort.field),\n o = sort.order || Ascending;\n return o.signal ? ref(this.add(Compare({\n fields: a,\n orders: this.signalRef(o.signal)\n }))) : compareRef(a, o);\n },\n // ----\n\n event(source, type) {\n const key = source + ':' + type;\n if (!this.events[key]) {\n const id = this.id();\n this.streams.push({\n id: id,\n source: source,\n type: type\n });\n this.events[key] = id;\n }\n return this.events[key];\n },\n // ----\n\n hasOwnSignal(name) {\n return hasOwnProperty(this.signals, name);\n },\n addSignal(name, value) {\n if (this.hasOwnSignal(name)) {\n error('Duplicate signal name: ' + stringValue(name));\n }\n const op = value instanceof Entry ? value : this.add(operator(value));\n return this.signals[name] = op;\n },\n getSignal(name) {\n if (!this.signals[name]) {\n error('Unrecognized signal name: ' + stringValue(name));\n }\n return this.signals[name];\n },\n signalRef(s) {\n if (this.signals[s]) {\n return ref(this.signals[s]);\n } else if (!hasOwnProperty(this.lambdas, s)) {\n this.lambdas[s] = this.add(operator(null));\n }\n return ref(this.lambdas[s]);\n },\n parseLambdas() {\n const code = Object.keys(this.lambdas);\n for (let i = 0, n = code.length; i < n; ++i) {\n const s = code[i],\n e = parseExpression(s, this),\n op = this.lambdas[s];\n op.params = e.$params;\n op.update = e.$expr;\n }\n },\n property(spec) {\n return spec && spec.signal ? this.signalRef(spec.signal) : spec;\n },\n objectProperty(spec) {\n return !spec || !isObject(spec) ? spec : this.signalRef(spec.signal || propertyLambda(spec));\n },\n exprRef(code, name) {\n const params = {\n expr: parseExpression(code, this)\n };\n if (name) params.expr.$name = name;\n return ref(this.add(Expression(params)));\n },\n addBinding(name, bind) {\n if (!this.bindings) {\n error('Nested signals do not support binding: ' + stringValue(name));\n }\n this.bindings.push(extend({\n signal: name\n }, bind));\n },\n // ----\n\n addScaleProj(name, transform) {\n if (hasOwnProperty(this.scales, name)) {\n error('Duplicate scale or projection name: ' + stringValue(name));\n }\n this.scales[name] = this.add(transform);\n },\n addScale(name, params) {\n this.addScaleProj(name, Scale(params));\n },\n addProjection(name, params) {\n this.addScaleProj(name, Projection(params));\n },\n getScale(name) {\n if (!this.scales[name]) {\n error('Unrecognized scale name: ' + stringValue(name));\n }\n return this.scales[name];\n },\n scaleRef(name) {\n return ref(this.getScale(name));\n },\n scaleType(name) {\n return this.getScale(name).params.type;\n },\n projectionRef(name) {\n return this.scaleRef(name);\n },\n projectionType(name) {\n return this.scaleType(name);\n },\n // ----\n\n addData(name, dataScope) {\n if (hasOwnProperty(this.data, name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n return this.data[name] = dataScope;\n },\n getData(name) {\n if (!this.data[name]) {\n error('Undefined data set name: ' + stringValue(name));\n }\n return this.data[name];\n },\n addDataPipeline(name, entries) {\n if (hasOwnProperty(this.data, name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n return this.addData(name, DataScope.fromEntries(this, entries));\n }\n};\nfunction propertyLambda(spec) {\n return (isArray(spec) ? arrayLambda : objectLambda)(spec);\n}\nfunction arrayLambda(array) {\n const n = array.length;\n let code = '[';\n for (let i = 0; i < n; ++i) {\n const value = array[i];\n code += (i > 0 ? ',' : '') + (isObject(value) ? value.signal || propertyLambda(value) : stringValue(value));\n }\n return code + ']';\n}\nfunction objectLambda(obj) {\n let code = '{',\n i = 0,\n key,\n value;\n for (key in obj) {\n value = obj[key];\n code += (++i > 1 ? ',' : '') + stringValue(key) + ':' + (isObject(value) ? value.signal || propertyLambda(value) : stringValue(value));\n }\n return code + '}';\n}\n\n/**\n * Standard configuration defaults for Vega specification parsing.\n * Users can provide their own (sub-)set of these default values\n * by passing in a config object to the top-level parse method.\n */\nfunction defaults () {\n const defaultFont = 'sans-serif',\n defaultSymbolSize = 30,\n defaultStrokeWidth = 2,\n defaultColor = '#4c78a8',\n black = '#000',\n gray = '#888',\n lightGray = '#ddd';\n return {\n // default visualization description\n description: 'Vega visualization',\n // default padding around visualization\n padding: 0,\n // default for automatic sizing; options: 'none', 'pad', 'fit'\n // or provide an object (e.g., {'type': 'pad', 'resize': true})\n autosize: 'pad',\n // default view background color\n // covers the entire view component\n background: null,\n // default event handling configuration\n // preventDefault for view-sourced event types except 'wheel'\n events: {\n defaults: {\n allow: ['wheel']\n }\n },\n // defaults for top-level group marks\n // accepts mark properties (fill, stroke, etc)\n // covers the data rectangle within group width/height\n group: null,\n // defaults for basic mark types\n // each subset accepts mark properties (fill, stroke, etc)\n mark: null,\n arc: {\n fill: defaultColor\n },\n area: {\n fill: defaultColor\n },\n image: null,\n line: {\n stroke: defaultColor,\n strokeWidth: defaultStrokeWidth\n },\n path: {\n stroke: defaultColor\n },\n rect: {\n fill: defaultColor\n },\n rule: {\n stroke: black\n },\n shape: {\n stroke: defaultColor\n },\n symbol: {\n fill: defaultColor,\n size: 64\n },\n text: {\n fill: black,\n font: defaultFont,\n fontSize: 11\n },\n trail: {\n fill: defaultColor,\n size: defaultStrokeWidth\n },\n // style definitions\n style: {\n // axis & legend labels\n 'guide-label': {\n fill: black,\n font: defaultFont,\n fontSize: 10\n },\n // axis & legend titles\n 'guide-title': {\n fill: black,\n font: defaultFont,\n fontSize: 11,\n fontWeight: 'bold'\n },\n // headers, including chart title\n 'group-title': {\n fill: black,\n font: defaultFont,\n fontSize: 13,\n fontWeight: 'bold'\n },\n // chart subtitle\n 'group-subtitle': {\n fill: black,\n font: defaultFont,\n fontSize: 12\n },\n // defaults for styled point marks in Vega-Lite\n point: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'circle'\n },\n circle: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth\n },\n square: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'square'\n },\n // defaults for styled group marks in Vega-Lite\n cell: {\n fill: 'transparent',\n stroke: lightGray\n },\n view: {\n fill: 'transparent'\n }\n },\n // defaults for title\n title: {\n orient: 'top',\n anchor: 'middle',\n offset: 4,\n subtitlePadding: 3\n },\n // defaults for axes\n axis: {\n minExtent: 0,\n maxExtent: 200,\n bandPosition: 0.5,\n domain: true,\n domainWidth: 1,\n domainColor: gray,\n grid: false,\n gridWidth: 1,\n gridColor: lightGray,\n labels: true,\n labelAngle: 0,\n labelLimit: 180,\n labelOffset: 0,\n labelPadding: 2,\n ticks: true,\n tickColor: gray,\n tickOffset: 0,\n tickRound: true,\n tickSize: 5,\n tickWidth: 1,\n titlePadding: 4\n },\n // correction for centering bias\n axisBand: {\n tickOffset: -0.5\n },\n // defaults for cartographic projection\n projection: {\n type: 'mercator'\n },\n // defaults for legends\n legend: {\n orient: 'right',\n padding: 0,\n gridAlign: 'each',\n columnPadding: 10,\n rowPadding: 2,\n symbolDirection: 'vertical',\n gradientDirection: 'vertical',\n gradientLength: 200,\n gradientThickness: 16,\n gradientStrokeColor: lightGray,\n gradientStrokeWidth: 0,\n gradientLabelOffset: 2,\n labelAlign: 'left',\n labelBaseline: 'middle',\n labelLimit: 160,\n labelOffset: 4,\n labelOverlap: true,\n symbolLimit: 30,\n symbolType: 'circle',\n symbolSize: 100,\n symbolOffset: 0,\n symbolStrokeWidth: 1.5,\n symbolBaseFillColor: 'transparent',\n symbolBaseStrokeColor: gray,\n titleLimit: 180,\n titleOrient: 'top',\n titlePadding: 5,\n layout: {\n offset: 18,\n direction: 'horizontal',\n left: {\n direction: 'vertical'\n },\n right: {\n direction: 'vertical'\n }\n }\n },\n // defaults for scale ranges\n range: {\n category: {\n scheme: 'tableau10'\n },\n ordinal: {\n scheme: 'blues'\n },\n heatmap: {\n scheme: 'yellowgreenblue'\n },\n ramp: {\n scheme: 'blues'\n },\n diverging: {\n scheme: 'blueorange',\n extent: [1, 0]\n },\n symbol: ['circle', 'square', 'triangle-up', 'cross', 'diamond', 'triangle-right', 'triangle-down', 'triangle-left']\n }\n };\n}\n\nfunction parse (spec, config, options) {\n if (!isObject(spec)) {\n error('Input Vega specification must be an object.');\n }\n config = mergeConfig(defaults(), config, spec.config);\n return parseView(spec, new Scope(config, options)).toRuntime();\n}\n\nexport { AxisDomainRole, AxisGridRole, AxisLabelRole, AxisRole, AxisTickRole, AxisTitleRole, DataScope, FrameRole, LegendEntryRole, LegendLabelRole, LegendRole, LegendSymbolRole, LegendTitleRole, MarkRole, Scope, ScopeRole, defaults as config, parse, parseSignal as signal, parseSignalUpdates as signalUpdates, parseStream as stream };\n","// -- Transforms -----\n\nimport {extend} from 'vega-util';\nimport {transforms} from 'vega-dataflow';\nimport * as tx from 'vega-transforms';\nimport * as vtx from 'vega-view-transforms';\nimport * as encode from 'vega-encode';\nimport * as geo from 'vega-geo';\nimport * as force from 'vega-force';\nimport * as tree from 'vega-hierarchy';\nimport * as label from 'vega-label';\nimport * as reg from 'vega-regression';\nimport * as voronoi from 'vega-voronoi';\nimport * as wordcloud from 'vega-wordcloud';\nimport * as xf from 'vega-crossfilter';\nextend(\n transforms,\n tx, vtx, encode, geo, force, label, tree, reg, voronoi, wordcloud, xf\n);\n\n\n// -- Exports -----\n\nexport {version} from './package.json';\n\nexport * from 'vega-statistics';\n\nexport * from 'vega-time';\n\nexport * from 'vega-util';\n\nexport * from 'vega-loader';\n\nexport * from 'vega-scenegraph';\n\nexport {\n Dataflow,\n EventStream,\n Parameters,\n Pulse,\n MultiPulse,\n Operator,\n Transform,\n changeset,\n ingest,\n isTuple,\n definition,\n transform,\n transforms,\n tupleid\n} from 'vega-dataflow';\n\nexport {\n scale,\n scheme,\n interpolate,\n interpolateColors,\n interpolateRange,\n quantizeInterpolator\n} from 'vega-scale';\n\nexport {\n projection\n} from 'vega-projection';\n\nexport {\n View\n} from 'vega-view';\n\nexport {\n numberFormatDefaultLocale as formatLocale,\n timeFormatDefaultLocale as timeFormatLocale,\n locale,\n defaultLocale,\n resetDefaultLocale\n} from 'vega-format';\n\nexport {\n expressionFunction\n} from 'vega-functions';\n\nexport {\n parse\n} from 'vega-parser';\n\nexport {\n context as runtimeContext\n} from 'vega-runtime';\n\nexport {\n codegenExpression,\n parseExpression\n} from 'vega-expression';\n\nexport {\n parseSelector\n} from 'vega-event-selector';\n"],"names":["accessor","fn","fields","name","fname","accessorName","accessorFields","getter","path","length","get1","getN","field","obj","len","i","error","message","Error","splitAccessPath","p","n","j","c","q","b","s","push","substring","opt","get","id","identity","_","zero","one","truthy","falsy","log$1","method","level","input","args","concat","slice","call","console","apply","None","Error$1","Warn","Info","Debug","logger","handler","arguments","undefined","this","warn","info","debug","isArray","Array","isObject","Object","isLegalKey","key","mergeConfig","_len","configs","_key","reduce","out","source","signals","mergeNamed","r","layout","writeConfig","output","value","recurse","k","o","a","map","add","forEach","peek","array","toNumber","exp","sign","x","Math","log","symlog","log1p","abs","symexp","expm1","pow","exponent","pan","domain","delta","lift","ground","d0","d1","dd","panLinear","panLog","panPow","panSymlog","constant","zoom","anchor","scale","da","zoomLinear","zoomLog","zoomPow","zoomSymlog","quarter","date","Date","getMonth","utcquarter","getUTCMonth","clampRange","range","min","max","span","lo","hi","isFunction","DESCENDING","compare","orders","ord","fmap","gen","comparator","f","keys","ascending","u","v","compare1","compareN","order","debounce","delay","tid","e","clearTimeout","setTimeout","extend","extent","extentIndex","hop","prototype","hasOwnProperty","has","object","property","NULL","fastmap","test","has$1","size","empty","set","delete","clear","clean","next","flush","threshold","left","right","center","t","l","inherits","child","parent","members","proto","create","defineProperty","writable","enumerable","configurable","inrange","r0","r1","isBoolean","isDate","toString","isIterable","Symbol","iterator","isNumber","isRegExp","isString","flat","replace","lerp","frac","DEFAULT_MAX_SIZE","lruCache","maxsize","curr","prev","update","merge","array0","array1","n0","n1","merged","constructor","i0","i1","repeat","str","reps","pad","padchar","align","ceil","$","JSON","stringify","toBoolean","defaultParser","parse","toDate","parser","toSet","truncate","ellipsis","visitArray","filter","visitor","EOL","EOF","QUOTE","NEWLINE","RETURN","objectConverter","columns","Function","join","inferColumns","rows","columnSet","row","column","width","formatDate","year","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","isNaN","getUTCFullYear","getUTCDate","dsvFormat","delimiter","reFormat","RegExp","DELIMITER","charCodeAt","parseRows","text","N","I","eof","eol","token","preformatBody","formatValue","formatRow","convert","customConverter","format","formatBody","formatRows","identity$5","feature","topology","objects","type","features","geometries","bbox","properties","geometry","transformPoint","transform","x0","y0","kx","ky","dx","translate","dy","arcs","arc","points","pop","reverse","point","line","ring","polygon","coordinates","stitch","stitchedArcs","fragmentByStart","fragmentByEnd","fragments","emptyIndex","start","end","g","p1","p0","dp","ends","fg","unshift","gf","mesh","meshArcs","geom","geomsByArc","extract0","extract1","extract2","extract3","geoms","extractArcs","NaN","descending","bisector","compare2","mid","d","number","ascendingBisect","bisectRight","bisectLeft","bisect$1","Adder","_partials","Float64Array","_n","y","valueOf","InternMap","Map","entries","keyof","super","defineProperties","_intern","intern_get","intern_set","intern_delete","InternSet","Set","values","_ref","_ref2","_ref3","ascendingDefined","e10","sqrt","e5","e2","tickSpec","stop","count","step","power","floor","log10","factor","i2","inc","round","ticks","tickIncrement","tickStep","valueof","index","quickselect","Infinity","TypeError","compareDefined","m","z","sd","swap","quantile","from","numbers","value0","subarray","quantileSorted","median","arrays","flatten","sum","formatDecimalParts","toExponential","indexOf","coefficient","prefixExponent","re","formatSpecifier","specifier","match","exec","FormatSpecifier","fill","symbol","comma","precision","trim","formatRounded","formatTypes","%","toFixed","toLocaleString","toPrecision","X","toUpperCase","identity$4","locale","formatPrefix","prefixes","formatLocale$1","grouping","thousands","group","Number","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","String","percent","minus","nan","newFormat","prefix","toLowerCase","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","formatTrim","padding","precisionFixed","precisionPrefix","precisionRound","definition","formatLocale","defaultLocale","t0","t1","timeInterval","floori","offseti","interval","offset","previous","setTime","every","isFinite","millisecond","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","durationYear","second","getMilliseconds","timeMinute","getSeconds","getMinutes","utcMinute","setUTCSeconds","timeHour","getHours","utcHour","setUTCMinutes","timeDay","setHours","setDate","getDate","getTimezoneOffset","utcDay","setUTCHours","setUTCDate","unixDay","timeWeekday","getDay","timeSunday","timeMonday","timeTuesday","timeWednesday","timeThursday","timeFriday","timeSaturday","utcWeekday","getUTCDay","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","timeMonth","setMonth","getFullYear","utcMonth","setUTCMonth","timeYear","setFullYear","utcYear","setUTCFullYear","ticker","month","week","day","hour","minute","tickIntervals","tickInterval","target","utcTicks","utcTickInterval","timeTicks","timeTickInterval","YEAR","QUARTER","MONTH","WEEK","DATE","DAY","DAYOFYEAR","HOURS","MINUTES","SECONDS","MILLISECONDS","TIME_UNITS","UNITS","timeUnits","units","unit","sort","defaultSpecifiers","timeUnitSpecifier","specifiers","fmt","localYear","dayofyear","localDayOfYear","localWeekNum","timeWeek","localFirst","localDate","H","M","S","L","utcdayofyear","utcDayOfYear","utcweek","utcWeekNum","UTC","utcWeek","utcFirst","utcDate","inv","newDate","phase","getUnit","weekday","firstDay","localGet","localInv","w","timeFloor","utcGet","utcInv","utcFloor","timeIntervals","timeSecond","timeMillisecond","utcIntervals","utcSecond","utcMillisecond","utcInterval","ival","timeOffset","utcOffset","sequence","timeSequence","utcSequence","Milli","Seconds","Minutes","Hours","Day","Month","Year","intervals","bin","ext","maxbins","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","formatRe","periodLookup","formatLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","A","B","formatDayOfMonth","formatMicroseconds","formatYearISO","G","formatFullYearISO","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","Q","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","U","formatWeekNumberSunday","V","formatWeekNumberISO","formatWeekdayNumberSunday","W","formatWeekNumberMonday","formatYear","Y","formatFullYear","Z","formatZone","formatLiteralPercent","utcFormats","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCYearISO","formatUTCFullYearISO","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parses","string","parseSpecifier","parseDayOfMonth","parseMicroseconds","parseYear","parseFullYear","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parseQuarter","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseZone","parseLiteralPercent","pads","charAt","newParse","utcFormat","utcParse","timeFormat","timeParse","numberRe","percentRe","requoteRe","requote","names","dISO","dow","UTCdISO","memoize","cache","spec","numberLocale","formatFloat","numberFormat","decimalChar","dec","idx","lastIndexOf","rightmostDigit","formatSpan","defaultNumberLocale","defaultTimeLocale","resetNumberFormatDefaultLocale","numberFormatLocale","numberFormatDefaultLocale","timeMultiFormat","timeLocale","resetTimeFormatDefaultLocale","timeFormatLocale","timeFormatLocale$1","timeFormatDefaultLocale","createLocale","numberSpec","timeSpec","protocol_re","allowed_re","whitespace_re","fileProtocol","async","load","uri","options","sanitize","url","href","localFile","file","http","fileAccess","result","isFile","loadFile","base","isAllowed","stringValue","hasProtocol","baseURL","startsWith","endsWith","mode","defaultProtocol","rel","context","crossOrigin","fileLoader","fs","filename","Promise","accept","reject","readFile","data","fileReject","httpLoader","fetch","response","ok","status","statusText","httpReject","isValid","typeParsers","boolean","integer","unknown","typeTests","isInteger","typeList","inferType","inferTypes","types","delimitedFormat","delim","dsv","responseType","header","json","prop","Buffer","isBuffer","copy","parseJSON","filters","interior","exterior","topojson","csv","tsv","reader","read","schema","timeParser","utcParser","datum","parsers","parts","pattern","split","loader","loaderFactory","UniqueList","idFunc","list","ids","remove","splice","asyncCallback","df","callback","err","TUPLE_ID_KEY","TUPLE_ID","isTuple","tupleid","setid","ingest$1","derive","rederive","stableCompare","cmp","isChangeSet","changeset","rem","mod","remp","modp","reflow","insert","modify","tuple","encode","pulse","tuples","cur","modifies","CACHE","Parameters","force","modified","OP_ID","NO_PARAMS","Operator","init","params","react","stamp","rank","qrank","flags","_update","parameters","flag","bit","state","targets","_targets","skip","initonly","argval","_argval","argops","_argops","deps","op","marshall","item","detach","evaluate","StopPropagation","run","rv","STREAM_ID","EventStream","receive","_filter","_apply","stream","consume","_consume","evt","val","trg","preventDefault","stopPropagation","throttle","pause","now","dataflow","between","active","SKIP","onStream","func","touch","onOperator","updater","connect","Pulse","materialize","visit","addFilter","MultiPulse","pulses","hash","changed","ADD","REM","MOD","changes","reentrant","ADD_REM","ADD_MOD","ALL","REFLOW","SOURCE","NO_SOURCE","NO_FIELDS","fork","clone","addAll","src","addF","remF","modF","srcF","cleans","runAfter","nomod","some","NO_OPT","Heap","nodes","siftdown","last","ridx","cidx","siftup","pidx","Dataflow","logLevel","_clock","_rank","_locale","_loader","_touched","_input","_pulse","_heap","_postrun","logMethod","_log","Transform","cleanThreshold","shift","sources","targetRank","rerank","queue","_enqueue","ingest","preload","pending","_pending","requests","done","loadPending","res","request","send","document","querySelectorAll","addEventListener","on","prerun","postrun","_getPulse","then","pr","priority","all","cb","runAsync","_running","enqueue","singlePulse","transforms","Definition","quantiles","quartiles","estimateBandwidth","mean","variance","deviation","h","maxb","logb","div","divide","minstep","steps","eps","nice","bootstrapCI","samples","alpha","mu","random","dotbin","smooth","thresh","smoothing","exports","SQRT2PI","PI","SQRT2","nextSample","sampleNormal","stdev","rds","densityNormal","cumulativeNormal","cd","quantileNormal","erfinv","gaussian","sigma","dist","sample","pdf","cdf","icdf","kde","support","bandwidth","kernel","sampleLogNormal","densityLogNormal","cumulativeLogNormal","quantileLogNormal","lognormal","mixture","dists","weights","normalize","distributions","sampleUniform","densityUniform","cumulativeUniform","quantileUniform","uniform","coef","predict","rSquared","ols","uX","uY","uXY","uX2","slope","xv","yv","ux","uy","visitPoints","SSE","SST","sse","sst","linear","XY","X2","ly","xy","YL","XYL","X2Y","c0","c1","YS","lx","quad","x2","X3","X4","X2X2","poly","lhs","rhs","matrix","gaussianElimination","uncenter","maxiters","epsilon","loess","bw","yhat","residuals","robustWeights","iter","edge","denom","xk","yk","tricube","xkw","updateInterval","medianResidual","arg","cnt","MIN_RADIANS","sampleCurve","minSteps","maxSteps","minX","maxX","sx","sy","ymin","ymax","scaleY","pm","angleDelta","a0","atan2","a1","groupkey","measureName","as","noop","base_op","AggregateOps","cell","store","num","__count__","missing","valid","product","mean_d","average","req","dev","variancep","stdevp","stderr","distinct","ci0","ci1","q2","q1","q3","argmin","argmax","ValidAggregateOps","createMeasure","compareIndex","_ops","_out","compileMeasures","agg","ops","getreqs","resolve","ctr","TupleStore","reset","measure","prototype$1","Aggregate","_adds","_mods","_alen","_mlen","_drop","_cross","_dims","_dnames","_measures","_countOnly","_counts","_prev","_inputs","_outputs","_add","_rem","_ext","_get","_q","quartile","ci","_ci","Aggregate$1","metadata","generates","null","default","aggr","drop","cross","dims","vals","collect","cells","generate","inputs","outputs","inputMap","inputVisit","groupby","dname","cellkey","mname","outname","newcell","newtuple","measures","celltuple","counts","adds","mods","Bin","SortedList","resort","Collect","Compare","update$5","CountPattern","Cross","required","band","bins","_bins","b0","b1","Collect$1","root","process","tokens","tcase","tokenize","case","_parameterCheck","_match","_stop","_finish","stopwords","_tuples","Distributions","randomKDE","randomMixture","normal","randomNormal","randomLogNormal","randomUniform","DISTRIBUTIONS","FUNCTION","FIELD","def","Density","function","fieldNames","partition$1","groups","distribution","minsteps","maxsteps","DotBin","Expression","update$4","expr","Extent","Subflow","Facet","_keys","Field","update$3","Filter","Flatten","Fold","Formula","Generate","autostep","detachSubflow","activate","flow","subflow","flows","sf","_group","detached","initTargets","act","rekey","k0","k1","isMod","revisit","maxlen","fnames","generator","Methods","Empty","Impute","JoinAggregate","KDE","Key","update$2","Load","Lookup","MultiExtent","update$1","extents","MultiValues","Params","Pivot","PreFacet","Project","Proxy","Quantile","gVals","kVal","impute","getValue","getField","fName","kName","gNames","keyvals","gKey","kMap","gMap","partition","_impute","cumulative","density","defaultValue","_transform","limit","pivotKeys","bind","aggregateParams","project","lut","dt","Quantile$1","Relay","Sample","Sequence","Sieve","TimeUnit","probs","cap","OUTPUT","TupleIndex","Values","utc","timezone","_floor","u0","u1","timeBin","tunits","WindowOps","row_number","dense_rank","drank","percent_rank","cume_dist","cume","ntile","lag","lead","first_value","last_value","nth_value","nth","prev_value","next_value","find","ValidWindowOps","WindowState","windows","countOnly","visitInputs","param","WindowOp","Window","processPartition","ignorePeers","frame","setWindow","adjustRange","bisect","wind","constant$3","cos","sin","pi","halfPi","tau","asin","tauEpsilon","append","strings","Path$1","digits","_x0","_y0","_x1","_y1","_append","appendRound","moveTo","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","y2","arcTo","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","tan","acos","t01","t21","ccw","cw","rect","Path","withPath","shape","RangeError","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","cornerTangents","rc","ox","oy","x11","y11","x10","y10","x00","y00","d2","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","array$4","Linear","_context","curveLinear","line$2$1","defined","curve","buffer","defined0","lineStart","lineEnd","pointX","pointY","area$2$1","area","x0z","y0z","areaStart","areaEnd","arealine","lineX0","lineY0","lineY1","lineX1","Linear$1","_line","_point","circle","draw","noop$3","that","Basis","BasisClosed","BasisOpen","Bundle","beta","_basis","_beta","_x2","_x3","_x4","_y2","_y3","_y4","_x","_y","curveBundle","custom","bundle","_k","Cardinal","tension","curveCardinal","cardinal","CardinalClosed","_x5","_y5","curveCardinalClosed","CardinalOpen","curveCardinalOpen","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","_alpha","x23","y23","curveCatmullRom","catmullRom","CatmullRomClosed","curveCatmullRomClosed","CatmullRomOpen","curveCatmullRomOpen","LinearClosed","slope3","h0","h1","s0","s1","slope2","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","Step","_t","domCanvas","createElement","getContext","height","_t0","px","py","domImage","Image","initRange","initInterpolator","interpolator","implicit","ordinal","define","factory","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","parseInt","rgbn","Rgb","rgba","hsla","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","clampa","clampi","Hsl","hslConvert","hsl","clamph","clampt","hsl2rgb","m1","m2","channels","assign","displayable","formatHex8","formatHsl","clamp","radians","degrees","Xn","Yn","Zn","t2","t3","labConvert","Lab","Hcl","hcl2lab","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hcl","hclConvert","C","E","ED","EB","BC_DA","cubehelix","Cubehelix","bl","cubehelixConvert","basis","v0","v1","v2","v3","basis$1","basisClosed","cosh","sinh","constant$2","hue","gamma","nogamma","exponential","rgbGamma","colorRgb","rgbSpline","spline","colors","rgbBasis","rgbBasisClosed","numberArray","isNumberArray","ArrayBuffer","isView","DataView","genericArray","nb","na","date$1","interpolateNumber","reA","reB","am","bm","bs","bi","lastIndex","interpolate$1","interpolateRound","svgNode","translateX","translateY","rotate","skewX","scaleX","decompose","atan","interpolateTransform","pxComma","pxParen","degParen","xa","ya","xb","yb","interpolateTransformCss","DOMMatrix","WebKitCSSMatrix","isIdentity","interpolateTransformSvg","createElementNS","setAttribute","baseVal","consolidate","epsilon2","zoomRho","rho","rho2","rho4","ux0","uy0","w0","ux1","uy1","w1","coshr0","tanh","duration","_1","_2","colorHsl","hsl$1","hslLong","colorHcl","hcl$1","hclLong","cubehelixGamma","colorCubehelix","cubehelix$1","cubehelixLong","piecewise","interpolate","colorLab","bimap","polymap","transformer","untransform","interpolateValue","rescale","clamper","invert","rangeRound","continuous","tickFormat","linearish","prestep","maxIter","transformLog","transformExp","transformLogn","transformExpn","pow10","reflect","loggish","logs","pows","log2","logp","powp","transformSymlog","transformSymexp","symlogish","transformPow","transformSqrt","transformSquare","powish","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","k10","sequential","sequentialPow","k21","r2","divergingPow","bandSpace","paddingInner","paddingOuter","space","Log","Pow","Sqrt","Symlog","Time","Sequential","Diverging","Quantize","Threshold","Ordinal","Point","Band","BinOrdinal","Continuous","Discrete","Discretizing","Interpolating","Temporal","scaleOrdinal","ordinalRange","range$1","invertRange","pointish","scales","VEGA_SCALE","registerScale","invertExtent","invertRangeExtent","isValidScaleType","hasType","isContinuous","isDiscrete","isDiscretizing","isLogarithmic","isInterpolating","isQuantile","scale$4","sequentialLog","sequentialSymlog","diverging","divergingLog","divergingSymlog","thresholds","quantize","scaleBinOrdinal","tickFormat$1","scaleProps","interpolateRange","interpolateColors","$$1","quantizeInterpolator","scaleFraction","scale$1","interp","palette","scheme","schemes","category10","category20","category20b","category20c","tableau10","tableau20","accent","dark2","paired","pastel1","pastel2","set1","set2","set3","blues","greens","greys","oranges","purples","reds","blueGreen","bluePurple","greenBlue","orangeRed","purpleBlue","purpleBlueGreen","purpleRed","redPurple","yellowGreen","yellowOrangeBrown","yellowOrangeRed","blueOrange","brownBlueGreen","purpleGreen","purpleOrange","redBlue","redGrey","yellowGreenBlue","redYellowBlue","redYellowGreen","pinkYellowGreen","spectral","viridis","magma","inferno","plasma","cividis","rainbow","sinebow","turbo","browns","tealBlues","teals","warmGreys","goldGreen","goldOrange","goldRed","lightGreyRed","lightGreyTeal","lightMulti","lightOrange","lightTealBlue","darkBlue","darkGold","darkGreen","darkMulti","darkRed","SymbolLegend","DiscreteLegend","defaultFormatter","tickCount","minStep","validTicks","endpoints","tickValues","noSkip","varfmt","tickLog","symbols","labelValues","binValues","thresholdValues","isDiscreteRange","labelFormat","thresholdFormat","formatRange","formatDiscrete","formatPoint","dflt","isTemporal","domainCaption","gradient_id","patternPrefix","isGradient","gradient","gradientRef","defs","Gradient","stops","lookup","monotone","horizontal","vertical","natural","curves","orientation","entry","paramCounts","commandPattern","numberPattern","spacePattern","flagPattern","commands","cmd","paramCount","segment","ws","parseParams","DegToRad","Epsilon","HalfPi","Tau","HalfSqrt3","segmentCache","bezierCache","bezier","th0","th1","rx","ry","sin_th","cos_th","a00","a01","a10","a11","cos_th0","sin_th0","cos_th1","sin_th1","th_half","sin_th_h2","x3","y3","temp","current","sX","sY","pathRender","tempX","tempY","tempControlX","tempControlY","controlX","controlY","anchorX","anchorY","beginPath","drawArc","coords","seg","large","sweep","rotateX","th","pl","sfactor_sq","sfactor","xc","yc","th_arc","segs","th2","th3","segments","bez","Tan30","builtins","diamond","square","arrow","wedge","triangle","stroke","parsed","customSymbol","rectangleX","rectangleY","rectangleWidth","rectangleHeight","vg_rect","crTL","crTR","crBL","crBR","rectangle","tl","tr","br","path$3","cornerRadius","vg_trail","ready","w2","ud","hypot","trail","value$1","arcShape","padRadius","da0","da1","ap","rp","rc0","rc1","oc","x32","y32","intersect","ax","ay","bx","by","kc","lc","centroid","arc$2","areavShape","area$2","areahShape","lineShape","line$2","rectShape","cornerRadiusTopLeft","cornerRadiusTopRight","cornerRadiusBottomRight","cornerRadiusBottomLeft","symbolShape","symbol$2","trailShape","hasCornerRadius","clip_id","resetSVGClipId","clip$1","renderer","clip","_defs","clipping","Bounds","union","Item","mark","bounds","GroupItem","items","ResourceLoader","customLoader","increment","decrement","boundStroke","miter","strokeOpacity","sw","strokeWidth","expand","strokeJoin","miterAdjustment","MAX_VALUE","equals","angle","rotatedPoints","encloses","alignsWith","intersects","contains","sanitizeURL","catch","loadImage","image$1","img","cors","onload","onerror","complete","poll","circleThreshold","rot","ma","mb","mc","md","addL","addX","addY","addp","addpL","boundContext","deg","context$1","px1","py1","px2","py2","quadExtrema","px3","py3","cubicExtrema","sa","ea","cubic","s2","canvas","intersectPath","brush","isPointInPath","intersectPoint","box","intersectRect","intersectRule","intersectBoxLine","blend","globalCompositeOperation","addStops","addColorStop","createRadialGradient","image","ictx","fillStyle","createLinearGradient","fillRect","createPattern","fillOpacity","globalAlpha","lw","strokeStyle","lineWidth","lineCap","strokeCap","lineJoin","miterLimit","strokeMiterLimit","setLineDash","strokeDash","lineDashOffset","strokeDashOffset","zindex","zorder","scene","zdirty","zitems","pickVisit","hit","drawAll","drawPath","drawOne","pick$1","gx","gy","pixelRatio","hitPath","filled","isPointInStroke","pickPath","translateItem","markItemPath","isect","tag","nested","attr","emit","rotateItem","bound","pick","markMultiItemPath","tip","orient","clipGroup","offset$1","strokeOffset","emitRectangle","off","rectanglePath","hitBackground","hitForeground","hitCorner","noBound","fore","strokeForeground","save","restore","dw","dh","ix","interactive","marktype","pickMark","content","background","foreground","xmlns","version","getImage","imageWidth","aspect","imageHeight","imageXOffset","imageYOffset","baseline","toDataURL","ar0","ar1","imageSmoothingEnabled","drawImage","xOffset","yOffset","path$1","pathCache","path$2","transformItem","draw$2","rule","widthCache","textMetrics","fontSize","measureWidth","estimateWidth","useCanvas","use","_estimateWidth","textValue","currentFontHeight","_measureWidth","font","currentFont","measureText","lineHeight","textLines","lineBreak","multiLineOffset","widthGetter","rtl","dir","fontFamily","quote","fontStyle","fontVariant","fontWeight","textAlign","tempBounds","anchorPoint","radius","theta","lh","fillText","strokeText","Marks","boundItem","DUMMY","boundMark","hasItems","sceneToJSON","indent","sceneFromJSON","initialize","Scenegraph","createMark","role","aria","description","domCreate","doc","ns","domFind","el","childNodes","tagName","domChild","ownerDocument","insertBefore","domClear","removeChild","cssClass","event","getBoundingClientRect","clientX","clientLeft","clientY","top","clientTop","Handler","customTooltip","_active","_handlers","_tooltip","defaultTooltip","element","Renderer","_el","_bgcolor","toJSON","markdef","origin","_obj","firstChild","_origin","_scene","_handlerIndex","handlers","eventName","handleHref","MouseEvent","dispatchEvent","handleTooltip","show","tooltip","mdef","resolveItem","getItemBoundingClientRect","bottom","scaleFactor","resize","bgcolor","_width","_height","_scale","dirty","render","_call","_render","renderAsync","_ready","_load","redraw","DragEnterEvent","DragLeaveEvent","DragOverEvent","MouseDownEvent","MouseMoveEvent","MouseOutEvent","MouseOverEvent","ClickEvent","MouseWheelEvent","TouchStartEvent","TouchMoveEvent","TouchEndEvent","TooltipShowEvent","TooltipHideEvent","HrefEvent","CanvasHandler","_down","_touch","_first","_events","eventBundle","eventListenerCheck","fire","move","moveEvent","overEvent","outEvent","pickEvent","exit","inactive","_canvas","events","DOMMouseScroll","mousemove","dragover","mouseout","dragleave","mousedown","click","touchstart","changedTouches","touchmove","touchend","vegaType","window","devicePixelRatio","CanvasRenderer","_options","_redraw","_dirty","_tempb","base$1","SVGHandler","_hrefHandler","listener","_tooltipHandler","externalContext","appendChild","inDOM","HTMLElement","parentNode","ratio","style","setTransform","ctx","db","vb","viewBounds","clipToBounds","clearRect","__data__","svg","_svg","removeEventListener","ARIA_HIDDEN","ARIA_LABEL","ARIA_ROLE","ARIA_ROLEDESCRIPTION","GRAPHICS_OBJECT","GRAPHICS_SYMBOL","roledesc","label","AriaIgnore","AriaGuides","axis","desc","caption","title","extractTitle","legend","props","channelCaption","titleCaption","AriaEncode","ariaRole","ariaRoleDescription","ariaItemAttributes","hide","ariaMarkAttributes","ariaGuide","ariaMark","innerText","attrText","markup","buf","outer","inner","stack","open","attrs","close","serializeXML","node","_serialize","hasAttributes","attributes","hasChildNodes","children","nodeType","nodeValue","stylesAttr","stylesCss","rootAttributes","svgns","SVGRenderer","_dirtyID","_root","dirtyParents","updateGradient","grad","pt","setAttributes","viewBox","preserveAspectRatio","fx","fy","fr","updateClipping","mask","sibling","__values__","bg","cg","ownerSVGElement","previousSibling","siblingCheck","nextSibling","_clearDefs","setAttributeNS","RootIndex","setProperty","removeAttribute","_dirtyCheck","_dirtyAll","isDirty","isGroup","lastChild","extra","mark_extras","setStyle","ts","textContent","removeAttributeNS","removeProperty","loc","location","SVGStringRenderer","_text","class","attrList","_hrefs","prefixed","styleList","display","Canvas","RenderType","PNG","SVG","modules","renderModule","hits","intersectMark","intersectGroup","visitMark","intersectItem","marks","headless","clipBounds","boundClip","TOLERANCE","sceneEqual","pathEqual","ka","kb","objectEqual","Top","Left","Right","Bottom","TopLeft","TopRight","BottomLeft","BottomRight","Start","Middle","End","Group","AxisRole","TitleRole","FrameRole","ScopeRole","LegendRole","RowHeader","RowFooter","RowTitle","ColHeader","ColFooter","ColTitle","Padding","Symbols","Fit","FitX","FitY","Pad","All","Each","Flush","Column","Row","Bound","view","rebound","markBounds","COUNTER_NAME","Identifier","Mark","Overlap","Identifier$1","counter","_signals","scenegraph","lookup$1","Init","methods","parity","greedy","sep","hasOverlap","hasBounds","Render","separation","boundScale","boundTolerance","boundTest","tolerance","boundOrient","isYAxis","axisLayout","indices","grid","labels","axisIndices","position","minExtent","maxExtent","titlePadding","dl","axisTitleLayout","auto","bboxFlush","bboxFull","offsetValue","gridLayout","nodirty","alignCol","alignRow","padCol","padRow","ncols","nrows","xExtent","xMax","yExtent","yMax","boxes","trellisLayout","views","rowheaders","rowfooters","colheaders","colfooters","rowtitle","coltitle","gridLayoutGroups","boundFlush","boundFull","headerBand","layoutHeaders","footerBand","titleAnchor","titleBand","layoutTitle","headers","isX","bf","stride","back","legendParams","config","legends","offsets","mult","legendLayout","_bounds","ex","ey","tpad","tx","ty","legendTitleOffset","legendGroupLayout","legendBounds","widths","legendEntryLayout","lr","noBar","vgrad","ViewLayout","xBounds","yBounds","autosize","pos","subtitle","titleLayout","_autosize","viewWidth","viewHeight","_resizeView","viewSizeLayout","layoutGroup","shouldReflow","AxisTicks","DataJoin","defaultItemCreate","Encode","LegendEntries","newMap","fmod","encoders","reenter","enter","fraction","lskip","perc","adjust","labelFraction","perc2","sourceX","sourceY","targetX","targetY","LinkPath","Paths","rr","iy","lineR","sr","ta","arcR","curveR","orthoX","orthoY","orthoR","sc","ss","tc","diagonalX","diagonalY","diagonalR","mr","Pie","DEFAULT_COUNT","includePad","Scale","domainCheck","adjustScheme","flip","SortItems","isContinuousColor","rawDomain","domainMid","scaleKey","rangeStep","configureRangeStep","scheme$1","schemeExtent","interpolateGamma","schemeCount","configureScheme","configureRange","domainRaw","configureBins","raw","includeZero","padDomain","domainMin","domainMax","domainImplicit","scaleImplicit","configureDomain","Zero","Center","Normalize","DefOutput","Stack","stackCenter","stackNormalize","stackZero","lastPos","lastNeg","quarterPi","streamGeometry","streamGeometryType","streamObjectType","Feature","FeatureCollection","Sphere","sphere","MultiPoint","LineString","streamLine","MultiLineString","Polygon","streamPolygon","MultiPolygon","GeometryCollection","closed","coordinate","polygonStart","polygonEnd","geoStream","lambda00","phi00","lambda0","cosPhi0","sinPhi0","phi0","lambda1","phi1","lambda2","deltaSum","ranges","areaRingSum","areaSum","areaStream","areaRingStart","areaRingEnd","areaRing","areaPointFirst","areaPoint","lambda","phi","dLambda","sdLambda","adLambda","cosPhi","sinPhi","spherical","cartesian","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","W0","W1","X0","Y0","Z0","X1","Y1","Z1","Y2","Z2","z0","boundsStream","boundsPoint","boundsLineStart","boundsLineEnd","boundsRingPoint","boundsRingStart","boundsRingEnd","linePoint","inflection","phii","lambdai","antimeridian","rangeCompare","rangeContains","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointCartesian","centroidLinePointFirst","centroidLinePoint","centroidRingPointFirst","centroidRingPoint","cz","compose","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","circleRadius","cosRadius","clipBuffer","lines","rejoin","pointEqual","Intersection","other","clipRejoin","compareIntersection","startInside","subject","link","isSubject","longitude","pointVisible","clipLine","sink","ringBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","winding","point0","sinPhi1","cosPhi1","point1","absDelta","intersection","phiArc","polygonContains","pointLine","ringSegments","validSegment","sign0","sign1","sinLambda0Lambda1","clipAntimeridianIntersect","to","direction","clipCircle","cr","smallRadius","notHemisphere","visible","two","n2","n2n2","n1n2","determinant","c2","n1xn2","uu","polar","code","v00","point2","sinRadius","circleStream","clipMax","clipMin","clipRectangle","corner","comparePoint","ca","x__","y__","v__","x_","y_","v_","first","activeStream","bufferStream","clipStream","polygonInside","cleanInside","graticuleX","graticuleY","pathArea","boundsStream$1","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","pathCentroid","PathContext","_radius","pointRadius","lengthRing","lengthSum","lengthStream","lengthPointFirst","lengthPoint","pathMeasure","cacheDigits","cacheAppend","cacheRadius","cacheCircle","PathString","geoPath","projection","projectionStream","contextStream","pathBounds","TransformStream","fit","fitBounds","clipExtent","fitExtent","fitSize","fitWidth","fitHeight","maxDepth","cosMinDistance","resample","delta2","resampleLineTo","depth","phi2","dx2","dy2","dz","b00","c00","resampleStream","ringPoint","resampleNone","transformRadians","scaleTranslateRotate","scaleTranslate","cosAlpha","sinAlpha","ai","fi","projectionMutator","projectAt","projectResample","projectTransform","projectRotateTransform","cacheStream","preclip","clipAntimeridian","postclip","recenter","transformRotate","clipAngle","reflectX","reflectY","conicProjection","parallels","conicEqualAreaRaw","sy0","forward","cylindricalEqualAreaRaw","r0y","geoConicEqualArea","geoAlbers","conicEqualArea","azimuthalRaw","azimuthalInvert","cc","azimuthalEqualAreaRaw","cxcy","azimuthalEquidistantRaw","mercatorRaw","mercatorProjection","reclip","tany","conicConformalRaw","equirectangularRaw","conicEquidistantRaw","nx","A1","A2","A3","A4","equalEarthRaw","l2","l6","gnomonicRaw","naturalEarth1Raw","phi4","orthographicRaw","stereographicRaw","transverseMercatorRaw","sqrt2","mollweideBromleyTheta","cp","cpsinPhi","mollweideRaw","mollweideBromleyRaw","defaultPath","projectionProperties","proj","projections","getProjectionPath","albers","albersusa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","albersUsa","streams","azimuthalequalarea","azimuthalequidistant","conicconformal","conicequalarea","conicequidistant","equalEarth","equirectangular","gnomonic","mercator","mollweide","naturalEarth1","orthographic","stereographic","transversemercator","cases","contours","smoothLinear","tz","contour","polygons","holes","startIndex","endIndex","isorings","hole","xt","yt","_0","ringContains","xi","yi","pj","xj","yj","segmentContains","collinear","Isocontour","transformPolygon","transformRing","bandwidthNRD","density2D","weight","values0","Float32Array","values1","blurX","blurY","sz","cellSize","LN2","KDE2D","levels","paths","transformPaths","PARAMS","Contour","post","GeoJSON","GeoPath","GeoPoint","GeoShape","Graticule","DX","DY","graticule","outline","extentMajor","extentMinor","stepMajor","stepMinor","geoGraticule","Heatmap","dependency","$x","$y","$value","$max","Projection","_features","_points","lon","lat","geojson","initPath","shapeGenerator","shared","dep","opacity_","color_","can","getImageData","pix","putImageData","toCanvas","featurize","collectGeoJSON","tree","xm","ym","xp","yp","leaf","Quad","defaultX","defaultY","quadtree","Quadtree","leaf_copy","treeProto","constant$1","jiggle","vx","vy","nodeById","nodeId","cover","xz","yz","quads","retainer","removeAll","visitAfter","dispatch","Dispatch","typename","T","taskHead","taskTail","timeout","pokeDelay","clockLast","clockNow","clockSkew","clock","performance","setFrame","requestAnimationFrame","clearNow","Timer","_time","_next","timer","restart","wake","timerFlush","sleep","nap","poke","clearInterval","setInterval","initialRadius","initialAngle","forceSimulation","simulation","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","lcg","tick","iterations","initializeNodes","initializeForce","randomSource","closest","ForceMap","strength","collide","radii","ri","ri2","prepare","rj","_nodes","_random","nbody","strengths","distanceMin2","distanceMax2","theta2","accumulate","distanceMin","distanceMax","links","distances","bias","distance","initializeStrength","initializeDistance","Forces","ForceParams","ForceConfig","ForceOutput","Force","setup","sim","getForce","numForces","setForceParam","change","iters","stopped","static","finish","defaultSeparation","meanXReduce","maxYReduce","hierarchy","mapChildren","objectChildren","childs","Node","eachBefore","computeHeight","copyData","optional","constantZero","eachAfter","each","ancestor","aNodes","ancestors","bNodes","leastCommonAncestor","descendants","leaves","extendBasis","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","dr","enclosesWeak","encloseBasis","encloseBasis1","r21","r3","a2","a3","b2","b3","c3","d3","ab","place","score","packSiblingsRandom","circles","aa","sj","sk","pack","shuffle","packEncloseRandom","defaultRadius","radiusLeaf","packChildrenRandom","translateChild","roundNode","treemapDice","preroot","ambiguous","imputed","defaultId","defaultParentId","parentId","stratify","nodeKey","currentId","currentParentId","nodeByKey","slash","P","parentof","nextLeft","nextRight","moveSubtree","wm","wp","nextAncestor","vim","TreeNode","treemapSlice","squarifyRatio","sumValue","minValue","maxValue","newRatio","minRatio","dice","treemapSquarify","squarify","treemapResquarify","resquarify","_squarify","Nest","treesource","nest","valuesByKey","keyValue","HierarchyLayout","setParams","setFields","Output$3","Pack","Output$2","Partition","Stratify","positionNode","parentKey","Layouts","tidy","nodeSize","treeRoot","firstWalk","secondWalk","sizeNode","siblings","executeShifts","midpoint","vip","vop","vom","sip","sop","som","apportion","cluster","previousNode","meanX","maxY","leafLeft","leafRight","Output$1","Tree","TreeLinks","Tiles","binary","sums","valueOffset","valueTarget","valueLeft","valueRight","slicedice","Output","Treemap","tile","paddingStack","paddingTop","paddingRight","paddingBottom","paddingLeft","treemap","ALPHA_MASK","getBuffer","Uint32Array","DIV","SIZE","RIGHT0","RIGHT1","scaler","bitmap","_set","_clear","getRange","indexStart","indexEnd","setRange","clearRange","outOfBounds","Bitmap","textWidth","textHeight","collision","bm0","bm1","X_DIR","Y_DIR","Aligns","Baselines","boundary","isInside","anchorCode","TOP","MIDDLE","middle","BOTTOM","placeAreaLabel","naive","bitmaps","avoidBaseMark","markIndex","areaWidth","maxAreaWidth","tryLabel","maxSize","_xMid","_yMid","swapTmp","labelPlaced","labelPlaced2","floodfill","bm2","labelLayout","texts","avoidMarks","lineAnchor","positions","getOffsets","anchors","Int8Array","getAnchors","grouptype","isGroupArea","markBoundary","infPadding","isNaiveGroupArea","maxTextWidth","maxTextHeight","labelInside","baseMark","border","baseMarkContext","strokeContext","baseMarkBuffer","strokeBuffer","layer1","layer2","strokeAlpha","baseMarkAlpha","markBitmaps","baseBitmaps","sizeFactor","insideFactor","SQRT1_2","placeMarkLabel","Anchors","Label","Label$1","Loess","regressionLoess","regressionConstant","regressionLinear","regressionLog","regressionExp","regressionPow","regressionQuad","regressionPoly","Regression","dof","degreesOfFreedom","model","dom","splitter","resulterrbound","elen","flen","Qnew","hh","bvirt","enow","fnow","eindex","findex","hindex","vec","ccwerrboundA","ccwerrboundB","ccwerrboundC","C1","C2","orient2d","detleft","detright","det","detsum","acxtail","acytail","bcxtail","bcytail","ahi","alo","bhi","blo","_i","_j","u3","acx","bcx","acy","bcy","estimate","errbound","C1len","C2len","Dlen","orient2dadapt","EPSILON","EDGE_STACK","Delaunator","getX","defaultGetX","getY","defaultGetY","maxTriangles","_triangles","_halfedges","Int32Array","_hashSize","_hullPrev","_hullNext","_hullTri","_hullHash","_ids","_dists","hullPrev","hullNext","hullTri","hullHash","minY","minDist","i0x","i0y","i1x","i1y","minRadius","circumradius","i2x","i2y","quicksort","hull","triangles","halfedges","cl","circumcenter","_cx","_cy","_hullStart","hullSize","_hashKey","trianglesLen","_addTriangle","_legalize","pseudoAngle","ar","al","inCircle","hbl","_link","bp","tempDist","arr","tmp","jitter","Delaunay","flatArray","flatIterable","_delaunator","inedges","_hullIndex","_init","hullIndex","voronoi","delaunay","xmin","xmax","_circumcenters","vectors","circumcenters","ti","tj","_renderSegment","_project","renderBounds","renderCell","_clip","cellPolygons","cellPolygon","_regioncode","_clipSegment","_step","neighbors","cj","loop","li","aj","lj","_cell","e0","_simplify","_clipInfinite","_clipFinite","e1","sx0","sx1","sy1","_edgecode","_edge","vx0","vy0","vxn","vyn","dc","renderHull","renderPoints","hullPolygon","renderTriangle","trianglePolygons","trianglePolygon","Voronoi","defaultExtent","toPathString","cloudRadians","ch","cloud","spiral","archimedeanSpiral","words","board","dxdy","startX","startY","maxDelta","cloudCollide","collideRects","sprite","msx","contextAndRatio","zeroArray","tags","xoff","yoff","hasText","cloudSprite","cloudBounds","functor","spirals","di","w32","maxh","wcr","wsr","hcr","hsr","pixels","seen","seenRow","archimedean","rectangular","Wordcloud","fontSizeRange","fsize","sizeScale","array8","Uint8Array","array16","Uint16Array","array32","Dimension","query","onAdd","added","dim","SortedIndex","addi","oldv","oldi","addv","permute","index0","value1","index1","reindex","CrossFilter","lengthen","_index","Bitmaps","_indices","ResolveFilter","reinit","eval","bits","remMap","modMap","indexMap","incrementOne","incrementAll","old","lo1","hi1","lo0","hi0","ignore","pass","Literal","Property","ArrayExpression","BinaryExpression","CallExpression","ConditionalExpression","LogicalExpression","MemberExpression","ObjectExpression","UnaryExpression","ASTNode","TokenName","lookahead","elements","callee","consequent","alternate","argument","TokenBooleanLiteral","TokenEOF","TokenIdentifier","TokenKeyword","TokenNullLiteral","TokenNumericLiteral","TokenPunctuator","TokenStringLiteral","SyntaxArrayExpression","SyntaxBinaryExpression","SyntaxCallExpression","SyntaxConditionalExpression","SyntaxIdentifier","SyntaxLiteral","SyntaxLogicalExpression","SyntaxMemberExpression","SyntaxObjectExpression","SyntaxProperty","SyntaxUnaryExpression","MessageUnexpectedToken","MessageUnexpectedNumber","MessageUnexpectedString","MessageUnexpectedIdentifier","MessageUnexpectedReserved","MessageUnexpectedEOS","MessageInvalidRegExp","MessageUnterminatedRegExp","MessageStrictOctalLiteral","MessageStrictDuplicateProperty","ILLEGAL","DISABLED","RegexNonAsciiIdentifierStart","RegexNonAsciiIdentifierPart","assert","condition","isDecimalDigit","isHexDigit","isOctalDigit","isWhiteSpace","isLineTerminator","isIdentifierStart","fromCharCode","isIdentifierPart","keywords","if","in","do","var","for","new","try","let","else","void","with","enum","while","break","throw","const","yield","return","typeof","switch","export","import","public","finally","extends","package","private","continue","debugger","interface","protected","instanceof","implements","skipComment","scanHexEscape","throwError","scanUnicodeCodePointEscape","cu1","cu2","getEscapedIdentifier","substr","scanIdentifier","getIdentifier","scanPunctuator","code2","ch2","ch3","ch4","ch1","scanNumericLiteral","scanHexLiteral","octal","scanOctalLiteral","parseFloat","scanRegExp","body","classMarker","terminated","literal","scanRegExpBody","search","scanRegExpFlags","$0","$1","exception","testRegExp","regex","advance","scanStringLiteral","lex","finishBinaryExpression","operator","finishCallExpression","finishIdentifier","finishLiteral","finishMemberExpression","computed","member","finishProperty","kind","messageFormat","msg","whole","throwUnexpected","expect","matchKeyword","keyword","parseArrayInitialiser","parseConditionalExpression","finishArrayExpression","parseObjectPropertyKey","parseObjectProperty","parseObjectInitialiser","finishObjectExpression","legalKeywords","parsePrimaryExpression","parseExpression","parseGroupExpression","parseArguments","parseNonComputedProperty","isIdentifierName","parseComputedMember","parsePostfixExpression","parseLeftHandSideExpressionAllowCall","parseUnaryExpression","finishUnaryExpression","binaryPrecedence","prec","marker","markers","parseBinaryExpression","finishConditionalExpression","Constants","LN10","LOG2E","LOG10E","MIN_VALUE","Functions","codegen","cast","fncall","STRING","REGEXP","datetime","timezoneoffset","utcdate","utcday","utcyear","utcmonth","utchours","utcminutes","utcseconds","utcmilliseconds","upper","lower","regexp","allowed","forbidden","constants","functions","globalvar","fieldvar","outputGlobal","globals","memberDepth","ast","Generators","stripQuotes","Intersect","Union","VlMulti","VlPoint","Or","And","SelectionId","$selectionId","TYPE_ENUM","TYPE_RANGE_INC","TYPE_RANGE_EXC","TYPE_RANGE_LE","TYPE_RANGE_RE","UNIT_INDEX","testPoint","dval","others","E_union","E_intersect","R_union","R_intersect","DataPrefix","IndexPrefix","selectionVisitor","scope","indexName","dataName","getData","indataRef","tuplesRef","wrap","dateObj","setYear","ScalePrefix","SignalPrefix","dataVisitor","scaleVisitor","addScaleDependency","scaleName","scaleRef","getScale","nameOrFunction","maybeScale","isRegisteredScale","internalScaleFunctions","fnctx","visitors","__bandwidth","_bandwidth","_range","ref","geoMethod","methodName","globalMethod","geoArea","geoBounds","deltaMax","geoCentroid","channel_luminance_value","channelValue","luminance","equal","equalArray","equalObject","removePredicate","accessors","seq","treeNodes","_window","intersect$1","array$1","markname","functionContext","isDefined","indexof","_len2","_key2","lastindexof","_len3","_key3","repl","_len4","_key4","pluck","contrast","color1","color2","lum1","lum2","monthFormat","monthAbbrevFormat","dayFormat","dayAbbrevFormat","inScope","pinchDistance","touches","pinchAngle","screen","containerSize","container","clientWidth","clientHeight","windowSize","innerWidth","innerHeight","bandspace","setdata","pathShape","pathParse","retval","toggle","predicate","_trigger","lassoAppend","lasso","lassoPath","intersectLasso","pixelLasso","bb","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","testx","testy","intersections","prevX","prevY","pointInPolygon","eventFunctions","eventPrefix","thisPrefix","astVisitors","codegenParams","codeGenerator","codegenExpression","expressionFunction","signalName","getSignal","signalRef","$expr","$fields","$params","miss","unitIdx","isMulti","vl5","resUnit","resolved","multiRes","acc","Skip","Swap","canonicalType","expression","expressionCodegen","parameter","adjustSpatial","lt","gt","_compare","parseParameter","PARSERS","$ref","$key","$flat","parseParameters","parameterExpression","$field","$name","$encode","enc","encodeExpression","$output","$compare","$order","$tupleid","$subflow","subctx","operators","Context","Subcontext","ariaLabel","subcontext","isCollect","$ingest","$format","$request","unresolved","signal","operatorExpression","eventExpression","handlerExpression","eventConfig","parseOperator","parseOperatorParameters","parseStream","updates","parseUpdate","isOperator","srcid","dataset","getState","setState","substate","Default","setCursor","cursor","globalCursor","dataref","_runtime","_viewWidth","_viewHeight","eventExtend","_renderer","vega","itemGroup","extension","VIEW","TIMER","WINDOW","NO_TRAP","trap","trackEventListener","_eventListeners","permit","_eventConfig","itemFilter","markTarget","invoke","BindClass","NameClass","RadioClass","Event","wrapper","form","checkbox","select","radio","checked","option","valuesEqual","selected","selectedIndex","prepend","initializeRenderer","querySelector","paddingObject","renderHeadless","module","_scenegraph","Width","Height","dataTest","signalTest","proxy","formatArray","formatTooltip","View","_elBind","_renderType","_handler","_globalCursor","_preventDefault","_timers","_resizeListeners","defaults","unpack","initializeEventConfig","runtime","_bind","bindings","_resize","resetSize","_resizeWidth","_resizeHeight","resizePadding","initializeResize","_background","user","hover","lookupSignal","findOperatorHandler","addOperatorListener","removeOperatorListener","resizeRenderer","_desc","_resetRenderer","rerun","addResizeListener","removeResizeListener","addSignalListener","removeSignalListener","addDataListener","removeDataListener","total","_restart","elapsed","timestamp","prevent","allow","finalize","timers","listeners","hoverSet","leaveSet","elBind","initializeAria","prevHandler","initializeHandler","binding","toImageURL","mime","blob","Blob","URL","createObjectURL","toBlobURL","toSVG","LBRACK","RBRACK","LBRACE","RBRACE","COLON","COMMA","NAME","GT","DEFAULT_MARKS","DEFAULT_SOURCE","MARKS","eventSelector","selector","parseMerge","parseSelector","endChar","pushChar","popChar","parseBetween","parseThrottle","isMarkType","parseAutosize","parsePadding","encoder","addEncode","addEncoders","extendEncode","MarkRole","AxisDomainRole","AxisGridRole","AxisLabelRole","AxisTickRole","AxisTitleRole","LegendBandRole","LegendEntryRole","LegendGradientRole","LegendLabelRole","LegendSymbolRole","LegendTitleRole","TitleTextRole","TitleSubtitleRole","applyDefault","entry$1","_color","resolveField","parseEncode","applyDefaults","parseBlock","block","parse$1","OUTER","OUTER_INVALID","outerError","parseSignal","addSignal","addBinding","Entry","refs","fieldRef$1","keyFieldRef","compareRef","Descending","aggrField","Scope$1","isSignal","hasSignal","specValue","deref","mergeStream","nestedStream","eventStream","streamParameters","addStream","eventSource","markrole","filterMark","OP_VALUE_EXPR","isSubscope","mergeSources","addUpdate","streamSource","FIELD_REF_ID","MULTIDOMAIN_SORT_OPS","parseScale","parseScaleDomain","parseScaleRange","parseLiteral","parseScaleInterpolate","parseScaleNice","parseArray","objectProperty","parseScaleBins","dataLookupError","explicitDomain","multipleDomain","singularDomain","valuesRef","parseSort","domainRef","extentRef","coll","addDataPipeline","fieldRef","ordinalMultipleDomain","quantileMultipleDomain","numericMultipleDomain","countsRef","sortRef","multidomain","parseParameter$1","Vertical","Index","Offset","Perc","Perc2","Value","GuideLabelStyle","GuideTitleStyle","GroupTitleStyle","GroupSubtitleStyle","Size","LegendScales","GroupMark","RectMark","RuleMark","SymbolMark","TextMark","guideGroup","isVertical","symbolDirection","gradientDirection","gradientLength","gradientWidth","gradientThickness","gradientHeight","entryColumns","getEncoding","anchorExpr","alignExpr$1","extendOffset","guideMark","extras","legendGradient","userEncode","thickness","legendGradientDiscrete","dataRef","vv","alignExpr","baselineExpr","legendGradientLabels","overlap","labelLimit","gradientLabelLimit","labelOffset","gradientLabelOffset","legendSymbolGroups","symbolOffset","valueRef","xSignal","yEncode","baseFill","baseStroke","symbolBaseFillColor","symbolBaseStrokeColor","facet","isL","isR","isLR","isVG","exprAlign","exprAnchor","exprAngle","exprBaseline","getRole","parseTransform","definition$1","pdef","lookupRef","parseIndexParameter","parseSubParameter","parseSubParameters","projectionRef","parameterValue","isExpr","isField","isCompare","outerExpr","exprRef","outerField","isData","getDataRef","DataScope","aggregate","fieldKey","addSortField","ds","optype","sortKey","parseTrigger","trigger","parseMark","layoutRef","boundRef","keyRef","parseData$1","joinRef","$context","markpath","markRef","encodeRef","pushState","subscope","addData","toRuntime","parseFacet","parseSubflow","popState","tol","parseOverlap","sieve","parseLegend","legendEncode","entryLayout","scaleType","scaleCount","legendType","entryRef","tickMinStep","legendSymbolLayout","getChannel","getStyle","getFontSize","sizeExpression","_anchor","legendTitle","buildLegendEncode","fromEntries","angleExpr","parseTitle","buildTitle","titleEncode","buildSubTitle","groupEncode","parseData","upstream","analyze","getSign","ifLeftTopExpr","ifX","ifXEnc","ifY","ifYEnc","ifTop","ifTopExpr","ifRight","ifRightExpr","$orient","ifEnc","ifExpr","isSimple","toExpr","ifOrient","patch","fallback","axisConfig","styleProp","axisGrid","vscale","gridScale","tickPos","gridStart","gridEnd","flushExpr","axisTitle","titlePos","autoY","autoX","autoLayout","parseAxis","or","axisBand","xyKeys","axisX","axisY","orientKeys","axisTop","axisBottom","axisLeft","axisRight","axisEncode","tickBand","ticksRef","tickSize","axisTicks","flushOffset","labelAlign","labelBaseline","flushOn","offsetExpr","axisLabels","pos0","pos1","axisDomain","buildAxisEncode","parseScope","preprocessed","addProjection","parseProjection","addScale","initScale","parseSignalUpdates","axes","parseLambdas","rootEncode","parseView","signalObject","pre","collectSignals","Scope","lambdas","_id","_subid","_nextsub","_parent","_encode","_lookup","_markpath","Subscope","propertyLambda","arrayLambda","objectLambda","vref","annotate","check","isExpr$1","sig","hasOwnSignal","addScaleProj","projectionType","dataScope","extend$1","vtx","geo","reg","wordcloud","xf","defaultFont","defaultColor","lightGray","subtitlePadding","bandPosition","domainWidth","domainColor","gridWidth","gridColor","labelAngle","labelPadding","tickColor","tickOffset","tickRound","tickWidth","gridAlign","columnPadding","rowPadding","gradientStrokeColor","gradientStrokeWidth","labelOverlap","symbolLimit","symbolType","symbolSize","symbolStrokeWidth","titleLimit","titleOrient","category","heatmap","ramp","seed"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,53,54,59,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,141,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,196,197,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,256,257,258,259,262,263,264,265,266,267,268,272,275,279]} \ No newline at end of file +{"version":3,"file":"vega.min.js","sources":["../../vega-util/build/vega-util.module.js","../../../node_modules/d3-dsv/src/dsv.js","../../../node_modules/topojson-client/src/identity.js","../../../node_modules/topojson-client/src/feature.js","../../../node_modules/topojson-client/src/transform.js","../../../node_modules/topojson-client/src/reverse.js","../../../node_modules/topojson-client/src/stitch.js","../../../node_modules/topojson-client/src/mesh.js","../../../node_modules/d3-array/src/ascending.js","../../../node_modules/d3-array/src/descending.js","../../../node_modules/d3-array/src/bisector.js","../../../node_modules/d3-array/src/number.js","../../../node_modules/d3-array/src/bisect.js","../../../node_modules/d3-array/src/fsum.js","../../../node_modules/internmap/src/index.js","../../../node_modules/d3-array/src/sort.js","../../../node_modules/d3-array/src/ticks.js","../../../node_modules/d3-array/src/max.js","../../../node_modules/d3-array/src/min.js","../../../node_modules/d3-array/src/quickselect.js","../../../node_modules/d3-array/src/quantile.js","../../../node_modules/d3-array/src/median.js","../../../node_modules/d3-array/src/merge.js","../../../node_modules/d3-array/src/range.js","../../../node_modules/d3-array/src/sum.js","../../../node_modules/d3-array/src/intersection.js","../../../node_modules/d3-format/src/formatDecimal.js","../../../node_modules/d3-format/src/exponent.js","../../../node_modules/d3-format/src/formatSpecifier.js","../../../node_modules/d3-format/src/formatPrefixAuto.js","../../../node_modules/d3-format/src/formatRounded.js","../../../node_modules/d3-format/src/formatTypes.js","../../../node_modules/d3-format/src/identity.js","../../../node_modules/d3-format/src/locale.js","../../../node_modules/d3-format/src/defaultLocale.js","../../../node_modules/d3-format/src/formatGroup.js","../../../node_modules/d3-format/src/formatNumerals.js","../../../node_modules/d3-format/src/formatTrim.js","../../../node_modules/d3-format/src/precisionFixed.js","../../../node_modules/d3-format/src/precisionPrefix.js","../../../node_modules/d3-format/src/precisionRound.js","../../../node_modules/d3-time/src/interval.js","../../../node_modules/d3-time/src/millisecond.js","../../../node_modules/d3-time/src/duration.js","../../../node_modules/d3-time/src/second.js","../../../node_modules/d3-time/src/minute.js","../../../node_modules/d3-time/src/hour.js","../../../node_modules/d3-time/src/day.js","../../../node_modules/d3-time/src/week.js","../../../node_modules/d3-time/src/month.js","../../../node_modules/d3-time/src/year.js","../../../node_modules/d3-time/src/ticks.js","../../vega-time/build/vega-time.module.js","../../../node_modules/d3-time-format/src/locale.js","../../../node_modules/d3-time-format/src/defaultLocale.js","../../vega-format/build/vega-format.module.js","../../vega-loader/build/vega-loader.browser.module.js","../../vega-dataflow/build/vega-dataflow.module.js","../../vega-statistics/build/vega-statistics.module.js","../../../node_modules/d3-array/src/deviation.js","../../../node_modules/d3-array/src/variance.js","../../vega-transforms/build/vega-transforms.module.js","../../../node_modules/d3-array/src/mean.js","../../../node_modules/d3-shape/src/constant.js","../../../node_modules/d3-shape/src/math.js","../../../node_modules/d3-path/src/path.js","../../../node_modules/d3-shape/src/path.js","../../../node_modules/d3-shape/src/arc.js","../../../node_modules/d3-shape/src/array.js","../../../node_modules/d3-shape/src/curve/linear.js","../../../node_modules/d3-shape/src/point.js","../../../node_modules/d3-shape/src/line.js","../../../node_modules/d3-shape/src/area.js","../../../node_modules/d3-shape/src/symbol/circle.js","../../../node_modules/d3-shape/src/noop.js","../../../node_modules/d3-shape/src/curve/basis.js","../../../node_modules/d3-shape/src/curve/basisClosed.js","../../../node_modules/d3-shape/src/curve/basisOpen.js","../../../node_modules/d3-shape/src/curve/bundle.js","../../../node_modules/d3-shape/src/curve/cardinal.js","../../../node_modules/d3-shape/src/curve/cardinalClosed.js","../../../node_modules/d3-shape/src/curve/cardinalOpen.js","../../../node_modules/d3-shape/src/curve/catmullRom.js","../../../node_modules/d3-shape/src/curve/catmullRomClosed.js","../../../node_modules/d3-shape/src/curve/catmullRomOpen.js","../../../node_modules/d3-shape/src/curve/linearClosed.js","../../../node_modules/d3-shape/src/curve/monotone.js","../../../node_modules/d3-shape/src/curve/natural.js","../../../node_modules/d3-shape/src/curve/step.js","../../vega-canvas/build/vega-canvas.browser.module.js","../../../node_modules/d3-scale/src/init.js","../../../node_modules/d3-scale/src/ordinal.js","../../../node_modules/d3-color/src/define.js","../../../node_modules/d3-color/src/color.js","../../../node_modules/d3-color/src/math.js","../../../node_modules/d3-color/src/lab.js","../../../node_modules/d3-color/src/cubehelix.js","../../../node_modules/d3-interpolate/src/basis.js","../../../node_modules/d3-interpolate/src/basisClosed.js","../../../node_modules/d3-interpolate/src/constant.js","../../../node_modules/d3-interpolate/src/color.js","../../../node_modules/d3-interpolate/src/rgb.js","../../../node_modules/d3-interpolate/src/numberArray.js","../../../node_modules/d3-interpolate/src/array.js","../../../node_modules/d3-interpolate/src/date.js","../../../node_modules/d3-interpolate/src/number.js","../../../node_modules/d3-interpolate/src/object.js","../../../node_modules/d3-interpolate/src/string.js","../../../node_modules/d3-interpolate/src/value.js","../../../node_modules/d3-interpolate/src/round.js","../../../node_modules/d3-interpolate/src/transform/decompose.js","../../../node_modules/d3-interpolate/src/transform/parse.js","../../../node_modules/d3-interpolate/src/transform/index.js","../../../node_modules/d3-interpolate/src/zoom.js","../../../node_modules/d3-interpolate/src/hsl.js","../../../node_modules/d3-interpolate/src/hcl.js","../../../node_modules/d3-interpolate/src/cubehelix.js","../../../node_modules/d3-interpolate/src/piecewise.js","../../../node_modules/d3-interpolate/src/discrete.js","../../../node_modules/d3-interpolate/src/hue.js","../../../node_modules/d3-interpolate/src/lab.js","../../../node_modules/d3-interpolate/src/quantize.js","../../../node_modules/d3-scale/src/number.js","../../../node_modules/d3-scale/src/continuous.js","../../../node_modules/d3-scale/src/constant.js","../../../node_modules/d3-scale/src/tickFormat.js","../../../node_modules/d3-scale/src/linear.js","../../../node_modules/d3-scale/src/nice.js","../../../node_modules/d3-scale/src/log.js","../../../node_modules/d3-scale/src/symlog.js","../../../node_modules/d3-scale/src/pow.js","../../../node_modules/d3-scale/src/time.js","../../../node_modules/d3-scale/src/sequential.js","../../../node_modules/d3-scale/src/diverging.js","../../vega-scale/build/vega-scale.module.js","../../../node_modules/d3-scale/src/identity.js","../../../node_modules/d3-scale/src/utcTime.js","../../../node_modules/d3-scale/src/quantile.js","../../../node_modules/d3-scale/src/quantize.js","../../../node_modules/d3-scale/src/threshold.js","../../vega-scenegraph/build/vega-scenegraph.module.js","../../../node_modules/d3-shape/src/symbol.js","../../vega-view-transforms/build/vega-view-transforms.module.js","../../vega-encode/build/vega-encode.module.js","../../../node_modules/d3-geo/src/math.js","../../../node_modules/d3-geo/src/noop.js","../../../node_modules/d3-geo/src/stream.js","../../../node_modules/d3-geo/src/area.js","../../../node_modules/d3-geo/src/bounds.js","../../../node_modules/d3-geo/src/cartesian.js","../../../node_modules/d3-geo/src/centroid.js","../../../node_modules/d3-geo/src/compose.js","../../../node_modules/d3-geo/src/rotation.js","../../../node_modules/d3-geo/src/circle.js","../../../node_modules/d3-geo/src/clip/buffer.js","../../../node_modules/d3-geo/src/pointEqual.js","../../../node_modules/d3-geo/src/clip/rejoin.js","../../../node_modules/d3-geo/src/polygonContains.js","../../../node_modules/d3-geo/src/clip/index.js","../../../node_modules/d3-geo/src/clip/antimeridian.js","../../../node_modules/d3-geo/src/clip/circle.js","../../../node_modules/d3-geo/src/clip/rectangle.js","../../../node_modules/d3-geo/src/clip/line.js","../../../node_modules/d3-geo/src/graticule.js","../../../node_modules/d3-geo/src/identity.js","../../../node_modules/d3-geo/src/path/area.js","../../../node_modules/d3-geo/src/path/bounds.js","../../../node_modules/d3-geo/src/path/centroid.js","../../../node_modules/d3-geo/src/path/context.js","../../../node_modules/d3-geo/src/path/measure.js","../../../node_modules/d3-geo/src/path/string.js","../../../node_modules/d3-geo/src/path/index.js","../../../node_modules/d3-geo/src/transform.js","../../../node_modules/d3-geo/src/projection/fit.js","../../../node_modules/d3-geo/src/projection/resample.js","../../../node_modules/d3-geo/src/projection/index.js","../../../node_modules/d3-geo/src/projection/conic.js","../../../node_modules/d3-geo/src/projection/conicEqualArea.js","../../../node_modules/d3-geo/src/projection/cylindricalEqualArea.js","../../../node_modules/d3-geo/src/projection/albers.js","../../../node_modules/d3-geo/src/projection/azimuthal.js","../../../node_modules/d3-geo/src/projection/azimuthalEqualArea.js","../../../node_modules/d3-geo/src/projection/azimuthalEquidistant.js","../../../node_modules/d3-geo/src/projection/mercator.js","../../../node_modules/d3-geo/src/projection/conicConformal.js","../../../node_modules/d3-geo/src/projection/equirectangular.js","../../../node_modules/d3-geo/src/projection/conicEquidistant.js","../../../node_modules/d3-geo/src/projection/equalEarth.js","../../../node_modules/d3-geo/src/projection/gnomonic.js","../../../node_modules/d3-geo/src/projection/naturalEarth1.js","../../../node_modules/d3-geo/src/projection/orthographic.js","../../../node_modules/d3-geo/src/projection/stereographic.js","../../../node_modules/d3-geo/src/projection/transverseMercator.js","../../../node_modules/d3-geo-projection/src/math.js","../../../node_modules/d3-geo-projection/src/mollweide.js","../../vega-projection/build/vega-projection.module.js","../../../node_modules/d3-geo/src/projection/albersUsa.js","../../../node_modules/d3-geo/src/projection/identity.js","../../vega-geo/build/vega-geo.module.js","../../../node_modules/d3-quadtree/src/add.js","../../../node_modules/d3-quadtree/src/quad.js","../../../node_modules/d3-quadtree/src/x.js","../../../node_modules/d3-quadtree/src/y.js","../../../node_modules/d3-quadtree/src/quadtree.js","../../../node_modules/d3-force/src/constant.js","../../../node_modules/d3-force/src/jiggle.js","../../../node_modules/d3-force/src/collide.js","../../../node_modules/d3-force/src/link.js","../../../node_modules/d3-quadtree/src/cover.js","../../../node_modules/d3-quadtree/src/data.js","../../../node_modules/d3-quadtree/src/extent.js","../../../node_modules/d3-quadtree/src/find.js","../../../node_modules/d3-quadtree/src/remove.js","../../../node_modules/d3-quadtree/src/root.js","../../../node_modules/d3-quadtree/src/size.js","../../../node_modules/d3-quadtree/src/visit.js","../../../node_modules/d3-quadtree/src/visitAfter.js","../../../node_modules/d3-dispatch/src/dispatch.js","../../../node_modules/d3-timer/src/timer.js","../../../node_modules/d3-force/src/lcg.js","../../../node_modules/d3-force/src/simulation.js","../../vega-force/build/vega-force.module.js","../../../node_modules/d3-force/src/center.js","../../../node_modules/d3-force/src/manyBody.js","../../../node_modules/d3-force/src/x.js","../../../node_modules/d3-force/src/y.js","../../../node_modules/d3-hierarchy/src/cluster.js","../../../node_modules/d3-hierarchy/src/hierarchy/count.js","../../../node_modules/d3-hierarchy/src/hierarchy/index.js","../../../node_modules/d3-hierarchy/src/accessors.js","../../../node_modules/d3-hierarchy/src/constant.js","../../../node_modules/d3-hierarchy/src/hierarchy/each.js","../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../../../node_modules/d3-hierarchy/src/hierarchy/find.js","../../../node_modules/d3-hierarchy/src/hierarchy/sum.js","../../../node_modules/d3-hierarchy/src/hierarchy/sort.js","../../../node_modules/d3-hierarchy/src/hierarchy/path.js","../../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../../../node_modules/d3-hierarchy/src/hierarchy/descendants.js","../../../node_modules/d3-hierarchy/src/hierarchy/leaves.js","../../../node_modules/d3-hierarchy/src/hierarchy/links.js","../../../node_modules/d3-hierarchy/src/hierarchy/iterator.js","../../../node_modules/d3-hierarchy/src/lcg.js","../../../node_modules/d3-hierarchy/src/pack/enclose.js","../../../node_modules/d3-hierarchy/src/pack/siblings.js","../../../node_modules/d3-hierarchy/src/array.js","../../../node_modules/d3-hierarchy/src/pack/index.js","../../../node_modules/d3-hierarchy/src/treemap/round.js","../../../node_modules/d3-hierarchy/src/treemap/dice.js","../../../node_modules/d3-hierarchy/src/stratify.js","../../../node_modules/d3-hierarchy/src/tree.js","../../../node_modules/d3-hierarchy/src/treemap/slice.js","../../../node_modules/d3-hierarchy/src/treemap/squarify.js","../../../node_modules/d3-hierarchy/src/treemap/resquarify.js","../../vega-hierarchy/build/vega-hierarchy.module.js","../../../node_modules/d3-hierarchy/src/partition.js","../../../node_modules/d3-hierarchy/src/treemap/binary.js","../../../node_modules/d3-hierarchy/src/treemap/sliceDice.js","../../../node_modules/d3-hierarchy/src/treemap/index.js","../../vega-label/build/vega-label.module.js","../../vega-regression/build/vega-regression.module.js","../../../node_modules/robust-predicates/esm/util.js","../../../node_modules/robust-predicates/esm/orient2d.js","../../../node_modules/delaunator/index.js","../../../node_modules/d3-delaunay/src/path.js","../../../node_modules/d3-delaunay/src/polygon.js","../../../node_modules/d3-delaunay/src/voronoi.js","../../../node_modules/d3-delaunay/src/delaunay.js","../../vega-voronoi/build/vega-voronoi.module.js","../../vega-wordcloud/build/vega-wordcloud.module.js","../../vega-crossfilter/build/vega-crossfilter.module.js","../../../node_modules/d3-array/src/permute.js","../../vega-expression/build/vega-expression.module.js","../../vega-selections/build/vega-selection.module.js","../../../node_modules/d3-array/src/union.js","../../vega-functions/build/vega-functions.module.js","../../vega-runtime/build/vega-runtime.module.js","../../vega-view/build/vega-view.module.js","../../../node_modules/d3-timer/src/interval.js","../../vega-event-selector/build/vega-event-selector.module.js","../../vega-parser/build/vega-parser.module.js","../index.js"],"sourcesContent":["function accessor (fn, fields, name) {\n fn.fields = fields || [];\n fn.fname = name;\n return fn;\n}\nfunction accessorName(fn) {\n return fn == null ? null : fn.fname;\n}\nfunction accessorFields(fn) {\n return fn == null ? null : fn.fields;\n}\n\nfunction getter (path) {\n return path.length === 1 ? get1(path[0]) : getN(path);\n}\nconst get1 = field => function (obj) {\n return obj[field];\n};\nconst getN = path => {\n const len = path.length;\n return function (obj) {\n for (let i = 0; i < len; ++i) {\n obj = obj[path[i]];\n }\n return obj;\n };\n};\n\nfunction error (message) {\n throw Error(message);\n}\n\nfunction splitAccessPath (p) {\n const path = [],\n n = p.length;\n let q = null,\n b = 0,\n s = '',\n i,\n j,\n c;\n p = p + '';\n function push() {\n path.push(s + p.substring(i, j));\n s = '';\n i = j + 1;\n }\n for (i = j = 0; j < n; ++j) {\n c = p[j];\n if (c === '\\\\') {\n s += p.substring(i, j++);\n i = j;\n } else if (c === q) {\n push();\n q = null;\n b = -1;\n } else if (q) {\n continue;\n } else if (i === b && c === '\"') {\n i = j + 1;\n q = c;\n } else if (i === b && c === \"'\") {\n i = j + 1;\n q = c;\n } else if (c === '.' && !b) {\n if (j > i) {\n push();\n } else {\n i = j + 1;\n }\n } else if (c === '[') {\n if (j > i) push();\n b = i = j + 1;\n } else if (c === ']') {\n if (!b) error('Access path missing open bracket: ' + p);\n if (b > 0) push();\n b = 0;\n i = j + 1;\n }\n }\n if (b) error('Access path missing closing bracket: ' + p);\n if (q) error('Access path missing closing quote: ' + p);\n if (j > i) {\n j++;\n push();\n }\n return path;\n}\n\nfunction field (field, name, opt) {\n const path = splitAccessPath(field);\n field = path.length === 1 ? path[0] : field;\n return accessor((opt && opt.get || getter)(path), [field], name || field);\n}\n\nconst id = field('id');\nconst identity = accessor(_ => _, [], 'identity');\nconst zero = accessor(() => 0, [], 'zero');\nconst one = accessor(() => 1, [], 'one');\nconst truthy = accessor(() => true, [], 'true');\nconst falsy = accessor(() => false, [], 'false');\n\nfunction log$1(method, level, input) {\n const args = [level].concat([].slice.call(input));\n console[method].apply(console, args); // eslint-disable-line no-console\n}\n\nconst None = 0;\nconst Error$1 = 1;\nconst Warn = 2;\nconst Info = 3;\nconst Debug = 4;\nfunction logger (_, method) {\n let handler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : log$1;\n let level = _ || None;\n return {\n level(_) {\n if (arguments.length) {\n level = +_;\n return this;\n } else {\n return level;\n }\n },\n error() {\n if (level >= Error$1) handler(method || 'error', 'ERROR', arguments);\n return this;\n },\n warn() {\n if (level >= Warn) handler(method || 'warn', 'WARN', arguments);\n return this;\n },\n info() {\n if (level >= Info) handler(method || 'log', 'INFO', arguments);\n return this;\n },\n debug() {\n if (level >= Debug) handler(method || 'log', 'DEBUG', arguments);\n return this;\n }\n };\n}\n\nvar isArray = Array.isArray;\n\nfunction isObject (_) {\n return _ === Object(_);\n}\n\nconst isLegalKey = key => key !== '__proto__';\nfunction mergeConfig() {\n for (var _len = arguments.length, configs = new Array(_len), _key = 0; _key < _len; _key++) {\n configs[_key] = arguments[_key];\n }\n return configs.reduce((out, source) => {\n for (const key in source) {\n if (key === 'signals') {\n // for signals, we merge the signals arrays\n // source signals take precedence over\n // existing signals with the same name\n out.signals = mergeNamed(out.signals, source.signals);\n } else {\n // otherwise, merge objects subject to recursion constraints\n // for legend block, recurse for the layout entry only\n // for style block, recurse for all properties\n // otherwise, no recursion: objects overwrite, no merging\n const r = key === 'legend' ? {\n layout: 1\n } : key === 'style' ? true : null;\n writeConfig(out, key, source[key], r);\n }\n }\n return out;\n }, {});\n}\nfunction writeConfig(output, key, value, recurse) {\n if (!isLegalKey(key)) return;\n let k, o;\n if (isObject(value) && !isArray(value)) {\n o = isObject(output[key]) ? output[key] : output[key] = {};\n for (k in value) {\n if (recurse && (recurse === true || recurse[k])) {\n writeConfig(o, k, value[k]);\n } else if (isLegalKey(k)) {\n o[k] = value[k];\n }\n }\n } else {\n output[key] = value;\n }\n}\nfunction mergeNamed(a, b) {\n if (a == null) return b;\n const map = {},\n out = [];\n function add(_) {\n if (!map[_.name]) {\n map[_.name] = 1;\n out.push(_);\n }\n }\n b.forEach(add);\n a.forEach(add);\n return out;\n}\n\nfunction peek (array) {\n return array[array.length - 1];\n}\n\nfunction toNumber (_) {\n return _ == null || _ === '' ? null : +_;\n}\n\nconst exp = sign => x => sign * Math.exp(x);\nconst log = sign => x => Math.log(sign * x);\nconst symlog = c => x => Math.sign(x) * Math.log1p(Math.abs(x / c));\nconst symexp = c => x => Math.sign(x) * Math.expm1(Math.abs(x)) * c;\nconst pow = exponent => x => x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\nfunction pan(domain, delta, lift, ground) {\n const d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n dd = (d1 - d0) * delta;\n return [ground(d0 - dd), ground(d1 - dd)];\n}\nfunction panLinear(domain, delta) {\n return pan(domain, delta, toNumber, identity);\n}\nfunction panLog(domain, delta) {\n var sign = Math.sign(domain[0]);\n return pan(domain, delta, log(sign), exp(sign));\n}\nfunction panPow(domain, delta, exponent) {\n return pan(domain, delta, pow(exponent), pow(1 / exponent));\n}\nfunction panSymlog(domain, delta, constant) {\n return pan(domain, delta, symlog(constant), symexp(constant));\n}\nfunction zoom(domain, anchor, scale, lift, ground) {\n const d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n return [ground(da + (d0 - da) * scale), ground(da + (d1 - da) * scale)];\n}\nfunction zoomLinear(domain, anchor, scale) {\n return zoom(domain, anchor, scale, toNumber, identity);\n}\nfunction zoomLog(domain, anchor, scale) {\n const sign = Math.sign(domain[0]);\n return zoom(domain, anchor, scale, log(sign), exp(sign));\n}\nfunction zoomPow(domain, anchor, scale, exponent) {\n return zoom(domain, anchor, scale, pow(exponent), pow(1 / exponent));\n}\nfunction zoomSymlog(domain, anchor, scale, constant) {\n return zoom(domain, anchor, scale, symlog(constant), symexp(constant));\n}\n\nfunction quarter(date) {\n return 1 + ~~(new Date(date).getMonth() / 3);\n}\nfunction utcquarter(date) {\n return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n\nfunction array (_) {\n return _ != null ? isArray(_) ? _ : [_] : [];\n}\n\n/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nfunction clampRange (range, min, max) {\n let lo = range[0],\n hi = range[1],\n span;\n if (hi < lo) {\n span = hi;\n hi = lo;\n lo = span;\n }\n span = hi - lo;\n return span >= max - min ? [min, max] : [lo = Math.min(Math.max(lo, min), max - span), lo + span];\n}\n\nfunction isFunction (_) {\n return typeof _ === 'function';\n}\n\nconst DESCENDING = 'descending';\nfunction compare (fields, orders, opt) {\n opt = opt || {};\n orders = array(orders) || [];\n const ord = [],\n get = [],\n fmap = {},\n gen = opt.comparator || comparator;\n array(fields).forEach((f, i) => {\n if (f == null) return;\n ord.push(orders[i] === DESCENDING ? -1 : 1);\n get.push(f = isFunction(f) ? f : field(f, null, opt));\n (accessorFields(f) || []).forEach(_ => fmap[_] = 1);\n });\n return get.length === 0 ? null : accessor(gen(get, ord), Object.keys(fmap));\n}\nconst ascending = (u, v) => (u < v || u == null) && v != null ? -1 : (u > v || v == null) && u != null ? 1 : (v = v instanceof Date ? +v : v, u = u instanceof Date ? +u : u) !== u && v === v ? -1 : v !== v && u === u ? 1 : 0;\nconst comparator = (fields, orders) => fields.length === 1 ? compare1(fields[0], orders[0]) : compareN(fields, orders, fields.length);\nconst compare1 = (field, order) => function (a, b) {\n return ascending(field(a), field(b)) * order;\n};\nconst compareN = (fields, orders, n) => {\n orders.push(0); // pad zero for convenient lookup\n return function (a, b) {\n let f,\n c = 0,\n i = -1;\n while (c === 0 && ++i < n) {\n f = fields[i];\n c = ascending(f(a), f(b));\n }\n return c * orders[i];\n };\n};\n\nfunction constant (_) {\n return isFunction(_) ? _ : () => _;\n}\n\nfunction debounce (delay, handler) {\n let tid;\n return e => {\n if (tid) clearTimeout(tid);\n tid = setTimeout(() => (handler(e), tid = null), delay);\n };\n}\n\nfunction extend (_) {\n for (let x, k, i = 1, len = arguments.length; i < len; ++i) {\n x = arguments[i];\n for (k in x) {\n _[k] = x[k];\n }\n }\n return _;\n}\n\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nfunction extent (array, f) {\n let i = 0,\n n,\n v,\n min,\n max;\n if (array && (n = array.length)) {\n if (f == null) {\n // find first valid value\n for (v = array[i]; i < n && (v == null || v !== v); v = array[++i]);\n min = max = v;\n\n // visit all other values\n for (; i < n; ++i) {\n v = array[i];\n // skip null/undefined; NaN will fail all comparisons\n if (v != null) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n } else {\n // find first valid value\n for (v = f(array[i]); i < n && (v == null || v !== v); v = f(array[++i]));\n min = max = v;\n\n // visit all other values\n for (; i < n; ++i) {\n v = f(array[i]);\n // skip null/undefined; NaN will fail all comparisons\n if (v != null) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n }\n }\n return [min, max];\n}\n\nfunction extentIndex (array, f) {\n const n = array.length;\n let i = -1,\n a,\n b,\n c,\n u,\n v;\n if (f == null) {\n while (++i < n) {\n b = array[i];\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n if (i === n) return [-1, -1];\n u = v = i;\n while (++i < n) {\n b = array[i];\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n } else {\n while (++i < n) {\n b = f(array[i], i, array);\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n if (i === n) return [-1, -1];\n u = v = i;\n while (++i < n) {\n b = f(array[i], i, array);\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n }\n return [u, v];\n}\n\nconst hop = Object.prototype.hasOwnProperty;\nfunction has (object, property) {\n return hop.call(object, property);\n}\n\nconst NULL = {};\nfunction fastmap (input) {\n let obj = {},\n test;\n function has$1(key) {\n return has(obj, key) && obj[key] !== NULL;\n }\n const map = {\n size: 0,\n empty: 0,\n object: obj,\n has: has$1,\n get(key) {\n return has$1(key) ? obj[key] : undefined;\n },\n set(key, value) {\n if (!has$1(key)) {\n ++map.size;\n if (obj[key] === NULL) --map.empty;\n }\n obj[key] = value;\n return this;\n },\n delete(key) {\n if (has$1(key)) {\n --map.size;\n ++map.empty;\n obj[key] = NULL;\n }\n return this;\n },\n clear() {\n map.size = map.empty = 0;\n map.object = obj = {};\n },\n test(_) {\n if (arguments.length) {\n test = _;\n return map;\n } else {\n return test;\n }\n },\n clean() {\n const next = {};\n let size = 0;\n for (const key in obj) {\n const value = obj[key];\n if (value !== NULL && (!test || !test(value))) {\n next[key] = value;\n ++size;\n }\n }\n map.size = size;\n map.empty = 0;\n map.object = obj = next;\n }\n };\n if (input) Object.keys(input).forEach(key => {\n map.set(key, input[key]);\n });\n return map;\n}\n\nfunction flush (range, value, threshold, left, right, center) {\n if (!threshold && threshold !== 0) return center;\n const t = +threshold;\n let a = range[0],\n b = peek(range),\n l;\n\n // swap endpoints if range is reversed\n if (b < a) {\n l = a;\n a = b;\n b = l;\n }\n\n // compare value to endpoints\n l = Math.abs(value - a);\n const r = Math.abs(b - value);\n\n // adjust if value is within threshold distance of endpoint\n return l < r && l <= t ? left : r <= t ? right : center;\n}\n\nfunction inherits (child, parent, members) {\n const proto = child.prototype = Object.create(parent.prototype);\n Object.defineProperty(proto, 'constructor', {\n value: child,\n writable: true,\n enumerable: true,\n configurable: true\n });\n return extend(proto, members);\n}\n\n/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nfunction inrange (value, range, left, right) {\n let r0 = range[0],\n r1 = range[range.length - 1],\n t;\n if (r0 > r1) {\n t = r0;\n r0 = r1;\n r1 = t;\n }\n left = left === undefined || left;\n right = right === undefined || right;\n return (left ? r0 <= value : r0 < value) && (right ? value <= r1 : value < r1);\n}\n\nfunction isBoolean (_) {\n return typeof _ === 'boolean';\n}\n\nfunction isDate (_) {\n return Object.prototype.toString.call(_) === '[object Date]';\n}\n\nfunction isIterable (_) {\n return _ && isFunction(_[Symbol.iterator]);\n}\n\nfunction isNumber (_) {\n return typeof _ === 'number';\n}\n\nfunction isRegExp (_) {\n return Object.prototype.toString.call(_) === '[object RegExp]';\n}\n\nfunction isString (_) {\n return typeof _ === 'string';\n}\n\nfunction key (fields, flat, opt) {\n if (fields) {\n fields = flat ? array(fields).map(f => f.replace(/\\\\(.)/g, '$1')) : array(fields);\n }\n const len = fields && fields.length,\n gen = opt && opt.get || getter,\n map = f => gen(flat ? [f] : splitAccessPath(f));\n let fn;\n if (!len) {\n fn = function () {\n return '';\n };\n } else if (len === 1) {\n const get = map(fields[0]);\n fn = function (_) {\n return '' + get(_);\n };\n } else {\n const get = fields.map(map);\n fn = function (_) {\n let s = '' + get[0](_),\n i = 0;\n while (++i < len) s += '|' + get[i](_);\n return s;\n };\n }\n return accessor(fn, fields, 'key');\n}\n\nfunction lerp (array, frac) {\n const lo = array[0],\n hi = peek(array),\n f = +frac;\n return !f ? lo : f === 1 ? hi : lo + f * (hi - lo);\n}\n\nconst DEFAULT_MAX_SIZE = 10000;\n\n// adapted from https://github.com/dominictarr/hashlru/ (MIT License)\nfunction lruCache (maxsize) {\n maxsize = +maxsize || DEFAULT_MAX_SIZE;\n let curr, prev, size;\n const clear = () => {\n curr = {};\n prev = {};\n size = 0;\n };\n const update = (key, value) => {\n if (++size > maxsize) {\n prev = curr;\n curr = {};\n size = 1;\n }\n return curr[key] = value;\n };\n clear();\n return {\n clear,\n has: key => has(curr, key) || has(prev, key),\n get: key => has(curr, key) ? curr[key] : has(prev, key) ? update(key, prev[key]) : undefined,\n set: (key, value) => has(curr, key) ? curr[key] = value : update(key, value)\n };\n}\n\nfunction merge (compare, array0, array1, output) {\n const n0 = array0.length,\n n1 = array1.length;\n if (!n1) return array0;\n if (!n0) return array1;\n const merged = output || new array0.constructor(n0 + n1);\n let i0 = 0,\n i1 = 0,\n i = 0;\n for (; i0 < n0 && i1 < n1; ++i) {\n merged[i] = compare(array0[i0], array1[i1]) > 0 ? array1[i1++] : array0[i0++];\n }\n for (; i0 < n0; ++i0, ++i) {\n merged[i] = array0[i0];\n }\n for (; i1 < n1; ++i1, ++i) {\n merged[i] = array1[i1];\n }\n return merged;\n}\n\nfunction repeat (str, reps) {\n let s = '';\n while (--reps >= 0) s += str;\n return s;\n}\n\nfunction pad (str, length, padchar, align) {\n const c = padchar || ' ',\n s = str + '',\n n = length - s.length;\n return n <= 0 ? s : align === 'left' ? repeat(c, n) + s : align === 'center' ? repeat(c, ~~(n / 2)) + s + repeat(c, Math.ceil(n / 2)) : s + repeat(c, n);\n}\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\nfunction span (array) {\n return array && peek(array) - array[0] || 0;\n}\n\nfunction $(x) {\n return isArray(x) ? '[' + x.map($) + ']' : isObject(x) || isString(x) ?\n // Output valid JSON and JS source strings.\n // See http://timelessrepo.com/json-isnt-a-javascript-subset\n JSON.stringify(x).replace('\\u2028', '\\\\u2028').replace('\\u2029', '\\\\u2029') : x;\n}\n\nfunction toBoolean (_) {\n return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n}\n\nconst defaultParser = _ => isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\nfunction toDate (_, parser) {\n parser = parser || defaultParser;\n return _ == null || _ === '' ? null : parser(_);\n}\n\nfunction toString (_) {\n return _ == null || _ === '' ? null : _ + '';\n}\n\nfunction toSet (_) {\n const s = {},\n n = _.length;\n for (let i = 0; i < n; ++i) s[_[i]] = true;\n return s;\n}\n\nfunction truncate (str, length, align, ellipsis) {\n const e = ellipsis != null ? ellipsis : '\\u2026',\n s = str + '',\n n = s.length,\n l = Math.max(0, length - e.length);\n return n <= length ? s : align === 'left' ? e + s.slice(n - l) : align === 'center' ? s.slice(0, Math.ceil(l / 2)) + e + s.slice(n - ~~(l / 2)) : s.slice(0, l) + e;\n}\n\nfunction visitArray (array, filter, visitor) {\n if (array) {\n if (filter) {\n const n = array.length;\n for (let i = 0; i < n; ++i) {\n const t = filter(array[i]);\n if (t) visitor(t, i, array);\n }\n } else {\n array.forEach(visitor);\n }\n }\n}\n\nexport { Debug, Error$1 as Error, Info, None, Warn, accessor, accessorFields, accessorName, array, ascending, clampRange, compare, constant, debounce, error, extend, extent, extentIndex, falsy, fastmap, field, flush, has as hasOwnProperty, id, identity, inherits, inrange, isArray, isBoolean, isDate, isFunction, isIterable, isNumber, isObject, isRegExp, isString, key, lerp, logger, lruCache, merge, mergeConfig, one, pad, panLinear, panLog, panPow, panSymlog, peek, quarter, repeat, span, splitAccessPath, $ as stringValue, toBoolean, toDate, toNumber, toSet, toString, truncate, truthy, utcquarter, visitArray, writeConfig, zero, zoomLinear, zoomLog, zoomPow, zoomSymlog };\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","export default function(x) {\n return x;\n}\n","import reverse from \"./reverse.js\";\nimport transform from \"./transform.js\";\n\nexport default function(topology, o) {\n if (typeof o === \"string\") o = topology.objects[o];\n return o.type === \"GeometryCollection\"\n ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n : feature(topology, o);\n}\n\nfunction feature(topology, o) {\n var id = o.id,\n bbox = o.bbox,\n properties = o.properties == null ? {} : o.properties,\n geometry = object(topology, o);\n return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n var transformPoint = transform(topology.transform),\n arcs = topology.arcs;\n\n function arc(i, points) {\n if (points.length) points.pop();\n for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n points.push(transformPoint(a[k], k));\n }\n if (i < 0) reverse(points, n);\n }\n\n function point(p) {\n return transformPoint(p);\n }\n\n function line(arcs) {\n var points = [];\n for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n return points;\n }\n\n function ring(arcs) {\n var points = line(arcs);\n while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n return points;\n }\n\n function polygon(arcs) {\n return arcs.map(ring);\n }\n\n function geometry(o) {\n var type = o.type, coordinates;\n switch (type) {\n case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n case \"Point\": coordinates = point(o.coordinates); break;\n case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n case \"LineString\": coordinates = line(o.arcs); break;\n case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n case \"Polygon\": coordinates = polygon(o.arcs); break;\n case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n default: return null;\n }\n return {type: type, coordinates: coordinates};\n }\n\n return geometry(o);\n}\n","import identity from \"./identity.js\";\n\nexport default function(transform) {\n if (transform == null) return identity;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function(input, i) {\n if (!i) x0 = y0 = 0;\n var j = 2, n = input.length, output = new Array(n);\n output[0] = (x0 += input[0]) * kx + dx;\n output[1] = (y0 += input[1]) * ky + dy;\n while (j < n) output[j] = input[j], ++j;\n return output;\n };\n}\n","export default function(array, n) {\n var t, j = array.length, i = j - n;\n while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n","export default function(topology, arcs) {\n var stitchedArcs = {},\n fragmentByStart = {},\n fragmentByEnd = {},\n fragments = [],\n emptyIndex = -1;\n\n // Stitch empty arcs first, since they may be subsumed by other arcs.\n arcs.forEach(function(i, j) {\n var arc = topology.arcs[i < 0 ? ~i : i], t;\n if (arc.length < 3 && !arc[1][0] && !arc[1][1]) {\n t = arcs[++emptyIndex], arcs[emptyIndex] = i, arcs[j] = t;\n }\n });\n\n arcs.forEach(function(i) {\n var e = ends(i),\n start = e[0],\n end = e[1],\n f, g;\n\n if (f = fragmentByEnd[start]) {\n delete fragmentByEnd[f.end];\n f.push(i);\n f.end = end;\n if (g = fragmentByStart[end]) {\n delete fragmentByStart[g.start];\n var fg = g === f ? f : f.concat(g);\n fragmentByStart[fg.start = f.start] = fragmentByEnd[fg.end = g.end] = fg;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else if (f = fragmentByStart[end]) {\n delete fragmentByStart[f.start];\n f.unshift(i);\n f.start = start;\n if (g = fragmentByEnd[start]) {\n delete fragmentByEnd[g.end];\n var gf = g === f ? f : g.concat(f);\n fragmentByStart[gf.start = g.start] = fragmentByEnd[gf.end = f.end] = gf;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else {\n f = [i];\n fragmentByStart[f.start = start] = fragmentByEnd[f.end = end] = f;\n }\n });\n\n function ends(i) {\n var arc = topology.arcs[i < 0 ? ~i : i], p0 = arc[0], p1;\n if (topology.transform) p1 = [0, 0], arc.forEach(function(dp) { p1[0] += dp[0], p1[1] += dp[1]; });\n else p1 = arc[arc.length - 1];\n return i < 0 ? [p1, p0] : [p0, p1];\n }\n\n function flush(fragmentByEnd, fragmentByStart) {\n for (var k in fragmentByEnd) {\n var f = fragmentByEnd[k];\n delete fragmentByStart[f.start];\n delete f.start;\n delete f.end;\n f.forEach(function(i) { stitchedArcs[i < 0 ? ~i : i] = 1; });\n fragments.push(f);\n }\n }\n\n flush(fragmentByEnd, fragmentByStart);\n flush(fragmentByStart, fragmentByEnd);\n arcs.forEach(function(i) { if (!stitchedArcs[i < 0 ? ~i : i]) fragments.push([i]); });\n\n return fragments;\n}\n","import {object} from \"./feature.js\";\nimport stitch from \"./stitch.js\";\n\nexport default function(topology) {\n return object(topology, meshArcs.apply(this, arguments));\n}\n\nexport function meshArcs(topology, object, filter) {\n var arcs, i, n;\n if (arguments.length > 1) arcs = extractArcs(topology, object, filter);\n else for (i = 0, arcs = new Array(n = topology.arcs.length); i < n; ++i) arcs[i] = i;\n return {type: \"MultiLineString\", arcs: stitch(topology, arcs)};\n}\n\nfunction extractArcs(topology, object, filter) {\n var arcs = [],\n geomsByArc = [],\n geom;\n\n function extract0(i) {\n var j = i < 0 ? ~i : i;\n (geomsByArc[j] || (geomsByArc[j] = [])).push({i: i, g: geom});\n }\n\n function extract1(arcs) {\n arcs.forEach(extract0);\n }\n\n function extract2(arcs) {\n arcs.forEach(extract1);\n }\n\n function extract3(arcs) {\n arcs.forEach(extract2);\n }\n\n function geometry(o) {\n switch (geom = o, o.type) {\n case \"GeometryCollection\": o.geometries.forEach(geometry); break;\n case \"LineString\": extract1(o.arcs); break;\n case \"MultiLineString\": case \"Polygon\": extract2(o.arcs); break;\n case \"MultiPolygon\": extract3(o.arcs); break;\n }\n }\n\n geometry(object);\n\n geomsByArc.forEach(filter == null\n ? function(geoms) { arcs.push(geoms[0].i); }\n : function(geoms) { if (filter(geoms[0].g, geoms[geoms.length - 1].g)) arcs.push(geoms[0].i); });\n\n return arcs;\n}\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n constructor() {\n this._partials = new Float64Array(32);\n this._n = 0;\n }\n add(x) {\n const p = this._partials;\n let i = 0;\n for (let j = 0; j < this._n && j < 32; j++) {\n const y = p[j],\n hi = x + y,\n lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n if (lo) p[i++] = lo;\n x = hi;\n }\n p[i] = x;\n this._n = i + 1;\n return this;\n }\n valueOf() {\n const p = this._partials;\n let n = this._n, x, y, lo, hi = 0;\n if (n > 0) {\n hi = p[--n];\n while (n > 0) {\n x = hi;\n y = p[--n];\n hi = x + y;\n lo = y - (hi - x);\n if (lo) break;\n }\n if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n y = lo * 2;\n x = hi + y;\n if (y == x - hi) hi = x;\n }\n }\n return hi;\n }\n}\n\nexport function fsum(values, valueof) {\n const adder = new Adder();\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n adder.add(value);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n adder.add(value);\n }\n }\n }\n return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n const adder = new Adder();\n let index = -1;\n return Float64Array.from(values, valueof === undefined\n ? v => adder.add(+v || 0)\n : v => adder.add(+valueof(v, ++index, values) || 0)\n );\n}\n","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n values = Array.from(values);\n let [f] = F;\n if ((f && f.length !== 2) || F.length > 1) {\n const index = Uint32Array.from(values, (d, i) => i);\n if (F.length > 1) {\n F = F.map(f => values.map(f));\n index.sort((i, j) => {\n for (const f of F) {\n const c = ascendingDefined(f[i], f[j]);\n if (c) return c;\n }\n });\n } else {\n f = values.map(f);\n index.sort((i, j) => ascendingDefined(f[i], f[j]));\n }\n return permute(values, index);\n }\n return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n if (compare === ascending) return ascendingDefined;\n if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n return (a, b) => {\n const x = compare(a, b);\n if (x || x === 0) return x;\n return (compare(b, b) === 0) - (compare(a, a) === 0);\n };\n}\n\nexport function ascendingDefined(a, b) {\n return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n k = Math.floor(k);\n left = Math.floor(Math.max(0, left));\n right = Math.floor(Math.min(array.length - 1, right));\n\n if (!(left <= k && k <= right)) return array;\n\n compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n if (isNaN(p = +p)) return;\n numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n if (p <= 0) return minIndex(numbers);\n if (p >= 1) return maxIndex(numbers);\n var numbers,\n index = Uint32Array.from(values, (_, i) => i),\n j = numbers.length - 1,\n i = Math.floor(j * p);\n quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n return i >= 0 ? i : -1;\n}\n","import quantile, {quantileIndex} from \"./quantile.js\";\n\nexport default function median(values, valueof) {\n return quantile(values, 0.5, valueof);\n}\n\nexport function medianIndex(values, valueof) {\n return quantileIndex(values, 0.5, valueof);\n}\n","function* flatten(arrays) {\n for (const array of arrays) {\n yield* array;\n }\n}\n\nexport default function merge(arrays) {\n return Array.from(flatten(arrays));\n}\n","export default function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export default function sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n","import {InternSet} from \"internmap\";\n\nexport default function intersection(values, ...others) {\n values = new InternSet(values);\n others = others.map(set);\n out: for (const value of values) {\n for (const other of others) {\n if (!other.has(value)) {\n values.delete(value);\n continue out;\n }\n }\n }\n return values;\n}\n\nfunction set(values) {\n return values instanceof InternSet ? values : new InternSet(values);\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nexport const milliseconds = millisecond.range;\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport const utcYears = utcYear.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import { array, error, hasOwnProperty, extend, peek, toSet, constant, zero, one, span } from 'vega-util';\nimport { timeDay, timeWeek, utcDay, utcWeek, timeYear, timeMonth, timeHour, timeMinute, timeSecond, timeMillisecond, utcYear, utcMonth, utcHour, utcMinute, utcSecond, utcMillisecond } from 'd3-time';\nimport { bisector, tickStep } from 'd3-array';\n\nconst YEAR = 'year';\nconst QUARTER = 'quarter';\nconst MONTH = 'month';\nconst WEEK = 'week';\nconst DATE = 'date';\nconst DAY = 'day';\nconst DAYOFYEAR = 'dayofyear';\nconst HOURS = 'hours';\nconst MINUTES = 'minutes';\nconst SECONDS = 'seconds';\nconst MILLISECONDS = 'milliseconds';\nconst TIME_UNITS = [YEAR, QUARTER, MONTH, WEEK, DATE, DAY, DAYOFYEAR, HOURS, MINUTES, SECONDS, MILLISECONDS];\nconst UNITS = TIME_UNITS.reduce((o, u, i) => (o[u] = 1 + i, o), {});\nfunction timeUnits(units) {\n const u = array(units).slice(),\n m = {};\n\n // check validity\n if (!u.length) error('Missing time unit.');\n u.forEach(unit => {\n if (hasOwnProperty(UNITS, unit)) {\n m[unit] = 1;\n } else {\n error(`Invalid time unit: ${unit}.`);\n }\n });\n const numTypes = (m[WEEK] || m[DAY] ? 1 : 0) + (m[QUARTER] || m[MONTH] || m[DATE] ? 1 : 0) + (m[DAYOFYEAR] ? 1 : 0);\n if (numTypes > 1) {\n error(`Incompatible time units: ${units}`);\n }\n\n // ensure proper sort order\n u.sort((a, b) => UNITS[a] - UNITS[b]);\n return u;\n}\nconst defaultSpecifiers = {\n [YEAR]: '%Y ',\n [QUARTER]: 'Q%q ',\n [MONTH]: '%b ',\n [DATE]: '%d ',\n [WEEK]: 'W%U ',\n [DAY]: '%a ',\n [DAYOFYEAR]: '%j ',\n [HOURS]: '%H:00',\n [MINUTES]: '00:%M',\n [SECONDS]: ':%S',\n [MILLISECONDS]: '.%L',\n [`${YEAR}-${MONTH}`]: '%Y-%m ',\n [`${YEAR}-${MONTH}-${DATE}`]: '%Y-%m-%d ',\n [`${HOURS}-${MINUTES}`]: '%H:%M'\n};\nfunction timeUnitSpecifier(units, specifiers) {\n const s = extend({}, defaultSpecifiers, specifiers),\n u = timeUnits(units),\n n = u.length;\n let fmt = '',\n start = 0,\n end,\n key;\n for (start = 0; start < n;) {\n for (end = u.length; end > start; --end) {\n key = u.slice(start, end).join('-');\n if (s[key] != null) {\n fmt += s[key];\n start = end;\n break;\n }\n }\n }\n return fmt.trim();\n}\n\nconst t0 = new Date();\nfunction localYear(y) {\n t0.setFullYear(y);\n t0.setMonth(0);\n t0.setDate(1);\n t0.setHours(0, 0, 0, 0);\n return t0;\n}\nfunction dayofyear(d) {\n return localDayOfYear(new Date(d));\n}\nfunction week(d) {\n return localWeekNum(new Date(d));\n}\nfunction localDayOfYear(d) {\n return timeDay.count(localYear(d.getFullYear()) - 1, d);\n}\nfunction localWeekNum(d) {\n return timeWeek.count(localYear(d.getFullYear()) - 1, d);\n}\nfunction localFirst(y) {\n return localYear(y).getDay();\n}\nfunction localDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(-1, m, d, H, M, S, L);\n date.setFullYear(y);\n return date;\n }\n return new Date(y, m, d, H, M, S, L);\n}\nfunction utcdayofyear(d) {\n return utcDayOfYear(new Date(d));\n}\nfunction utcweek(d) {\n return utcWeekNum(new Date(d));\n}\nfunction utcDayOfYear(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcDay.count(y - 1, d);\n}\nfunction utcWeekNum(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcWeek.count(y - 1, d);\n}\nfunction utcFirst(y) {\n t0.setTime(Date.UTC(y, 0, 1));\n return t0.getUTCDay();\n}\nfunction utcDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(Date.UTC(-1, m, d, H, M, S, L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(y, m, d, H, M, S, L));\n}\n\nfunction floor(units, step, get, inv, newDate) {\n const s = step || 1,\n b = peek(units),\n _ = (unit, p, key) => {\n key = key || unit;\n return getUnit(get[key], inv[key], unit === b && s, p);\n };\n const t = new Date(),\n u = toSet(units),\n y = u[YEAR] ? _(YEAR) : constant(2012),\n m = u[MONTH] ? _(MONTH) : u[QUARTER] ? _(QUARTER) : zero,\n d = u[WEEK] && u[DAY] ? _(DAY, 1, WEEK + DAY) : u[WEEK] ? _(WEEK, 1) : u[DAY] ? _(DAY, 1) : u[DATE] ? _(DATE, 1) : u[DAYOFYEAR] ? _(DAYOFYEAR, 1) : one,\n H = u[HOURS] ? _(HOURS) : zero,\n M = u[MINUTES] ? _(MINUTES) : zero,\n S = u[SECONDS] ? _(SECONDS) : zero,\n L = u[MILLISECONDS] ? _(MILLISECONDS) : zero;\n return function (v) {\n t.setTime(+v);\n const year = y(t);\n return newDate(year, m(t), d(t, year), H(t), M(t), S(t), L(t));\n };\n}\nfunction getUnit(f, inv, step, phase) {\n const u = step <= 1 ? f : phase ? (d, y) => phase + step * Math.floor((f(d, y) - phase) / step) : (d, y) => step * Math.floor(f(d, y) / step);\n return inv ? (d, y) => inv(u(d, y), y) : u;\n}\n\n// returns the day of the year based on week number, day of week,\n// and the day of the week for the first day of the year\nfunction weekday(week, day, firstDay) {\n return day + week * 7 - (firstDay + 6) % 7;\n}\n\n// -- LOCAL TIME --\n\nconst localGet = {\n [YEAR]: d => d.getFullYear(),\n [QUARTER]: d => Math.floor(d.getMonth() / 3),\n [MONTH]: d => d.getMonth(),\n [DATE]: d => d.getDate(),\n [HOURS]: d => d.getHours(),\n [MINUTES]: d => d.getMinutes(),\n [SECONDS]: d => d.getSeconds(),\n [MILLISECONDS]: d => d.getMilliseconds(),\n [DAYOFYEAR]: d => localDayOfYear(d),\n [WEEK]: d => localWeekNum(d),\n [WEEK + DAY]: (d, y) => weekday(localWeekNum(d), d.getDay(), localFirst(y)),\n [DAY]: (d, y) => weekday(1, d.getDay(), localFirst(y))\n};\nconst localInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, localFirst(y))\n};\nfunction timeFloor(units, step) {\n return floor(units, step || 1, localGet, localInv, localDate);\n}\n\n// -- UTC TIME --\n\nconst utcGet = {\n [YEAR]: d => d.getUTCFullYear(),\n [QUARTER]: d => Math.floor(d.getUTCMonth() / 3),\n [MONTH]: d => d.getUTCMonth(),\n [DATE]: d => d.getUTCDate(),\n [HOURS]: d => d.getUTCHours(),\n [MINUTES]: d => d.getUTCMinutes(),\n [SECONDS]: d => d.getUTCSeconds(),\n [MILLISECONDS]: d => d.getUTCMilliseconds(),\n [DAYOFYEAR]: d => utcDayOfYear(d),\n [WEEK]: d => utcWeekNum(d),\n [DAY]: (d, y) => weekday(1, d.getUTCDay(), utcFirst(y)),\n [WEEK + DAY]: (d, y) => weekday(utcWeekNum(d), d.getUTCDay(), utcFirst(y))\n};\nconst utcInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, utcFirst(y))\n};\nfunction utcFloor(units, step) {\n return floor(units, step || 1, utcGet, utcInv, utcDate);\n}\n\nconst timeIntervals = {\n [YEAR]: timeYear,\n [QUARTER]: timeMonth.every(3),\n [MONTH]: timeMonth,\n [WEEK]: timeWeek,\n [DATE]: timeDay,\n [DAY]: timeDay,\n [DAYOFYEAR]: timeDay,\n [HOURS]: timeHour,\n [MINUTES]: timeMinute,\n [SECONDS]: timeSecond,\n [MILLISECONDS]: timeMillisecond\n};\nconst utcIntervals = {\n [YEAR]: utcYear,\n [QUARTER]: utcMonth.every(3),\n [MONTH]: utcMonth,\n [WEEK]: utcWeek,\n [DATE]: utcDay,\n [DAY]: utcDay,\n [DAYOFYEAR]: utcDay,\n [HOURS]: utcHour,\n [MINUTES]: utcMinute,\n [SECONDS]: utcSecond,\n [MILLISECONDS]: utcMillisecond\n};\nfunction timeInterval(unit) {\n return timeIntervals[unit];\n}\nfunction utcInterval(unit) {\n return utcIntervals[unit];\n}\nfunction offset(ival, date, step) {\n return ival ? ival.offset(date, step) : undefined;\n}\nfunction timeOffset(unit, date, step) {\n return offset(timeInterval(unit), date, step);\n}\nfunction utcOffset(unit, date, step) {\n return offset(utcInterval(unit), date, step);\n}\nfunction sequence(ival, start, stop, step) {\n return ival ? ival.range(start, stop, step) : undefined;\n}\nfunction timeSequence(unit, start, stop, step) {\n return sequence(timeInterval(unit), start, stop, step);\n}\nfunction utcSequence(unit, start, stop, step) {\n return sequence(utcInterval(unit), start, stop, step);\n}\n\nconst durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\nconst Milli = [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS],\n Seconds = Milli.slice(0, -1),\n Minutes = Seconds.slice(0, -1),\n Hours = Minutes.slice(0, -1),\n Day = Hours.slice(0, -1),\n Week = [YEAR, WEEK],\n Month = [YEAR, MONTH],\n Year = [YEAR];\nconst intervals = [[Seconds, 1, durationSecond], [Seconds, 5, 5 * durationSecond], [Seconds, 15, 15 * durationSecond], [Seconds, 30, 30 * durationSecond], [Minutes, 1, durationMinute], [Minutes, 5, 5 * durationMinute], [Minutes, 15, 15 * durationMinute], [Minutes, 30, 30 * durationMinute], [Hours, 1, durationHour], [Hours, 3, 3 * durationHour], [Hours, 6, 6 * durationHour], [Hours, 12, 12 * durationHour], [Day, 1, durationDay], [Week, 1, durationWeek], [Month, 1, durationMonth], [Month, 3, 3 * durationMonth], [Year, 1, durationYear]];\nfunction bin (opt) {\n const ext = opt.extent,\n max = opt.maxbins || 40,\n target = Math.abs(span(ext)) / max;\n let i = bisector(i => i[2]).right(intervals, target),\n units,\n step;\n if (i === intervals.length) {\n units = Year, step = tickStep(ext[0] / durationYear, ext[1] / durationYear, max);\n } else if (i) {\n i = intervals[target / intervals[i - 1][2] < intervals[i][2] / target ? i - 1 : i];\n units = i[0];\n step = i[1];\n } else {\n units = Milli;\n step = Math.max(tickStep(ext[0], ext[1], max), 1);\n }\n return {\n units,\n step\n };\n}\n\nexport { DATE, DAY, DAYOFYEAR, HOURS, MILLISECONDS, MINUTES, MONTH, QUARTER, SECONDS, TIME_UNITS, WEEK, YEAR, dayofyear, bin as timeBin, timeFloor, timeInterval, timeOffset, timeSequence, timeUnitSpecifier, timeUnits, utcFloor, utcInterval, utcOffset, utcSequence, utcdayofyear, utcweek, week };\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import { tickStep } from 'd3-array';\nimport { formatSpecifier, precisionFixed, precisionRound, precisionPrefix, format, formatPrefix, formatLocale } from 'd3-format';\nimport { SECONDS, MINUTES, HOURS, DATE, WEEK, MONTH, QUARTER, YEAR, MILLISECONDS, DAY, timeInterval, utcInterval } from 'vega-time';\nimport { isString, isObject, error, extend } from 'vega-util';\nimport { timeFormat, timeParse, utcFormat, utcParse, timeFormatLocale as timeFormatLocale$1 } from 'd3-time-format';\n\nfunction memoize (method) {\n const cache = {};\n return spec => cache[spec] || (cache[spec] = method(spec));\n}\n\nfunction trimZeroes(numberFormat, decimalChar) {\n return x => {\n const str = numberFormat(x),\n dec = str.indexOf(decimalChar);\n if (dec < 0) return str;\n let idx = rightmostDigit(str, dec);\n const end = idx < str.length ? str.slice(idx) : '';\n while (--idx > dec) if (str[idx] !== '0') {\n ++idx;\n break;\n }\n return str.slice(0, idx) + end;\n };\n}\nfunction rightmostDigit(str, dec) {\n let i = str.lastIndexOf('e'),\n c;\n if (i > 0) return i;\n for (i = str.length; --i > dec;) {\n c = str.charCodeAt(i);\n if (c >= 48 && c <= 57) return i + 1; // is digit\n }\n}\n\nfunction numberLocale(locale) {\n const format = memoize(locale.format),\n formatPrefix = locale.formatPrefix;\n return {\n format,\n formatPrefix,\n formatFloat(spec) {\n const s = formatSpecifier(spec || ',');\n if (s.precision == null) {\n s.precision = 12;\n switch (s.type) {\n case '%':\n s.precision -= 2;\n break;\n case 'e':\n s.precision -= 1;\n break;\n }\n return trimZeroes(format(s),\n // number format\n format('.1f')(1)[1] // decimal point character\n );\n } else {\n return format(s);\n }\n },\n formatSpan(start, stop, count, specifier) {\n specifier = formatSpecifier(specifier == null ? ',f' : specifier);\n const step = tickStep(start, stop, count),\n value = Math.max(Math.abs(start), Math.abs(stop));\n let precision;\n if (specifier.precision == null) {\n switch (specifier.type) {\n case 's':\n {\n if (!isNaN(precision = precisionPrefix(step, value))) {\n specifier.precision = precision;\n }\n return formatPrefix(specifier, value);\n }\n case '':\n case 'e':\n case 'g':\n case 'p':\n case 'r':\n {\n if (!isNaN(precision = precisionRound(step, value))) {\n specifier.precision = precision - (specifier.type === 'e');\n }\n break;\n }\n case 'f':\n case '%':\n {\n if (!isNaN(precision = precisionFixed(step))) {\n specifier.precision = precision - (specifier.type === '%') * 2;\n }\n break;\n }\n }\n }\n return format(specifier);\n }\n };\n}\nlet defaultNumberLocale;\nresetNumberFormatDefaultLocale();\nfunction resetNumberFormatDefaultLocale() {\n return defaultNumberLocale = numberLocale({\n format: format,\n formatPrefix: formatPrefix\n });\n}\nfunction numberFormatLocale(definition) {\n return numberLocale(formatLocale(definition));\n}\nfunction numberFormatDefaultLocale(definition) {\n return arguments.length ? defaultNumberLocale = numberFormatLocale(definition) : defaultNumberLocale;\n}\n\nfunction timeMultiFormat(format, interval, spec) {\n spec = spec || {};\n if (!isObject(spec)) {\n error(`Invalid time multi-format specifier: ${spec}`);\n }\n const second = interval(SECONDS),\n minute = interval(MINUTES),\n hour = interval(HOURS),\n day = interval(DATE),\n week = interval(WEEK),\n month = interval(MONTH),\n quarter = interval(QUARTER),\n year = interval(YEAR),\n L = format(spec[MILLISECONDS] || '.%L'),\n S = format(spec[SECONDS] || ':%S'),\n M = format(spec[MINUTES] || '%I:%M'),\n H = format(spec[HOURS] || '%I %p'),\n d = format(spec[DATE] || spec[DAY] || '%a %d'),\n w = format(spec[WEEK] || '%b %d'),\n m = format(spec[MONTH] || '%B'),\n q = format(spec[QUARTER] || '%B'),\n y = format(spec[YEAR] || '%Y');\n return date => (second(date) < date ? L : minute(date) < date ? S : hour(date) < date ? M : day(date) < date ? H : month(date) < date ? week(date) < date ? d : w : year(date) < date ? quarter(date) < date ? m : q : y)(date);\n}\nfunction timeLocale(locale) {\n const timeFormat = memoize(locale.format),\n utcFormat = memoize(locale.utcFormat);\n return {\n timeFormat: spec => isString(spec) ? timeFormat(spec) : timeMultiFormat(timeFormat, timeInterval, spec),\n utcFormat: spec => isString(spec) ? utcFormat(spec) : timeMultiFormat(utcFormat, utcInterval, spec),\n timeParse: memoize(locale.parse),\n utcParse: memoize(locale.utcParse)\n };\n}\nlet defaultTimeLocale;\nresetTimeFormatDefaultLocale();\nfunction resetTimeFormatDefaultLocale() {\n return defaultTimeLocale = timeLocale({\n format: timeFormat,\n parse: timeParse,\n utcFormat: utcFormat,\n utcParse: utcParse\n });\n}\nfunction timeFormatLocale(definition) {\n return timeLocale(timeFormatLocale$1(definition));\n}\nfunction timeFormatDefaultLocale(definition) {\n return arguments.length ? defaultTimeLocale = timeFormatLocale(definition) : defaultTimeLocale;\n}\n\nconst createLocale = (number, time) => extend({}, number, time);\nfunction locale(numberSpec, timeSpec) {\n const number = numberSpec ? numberFormatLocale(numberSpec) : numberFormatDefaultLocale();\n const time = timeSpec ? timeFormatLocale(timeSpec) : timeFormatDefaultLocale();\n return createLocale(number, time);\n}\nfunction defaultLocale(numberSpec, timeSpec) {\n const args = arguments.length;\n if (args && args !== 2) {\n error('defaultLocale expects either zero or two arguments.');\n }\n return args ? createLocale(numberFormatDefaultLocale(numberSpec), timeFormatDefaultLocale(timeSpec)) : createLocale(numberFormatDefaultLocale(), timeFormatDefaultLocale());\n}\nfunction resetDefaultLocale() {\n resetNumberFormatDefaultLocale();\n resetTimeFormatDefaultLocale();\n return defaultLocale();\n}\n\nexport { defaultLocale, locale, numberFormatDefaultLocale, numberFormatLocale, resetDefaultLocale, resetNumberFormatDefaultLocale, resetTimeFormatDefaultLocale, timeFormatDefaultLocale, timeFormatLocale };\n","import { extend, error, stringValue, isFunction, toBoolean, toNumber, toDate, toString, identity, field, isObject, isArray, isIterable, hasOwnProperty } from 'vega-util';\nimport { dsvFormat } from 'd3-dsv';\nimport { feature, mesh } from 'topojson-client';\nimport { timeFormatDefaultLocale } from 'vega-format';\n\n// Matches absolute URLs with optional protocol\n// https://... file://... //...\nconst protocol_re = /^(data:|([A-Za-z]+:)?\\/\\/)/;\n\n// Matches allowed URIs. From https://github.com/cure53/DOMPurify/blob/master/src/regexp.js with added file://\nconst allowed_re = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i; // eslint-disable-line no-useless-escape\nconst whitespace_re = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g; // eslint-disable-line no-control-regex\n\n// Special treatment in node.js for the file: protocol\nconst fileProtocol = 'file://';\n\n/**\n * Factory for a loader constructor that provides methods for requesting\n * files from either the network or disk, and for sanitizing request URIs.\n * @param {function} fetch - The Fetch API for HTTP network requests.\n * If null or undefined, HTTP loading will be disabled.\n * @param {object} fs - The file system interface for file loading.\n * If null or undefined, local file loading will be disabled.\n * @return {function} A loader constructor with the following signature:\n * param {object} [options] - Optional default loading options to use.\n * return {object} - A new loader instance.\n */\nfunction loaderFactory (fetch, fs) {\n return options => ({\n options: options || {},\n sanitize: sanitize,\n load: load,\n fileAccess: !!fs,\n file: fileLoader(fs),\n http: httpLoader(fetch)\n });\n}\n\n/**\n * Load an external resource, typically either from the web or from the local\n * filesystem. This function uses {@link sanitize} to first sanitize the uri,\n * then calls either {@link http} (for web requests) or {@link file} (for\n * filesystem loading).\n * @param {string} uri - The resource indicator (e.g., URL or filename).\n * @param {object} [options] - Optional loading options. These options will\n * override any existing default options.\n * @return {Promise} - A promise that resolves to the loaded content.\n */\nasync function load(uri, options) {\n const opt = await this.sanitize(uri, options),\n url = opt.href;\n return opt.localFile ? this.file(url) : this.http(url, options);\n}\n\n/**\n * URI sanitizer function.\n * @param {string} uri - The uri (url or filename) to check.\n * @param {object} options - An options hash.\n * @return {Promise} - A promise that resolves to an object containing\n * sanitized uri data, or rejects it the input uri is deemed invalid.\n * The properties of the resolved object are assumed to be\n * valid attributes for an HTML 'a' tag. The sanitized uri *must* be\n * provided by the 'href' property of the returned object.\n */\nasync function sanitize(uri, options) {\n options = extend({}, this.options, options);\n const fileAccess = this.fileAccess,\n result = {\n href: null\n };\n let isFile, loadFile, base;\n const isAllowed = allowed_re.test(uri.replace(whitespace_re, ''));\n if (uri == null || typeof uri !== 'string' || !isAllowed) {\n error('Sanitize failure, invalid URI: ' + stringValue(uri));\n }\n const hasProtocol = protocol_re.test(uri);\n\n // if relative url (no protocol/host), prepend baseURL\n if ((base = options.baseURL) && !hasProtocol) {\n // Ensure that there is a slash between the baseURL (e.g. hostname) and url\n if (!uri.startsWith('/') && !base.endsWith('/')) {\n uri = '/' + uri;\n }\n uri = base + uri;\n }\n\n // should we load from file system?\n loadFile = (isFile = uri.startsWith(fileProtocol)) || options.mode === 'file' || options.mode !== 'http' && !hasProtocol && fileAccess;\n if (isFile) {\n // strip file protocol\n uri = uri.slice(fileProtocol.length);\n } else if (uri.startsWith('//')) {\n if (options.defaultProtocol === 'file') {\n // if is file, strip protocol and set loadFile flag\n uri = uri.slice(2);\n loadFile = true;\n } else {\n // if relative protocol (starts with '//'), prepend default protocol\n uri = (options.defaultProtocol || 'http') + ':' + uri;\n }\n }\n\n // set non-enumerable mode flag to indicate local file load\n Object.defineProperty(result, 'localFile', {\n value: !!loadFile\n });\n\n // set uri\n result.href = uri;\n\n // set default result target, if specified\n if (options.target) {\n result.target = options.target + '';\n }\n\n // set default result rel, if specified (#1542)\n if (options.rel) {\n result.rel = options.rel + '';\n }\n\n // provide control over cross-origin image handling (#2238)\n // https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image\n if (options.context === 'image' && options.crossOrigin) {\n result.crossOrigin = options.crossOrigin + '';\n }\n\n // return\n return result;\n}\n\n/**\n * File system loader factory.\n * @param {object} fs - The file system interface.\n * @return {function} - A file loader with the following signature:\n * param {string} filename - The file system path to load.\n * param {string} filename - The file system path to load.\n * return {Promise} A promise that resolves to the file contents.\n */\nfunction fileLoader(fs) {\n return fs ? filename => new Promise((accept, reject) => {\n fs.readFile(filename, (error, data) => {\n if (error) reject(error);else accept(data);\n });\n }) : fileReject;\n}\n\n/**\n * Default file system loader that simply rejects.\n */\nasync function fileReject() {\n error('No file system access.');\n}\n\n/**\n * HTTP request handler factory.\n * @param {function} fetch - The Fetch API method.\n * @return {function} - An http loader with the following signature:\n * param {string} url - The url to request.\n * param {object} options - An options hash.\n * return {Promise} - A promise that resolves to the file contents.\n */\nfunction httpLoader(fetch) {\n return fetch ? async function (url, options) {\n const opt = extend({}, this.options.http, options),\n type = options && options.response,\n response = await fetch(url, opt);\n return !response.ok ? error(response.status + '' + response.statusText) : isFunction(response[type]) ? response[type]() : response.text();\n } : httpReject;\n}\n\n/**\n * Default http request handler that simply rejects.\n */\nasync function httpReject() {\n error('No HTTP fetch method available.');\n}\n\nconst isValid = _ => _ != null && _ === _;\nconst isBoolean = _ => _ === 'true' || _ === 'false' || _ === true || _ === false;\nconst isDate = _ => !Number.isNaN(Date.parse(_));\nconst isNumber = _ => !Number.isNaN(+_) && !(_ instanceof Date);\nconst isInteger = _ => isNumber(_) && Number.isInteger(+_);\nconst typeParsers = {\n boolean: toBoolean,\n integer: toNumber,\n number: toNumber,\n date: toDate,\n string: toString,\n unknown: identity\n};\nconst typeTests = [isBoolean, isInteger, isNumber, isDate];\nconst typeList = ['boolean', 'integer', 'number', 'date'];\nfunction inferType(values, field) {\n if (!values || !values.length) return 'unknown';\n const n = values.length,\n m = typeTests.length,\n a = typeTests.map((_, i) => i + 1);\n for (let i = 0, t = 0, j, value; i < n; ++i) {\n value = field ? values[i][field] : values[i];\n for (j = 0; j < m; ++j) {\n if (a[j] && isValid(value) && !typeTests[j](value)) {\n a[j] = 0;\n ++t;\n if (t === typeTests.length) return 'string';\n }\n }\n }\n return typeList[a.reduce((u, v) => u === 0 ? v : u, 0) - 1];\n}\nfunction inferTypes(data, fields) {\n return fields.reduce((types, field) => {\n types[field] = inferType(data, field);\n return types;\n }, {});\n}\n\nfunction delimitedFormat(delimiter) {\n const parse = function (data, format) {\n const delim = {\n delimiter: delimiter\n };\n return dsv(data, format ? extend(format, delim) : delim);\n };\n parse.responseType = 'text';\n return parse;\n}\nfunction dsv(data, format) {\n if (format.header) {\n data = format.header.map(stringValue).join(format.delimiter) + '\\n' + data;\n }\n return dsvFormat(format.delimiter).parse(data + '');\n}\ndsv.responseType = 'text';\n\nfunction isBuffer(_) {\n return typeof Buffer === 'function' && isFunction(Buffer.isBuffer) ? Buffer.isBuffer(_) : false;\n}\nfunction json(data, format) {\n const prop = format && format.property ? field(format.property) : identity;\n return isObject(data) && !isBuffer(data) ? parseJSON(prop(data), format) : prop(JSON.parse(data));\n}\njson.responseType = 'json';\nfunction parseJSON(data, format) {\n if (!isArray(data) && isIterable(data)) {\n data = [...data];\n }\n return format && format.copy ? JSON.parse(JSON.stringify(data)) : data;\n}\n\nconst filters = {\n interior: (a, b) => a !== b,\n exterior: (a, b) => a === b\n};\nfunction topojson(data, format) {\n let method, object, property, filter;\n data = json(data, format);\n if (format && format.feature) {\n method = feature;\n property = format.feature;\n } else if (format && format.mesh) {\n method = mesh;\n property = format.mesh;\n filter = filters[format.filter];\n } else {\n error('Missing TopoJSON feature or mesh parameter.');\n }\n object = (object = data.objects[property]) ? method(data, object, filter) : error('Invalid TopoJSON object: ' + property);\n return object && object.features || [object];\n}\ntopojson.responseType = 'json';\n\nconst format = {\n dsv: dsv,\n csv: delimitedFormat(','),\n tsv: delimitedFormat('\\t'),\n json: json,\n topojson: topojson\n};\nfunction formats(name, reader) {\n if (arguments.length > 1) {\n format[name] = reader;\n return this;\n } else {\n return hasOwnProperty(format, name) ? format[name] : null;\n }\n}\nfunction responseType(type) {\n const f = formats(type);\n return f && f.responseType || 'text';\n}\n\nfunction read (data, schema, timeParser, utcParser) {\n schema = schema || {};\n const reader = formats(schema.type || 'json');\n if (!reader) error('Unknown data format type: ' + schema.type);\n data = reader(data, schema);\n if (schema.parse) parse(data, schema.parse, timeParser, utcParser);\n if (hasOwnProperty(data, 'columns')) delete data.columns;\n return data;\n}\nfunction parse(data, types, timeParser, utcParser) {\n if (!data.length) return; // early exit for empty data\n\n const locale = timeFormatDefaultLocale();\n timeParser = timeParser || locale.timeParse;\n utcParser = utcParser || locale.utcParse;\n let fields = data.columns || Object.keys(data[0]),\n datum,\n field,\n i,\n j,\n n,\n m;\n if (types === 'auto') types = inferTypes(data, fields);\n fields = Object.keys(types);\n const parsers = fields.map(field => {\n const type = types[field];\n let parts, pattern;\n if (type && (type.startsWith('date:') || type.startsWith('utc:'))) {\n parts = type.split(/:(.+)?/, 2); // split on first :\n pattern = parts[1];\n if (pattern[0] === '\\'' && pattern[pattern.length - 1] === '\\'' || pattern[0] === '\"' && pattern[pattern.length - 1] === '\"') {\n pattern = pattern.slice(1, -1);\n }\n const parse = parts[0] === 'utc' ? utcParser : timeParser;\n return parse(pattern);\n }\n if (!typeParsers[type]) {\n throw Error('Illegal format pattern: ' + field + ':' + type);\n }\n return typeParsers[type];\n });\n for (i = 0, n = data.length, m = fields.length; i < n; ++i) {\n datum = data[i];\n for (j = 0; j < m; ++j) {\n field = fields[j];\n datum[field] = parsers[j](datum[field]);\n }\n }\n}\n\nconst loader = loaderFactory(typeof fetch !== 'undefined' && fetch,\n// use built-in fetch API\nnull // no file system access\n);\n\nexport { format, formats, inferType, inferTypes, loader, read, responseType, typeParsers };\n","import { identity, array, isFunction, constant, isArray, id, error, truthy, debounce, extend, visitArray, inherits, logger, Error, hasOwnProperty } from 'vega-util';\nimport { read, responseType, loader } from 'vega-loader';\nimport { defaultLocale } from 'vega-format';\n\nfunction UniqueList(idFunc) {\n const $ = idFunc || identity,\n list = [],\n ids = {};\n list.add = _ => {\n const id = $(_);\n if (!ids[id]) {\n ids[id] = 1;\n list.push(_);\n }\n return list;\n };\n list.remove = _ => {\n const id = $(_);\n if (ids[id]) {\n ids[id] = 0;\n const idx = list.indexOf(_);\n if (idx >= 0) list.splice(idx, 1);\n }\n return list;\n };\n return list;\n}\n\n/**\n * Invoke and await a potentially async callback function. If\n * an error occurs, trap it and route to Dataflow.error.\n * @param {Dataflow} df - The dataflow instance\n * @param {function} callback - A callback function to invoke\n * and then await. The dataflow will be passed as the single\n * argument to the function.\n */\nasync function asyncCallback (df, callback) {\n try {\n await callback(df);\n } catch (err) {\n df.error(err);\n }\n}\n\nconst TUPLE_ID_KEY = Symbol('vega_id');\nlet TUPLE_ID = 1;\n\n/**\n * Checks if an input value is a registered tuple.\n * @param {*} t - The value to check.\n * @return {boolean} True if the input is a tuple, false otherwise.\n */\nfunction isTuple(t) {\n return !!(t && tupleid(t));\n}\n\n/**\n * Returns the id of a tuple.\n * @param {object} t - The input tuple.\n * @return {*} the tuple id.\n */\nfunction tupleid(t) {\n return t[TUPLE_ID_KEY];\n}\n\n/**\n * Sets the id of a tuple.\n * @param {object} t - The input tuple.\n * @param {*} id - The id value to set.\n * @return {object} the input tuple.\n */\nfunction setid(t, id) {\n t[TUPLE_ID_KEY] = id;\n return t;\n}\n\n/**\n * Ingest an object or value as a data tuple.\n * If the input value is an object, an id field will be added to it. For\n * efficiency, the input object is modified directly. A copy is not made.\n * If the input value is a literal, it will be wrapped in a new object\n * instance, with the value accessible as the 'data' property.\n * @param datum - The value to ingest.\n * @return {object} The ingested data tuple.\n */\nfunction ingest$1(datum) {\n const t = datum === Object(datum) ? datum : {\n data: datum\n };\n return tupleid(t) ? t : setid(t, TUPLE_ID++);\n}\n\n/**\n * Given a source tuple, return a derived copy.\n * @param {object} t - The source tuple.\n * @return {object} The derived tuple.\n */\nfunction derive(t) {\n return rederive(t, ingest$1({}));\n}\n\n/**\n * Rederive a derived tuple by copying values from the source tuple.\n * @param {object} t - The source tuple.\n * @param {object} d - The derived tuple.\n * @return {object} The derived tuple.\n */\nfunction rederive(t, d) {\n for (const k in t) d[k] = t[k];\n return d;\n}\n\n/**\n * Replace an existing tuple with a new tuple.\n * @param {object} t - The existing data tuple.\n * @param {object} d - The new tuple that replaces the old.\n * @return {object} The new tuple.\n */\nfunction replace(t, d) {\n return setid(d, tupleid(t));\n}\n\n/**\n * Generate an augmented comparator function that provides stable\n * sorting by tuple id when the given comparator produces ties.\n * @param {function} cmp - The comparator to augment.\n * @param {function} [f] - Optional tuple accessor function.\n * @return {function} An augmented comparator function.\n */\nfunction stableCompare(cmp, f) {\n return !cmp ? null : f ? (a, b) => cmp(a, b) || tupleid(f(a)) - tupleid(f(b)) : (a, b) => cmp(a, b) || tupleid(a) - tupleid(b);\n}\n\nfunction isChangeSet(v) {\n return v && v.constructor === changeset;\n}\nfunction changeset() {\n const add = [],\n // insert tuples\n rem = [],\n // remove tuples\n mod = [],\n // modify tuples\n remp = [],\n // remove by predicate\n modp = []; // modify by predicate\n let clean = null,\n reflow = false;\n return {\n constructor: changeset,\n insert(t) {\n const d = array(t),\n n = d.length;\n for (let i = 0; i < n; ++i) add.push(d[i]);\n return this;\n },\n remove(t) {\n const a = isFunction(t) ? remp : rem,\n d = array(t),\n n = d.length;\n for (let i = 0; i < n; ++i) a.push(d[i]);\n return this;\n },\n modify(t, field, value) {\n const m = {\n field: field,\n value: constant(value)\n };\n if (isFunction(t)) {\n m.filter = t;\n modp.push(m);\n } else {\n m.tuple = t;\n mod.push(m);\n }\n return this;\n },\n encode(t, set) {\n if (isFunction(t)) modp.push({\n filter: t,\n field: set\n });else mod.push({\n tuple: t,\n field: set\n });\n return this;\n },\n clean(value) {\n clean = value;\n return this;\n },\n reflow() {\n reflow = true;\n return this;\n },\n pulse(pulse, tuples) {\n const cur = {},\n out = {};\n let i, n, m, f, t, id;\n\n // build lookup table of current tuples\n for (i = 0, n = tuples.length; i < n; ++i) {\n cur[tupleid(tuples[i])] = 1;\n }\n\n // process individual tuples to remove\n for (i = 0, n = rem.length; i < n; ++i) {\n t = rem[i];\n cur[tupleid(t)] = -1;\n }\n\n // process predicate-based removals\n for (i = 0, n = remp.length; i < n; ++i) {\n f = remp[i];\n tuples.forEach(t => {\n if (f(t)) cur[tupleid(t)] = -1;\n });\n }\n\n // process all add tuples\n for (i = 0, n = add.length; i < n; ++i) {\n t = add[i];\n id = tupleid(t);\n if (cur[id]) {\n // tuple already resides in dataset\n // if flagged for both add and remove, cancel\n cur[id] = 1;\n } else {\n // tuple does not reside in dataset, add\n pulse.add.push(ingest$1(add[i]));\n }\n }\n\n // populate pulse rem list\n for (i = 0, n = tuples.length; i < n; ++i) {\n t = tuples[i];\n if (cur[tupleid(t)] < 0) pulse.rem.push(t);\n }\n\n // modify helper method\n function modify(t, f, v) {\n if (v) {\n t[f] = v(t);\n } else {\n pulse.encode = f;\n }\n if (!reflow) out[tupleid(t)] = t;\n }\n\n // process individual tuples to modify\n for (i = 0, n = mod.length; i < n; ++i) {\n m = mod[i];\n t = m.tuple;\n f = m.field;\n id = cur[tupleid(t)];\n if (id > 0) {\n modify(t, f, m.value);\n pulse.modifies(f);\n }\n }\n\n // process predicate-based modifications\n for (i = 0, n = modp.length; i < n; ++i) {\n m = modp[i];\n f = m.filter;\n tuples.forEach(t => {\n if (f(t) && cur[tupleid(t)] > 0) {\n modify(t, m.field, m.value);\n }\n });\n pulse.modifies(m.field);\n }\n\n // upon reflow request, populate mod with all non-removed tuples\n // otherwise, populate mod with modified tuples only\n if (reflow) {\n pulse.mod = rem.length || remp.length ? tuples.filter(t => cur[tupleid(t)] > 0) : tuples.slice();\n } else {\n for (id in out) pulse.mod.push(out[id]);\n }\n\n // set pulse garbage collection request\n if (clean || clean == null && (rem.length || remp.length)) {\n pulse.clean(true);\n }\n return pulse;\n }\n };\n}\n\nconst CACHE = '_:mod:_';\n\n/**\n * Hash that tracks modifications to assigned values.\n * Callers *must* use the set method to update values.\n */\nfunction Parameters() {\n Object.defineProperty(this, CACHE, {\n writable: true,\n value: {}\n });\n}\nParameters.prototype = {\n /**\n * Set a parameter value. If the parameter value changes, the parameter\n * will be recorded as modified.\n * @param {string} name - The parameter name.\n * @param {number} index - The index into an array-value parameter. Ignored if\n * the argument is undefined, null or less than zero.\n * @param {*} value - The parameter value to set.\n * @param {boolean} [force=false] - If true, records the parameter as modified\n * even if the value is unchanged.\n * @return {Parameters} - This parameter object.\n */\n set(name, index, value, force) {\n const o = this,\n v = o[name],\n mod = o[CACHE];\n if (index != null && index >= 0) {\n if (v[index] !== value || force) {\n v[index] = value;\n mod[index + ':' + name] = -1;\n mod[name] = -1;\n }\n } else if (v !== value || force) {\n o[name] = value;\n mod[name] = isArray(value) ? 1 + value.length : -1;\n }\n return o;\n },\n /**\n * Tests if one or more parameters has been modified. If invoked with no\n * arguments, returns true if any parameter value has changed. If the first\n * argument is array, returns trues if any parameter name in the array has\n * changed. Otherwise, tests if the given name and optional array index has\n * changed.\n * @param {string} name - The parameter name to test.\n * @param {number} [index=undefined] - The parameter array index to test.\n * @return {boolean} - Returns true if a queried parameter was modified.\n */\n modified(name, index) {\n const mod = this[CACHE];\n if (!arguments.length) {\n for (const k in mod) {\n if (mod[k]) return true;\n }\n return false;\n } else if (isArray(name)) {\n for (let k = 0; k < name.length; ++k) {\n if (mod[name[k]]) return true;\n }\n return false;\n }\n return index != null && index >= 0 ? index + 1 < mod[name] || !!mod[index + ':' + name] : !!mod[name];\n },\n /**\n * Clears the modification records. After calling this method,\n * all parameters are considered unmodified.\n */\n clear() {\n this[CACHE] = {};\n return this;\n }\n};\n\nlet OP_ID = 0;\nconst PULSE = 'pulse',\n NO_PARAMS = new Parameters();\n\n// Boolean Flags\nconst SKIP$1 = 1,\n MODIFIED = 2;\n\n/**\n * An Operator is a processing node in a dataflow graph.\n * Each operator stores a value and an optional value update function.\n * Operators can accept a hash of named parameters. Parameter values can\n * either be direct (JavaScript literals, arrays, objects) or indirect\n * (other operators whose values will be pulled dynamically). Operators\n * included as parameters will have this operator added as a dependency.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {function(object, Pulse)} [update] - An update function. Upon\n * evaluation of this operator, the update function will be invoked and the\n * return value will be used as the new value of this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @see parameters\n */\nfunction Operator(init, update, params, react) {\n this.id = ++OP_ID;\n this.value = init;\n this.stamp = -1;\n this.rank = -1;\n this.qrank = -1;\n this.flags = 0;\n if (update) {\n this._update = update;\n }\n if (params) this.parameters(params, react);\n}\nfunction flag(bit) {\n return function (state) {\n const f = this.flags;\n if (arguments.length === 0) return !!(f & bit);\n this.flags = state ? f | bit : f & ~bit;\n return this;\n };\n}\nOperator.prototype = {\n /**\n * Returns a list of target operators dependent on this operator.\n * If this list does not exist, it is created and then returned.\n * @return {UniqueList}\n */\n targets() {\n return this._targets || (this._targets = UniqueList(id));\n },\n /**\n * Sets the value of this operator.\n * @param {*} value - the value to set.\n * @return {Number} Returns 1 if the operator value has changed\n * according to strict equality, returns 0 otherwise.\n */\n set(value) {\n if (this.value !== value) {\n this.value = value;\n return 1;\n } else {\n return 0;\n }\n },\n /**\n * Indicates that operator evaluation should be skipped on the next pulse.\n * This operator will still propagate incoming pulses, but its update function\n * will not be invoked. The skip flag is reset after every pulse, so calling\n * this method will affect processing of the next pulse only.\n */\n skip: flag(SKIP$1),\n /**\n * Indicates that this operator's value has been modified on its most recent\n * pulse. Normally modification is checked via strict equality; however, in\n * some cases it is more efficient to update the internal state of an object.\n * In those cases, the modified flag can be used to trigger propagation. Once\n * set, the modification flag persists across pulses until unset. The flag can\n * be used with the last timestamp to test if a modification is recent.\n */\n modified: flag(MODIFIED),\n /**\n * Sets the parameters for this operator. The parameter values are analyzed for\n * operator instances. If found, this operator will be added as a dependency\n * of the parameterizing operator. Operator values are dynamically marshalled\n * from each operator parameter prior to evaluation. If a parameter value is\n * an array, the array will also be searched for Operator instances. However,\n * the search does not recurse into sub-arrays or object properties.\n * @param {object} params - A hash of operator parameters.\n * @param {boolean} [react=true] - A flag indicating if this operator should\n * automatically update (react) when parameter values change. In other words,\n * this flag determines if the operator registers itself as a listener on\n * any upstream operators included in the parameters.\n * @param {boolean} [initonly=false] - A flag indicating if this operator\n * should calculate an update only upon its initial evaluation, then\n * deregister dependencies and suppress all future update invocations.\n * @return {Operator[]} - An array of upstream dependencies.\n */\n parameters(params, react, initonly) {\n react = react !== false;\n const argval = this._argval = this._argval || new Parameters(),\n argops = this._argops = this._argops || [],\n deps = [];\n let name, value, n, i;\n const add = (name, index, value) => {\n if (value instanceof Operator) {\n if (value !== this) {\n if (react) value.targets().add(this);\n deps.push(value);\n }\n argops.push({\n op: value,\n name: name,\n index: index\n });\n } else {\n argval.set(name, index, value);\n }\n };\n for (name in params) {\n value = params[name];\n if (name === PULSE) {\n array(value).forEach(op => {\n if (!(op instanceof Operator)) {\n error('Pulse parameters must be operator instances.');\n } else if (op !== this) {\n op.targets().add(this);\n deps.push(op);\n }\n });\n this.source = value;\n } else if (isArray(value)) {\n argval.set(name, -1, Array(n = value.length));\n for (i = 0; i < n; ++i) add(name, i, value[i]);\n } else {\n add(name, -1, value);\n }\n }\n this.marshall().clear(); // initialize values\n if (initonly) argops.initonly = true;\n return deps;\n },\n /**\n * Internal method for marshalling parameter values.\n * Visits each operator dependency to pull the latest value.\n * @return {Parameters} A Parameters object to pass to the update function.\n */\n marshall(stamp) {\n const argval = this._argval || NO_PARAMS,\n argops = this._argops;\n let item, i, op, mod;\n if (argops) {\n const n = argops.length;\n for (i = 0; i < n; ++i) {\n item = argops[i];\n op = item.op;\n mod = op.modified() && op.stamp === stamp;\n argval.set(item.name, item.index, op.value, mod);\n }\n if (argops.initonly) {\n for (i = 0; i < n; ++i) {\n item = argops[i];\n item.op.targets().remove(this);\n }\n this._argops = null;\n this._update = null;\n }\n }\n return argval;\n },\n /**\n * Detach this operator from the dataflow.\n * Unregisters listeners on upstream dependencies.\n */\n detach() {\n const argops = this._argops;\n let i, n, item, op;\n if (argops) {\n for (i = 0, n = argops.length; i < n; ++i) {\n item = argops[i];\n op = item.op;\n if (op._targets) {\n op._targets.remove(this);\n }\n }\n }\n\n // remove references to the source and pulse object,\n // if present, to prevent memory leaks of old data.\n this.pulse = null;\n this.source = null;\n },\n /**\n * Delegate method to perform operator processing.\n * Subclasses can override this method to perform custom processing.\n * By default, it marshalls parameters and calls the update function\n * if that function is defined. If the update function does not\n * change the operator value then StopPropagation is returned.\n * If no update function is defined, this method does nothing.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return The output pulse or StopPropagation. A falsy return value\n * (including undefined) will let the input pulse pass through.\n */\n evaluate(pulse) {\n const update = this._update;\n if (update) {\n const params = this.marshall(pulse.stamp),\n v = update.call(this, params, pulse);\n params.clear();\n if (v !== this.value) {\n this.value = v;\n } else if (!this.modified()) {\n return pulse.StopPropagation;\n }\n }\n },\n /**\n * Run this operator for the current pulse. If this operator has already\n * been run at (or after) the pulse timestamp, returns StopPropagation.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\n run(pulse) {\n if (pulse.stamp < this.stamp) return pulse.StopPropagation;\n let rv;\n if (this.skip()) {\n this.skip(false);\n rv = 0;\n } else {\n rv = this.evaluate(pulse);\n }\n return this.pulse = rv || pulse;\n }\n};\n\n/**\n * Add an operator to the dataflow graph. This function accepts a\n * variety of input argument types. The basic signature supports an\n * initial value, update function and parameters. If the first parameter\n * is an Operator instance, it will be added directly. If it is a\n * constructor for an Operator subclass, a new instance will be instantiated.\n * Otherwise, if the first parameter is a function instance, it will be used\n * as the update function and a null initial value is assumed.\n * @param {*} init - One of: the operator to add, the initial value of\n * the operator, an operator class to instantiate, or an update function.\n * @param {function} [update] - The operator update function.\n * @param {object} [params] - The operator parameters.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @return {Operator} - The added operator.\n */\nfunction add (init, update, params, react) {\n let shift = 1,\n op;\n if (init instanceof Operator) {\n op = init;\n } else if (init && init.prototype instanceof Operator) {\n op = new init();\n } else if (isFunction(init)) {\n op = new Operator(null, init);\n } else {\n shift = 0;\n op = new Operator(init, update);\n }\n this.rank(op);\n if (shift) {\n react = params;\n params = update;\n }\n if (params) this.connect(op, op.parameters(params, react));\n this.touch(op);\n return op;\n}\n\n/**\n * Connect a target operator as a dependent of source operators.\n * If necessary, this method will rerank the target operator and its\n * dependents to ensure propagation proceeds in a topologically sorted order.\n * @param {Operator} target - The target operator.\n * @param {Array} - The source operators that should propagate\n * to the target operator.\n */\nfunction connect (target, sources) {\n const targetRank = target.rank,\n n = sources.length;\n for (let i = 0; i < n; ++i) {\n if (targetRank < sources[i].rank) {\n this.rerank(target);\n return;\n }\n }\n}\n\nlet STREAM_ID = 0;\n\n/**\n * Models an event stream.\n * @constructor\n * @param {function(Object, number): boolean} [filter] - Filter predicate.\n * Events pass through when truthy, events are suppressed when falsy.\n * @param {function(Object): *} [apply] - Applied to input events to produce\n * new event values.\n * @param {function(Object)} [receive] - Event callback function to invoke\n * upon receipt of a new event. Use to override standard event processing.\n */\nfunction EventStream(filter, apply, receive) {\n this.id = ++STREAM_ID;\n this.value = null;\n if (receive) this.receive = receive;\n if (filter) this._filter = filter;\n if (apply) this._apply = apply;\n}\n\n/**\n * Creates a new event stream instance with the provided\n * (optional) filter, apply and receive functions.\n * @param {function(Object, number): boolean} [filter] - Filter predicate.\n * Events pass through when truthy, events are suppressed when falsy.\n * @param {function(Object): *} [apply] - Applied to input events to produce\n * new event values.\n * @see EventStream\n */\nfunction stream(filter, apply, receive) {\n return new EventStream(filter, apply, receive);\n}\nEventStream.prototype = {\n _filter: truthy,\n _apply: identity,\n targets() {\n return this._targets || (this._targets = UniqueList(id));\n },\n consume(_) {\n if (!arguments.length) return !!this._consume;\n this._consume = !!_;\n return this;\n },\n receive(evt) {\n if (this._filter(evt)) {\n const val = this.value = this._apply(evt),\n trg = this._targets,\n n = trg ? trg.length : 0;\n for (let i = 0; i < n; ++i) trg[i].receive(val);\n if (this._consume) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n }\n },\n filter(filter) {\n const s = stream(filter);\n this.targets().add(s);\n return s;\n },\n apply(apply) {\n const s = stream(null, apply);\n this.targets().add(s);\n return s;\n },\n merge() {\n const s = stream();\n this.targets().add(s);\n for (let i = 0, n = arguments.length; i < n; ++i) {\n arguments[i].targets().add(s);\n }\n return s;\n },\n throttle(pause) {\n let t = -1;\n return this.filter(() => {\n const now = Date.now();\n if (now - t > pause) {\n t = now;\n return 1;\n } else {\n return 0;\n }\n });\n },\n debounce(delay) {\n const s = stream();\n this.targets().add(stream(null, null, debounce(delay, e => {\n const df = e.dataflow;\n s.receive(e);\n if (df && df.run) df.run();\n })));\n return s;\n },\n between(a, b) {\n let active = false;\n a.targets().add(stream(null, null, () => active = true));\n b.targets().add(stream(null, null, () => active = false));\n return this.filter(() => active);\n },\n detach() {\n // ensures compatibility with operators (#2753)\n // remove references to other streams and filter functions that may\n // be bound to subcontexts that need to be garbage collected.\n this._filter = truthy;\n this._targets = null;\n }\n};\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor. The input must\n * support the addEventListener method.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @param {function(object): *} [apply] - Event application function.\n * If provided, this function will be invoked and the result will be\n * used as the downstream event value.\n * @return {EventStream}\n */\nfunction events (source, type, filter, apply) {\n const df = this,\n s = stream(filter, apply),\n send = function (e) {\n e.dataflow = df;\n try {\n s.receive(e);\n } catch (error) {\n df.error(error);\n } finally {\n df.run();\n }\n };\n let sources;\n if (typeof source === 'string' && typeof document !== 'undefined') {\n sources = document.querySelectorAll(source);\n } else {\n sources = array(source);\n }\n const n = sources.length;\n for (let i = 0; i < n; ++i) {\n sources[i].addEventListener(type, send);\n }\n return s;\n}\n\nfunction parse(data, format) {\n const locale = this.locale();\n return read(data, format, locale.timeParse, locale.utcParse);\n}\n\n/**\n * Ingests new data into the dataflow. First parses the data using the\n * vega-loader read method, then pulses a changeset to the target operator.\n * @param {Operator} target - The Operator to target with ingested data,\n * typically a Collect transform instance.\n * @param {*} data - The input data, prior to parsing. For JSON this may\n * be a string or an object. For CSV, TSV, etc should be a string.\n * @param {object} format - The data format description for parsing\n * loaded data. This object is passed to the vega-loader read method.\n * @returns {Dataflow}\n */\nfunction ingest(target, data, format) {\n data = this.parse(data, format);\n return this.pulse(target, this.changeset().insert(data));\n}\n\n/**\n * Request data from an external source, parse it, and return a Promise.\n * @param {string} url - The URL from which to load the data. This string\n * is passed to the vega-loader load method.\n * @param {object} [format] - The data format description for parsing\n * loaded data. This object is passed to the vega-loader read method.\n * @return {Promise} A Promise that resolves upon completion of the request.\n * The resolved object contains the following properties:\n * - data: an array of parsed data (or null upon error)\n * - status: a code for success (0), load fail (-1), or parse fail (-2)\n */\nasync function request(url, format) {\n const df = this;\n let status = 0,\n data;\n try {\n data = await df.loader().load(url, {\n context: 'dataflow',\n response: responseType(format && format.type)\n });\n try {\n data = df.parse(data, format);\n } catch (err) {\n status = -2;\n df.warn('Data ingestion failed', url, err);\n }\n } catch (err) {\n status = -1;\n df.warn('Loading failed', url, err);\n }\n return {\n data,\n status\n };\n}\nasync function preload(target, url, format) {\n const df = this,\n pending = df._pending || loadPending(df);\n pending.requests += 1;\n const res = await df.request(url, format);\n df.pulse(target, df.changeset().remove(truthy).insert(res.data || []));\n pending.done();\n return res;\n}\nfunction loadPending(df) {\n let accept;\n const pending = new Promise(a => accept = a);\n pending.requests = 0;\n pending.done = () => {\n if (--pending.requests === 0) {\n df._pending = null;\n accept(df);\n }\n };\n return df._pending = pending;\n}\n\nconst SKIP = {\n skip: true\n};\n\n/**\n * Perform operator updates in response to events. Applies an\n * update function to compute a new operator value. If the update function\n * returns a {@link ChangeSet}, the operator will be pulsed with those tuple\n * changes. Otherwise, the operator value will be updated to the return value.\n * @param {EventStream|Operator} source - The event source to react to.\n * This argument can be either an EventStream or an Operator.\n * @param {Operator|function(object):Operator} target - The operator to update.\n * This argument can either be an Operator instance or (if the source\n * argument is an EventStream), a function that accepts an event object as\n * input and returns an Operator to target.\n * @param {function(Parameters,Event): *} [update] - Optional update function\n * to compute the new operator value, or a literal value to set. Update\n * functions expect to receive a parameter object and event as arguments.\n * This function can either return a new operator value or (if the source\n * argument is an EventStream) a {@link ChangeSet} instance to pulse\n * the target operator with tuple changes.\n * @param {object} [params] - The update function parameters.\n * @param {object} [options] - Additional options hash. If not overridden,\n * updated operators will be skipped by default.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @return {Dataflow}\n */\nfunction on (source, target, update, params, options) {\n const fn = source instanceof Operator ? onOperator : onStream;\n fn(this, source, target, update, params, options);\n return this;\n}\nfunction onStream(df, stream, target, update, params, options) {\n const opt = extend({}, options, SKIP);\n let func, op;\n if (!isFunction(target)) target = constant(target);\n if (update === undefined) {\n func = e => df.touch(target(e));\n } else if (isFunction(update)) {\n op = new Operator(null, update, params, false);\n func = e => {\n op.evaluate(e);\n const t = target(e),\n v = op.value;\n isChangeSet(v) ? df.pulse(t, v, options) : df.update(t, v, opt);\n };\n } else {\n func = e => df.update(target(e), update, opt);\n }\n stream.apply(func);\n}\nfunction onOperator(df, source, target, update, params, options) {\n if (update === undefined) {\n source.targets().add(target);\n } else {\n const opt = options || {},\n op = new Operator(null, updater(target, update), params, false);\n op.modified(opt.force);\n op.rank = source.rank; // immediately follow source\n source.targets().add(op); // add dependency\n\n if (target) {\n op.skip(true); // skip first invocation\n op.value = target.value; // initialize value\n op.targets().add(target); // chain dependencies\n df.connect(target, [op]); // rerank as needed, #1672\n }\n }\n}\n\nfunction updater(target, update) {\n update = isFunction(update) ? update : constant(update);\n return target ? function (_, pulse) {\n const value = update(_, pulse);\n if (!target.skip()) {\n target.skip(value !== this.value).value = value;\n }\n return value;\n } : update;\n}\n\n/**\n * Assigns a rank to an operator. Ranks are assigned in increasing order\n * by incrementing an internal rank counter.\n * @param {Operator} op - The operator to assign a rank.\n */\nfunction rank(op) {\n op.rank = ++this._rank;\n}\n\n/**\n * Re-ranks an operator and all downstream target dependencies. This\n * is necessary when upstream dependencies of higher rank are added to\n * a target operator.\n * @param {Operator} op - The operator to re-rank.\n */\nfunction rerank(op) {\n const queue = [op];\n let cur, list, i;\n while (queue.length) {\n this.rank(cur = queue.pop());\n if (list = cur._targets) {\n for (i = list.length; --i >= 0;) {\n queue.push(cur = list[i]);\n if (cur === op) error('Cycle detected in dataflow graph.');\n }\n }\n }\n}\n\n/**\n * Sentinel value indicating pulse propagation should stop.\n */\nconst StopPropagation = {};\n\n// Pulse visit type flags\nconst ADD = 1 << 0,\n REM = 1 << 1,\n MOD = 1 << 2,\n ADD_REM = ADD | REM,\n ADD_MOD = ADD | MOD,\n ALL = ADD | REM | MOD,\n REFLOW = 1 << 3,\n SOURCE = 1 << 4,\n NO_SOURCE = 1 << 5,\n NO_FIELDS = 1 << 6;\n\n/**\n * A Pulse enables inter-operator communication during a run of the\n * dataflow graph. In addition to the current timestamp, a pulse may also\n * contain a change-set of added, removed or modified data tuples, as well as\n * a pointer to a full backing data source. Tuple change sets may not\n * be fully materialized; for example, to prevent needless array creation\n * a change set may include larger arrays and corresponding filter functions.\n * The pulse provides a {@link visit} method to enable proper and efficient\n * iteration over requested data tuples.\n *\n * In addition, each pulse can track modification flags for data tuple fields.\n * Responsible transform operators should call the {@link modifies} method to\n * indicate changes to data fields. The {@link modified} method enables\n * querying of this modification state.\n *\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The current propagation timestamp.\n * @param {string} [encode] - An optional encoding set name, which is then\n * accessible as Pulse.encode. Operators can respond to (or ignore) this\n * setting as appropriate. This parameter can be used in conjunction with\n * the Encode transform in the vega-encode module.\n */\nfunction Pulse(dataflow, stamp, encode) {\n this.dataflow = dataflow;\n this.stamp = stamp == null ? -1 : stamp;\n this.add = [];\n this.rem = [];\n this.mod = [];\n this.fields = null;\n this.encode = encode || null;\n}\nfunction materialize(data, filter) {\n const out = [];\n visitArray(data, filter, _ => out.push(_));\n return out;\n}\nfunction filter(pulse, flags) {\n const map = {};\n pulse.visit(flags, t => {\n map[tupleid(t)] = 1;\n });\n return t => map[tupleid(t)] ? null : t;\n}\nfunction addFilter(a, b) {\n return a ? (t, i) => a(t, i) && b(t, i) : b;\n}\nPulse.prototype = {\n /**\n * Sentinel value indicating pulse propagation should stop.\n */\n StopPropagation,\n /**\n * Boolean flag indicating ADD (added) tuples.\n */\n ADD,\n /**\n * Boolean flag indicating REM (removed) tuples.\n */\n REM,\n /**\n * Boolean flag indicating MOD (modified) tuples.\n */\n MOD,\n /**\n * Boolean flag indicating ADD (added) and REM (removed) tuples.\n */\n ADD_REM,\n /**\n * Boolean flag indicating ADD (added) and MOD (modified) tuples.\n */\n ADD_MOD,\n /**\n * Boolean flag indicating ADD, REM and MOD tuples.\n */\n ALL,\n /**\n * Boolean flag indicating all tuples in a data source\n * except for the ADD, REM and MOD tuples.\n */\n REFLOW,\n /**\n * Boolean flag indicating a 'pass-through' to a\n * backing data source, ignoring ADD, REM and MOD tuples.\n */\n SOURCE,\n /**\n * Boolean flag indicating that source data should be\n * suppressed when creating a forked pulse.\n */\n NO_SOURCE,\n /**\n * Boolean flag indicating that field modifications should be\n * suppressed when creating a forked pulse.\n */\n NO_FIELDS,\n /**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created.\n * @return {Pulse} - The forked pulse instance.\n * @see init\n */\n fork(flags) {\n return new Pulse(this.dataflow).init(this, flags);\n },\n /**\n * Creates a copy of this pulse with new materialized array\n * instances for the ADD, REM, MOD, and SOURCE arrays.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse} - The cloned pulse instance.\n * @see init\n */\n clone() {\n const p = this.fork(ALL);\n p.add = p.add.slice();\n p.rem = p.rem.slice();\n p.mod = p.mod.slice();\n if (p.source) p.source = p.source.slice();\n return p.materialize(ALL | SOURCE);\n },\n /**\n * Returns a pulse that adds all tuples from a backing source. This is\n * useful for cases where operators are added to a dataflow after an\n * upstream data pipeline has already been processed, ensuring that\n * new operators can observe all tuples within a stream.\n * @return {Pulse} - A pulse instance with all source tuples included\n * in the add array. If the current pulse already has all source\n * tuples in its add array, it is returned directly. If the current\n * pulse does not have a backing source, it is returned directly.\n */\n addAll() {\n let p = this;\n const reuse = !p.source || p.add === p.rem // special case for indexed set (e.g., crossfilter)\n || !p.rem.length && p.source.length === p.add.length;\n if (reuse) {\n return p;\n } else {\n p = new Pulse(this.dataflow).init(this);\n p.add = p.source;\n p.rem = []; // new operators can ignore rem #2769\n return p;\n }\n },\n /**\n * Initialize this pulse based on the values of another pulse. This method\n * is used internally by {@link fork} to initialize a new forked tuple.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {Pulse} src - The source pulse to copy from.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created. By default, source data arrays are copied\n * to the new pulse. Use the NO_SOURCE flag to enforce a null source.\n * @return {Pulse} - Returns this Pulse instance.\n */\n init(src, flags) {\n const p = this;\n p.stamp = src.stamp;\n p.encode = src.encode;\n if (src.fields && !(flags & NO_FIELDS)) {\n p.fields = src.fields;\n }\n if (flags & ADD) {\n p.addF = src.addF;\n p.add = src.add;\n } else {\n p.addF = null;\n p.add = [];\n }\n if (flags & REM) {\n p.remF = src.remF;\n p.rem = src.rem;\n } else {\n p.remF = null;\n p.rem = [];\n }\n if (flags & MOD) {\n p.modF = src.modF;\n p.mod = src.mod;\n } else {\n p.modF = null;\n p.mod = [];\n }\n if (flags & NO_SOURCE) {\n p.srcF = null;\n p.source = null;\n } else {\n p.srcF = src.srcF;\n p.source = src.source;\n if (src.cleans) p.cleans = src.cleans;\n }\n return p;\n },\n /**\n * Schedules a function to run after pulse propagation completes.\n * @param {function} func - The function to run.\n */\n runAfter(func) {\n this.dataflow.runAfter(func);\n },\n /**\n * Indicates if tuples have been added, removed or modified.\n * @param {number} [flags] - The tuple types (ADD, REM or MOD) to query.\n * Defaults to ALL, returning true if any tuple type has changed.\n * @return {boolean} - Returns true if one or more queried tuple types have\n * changed, false otherwise.\n */\n changed(flags) {\n const f = flags || ALL;\n return f & ADD && this.add.length || f & REM && this.rem.length || f & MOD && this.mod.length;\n },\n /**\n * Forces a \"reflow\" of tuple values, such that all tuples in the backing\n * source are added to the MOD set, unless already present in the ADD set.\n * @param {boolean} [fork=false] - If true, returns a forked copy of this\n * pulse, and invokes reflow on that derived pulse.\n * @return {Pulse} - The reflowed pulse instance.\n */\n reflow(fork) {\n if (fork) return this.fork(ALL).reflow();\n const len = this.add.length,\n src = this.source && this.source.length;\n if (src && src !== len) {\n this.mod = this.source;\n if (len) this.filter(MOD, filter(this, ADD));\n }\n return this;\n },\n /**\n * Get/set metadata to pulse requesting garbage collection\n * to reclaim currently unused resources.\n */\n clean(value) {\n if (arguments.length) {\n this.cleans = !!value;\n return this;\n } else {\n return this.cleans;\n }\n },\n /**\n * Marks one or more data field names as modified to assist dependency\n * tracking and incremental processing by transform operators.\n * @param {string|Array} _ - The field(s) to mark as modified.\n * @return {Pulse} - This pulse instance.\n */\n modifies(_) {\n const hash = this.fields || (this.fields = {});\n if (isArray(_)) {\n _.forEach(f => hash[f] = true);\n } else {\n hash[_] = true;\n }\n return this;\n },\n /**\n * Checks if one or more data fields have been modified during this pulse\n * propagation timestamp.\n * @param {string|Array} _ - The field(s) to check for modified.\n * @param {boolean} nomod - If true, will check the modified flag even if\n * no mod tuples exist. If false (default), mod tuples must be present.\n * @return {boolean} - Returns true if any of the provided fields has been\n * marked as modified, false otherwise.\n */\n modified(_, nomod) {\n const fields = this.fields;\n return !((nomod || this.mod.length) && fields) ? false : !arguments.length ? !!fields : isArray(_) ? _.some(f => fields[f]) : fields[_];\n },\n /**\n * Adds a filter function to one more tuple sets. Filters are applied to\n * backing tuple arrays, to determine the actual set of tuples considered\n * added, removed or modified. They can be used to delay materialization of\n * a tuple set in order to avoid expensive array copies. In addition, the\n * filter functions can serve as value transformers: unlike standard predicate\n * function (which return boolean values), Pulse filters should return the\n * actual tuple value to process. If a tuple set is already filtered, the\n * new filter function will be appended into a conjuntive ('and') query.\n * @param {number} flags - Flags indicating the tuple set(s) to filter.\n * @param {function(*):object} filter - Filter function that will be applied\n * to the tuple set array, and should return a data tuple if the value\n * should be included in the tuple set, and falsy (or null) otherwise.\n * @return {Pulse} - Returns this pulse instance.\n */\n filter(flags, filter) {\n const p = this;\n if (flags & ADD) p.addF = addFilter(p.addF, filter);\n if (flags & REM) p.remF = addFilter(p.remF, filter);\n if (flags & MOD) p.modF = addFilter(p.modF, filter);\n if (flags & SOURCE) p.srcF = addFilter(p.srcF, filter);\n return p;\n },\n /**\n * Materialize one or more tuple sets in this pulse. If the tuple set(s) have\n * a registered filter function, it will be applied and the tuple set(s) will\n * be replaced with materialized tuple arrays.\n * @param {number} flags - Flags indicating the tuple set(s) to materialize.\n * @return {Pulse} - Returns this pulse instance.\n */\n materialize(flags) {\n flags = flags || ALL;\n const p = this;\n if (flags & ADD && p.addF) {\n p.add = materialize(p.add, p.addF);\n p.addF = null;\n }\n if (flags & REM && p.remF) {\n p.rem = materialize(p.rem, p.remF);\n p.remF = null;\n }\n if (flags & MOD && p.modF) {\n p.mod = materialize(p.mod, p.modF);\n p.modF = null;\n }\n if (flags & SOURCE && p.srcF) {\n p.source = p.source.filter(p.srcF);\n p.srcF = null;\n }\n return p;\n },\n /**\n * Visit one or more tuple sets in this pulse.\n * @param {number} flags - Flags indicating the tuple set(s) to visit.\n * Legal values are ADD, REM, MOD and SOURCE (if a backing data source\n * has been set).\n * @param {function(object):*} - Visitor function invoked per-tuple.\n * @return {Pulse} - Returns this pulse instance.\n */\n visit(flags, visitor) {\n const p = this,\n v = visitor;\n if (flags & SOURCE) {\n visitArray(p.source, p.srcF, v);\n return p;\n }\n if (flags & ADD) visitArray(p.add, p.addF, v);\n if (flags & REM) visitArray(p.rem, p.remF, v);\n if (flags & MOD) visitArray(p.mod, p.modF, v);\n const src = p.source;\n if (flags & REFLOW && src) {\n const sum = p.add.length + p.mod.length;\n if (sum === src.length) ; else if (sum) {\n visitArray(src, filter(p, ADD_MOD), v);\n } else {\n // if no add/rem/mod tuples, visit source\n visitArray(src, p.srcF, v);\n }\n }\n return p;\n }\n};\n\n/**\n * Represents a set of multiple pulses. Used as input for operators\n * that accept multiple pulses at a time. Contained pulses are\n * accessible via the public \"pulses\" array property. This pulse doe\n * not carry added, removed or modified tuples directly. However,\n * the visit method can be used to traverse all such tuples contained\n * in sub-pulses with a timestamp matching this parent multi-pulse.\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The timestamp.\n * @param {Array} pulses - The sub-pulses for this multi-pulse.\n */\nfunction MultiPulse(dataflow, stamp, pulses, encode) {\n const p = this;\n let c = 0;\n this.dataflow = dataflow;\n this.stamp = stamp;\n this.fields = null;\n this.encode = encode || null;\n this.pulses = pulses;\n for (const pulse of pulses) {\n if (pulse.stamp !== stamp) continue;\n if (pulse.fields) {\n const hash = p.fields || (p.fields = {});\n for (const f in pulse.fields) {\n hash[f] = 1;\n }\n }\n if (pulse.changed(p.ADD)) c |= p.ADD;\n if (pulse.changed(p.REM)) c |= p.REM;\n if (pulse.changed(p.MOD)) c |= p.MOD;\n }\n this.changes = c;\n}\ninherits(MultiPulse, Pulse, {\n /**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse}\n */\n fork(flags) {\n const p = new Pulse(this.dataflow).init(this, flags & this.NO_FIELDS);\n if (flags !== undefined) {\n if (flags & p.ADD) this.visit(p.ADD, t => p.add.push(t));\n if (flags & p.REM) this.visit(p.REM, t => p.rem.push(t));\n if (flags & p.MOD) this.visit(p.MOD, t => p.mod.push(t));\n }\n return p;\n },\n changed(flags) {\n return this.changes & flags;\n },\n modified(_) {\n const p = this,\n fields = p.fields;\n return !(fields && p.changes & p.MOD) ? 0 : isArray(_) ? _.some(f => fields[f]) : fields[_];\n },\n filter() {\n error('MultiPulse does not support filtering.');\n },\n materialize() {\n error('MultiPulse does not support materialization.');\n },\n visit(flags, visitor) {\n const p = this,\n pulses = p.pulses,\n n = pulses.length;\n let i = 0;\n if (flags & p.SOURCE) {\n for (; i < n; ++i) {\n pulses[i].visit(flags, visitor);\n }\n } else {\n for (; i < n; ++i) {\n if (pulses[i].stamp === p.stamp) {\n pulses[i].visit(flags, visitor);\n }\n }\n }\n return p;\n }\n});\n\n/* eslint-disable require-atomic-updates */\n\n/**\n * Evaluates the dataflow and returns a Promise that resolves when pulse\n * propagation completes. This method will increment the current timestamp\n * and process all updated, pulsed and touched operators. When invoked for\n * the first time, all registered operators will be processed. This method\n * should not be invoked by third-party clients, use {@link runAsync} or\n * {@link run} instead.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode package.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Promise} - A promise that resolves to this dataflow after\n * evaluation completes.\n */\nasync function evaluate(encode, prerun, postrun) {\n const df = this,\n async = [];\n\n // if the pulse value is set, this is a re-entrant call\n if (df._pulse) return reentrant(df);\n\n // wait for pending datasets to load\n if (df._pending) await df._pending;\n\n // invoke prerun function, if provided\n if (prerun) await asyncCallback(df, prerun);\n\n // exit early if there are no updates\n if (!df._touched.length) {\n df.debug('Dataflow invoked, but nothing to do.');\n return df;\n }\n\n // increment timestamp clock\n const stamp = ++df._clock;\n\n // set the current pulse\n df._pulse = new Pulse(df, stamp, encode);\n\n // initialize priority queue, reset touched operators\n df._touched.forEach(op => df._enqueue(op, true));\n df._touched = UniqueList(id);\n let count = 0,\n op,\n next,\n error;\n try {\n while (df._heap.size() > 0) {\n // dequeue operator with highest priority\n op = df._heap.pop();\n\n // re-queue if rank changed\n if (op.rank !== op.qrank) {\n df._enqueue(op, true);\n continue;\n }\n\n // otherwise, evaluate the operator\n next = op.run(df._getPulse(op, encode));\n if (next.then) {\n // await if operator returns a promise directly\n next = await next;\n } else if (next.async) {\n // queue parallel asynchronous execution\n async.push(next.async);\n next = StopPropagation;\n }\n\n // propagate evaluation, enqueue dependent operators\n if (next !== StopPropagation) {\n if (op._targets) op._targets.forEach(op => df._enqueue(op));\n }\n\n // increment visit counter\n ++count;\n }\n } catch (err) {\n df._heap.clear();\n error = err;\n }\n\n // reset pulse map\n df._input = {};\n df._pulse = null;\n df.debug(`Pulse ${stamp}: ${count} operators`);\n if (error) {\n df._postrun = [];\n df.error(error);\n }\n\n // invoke callbacks queued via runAfter\n if (df._postrun.length) {\n const pr = df._postrun.sort((a, b) => b.priority - a.priority);\n df._postrun = [];\n for (let i = 0; i < pr.length; ++i) {\n await asyncCallback(df, pr[i].callback);\n }\n }\n\n // invoke postrun function, if provided\n if (postrun) await asyncCallback(df, postrun);\n\n // handle non-blocking asynchronous callbacks\n if (async.length) {\n Promise.all(async).then(cb => df.runAsync(null, () => {\n cb.forEach(f => {\n try {\n f(df);\n } catch (err) {\n df.error(err);\n }\n });\n }));\n }\n return df;\n}\n\n/**\n * Queues dataflow evaluation to run once any other queued evaluations have\n * completed and returns a Promise that resolves when the queued pulse\n * propagation completes. If provided, a callback function will be invoked\n * immediately before evaluation commences. This method will ensure a\n * separate evaluation is invoked for each time it is called.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode package.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Promise} - A promise that resolves to this dataflow after\n * evaluation completes.\n */\nasync function runAsync(encode, prerun, postrun) {\n // await previously queued functions\n while (this._running) await this._running;\n\n // run dataflow, manage running promise\n const clear = () => this._running = null;\n (this._running = this.evaluate(encode, prerun, postrun)).then(clear, clear);\n return this._running;\n}\n\n/**\n * Requests dataflow evaluation and the immediately returns this dataflow\n * instance. If there are pending data loading or other asynchronous\n * operations, the dataflow will evaluate asynchronously after this method\n * has been invoked. To track when dataflow evaluation completes, use the\n * {@link runAsync} method instead. This method will raise an error if\n * invoked while the dataflow is already in the midst of evaluation.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode module.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Dataflow} - This dataflow instance.\n */\nfunction run(encode, prerun, postrun) {\n return this._pulse ? reentrant(this) : (this.evaluate(encode, prerun, postrun), this);\n}\n\n/**\n * Schedules a callback function to be invoked after the current pulse\n * propagation completes. If no propagation is currently occurring,\n * the function is invoked immediately. Callbacks scheduled via runAfter\n * are invoked immediately upon completion of the current cycle, before\n * any request queued via runAsync. This method is primarily intended for\n * internal use. Third-party callers using runAfter to schedule a callback\n * that invokes {@link run} or {@link runAsync} should not use this method,\n * but instead use {@link runAsync} with prerun or postrun arguments.\n * @param {function(Dataflow)} callback - The callback function to run.\n * The callback will be invoked with this Dataflow instance as its\n * sole argument.\n * @param {boolean} enqueue - A boolean flag indicating that the\n * callback should be queued up to run after the next propagation\n * cycle, suppressing immediate invocation when propagation is not\n * currently occurring.\n * @param {number} [priority] - A priority value used to sort registered\n * callbacks to determine execution order. This argument is intended\n * for internal Vega use only.\n */\nfunction runAfter(callback, enqueue, priority) {\n if (this._pulse || enqueue) {\n // pulse propagation is currently running, queue to run after\n this._postrun.push({\n priority: priority || 0,\n callback: callback\n });\n } else {\n // pulse propagation already complete, invoke immediately\n try {\n callback(this);\n } catch (err) {\n this.error(err);\n }\n }\n}\n\n/**\n * Raise an error for re-entrant dataflow evaluation.\n */\nfunction reentrant(df) {\n df.error('Dataflow already running. Use runAsync() to chain invocations.');\n return df;\n}\n\n/**\n * Enqueue an operator into the priority queue for evaluation. The operator\n * will be enqueued if it has no registered pulse for the current cycle, or if\n * the force argument is true. Upon enqueue, this method also sets the\n * operator's qrank to the current rank value.\n * @param {Operator} op - The operator to enqueue.\n * @param {boolean} [force] - A flag indicating if the operator should be\n * forceably added to the queue, even if it has already been previously\n * enqueued during the current pulse propagation. This is useful when the\n * dataflow graph is dynamically modified and the operator rank changes.\n */\nfunction enqueue(op, force) {\n const q = op.stamp < this._clock;\n if (q) op.stamp = this._clock;\n if (q || force) {\n op.qrank = op.rank;\n this._heap.push(op);\n }\n}\n\n/**\n * Provide a correct pulse for evaluating an operator. If the operator has an\n * explicit source operator, we will try to pull the pulse(s) from it.\n * If there is an array of source operators, we build a multi-pulse.\n * Otherwise, we return a current pulse with correct source data.\n * If the pulse is the pulse map has an explicit target set, we use that.\n * Else if the pulse on the upstream source operator is current, we use that.\n * Else we use the pulse from the pulse map, but copy the source tuple array.\n * @param {Operator} op - The operator for which to get an input pulse.\n * @param {string} [encode] - An (optional) encoding set name with which to\n * annotate the returned pulse. See {@link run} for more information.\n */\nfunction getPulse(op, encode) {\n const s = op.source,\n stamp = this._clock;\n return s && isArray(s) ? new MultiPulse(this, stamp, s.map(_ => _.pulse), encode) : this._input[op.id] || singlePulse(this._pulse, s && s.pulse);\n}\nfunction singlePulse(p, s) {\n if (s && s.stamp === p.stamp) {\n return s;\n }\n p = p.fork();\n if (s && s !== StopPropagation) {\n p.source = s.source;\n }\n return p;\n}\n\nconst NO_OPT = {\n skip: false,\n force: false\n};\n\n/**\n * Touches an operator, scheduling it to be evaluated. If invoked outside of\n * a pulse propagation, the operator will be evaluated the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the operator\n * will be queued for evaluation if and only if the operator has not yet been\n * evaluated on the current propagation timestamp.\n * @param {Operator} op - The operator to touch.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nfunction touch(op, options) {\n const opt = options || NO_OPT;\n if (this._pulse) {\n // if in midst of propagation, add to priority queue\n this._enqueue(op);\n } else {\n // otherwise, queue for next propagation\n this._touched.add(op);\n }\n if (opt.skip) op.skip(true);\n return this;\n}\n\n/**\n * Updates the value of the given operator.\n * @param {Operator} op - The operator to update.\n * @param {*} value - The value to set.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nfunction update(op, value, options) {\n const opt = options || NO_OPT;\n if (op.set(value) || opt.force) {\n this.touch(op, opt);\n }\n return this;\n}\n\n/**\n * Pulses an operator with a changeset of tuples. If invoked outside of\n * a pulse propagation, the pulse will be applied the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the pulse\n * will be added to the set of active pulses and will be applied if and\n * only if the target operator has not yet been evaluated on the current\n * propagation timestamp.\n * @param {Operator} op - The operator to pulse.\n * @param {ChangeSet} value - The tuple changeset to apply.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nfunction pulse(op, changeset, options) {\n this.touch(op, options || NO_OPT);\n const p = new Pulse(this, this._clock + (this._pulse ? 0 : 1)),\n t = op.pulse && op.pulse.source || [];\n p.target = op;\n this._input[op.id] = changeset.pulse(p, t);\n return this;\n}\n\nfunction Heap(cmp) {\n let nodes = [];\n return {\n clear: () => nodes = [],\n size: () => nodes.length,\n peek: () => nodes[0],\n push: x => {\n nodes.push(x);\n return siftdown(nodes, 0, nodes.length - 1, cmp);\n },\n pop: () => {\n const last = nodes.pop();\n let item;\n if (nodes.length) {\n item = nodes[0];\n nodes[0] = last;\n siftup(nodes, 0, cmp);\n } else {\n item = last;\n }\n return item;\n }\n };\n}\nfunction siftdown(array, start, idx, cmp) {\n let parent, pidx;\n const item = array[idx];\n while (idx > start) {\n pidx = idx - 1 >> 1;\n parent = array[pidx];\n if (cmp(item, parent) < 0) {\n array[idx] = parent;\n idx = pidx;\n continue;\n }\n break;\n }\n return array[idx] = item;\n}\nfunction siftup(array, idx, cmp) {\n const start = idx,\n end = array.length,\n item = array[idx];\n let cidx = (idx << 1) + 1,\n ridx;\n while (cidx < end) {\n ridx = cidx + 1;\n if (ridx < end && cmp(array[cidx], array[ridx]) >= 0) {\n cidx = ridx;\n }\n array[idx] = array[cidx];\n idx = cidx;\n cidx = (idx << 1) + 1;\n }\n array[idx] = item;\n return siftdown(array, start, idx, cmp);\n}\n\n/**\n * A dataflow graph for reactive processing of data streams.\n * @constructor\n */\nfunction Dataflow() {\n this.logger(logger());\n this.logLevel(Error);\n this._clock = 0;\n this._rank = 0;\n this._locale = defaultLocale();\n try {\n this._loader = loader();\n } catch (e) {\n // do nothing if loader module is unavailable\n }\n this._touched = UniqueList(id);\n this._input = {};\n this._pulse = null;\n this._heap = Heap((a, b) => a.qrank - b.qrank);\n this._postrun = [];\n}\nfunction logMethod(method) {\n return function () {\n return this._log[method].apply(this, arguments);\n };\n}\nDataflow.prototype = {\n /**\n * The current timestamp of this dataflow. This value reflects the\n * timestamp of the previous dataflow run. The dataflow is initialized\n * with a stamp value of 0. The initial run of the dataflow will have\n * a timestap of 1, and so on. This value will match the\n * {@link Pulse.stamp} property.\n * @return {number} - The current timestamp value.\n */\n stamp() {\n return this._clock;\n },\n /**\n * Gets or sets the loader instance to use for data file loading. A\n * loader object must provide a \"load\" method for loading files and a\n * \"sanitize\" method for checking URL/filename validity. Both methods\n * should accept a URI and options hash as arguments, and return a Promise\n * that resolves to the loaded file contents (load) or a hash containing\n * sanitized URI data with the sanitized url assigned to the \"href\" property\n * (sanitize).\n * @param {object} _ - The loader instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current loader instance. Otherwise returns this Dataflow instance.\n */\n loader(_) {\n if (arguments.length) {\n this._loader = _;\n return this;\n } else {\n return this._loader;\n }\n },\n /**\n * Gets or sets the locale instance to use for formatting and parsing\n * string values. The locale object should be provided by the\n * vega-format library, and include methods such as format, timeFormat,\n * utcFormat, timeParse, and utcParse.\n * @param {object} _ - The locale instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current locale instance. Otherwise returns this Dataflow instance.\n */\n locale(_) {\n if (arguments.length) {\n this._locale = _;\n return this;\n } else {\n return this._locale;\n }\n },\n /**\n * Get or set the logger instance used to log messages. If no arguments are\n * provided, returns the current logger instance. Otherwise, sets the logger\n * and return this Dataflow instance. Provided loggers must support the full\n * API of logger objects generated by the vega-util logger method. Note that\n * by default the log level of the new logger will be used; use the logLevel\n * method to adjust the log level as needed.\n */\n logger(logger) {\n if (arguments.length) {\n this._log = logger;\n return this;\n } else {\n return this._log;\n }\n },\n /**\n * Logs an error message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit error messages.\n */\n error: logMethod('error'),\n /**\n * Logs a warning message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit warning messages.\n */\n warn: logMethod('warn'),\n /**\n * Logs a information message. By default, logged messages are written to\n * console output. The message will only be logged if the current log level is\n * high enough to permit information messages.\n */\n info: logMethod('info'),\n /**\n * Logs a debug message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit debug messages.\n */\n debug: logMethod('debug'),\n /**\n * Get or set the current log level. If an argument is provided, it\n * will be used as the new log level.\n * @param {number} [level] - Should be one of None, Warn, Info\n * @return {number} - The current log level.\n */\n logLevel: logMethod('level'),\n /**\n * Empty entry threshold for garbage cleaning. Map data structures will\n * perform cleaning once the number of empty entries exceeds this value.\n */\n cleanThreshold: 1e4,\n // OPERATOR REGISTRATION\n add,\n connect,\n rank,\n rerank,\n // OPERATOR UPDATES\n pulse,\n touch,\n update,\n changeset,\n // DATA LOADING\n ingest,\n parse,\n preload,\n request,\n // EVENT HANDLING\n events,\n on,\n // PULSE PROPAGATION\n evaluate,\n run,\n runAsync,\n runAfter,\n _enqueue: enqueue,\n _getPulse: getPulse\n};\n\n/**\n * Abstract class for operators that process data tuples.\n * Subclasses must provide a {@link transform} method for operator processing.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {Operator} [source] - The operator from which to receive pulses.\n */\nfunction Transform(init, params) {\n Operator.call(this, init, null, params);\n}\ninherits(Transform, Operator, {\n /**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\n run(pulse) {\n if (pulse.stamp < this.stamp) return pulse.StopPropagation;\n let rv;\n if (this.skip()) {\n this.skip(false);\n } else {\n rv = this.evaluate(pulse);\n }\n rv = rv || pulse;\n if (rv.then) {\n rv = rv.then(_ => this.pulse = _);\n } else if (rv !== pulse.StopPropagation) {\n this.pulse = rv;\n }\n return rv;\n },\n /**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Marshalls parameter values and then invokes {@link transform}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n value (including undefined) will let the input pulse pass through.\n */\n evaluate(pulse) {\n const params = this.marshall(pulse.stamp),\n out = this.transform(params, pulse);\n params.clear();\n return out;\n },\n /**\n * Process incoming pulses.\n * Subclasses should override this method to implement transforms.\n * @param {Parameters} _ - The operator parameter values.\n * @param {Pulse} pulse - The current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n * value (including undefined) will let the input pulse pass through.\n */\n transform() {}\n});\n\nconst transforms = {};\nfunction definition(type) {\n const t = transform(type);\n return t && t.Definition || null;\n}\nfunction transform(type) {\n type = type && type.toLowerCase();\n return hasOwnProperty(transforms, type) ? transforms[type] : null;\n}\n\nexport { Dataflow, EventStream, MultiPulse, Operator, Parameters, Pulse, Transform, UniqueList, asyncCallback, changeset, definition, derive, ingest$1 as ingest, isChangeSet, isTuple, rederive, replace, stableCompare, transform, transforms, tupleid };\n","import { ascending, quantileSorted, deviation, quantile, median } from 'd3-array';\n\nfunction* numbers (values, valueof) {\n if (valueof == null) {\n for (let value of values) {\n if (value != null && value !== '' && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n value = valueof(value, ++index, values);\n if (value != null && value !== '' && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n\nfunction quantiles (array, p, f) {\n const values = Float64Array.from(numbers(array, f));\n\n // don't depend on return value from typed array sort call\n // protects against undefined sort results in Safari (vega/vega-lite#4964)\n values.sort(ascending);\n return p.map(_ => quantileSorted(values, _));\n}\n\nfunction quartiles (array, f) {\n return quantiles(array, [0.25, 0.50, 0.75], f);\n}\n\n// Scott, D. W. (1992) Multivariate Density Estimation:\n// Theory, Practice, and Visualization. Wiley.\nfunction estimateBandwidth (array, f) {\n const n = array.length,\n d = deviation(array, f),\n q = quartiles(array, f),\n h = (q[2] - q[0]) / 1.34,\n v = Math.min(d, h) || d || Math.abs(q[0]) || 1;\n return 1.06 * v * Math.pow(n, -0.2);\n}\n\nfunction bin (_) {\n // determine range\n const maxb = _.maxbins || 20,\n base = _.base || 10,\n logb = Math.log(base),\n div = _.divide || [5, 2];\n let min = _.extent[0],\n max = _.extent[1],\n step,\n level,\n minstep,\n v,\n i,\n n;\n const span = _.span || max - min || Math.abs(min) || 1;\n if (_.step) {\n // if step size is explicitly given, use that\n step = _.step;\n } else if (_.steps) {\n // if provided, limit choice to acceptable step sizes\n v = span / maxb;\n for (i = 0, n = _.steps.length; i < n && _.steps[i] < v; ++i);\n step = _.steps[Math.max(0, i - 1)];\n } else {\n // else use span to determine step size\n level = Math.ceil(Math.log(maxb) / logb);\n minstep = _.minstep || 0;\n step = Math.max(minstep, Math.pow(base, Math.round(Math.log(span) / logb) - level));\n\n // increase step size if too many bins\n while (Math.ceil(span / step) > maxb) {\n step *= base;\n }\n\n // decrease step size if allowed\n for (i = 0, n = div.length; i < n; ++i) {\n v = step / div[i];\n if (v >= minstep && span / v <= maxb) step = v;\n }\n }\n\n // update precision, min and max\n v = Math.log(step);\n const precision = v >= 0 ? 0 : ~~(-v / logb) + 1,\n eps = Math.pow(base, -precision - 1);\n if (_.nice || _.nice === undefined) {\n v = Math.floor(min / step + eps) * step;\n min = min < v ? v - step : v;\n max = Math.ceil(max / step) * step;\n }\n return {\n start: min,\n stop: max === min ? min + step : max,\n step: step\n };\n}\n\nvar random = Math.random;\nfunction setRandom(r) {\n random = r;\n}\n\nfunction bootstrapCI (array, samples, alpha, f) {\n if (!array.length) return [undefined, undefined];\n const values = Float64Array.from(numbers(array, f)),\n n = values.length,\n m = samples;\n let a, i, j, mu;\n for (j = 0, mu = Array(m); j < m; ++j) {\n for (a = 0, i = 0; i < n; ++i) {\n a += values[~~(random() * n)];\n }\n mu[j] = a / n;\n }\n mu.sort(ascending);\n return [quantile(mu, alpha / 2), quantile(mu, 1 - alpha / 2)];\n}\n\n// Dot density binning for dot plot construction.\n// Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n// https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\nfunction dotbin (array, step, smooth, f) {\n f = f || (_ => _);\n const n = array.length,\n v = new Float64Array(n);\n let i = 0,\n j = 1,\n a = f(array[0]),\n b = a,\n w = a + step,\n x;\n for (; j < n; ++j) {\n x = f(array[j]);\n if (x >= w) {\n b = (a + b) / 2;\n for (; i < j; ++i) v[i] = b;\n w = x + step;\n a = x;\n }\n b = x;\n }\n b = (a + b) / 2;\n for (; i < j; ++i) v[i] = b;\n return smooth ? smoothing(v, step + step / 4) : v;\n}\n\n// perform smoothing to reduce variance\n// swap points between \"adjacent\" stacks\n// Wilkinson defines adjacent as within step/4 units\nfunction smoothing(v, thresh) {\n const n = v.length;\n let a = 0,\n b = 1,\n c,\n d;\n\n // get left stack\n while (v[a] === v[b]) ++b;\n while (b < n) {\n // get right stack\n c = b + 1;\n while (v[b] === v[c]) ++c;\n\n // are stacks adjacent?\n // if so, compare sizes and swap as needed\n if (v[b] - v[b - 1] < thresh) {\n d = b + (a + c - b - b >> 1);\n while (d < b) v[d++] = v[b];\n while (d > b) v[d--] = v[a];\n }\n\n // update left stack indices\n a = b;\n b = c;\n }\n return v;\n}\n\nfunction lcg (seed) {\n // Random numbers using a Linear Congruential Generator with seed value\n // Uses glibc values from https://en.wikipedia.org/wiki/Linear_congruential_generator\n return function () {\n seed = (1103515245 * seed + 12345) % 2147483647;\n return seed / 2147483647;\n };\n}\n\nfunction integer (min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n let a, b, d;\n const dist = {\n min(_) {\n if (arguments.length) {\n a = _ || 0;\n d = b - a;\n return dist;\n } else {\n return a;\n }\n },\n max(_) {\n if (arguments.length) {\n b = _ || 0;\n d = b - a;\n return dist;\n } else {\n return b;\n }\n },\n sample() {\n return a + Math.floor(d * random());\n },\n pdf(x) {\n return x === Math.floor(x) && x >= a && x < b ? 1 / d : 0;\n },\n cdf(x) {\n const v = Math.floor(x);\n return v < a ? 0 : v >= b ? 1 : (v - a + 1) / d;\n },\n icdf(p) {\n return p >= 0 && p <= 1 ? a - 1 + Math.floor(p * d) : NaN;\n }\n };\n return dist.min(min).max(max);\n}\n\nconst SQRT2PI = Math.sqrt(2 * Math.PI);\nconst SQRT2 = Math.SQRT2;\n\nlet nextSample = NaN;\nfunction sampleNormal(mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n let x = 0,\n y = 0,\n rds,\n c;\n if (nextSample === nextSample) {\n x = nextSample;\n nextSample = NaN;\n } else {\n do {\n x = random() * 2 - 1;\n y = random() * 2 - 1;\n rds = x * x + y * y;\n } while (rds === 0 || rds > 1);\n c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform\n x *= c;\n nextSample = y * c;\n }\n return mean + x * stdev;\n}\nfunction densityNormal(value, mean, stdev) {\n stdev = stdev == null ? 1 : stdev;\n const z = (value - (mean || 0)) / stdev;\n return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI);\n}\n\n// Approximation from West (2009)\n// Better Approximations to Cumulative Normal Functions\nfunction cumulativeNormal(value, mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n const z = (value - mean) / stdev,\n Z = Math.abs(z);\n let cd;\n if (Z > 37) {\n cd = 0;\n } else {\n const exp = Math.exp(-Z * Z / 2);\n let sum;\n if (Z < 7.07106781186547) {\n sum = 3.52624965998911e-02 * Z + 0.700383064443688;\n sum = sum * Z + 6.37396220353165;\n sum = sum * Z + 33.912866078383;\n sum = sum * Z + 112.079291497871;\n sum = sum * Z + 221.213596169931;\n sum = sum * Z + 220.206867912376;\n cd = exp * sum;\n sum = 8.83883476483184e-02 * Z + 1.75566716318264;\n sum = sum * Z + 16.064177579207;\n sum = sum * Z + 86.7807322029461;\n sum = sum * Z + 296.564248779674;\n sum = sum * Z + 637.333633378831;\n sum = sum * Z + 793.826512519948;\n sum = sum * Z + 440.413735824752;\n cd = cd / sum;\n } else {\n sum = Z + 0.65;\n sum = Z + 4 / sum;\n sum = Z + 3 / sum;\n sum = Z + 2 / sum;\n sum = Z + 1 / sum;\n cd = exp / sum / 2.506628274631;\n }\n }\n return z > 0 ? 1 - cd : cd;\n}\n\n// Approximation of Probit function using inverse error function.\nfunction quantileNormal(p, mean, stdev) {\n if (p < 0 || p > 1) return NaN;\n return (mean || 0) + (stdev == null ? 1 : stdev) * SQRT2 * erfinv(2 * p - 1);\n}\n\n// Approximate inverse error function. Implementation from \"Approximating\n// the erfinv function\" by Mike Giles, GPU Computing Gems, volume 2, 2010.\n// Ported from Apache Commons Math, http://www.apache.org/licenses/LICENSE-2.0\nfunction erfinv(x) {\n // beware that the logarithm argument must be\n // commputed as (1.0 - x) * (1.0 + x),\n // it must NOT be simplified as 1.0 - x * x as this\n // would induce rounding errors near the boundaries +/-1\n let w = -Math.log((1 - x) * (1 + x)),\n p;\n if (w < 6.25) {\n w -= 3.125;\n p = -3.6444120640178196996e-21;\n p = -1.685059138182016589e-19 + p * w;\n p = 1.2858480715256400167e-18 + p * w;\n p = 1.115787767802518096e-17 + p * w;\n p = -1.333171662854620906e-16 + p * w;\n p = 2.0972767875968561637e-17 + p * w;\n p = 6.6376381343583238325e-15 + p * w;\n p = -4.0545662729752068639e-14 + p * w;\n p = -8.1519341976054721522e-14 + p * w;\n p = 2.6335093153082322977e-12 + p * w;\n p = -1.2975133253453532498e-11 + p * w;\n p = -5.4154120542946279317e-11 + p * w;\n p = 1.051212273321532285e-09 + p * w;\n p = -4.1126339803469836976e-09 + p * w;\n p = -2.9070369957882005086e-08 + p * w;\n p = 4.2347877827932403518e-07 + p * w;\n p = -1.3654692000834678645e-06 + p * w;\n p = -1.3882523362786468719e-05 + p * w;\n p = 0.0001867342080340571352 + p * w;\n p = -0.00074070253416626697512 + p * w;\n p = -0.0060336708714301490533 + p * w;\n p = 0.24015818242558961693 + p * w;\n p = 1.6536545626831027356 + p * w;\n } else if (w < 16.0) {\n w = Math.sqrt(w) - 3.25;\n p = 2.2137376921775787049e-09;\n p = 9.0756561938885390979e-08 + p * w;\n p = -2.7517406297064545428e-07 + p * w;\n p = 1.8239629214389227755e-08 + p * w;\n p = 1.5027403968909827627e-06 + p * w;\n p = -4.013867526981545969e-06 + p * w;\n p = 2.9234449089955446044e-06 + p * w;\n p = 1.2475304481671778723e-05 + p * w;\n p = -4.7318229009055733981e-05 + p * w;\n p = 6.8284851459573175448e-05 + p * w;\n p = 2.4031110387097893999e-05 + p * w;\n p = -0.0003550375203628474796 + p * w;\n p = 0.00095328937973738049703 + p * w;\n p = -0.0016882755560235047313 + p * w;\n p = 0.0024914420961078508066 + p * w;\n p = -0.0037512085075692412107 + p * w;\n p = 0.005370914553590063617 + p * w;\n p = 1.0052589676941592334 + p * w;\n p = 3.0838856104922207635 + p * w;\n } else if (Number.isFinite(w)) {\n w = Math.sqrt(w) - 5.0;\n p = -2.7109920616438573243e-11;\n p = -2.5556418169965252055e-10 + p * w;\n p = 1.5076572693500548083e-09 + p * w;\n p = -3.7894654401267369937e-09 + p * w;\n p = 7.6157012080783393804e-09 + p * w;\n p = -1.4960026627149240478e-08 + p * w;\n p = 2.9147953450901080826e-08 + p * w;\n p = -6.7711997758452339498e-08 + p * w;\n p = 2.2900482228026654717e-07 + p * w;\n p = -9.9298272942317002539e-07 + p * w;\n p = 4.5260625972231537039e-06 + p * w;\n p = -1.9681778105531670567e-05 + p * w;\n p = 7.5995277030017761139e-05 + p * w;\n p = -0.00021503011930044477347 + p * w;\n p = -0.00013871931833623122026 + p * w;\n p = 1.0103004648645343977 + p * w;\n p = 4.8499064014085844221 + p * w;\n } else {\n p = Infinity;\n }\n return p * x;\n}\nfunction gaussian (mean, stdev) {\n let mu, sigma;\n const dist = {\n mean(_) {\n if (arguments.length) {\n mu = _ || 0;\n return dist;\n } else {\n return mu;\n }\n },\n stdev(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n return dist;\n } else {\n return sigma;\n }\n },\n sample: () => sampleNormal(mu, sigma),\n pdf: value => densityNormal(value, mu, sigma),\n cdf: value => cumulativeNormal(value, mu, sigma),\n icdf: p => quantileNormal(p, mu, sigma)\n };\n return dist.mean(mean).stdev(stdev);\n}\n\nfunction kde (support, bandwidth) {\n const kernel = gaussian();\n let n = 0;\n const dist = {\n data(_) {\n if (arguments.length) {\n support = _;\n n = _ ? _.length : 0;\n return dist.bandwidth(bandwidth);\n } else {\n return support;\n }\n },\n bandwidth(_) {\n if (!arguments.length) return bandwidth;\n bandwidth = _;\n if (!bandwidth && support) bandwidth = estimateBandwidth(support);\n return dist;\n },\n sample() {\n return support[~~(random() * n)] + bandwidth * kernel.sample();\n },\n pdf(x) {\n let y = 0,\n i = 0;\n for (; i < n; ++i) {\n y += kernel.pdf((x - support[i]) / bandwidth);\n }\n return y / bandwidth / n;\n },\n cdf(x) {\n let y = 0,\n i = 0;\n for (; i < n; ++i) {\n y += kernel.cdf((x - support[i]) / bandwidth);\n }\n return y / n;\n },\n icdf() {\n throw Error('KDE icdf not supported.');\n }\n };\n return dist.data(support);\n}\n\nfunction sampleLogNormal(mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n return Math.exp(mean + sampleNormal() * stdev);\n}\nfunction densityLogNormal(value, mean, stdev) {\n if (value <= 0) return 0;\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n const z = (Math.log(value) - mean) / stdev;\n return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI * value);\n}\nfunction cumulativeLogNormal(value, mean, stdev) {\n return cumulativeNormal(Math.log(value), mean, stdev);\n}\nfunction quantileLogNormal(p, mean, stdev) {\n return Math.exp(quantileNormal(p, mean, stdev));\n}\nfunction lognormal (mean, stdev) {\n let mu, sigma;\n const dist = {\n mean(_) {\n if (arguments.length) {\n mu = _ || 0;\n return dist;\n } else {\n return mu;\n }\n },\n stdev(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n return dist;\n } else {\n return sigma;\n }\n },\n sample: () => sampleLogNormal(mu, sigma),\n pdf: value => densityLogNormal(value, mu, sigma),\n cdf: value => cumulativeLogNormal(value, mu, sigma),\n icdf: p => quantileLogNormal(p, mu, sigma)\n };\n return dist.mean(mean).stdev(stdev);\n}\n\nfunction mixture (dists, weights) {\n let m = 0,\n w;\n function normalize(x) {\n const w = [];\n let sum = 0,\n i;\n for (i = 0; i < m; ++i) {\n sum += w[i] = x[i] == null ? 1 : +x[i];\n }\n for (i = 0; i < m; ++i) {\n w[i] /= sum;\n }\n return w;\n }\n const dist = {\n weights(_) {\n if (arguments.length) {\n w = normalize(weights = _ || []);\n return dist;\n }\n return weights;\n },\n distributions(_) {\n if (arguments.length) {\n if (_) {\n m = _.length;\n dists = _;\n } else {\n m = 0;\n dists = [];\n }\n return dist.weights(weights);\n }\n return dists;\n },\n sample() {\n const r = random();\n let d = dists[m - 1],\n v = w[0],\n i = 0;\n\n // first select distribution\n for (; i < m - 1; v += w[++i]) {\n if (r < v) {\n d = dists[i];\n break;\n }\n }\n // then sample from it\n return d.sample();\n },\n pdf(x) {\n let p = 0,\n i = 0;\n for (; i < m; ++i) {\n p += w[i] * dists[i].pdf(x);\n }\n return p;\n },\n cdf(x) {\n let p = 0,\n i = 0;\n for (; i < m; ++i) {\n p += w[i] * dists[i].cdf(x);\n }\n return p;\n },\n icdf() {\n throw Error('Mixture icdf not supported.');\n }\n };\n return dist.distributions(dists).weights(weights);\n}\n\nfunction sampleUniform(min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return min + (max - min) * random();\n}\nfunction densityUniform(value, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return value >= min && value <= max ? 1 / (max - min) : 0;\n}\nfunction cumulativeUniform(value, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return value < min ? 0 : value > max ? 1 : (value - min) / (max - min);\n}\nfunction quantileUniform(p, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return p >= 0 && p <= 1 ? min + p * (max - min) : NaN;\n}\nfunction uniform (min, max) {\n let a, b;\n const dist = {\n min(_) {\n if (arguments.length) {\n a = _ || 0;\n return dist;\n } else {\n return a;\n }\n },\n max(_) {\n if (arguments.length) {\n b = _ == null ? 1 : _;\n return dist;\n } else {\n return b;\n }\n },\n sample: () => sampleUniform(a, b),\n pdf: value => densityUniform(value, a, b),\n cdf: value => cumulativeUniform(value, a, b),\n icdf: p => quantileUniform(p, a, b)\n };\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n return dist.min(min).max(max);\n}\n\nfunction constant (data, x, y) {\n let mean = 0,\n n = 0;\n for (const d of data) {\n const val = y(d);\n if (x(d) == null || val == null || isNaN(val)) continue;\n mean += (val - mean) / ++n;\n }\n return {\n coef: [mean],\n predict: () => mean,\n rSquared: 0\n };\n}\n\n// Ordinary Least Squares\nfunction ols (uX, uY, uXY, uX2) {\n const delta = uX2 - uX * uX,\n slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta,\n intercept = uY - slope * uX;\n return [intercept, slope];\n}\n\nfunction points(data, x, y, sort) {\n data = data.filter(d => {\n let u = x(d),\n v = y(d);\n return u != null && (u = +u) >= u && v != null && (v = +v) >= v;\n });\n if (sort) {\n data.sort((a, b) => x(a) - x(b));\n }\n const n = data.length,\n X = new Float64Array(n),\n Y = new Float64Array(n);\n\n // extract values, calculate means\n let i = 0,\n ux = 0,\n uy = 0,\n xv,\n yv,\n d;\n for (d of data) {\n X[i] = xv = +x(d);\n Y[i] = yv = +y(d);\n ++i;\n ux += (xv - ux) / i;\n uy += (yv - uy) / i;\n }\n\n // mean center the data\n for (i = 0; i < n; ++i) {\n X[i] -= ux;\n Y[i] -= uy;\n }\n return [X, Y, ux, uy];\n}\nfunction visitPoints(data, x, y, callback) {\n let i = -1,\n u,\n v;\n for (const d of data) {\n u = x(d);\n v = y(d);\n if (u != null && (u = +u) >= u && v != null && (v = +v) >= v) {\n callback(u, v, ++i);\n }\n }\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction rSquared (data, x, y, uY, predict) {\n let SSE = 0,\n SST = 0;\n visitPoints(data, x, y, (dx, dy) => {\n const sse = dy - predict(dx),\n sst = dy - uY;\n SSE += sse * sse;\n SST += sst * sst;\n });\n return 1 - SSE / SST;\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction linear (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] + coef[1] * x;\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction log (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n dx = Math.log(dx);\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] + coef[1] * Math.log(x);\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n\nfunction exp (data, x, y) {\n // eslint-disable-next-line no-unused-vars\n const [xv, yv, ux, uy] = points(data, x, y);\n let YL = 0,\n XY = 0,\n XYL = 0,\n X2Y = 0,\n n = 0,\n dx,\n ly,\n xy;\n visitPoints(data, x, y, (_, dy) => {\n dx = xv[n++];\n ly = Math.log(dy);\n xy = dx * dy;\n YL += (dy * ly - YL) / n;\n XY += (xy - XY) / n;\n XYL += (xy * ly - XYL) / n;\n X2Y += (dx * xy - X2Y) / n;\n });\n const [c0, c1] = ols(XY / uy, YL / uy, XYL / uy, X2Y / uy),\n predict = x => Math.exp(c0 + c1 * (x - ux));\n return {\n coef: [Math.exp(c0 - c1 * ux), c1],\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\nfunction pow (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n YS = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n const lx = Math.log(dx),\n ly = Math.log(dy);\n ++n;\n X += (lx - X) / n;\n Y += (ly - Y) / n;\n XY += (lx * ly - XY) / n;\n X2 += (lx * lx - X2) / n;\n YS += (dy - YS) / n;\n });\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] * Math.pow(x, coef[1]);\n coef[0] = Math.exp(coef[0]);\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, YS, predict)\n };\n}\n\nfunction quad (data, x, y) {\n const [xv, yv, ux, uy] = points(data, x, y),\n n = xv.length;\n let X2 = 0,\n X3 = 0,\n X4 = 0,\n XY = 0,\n X2Y = 0,\n i,\n dx,\n dy,\n x2;\n for (i = 0; i < n;) {\n dx = xv[i];\n dy = yv[i++];\n x2 = dx * dx;\n X2 += (x2 - X2) / i;\n X3 += (x2 * dx - X3) / i;\n X4 += (x2 * x2 - X4) / i;\n XY += (dx * dy - XY) / i;\n X2Y += (x2 * dy - X2Y) / i;\n }\n const X2X2 = X4 - X2 * X2,\n d = X2 * X2X2 - X3 * X3,\n a = (X2Y * X2 - XY * X3) / d,\n b = (XY * X2X2 - X2Y * X3) / d,\n c = -a * X2,\n predict = x => {\n x = x - ux;\n return a * x * x + b * x + c + uy;\n };\n\n // transform coefficients back from mean-centered space\n return {\n coef: [c - b * ux + a * ux * ux + uy, b - 2 * a * ux, a],\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\n// Adapted from d3-regression by Harry Stevens\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n// ... which was adapted from regression-js by Tom Alexander\n// Source: https://github.com/Tom-Alexander/regression-js/blob/master/src/regression.js#L246\n// License: https://github.com/Tom-Alexander/regression-js/blob/master/LICENSE\nfunction poly (data, x, y, order) {\n // use more efficient methods for lower orders\n if (order === 0) return constant(data, x, y);\n if (order === 1) return linear(data, x, y);\n if (order === 2) return quad(data, x, y);\n const [xv, yv, ux, uy] = points(data, x, y),\n n = xv.length,\n lhs = [],\n rhs = [],\n k = order + 1;\n let i, j, l, v, c;\n for (i = 0; i < k; ++i) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i) * yv[l];\n }\n lhs.push(v);\n c = new Float64Array(k);\n for (j = 0; j < k; ++j) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i + j);\n }\n c[j] = v;\n }\n rhs.push(c);\n }\n rhs.push(lhs);\n const coef = gaussianElimination(rhs),\n predict = x => {\n x -= ux;\n let y = uy + coef[0] + coef[1] * x + coef[2] * x * x;\n for (i = 3; i < k; ++i) y += coef[i] * Math.pow(x, i);\n return y;\n };\n return {\n coef: uncenter(k, coef, -ux, uy),\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\nfunction uncenter(k, a, x, y) {\n const z = Array(k);\n let i, j, v, c;\n\n // initialize to zero\n for (i = 0; i < k; ++i) z[i] = 0;\n\n // polynomial expansion\n for (i = k - 1; i >= 0; --i) {\n v = a[i];\n c = 1;\n z[i] += v;\n for (j = 1; j <= i; ++j) {\n c *= (i + 1 - j) / j; // binomial coefficent\n z[i - j] += v * Math.pow(x, j) * c;\n }\n }\n\n // bias term\n z[0] += y;\n return z;\n}\n\n// Given an array for a two-dimensional matrix and the polynomial order,\n// solve A * x = b using Gaussian elimination.\nfunction gaussianElimination(matrix) {\n const n = matrix.length - 1,\n coef = [];\n let i, j, k, r, t;\n for (i = 0; i < n; ++i) {\n r = i; // max row\n for (j = i + 1; j < n; ++j) {\n if (Math.abs(matrix[i][j]) > Math.abs(matrix[i][r])) {\n r = j;\n }\n }\n for (k = i; k < n + 1; ++k) {\n t = matrix[k][i];\n matrix[k][i] = matrix[k][r];\n matrix[k][r] = t;\n }\n for (j = i + 1; j < n; ++j) {\n for (k = n; k >= i; k--) {\n matrix[k][j] -= matrix[k][i] * matrix[i][j] / matrix[i][i];\n }\n }\n }\n for (j = n - 1; j >= 0; --j) {\n t = 0;\n for (k = j + 1; k < n; ++k) {\n t += matrix[k][j] * coef[k];\n }\n coef[j] = (matrix[n][j] - t) / matrix[j][j];\n }\n return coef;\n}\n\nconst maxiters = 2,\n epsilon = 1e-12;\n\n// Adapted from science.js by Jason Davies\n// Source: https://github.com/jasondavies/science.js/blob/master/src/stats/loess.js\n// License: https://github.com/jasondavies/science.js/blob/master/LICENSE\nfunction loess (data, x, y, bandwidth) {\n const [xv, yv, ux, uy] = points(data, x, y, true),\n n = xv.length,\n bw = Math.max(2, ~~(bandwidth * n)),\n // # nearest neighbors\n yhat = new Float64Array(n),\n residuals = new Float64Array(n),\n robustWeights = new Float64Array(n).fill(1);\n for (let iter = -1; ++iter <= maxiters;) {\n const interval = [0, bw - 1];\n for (let i = 0; i < n; ++i) {\n const dx = xv[i],\n i0 = interval[0],\n i1 = interval[1],\n edge = dx - xv[i0] > xv[i1] - dx ? i0 : i1;\n let W = 0,\n X = 0,\n Y = 0,\n XY = 0,\n X2 = 0;\n const denom = 1 / Math.abs(xv[edge] - dx || 1); // avoid singularity!\n\n for (let k = i0; k <= i1; ++k) {\n const xk = xv[k],\n yk = yv[k],\n w = tricube(Math.abs(dx - xk) * denom) * robustWeights[k],\n xkw = xk * w;\n W += w;\n X += xkw;\n Y += yk * w;\n XY += yk * xkw;\n X2 += xk * xkw;\n }\n\n // linear regression fit\n const [a, b] = ols(X / W, Y / W, XY / W, X2 / W);\n yhat[i] = a + b * dx;\n residuals[i] = Math.abs(yv[i] - yhat[i]);\n updateInterval(xv, i + 1, interval);\n }\n if (iter === maxiters) {\n break;\n }\n const medianResidual = median(residuals);\n if (Math.abs(medianResidual) < epsilon) break;\n for (let i = 0, arg, w; i < n; ++i) {\n arg = residuals[i] / (6 * medianResidual);\n // default to epsilon (rather than zero) for large deviations\n // keeping weights tiny but non-zero prevents singularites\n robustWeights[i] = arg >= 1 ? epsilon : (w = 1 - arg * arg) * w;\n }\n }\n return output(xv, yhat, ux, uy);\n}\n\n// weighting kernel for local regression\nfunction tricube(x) {\n return (x = 1 - x * x * x) * x * x;\n}\n\n// advance sliding window interval of nearest neighbors\nfunction updateInterval(xv, i, interval) {\n const val = xv[i];\n let left = interval[0],\n right = interval[1] + 1;\n if (right >= xv.length) return;\n\n // step right if distance to new right edge is <= distance to old left edge\n // step when distance is equal to ensure movement over duplicate x values\n while (i > left && xv[right] - val <= val - xv[left]) {\n interval[0] = ++left;\n interval[1] = right;\n ++right;\n }\n}\n\n// generate smoothed output points\n// average points with repeated x values\nfunction output(xv, yhat, ux, uy) {\n const n = xv.length,\n out = [];\n let i = 0,\n cnt = 0,\n prev = [],\n v;\n for (; i < n; ++i) {\n v = xv[i] + ux;\n if (prev[0] === v) {\n // average output values via online update\n prev[1] += (yhat[i] - prev[1]) / ++cnt;\n } else {\n // add new output point\n cnt = 0;\n prev[1] += uy;\n prev = [v, yhat[i]];\n out.push(prev);\n }\n }\n prev[1] += uy;\n return out;\n}\n\n// subdivide up to accuracy of 0.5 degrees\nconst MIN_RADIANS = 0.5 * Math.PI / 180;\n\n// Adaptively sample an interpolated function over a domain extent\nfunction sampleCurve (f, extent, minSteps, maxSteps) {\n minSteps = minSteps || 25;\n maxSteps = Math.max(minSteps, maxSteps || 200);\n const point = x => [x, f(x)],\n minX = extent[0],\n maxX = extent[1],\n span = maxX - minX,\n stop = span / maxSteps,\n prev = [point(minX)],\n next = [];\n if (minSteps === maxSteps) {\n // no adaptation, sample uniform grid directly and return\n for (let i = 1; i < maxSteps; ++i) {\n prev.push(point(minX + i / minSteps * span));\n }\n prev.push(point(maxX));\n return prev;\n } else {\n // sample minimum points on uniform grid\n // then move on to perform adaptive refinement\n next.push(point(maxX));\n for (let i = minSteps; --i > 0;) {\n next.push(point(minX + i / minSteps * span));\n }\n }\n let p0 = prev[0];\n let p1 = next[next.length - 1];\n const sx = 1 / span;\n const sy = scaleY(p0[1], next);\n while (p1) {\n // midpoint for potential curve subdivision\n const pm = point((p0[0] + p1[0]) / 2);\n const dx = pm[0] - p0[0] >= stop;\n if (dx && angleDelta(p0, pm, p1, sx, sy) > MIN_RADIANS) {\n // maximum resolution has not yet been met, and\n // subdivision midpoint is sufficiently different from endpoint\n // save subdivision, push midpoint onto the visitation stack\n next.push(pm);\n } else {\n // subdivision midpoint sufficiently similar to endpoint\n // skip subdivision, store endpoint, move to next point on the stack\n p0 = p1;\n prev.push(p1);\n next.pop();\n }\n p1 = next[next.length - 1];\n }\n return prev;\n}\nfunction scaleY(init, points) {\n let ymin = init;\n let ymax = init;\n const n = points.length;\n for (let i = 0; i < n; ++i) {\n const y = points[i][1];\n if (y < ymin) ymin = y;\n if (y > ymax) ymax = y;\n }\n return 1 / (ymax - ymin);\n}\nfunction angleDelta(p, q, r, sx, sy) {\n const a0 = Math.atan2(sy * (r[1] - p[1]), sx * (r[0] - p[0])),\n a1 = Math.atan2(sy * (q[1] - p[1]), sx * (q[0] - p[0]));\n return Math.abs(a0 - a1);\n}\n\nexport { estimateBandwidth as bandwidthNRD, bin, bootstrapCI, cumulativeLogNormal, cumulativeNormal, cumulativeUniform, densityLogNormal, densityNormal, densityUniform, dotbin, quantileLogNormal, quantileNormal, quantileUniform, quantiles, quartiles, random, integer as randomInteger, kde as randomKDE, lcg as randomLCG, lognormal as randomLogNormal, mixture as randomMixture, gaussian as randomNormal, uniform as randomUniform, constant as regressionConstant, exp as regressionExp, linear as regressionLinear, loess as regressionLoess, log as regressionLog, poly as regressionPoly, pow as regressionPow, quad as regressionQuad, sampleCurve, sampleLogNormal, sampleNormal, sampleUniform, setRandom };\n","import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n const v = variance(values, valueof);\n return v ? Math.sqrt(v) : v;\n}\n","export default function variance(values, valueof) {\n let count = 0;\n let delta;\n let mean = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n }\n if (count > 1) return sum / (count - 1);\n}\n","import { extend, identity, field, hasOwnProperty, extentIndex, inherits, array, accessorName, error, accessorFields, accessor, toNumber, merge, compare, truthy, extent, span, fastmap, isArray, key, ascending, peek, zero, constant } from 'vega-util';\nimport { tupleid, Transform, replace, ingest, stableCompare, Operator, derive, rederive } from 'vega-dataflow';\nimport { quartiles, bootstrapCI, bin, randomKDE, randomMixture, randomNormal, randomLogNormal, randomUniform, sampleCurve, dotbin, quantiles, random } from 'vega-statistics';\nimport { median, mean, min, max, range, bisector } from 'd3-array';\nimport { TIME_UNITS, utcInterval, timeInterval, timeBin, timeUnits, utcFloor, timeFloor } from 'vega-time';\n\nfunction multikey(f) {\n return x => {\n const n = f.length;\n let i = 1,\n k = String(f[0](x));\n for (; i < n; ++i) {\n k += '|' + f[i](x);\n }\n return k;\n };\n}\nfunction groupkey(fields) {\n return !fields || !fields.length ? function () {\n return '';\n } : fields.length === 1 ? fields[0] : multikey(fields);\n}\n\nfunction measureName(op, field, as) {\n return as || op + (!field ? '' : '_' + field);\n}\nconst noop = () => {};\nconst base_op = {\n init: noop,\n add: noop,\n rem: noop,\n idx: 0\n};\nconst AggregateOps = {\n values: {\n init: m => m.cell.store = true,\n value: m => m.cell.data.values(),\n idx: -1\n },\n count: {\n value: m => m.cell.num\n },\n __count__: {\n value: m => m.missing + m.valid\n },\n missing: {\n value: m => m.missing\n },\n valid: {\n value: m => m.valid\n },\n sum: {\n init: m => m.sum = 0,\n value: m => m.sum,\n add: (m, v) => m.sum += +v,\n rem: (m, v) => m.sum -= v\n },\n product: {\n init: m => m.product = 1,\n value: m => m.valid ? m.product : undefined,\n add: (m, v) => m.product *= v,\n rem: (m, v) => m.product /= v\n },\n mean: {\n init: m => m.mean = 0,\n value: m => m.valid ? m.mean : undefined,\n add: (m, v) => (m.mean_d = v - m.mean, m.mean += m.mean_d / m.valid),\n rem: (m, v) => (m.mean_d = v - m.mean, m.mean -= m.valid ? m.mean_d / m.valid : m.mean)\n },\n average: {\n value: m => m.valid ? m.mean : undefined,\n req: ['mean'],\n idx: 1\n },\n variance: {\n init: m => m.dev = 0,\n value: m => m.valid > 1 ? m.dev / (m.valid - 1) : undefined,\n add: (m, v) => m.dev += m.mean_d * (v - m.mean),\n rem: (m, v) => m.dev -= m.mean_d * (v - m.mean),\n req: ['mean'],\n idx: 1\n },\n variancep: {\n value: m => m.valid > 1 ? m.dev / m.valid : undefined,\n req: ['variance'],\n idx: 2\n },\n stdev: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / (m.valid - 1)) : undefined,\n req: ['variance'],\n idx: 2\n },\n stdevp: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / m.valid) : undefined,\n req: ['variance'],\n idx: 2\n },\n stderr: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / (m.valid * (m.valid - 1))) : undefined,\n req: ['variance'],\n idx: 2\n },\n distinct: {\n value: m => m.cell.data.distinct(m.get),\n req: ['values'],\n idx: 3\n },\n ci0: {\n value: m => m.cell.data.ci0(m.get),\n req: ['values'],\n idx: 3\n },\n ci1: {\n value: m => m.cell.data.ci1(m.get),\n req: ['values'],\n idx: 3\n },\n median: {\n value: m => m.cell.data.q2(m.get),\n req: ['values'],\n idx: 3\n },\n q1: {\n value: m => m.cell.data.q1(m.get),\n req: ['values'],\n idx: 3\n },\n q3: {\n value: m => m.cell.data.q3(m.get),\n req: ['values'],\n idx: 3\n },\n min: {\n init: m => m.min = undefined,\n value: m => m.min = Number.isNaN(m.min) ? m.cell.data.min(m.get) : m.min,\n add: (m, v) => {\n if (v < m.min || m.min === undefined) m.min = v;\n },\n rem: (m, v) => {\n if (v <= m.min) m.min = NaN;\n },\n req: ['values'],\n idx: 4\n },\n max: {\n init: m => m.max = undefined,\n value: m => m.max = Number.isNaN(m.max) ? m.cell.data.max(m.get) : m.max,\n add: (m, v) => {\n if (v > m.max || m.max === undefined) m.max = v;\n },\n rem: (m, v) => {\n if (v >= m.max) m.max = NaN;\n },\n req: ['values'],\n idx: 4\n },\n argmin: {\n init: m => m.argmin = undefined,\n value: m => m.argmin || m.cell.data.argmin(m.get),\n add: (m, v, t) => {\n if (v < m.min) m.argmin = t;\n },\n rem: (m, v) => {\n if (v <= m.min) m.argmin = undefined;\n },\n req: ['min', 'values'],\n idx: 3\n },\n argmax: {\n init: m => m.argmax = undefined,\n value: m => m.argmax || m.cell.data.argmax(m.get),\n add: (m, v, t) => {\n if (v > m.max) m.argmax = t;\n },\n rem: (m, v) => {\n if (v >= m.max) m.argmax = undefined;\n },\n req: ['max', 'values'],\n idx: 3\n },\n exponential: {\n init: (m, r) => {\n m.exp = 0;\n m.exp_r = r;\n },\n value: m => m.valid ? m.exp * (1 - m.exp_r) / (1 - m.exp_r ** m.valid) : undefined,\n add: (m, v) => m.exp = m.exp_r * m.exp + v,\n rem: (m, v) => m.exp = (m.exp - v / m.exp_r ** (m.valid - 1)) / m.exp_r\n },\n exponentialb: {\n value: m => m.valid ? m.exp * (1 - m.exp_r) : undefined,\n req: ['exponential'],\n idx: 1\n }\n};\nconst ValidAggregateOps = Object.keys(AggregateOps).filter(d => d !== '__count__');\nfunction measure(key, value) {\n return (out, aggregate_param) => extend({\n name: key,\n aggregate_param: aggregate_param,\n out: out || key\n }, base_op, value);\n}\n[...ValidAggregateOps, '__count__'].forEach(key => {\n AggregateOps[key] = measure(key, AggregateOps[key]);\n});\nfunction createMeasure(op, param, name) {\n return AggregateOps[op](name, param);\n}\nfunction compareIndex(a, b) {\n return a.idx - b.idx;\n}\nfunction resolve(agg) {\n const map = {};\n agg.forEach(a => map[a.name] = a);\n const getreqs = a => {\n if (!a.req) return;\n a.req.forEach(key => {\n if (!map[key]) getreqs(map[key] = AggregateOps[key]());\n });\n };\n agg.forEach(getreqs);\n return Object.values(map).sort(compareIndex);\n}\nfunction init() {\n this.valid = 0;\n this.missing = 0;\n this._ops.forEach(op => op.aggregate_param == null ? op.init(this) : op.init(this, op.aggregate_param));\n}\nfunction add(v, t) {\n if (v == null || v === '') {\n ++this.missing;\n return;\n }\n if (v !== v) return;\n ++this.valid;\n this._ops.forEach(op => op.add(this, v, t));\n}\nfunction rem(v, t) {\n if (v == null || v === '') {\n --this.missing;\n return;\n }\n if (v !== v) return;\n --this.valid;\n this._ops.forEach(op => op.rem(this, v, t));\n}\nfunction set(t) {\n this._out.forEach(op => t[op.out] = op.value(this));\n return t;\n}\nfunction compileMeasures(agg, field) {\n const get = field || identity,\n ops = resolve(agg),\n out = agg.slice().sort(compareIndex);\n function ctr(cell) {\n this._ops = ops;\n this._out = out;\n this.cell = cell;\n this.init();\n }\n ctr.prototype.init = init;\n ctr.prototype.add = add;\n ctr.prototype.rem = rem;\n ctr.prototype.set = set;\n ctr.prototype.get = get;\n ctr.fields = agg.map(op => op.out);\n return ctr;\n}\n\nfunction TupleStore(key) {\n this._key = key ? field(key) : tupleid;\n this.reset();\n}\nconst prototype$1 = TupleStore.prototype;\nprototype$1.reset = function () {\n this._add = [];\n this._rem = [];\n this._ext = null;\n this._get = null;\n this._q = null;\n};\nprototype$1.add = function (v) {\n this._add.push(v);\n};\nprototype$1.rem = function (v) {\n this._rem.push(v);\n};\nprototype$1.values = function () {\n this._get = null;\n if (this._rem.length === 0) return this._add;\n const a = this._add,\n r = this._rem,\n k = this._key,\n n = a.length,\n m = r.length,\n x = Array(n - m),\n map = {};\n let i, j, v;\n\n // use unique key field to clear removed values\n for (i = 0; i < m; ++i) {\n map[k(r[i])] = 1;\n }\n for (i = 0, j = 0; i < n; ++i) {\n if (map[k(v = a[i])]) {\n map[k(v)] = 0;\n } else {\n x[j++] = v;\n }\n }\n this._rem = [];\n return this._add = x;\n};\n\n// memoizing statistics methods\n\nprototype$1.distinct = function (get) {\n const v = this.values(),\n map = {};\n let n = v.length,\n count = 0,\n s;\n while (--n >= 0) {\n s = get(v[n]) + '';\n if (!hasOwnProperty(map, s)) {\n map[s] = 1;\n ++count;\n }\n }\n return count;\n};\nprototype$1.extent = function (get) {\n if (this._get !== get || !this._ext) {\n const v = this.values(),\n i = extentIndex(v, get);\n this._ext = [v[i[0]], v[i[1]]];\n this._get = get;\n }\n return this._ext;\n};\nprototype$1.argmin = function (get) {\n return this.extent(get)[0] || {};\n};\nprototype$1.argmax = function (get) {\n return this.extent(get)[1] || {};\n};\nprototype$1.min = function (get) {\n const m = this.extent(get)[0];\n return m != null ? get(m) : undefined;\n};\nprototype$1.max = function (get) {\n const m = this.extent(get)[1];\n return m != null ? get(m) : undefined;\n};\nprototype$1.quartile = function (get) {\n if (this._get !== get || !this._q) {\n this._q = quartiles(this.values(), get);\n this._get = get;\n }\n return this._q;\n};\nprototype$1.q1 = function (get) {\n return this.quartile(get)[0];\n};\nprototype$1.q2 = function (get) {\n return this.quartile(get)[1];\n};\nprototype$1.q3 = function (get) {\n return this.quartile(get)[2];\n};\nprototype$1.ci = function (get) {\n if (this._get !== get || !this._ci) {\n this._ci = bootstrapCI(this.values(), 1000, 0.05, get);\n this._get = get;\n }\n return this._ci;\n};\nprototype$1.ci0 = function (get) {\n return this.ci(get)[0];\n};\nprototype$1.ci1 = function (get) {\n return this.ci(get)[1];\n};\n\n/**\n * Group-by aggregation operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {Array} [params.fields] - An array of accessors to aggregate.\n * @param {Array} [params.ops] - An array of strings indicating aggregation operations.\n * @param {Array} [params.aggregate_params=[null]] - An optional array of parameters for aggregation operations.\n * @param {Array} [params.as] - An array of output field names for aggregated values.\n * @param {boolean} [params.cross=false] - A flag indicating that the full\n * cross-product of groupby values should be generated, including empty cells.\n * If true, the drop parameter is ignored and empty cells are retained.\n * @param {boolean} [params.drop=true] - A flag indicating if empty cells should be removed.\n */\nfunction Aggregate(params) {\n Transform.call(this, null, params);\n this._adds = []; // array of added output tuples\n this._mods = []; // array of modified output tuples\n this._alen = 0; // number of active added tuples\n this._mlen = 0; // number of active modified tuples\n this._drop = true; // should empty aggregation cells be removed\n this._cross = false; // produce full cross-product of group-by values\n\n this._dims = []; // group-by dimension accessors\n this._dnames = []; // group-by dimension names\n\n this._measures = []; // collection of aggregation monoids\n this._countOnly = false; // flag indicating only count aggregation\n this._counts = null; // collection of count fields\n this._prev = null; // previous aggregation cells\n\n this._inputs = null; // array of dependent input tuple field names\n this._outputs = null; // array of output tuple field names\n}\n\nAggregate.Definition = {\n 'type': 'Aggregate',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidAggregateOps\n }, {\n 'name': 'aggregate_params',\n 'type': 'field',\n 'null': true,\n 'array': true,\n 'default': [null]\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'drop',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'cross',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(Aggregate, Transform, {\n transform(_, pulse) {\n const aggr = this,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n mod = _.modified();\n aggr.stamp = out.stamp;\n if (aggr.value && (mod || pulse.modified(aggr._inputs, true))) {\n aggr._prev = aggr.value;\n aggr.value = mod ? aggr.init(_) : Object.create(null);\n pulse.visit(pulse.SOURCE, t => aggr.add(t));\n } else {\n aggr.value = aggr.value || aggr.init(_);\n pulse.visit(pulse.REM, t => aggr.rem(t));\n pulse.visit(pulse.ADD, t => aggr.add(t));\n }\n\n // Indicate output fields and return aggregate tuples.\n out.modifies(aggr._outputs);\n\n // Should empty cells be dropped?\n aggr._drop = _.drop !== false;\n\n // If domain cross-product requested, generate empty cells as needed\n // and ensure that empty cells are not dropped\n if (_.cross && aggr._dims.length > 1) {\n aggr._drop = false;\n aggr.cross();\n }\n if (pulse.clean() && aggr._drop) {\n out.clean(true).runAfter(() => this.clean());\n }\n return aggr.changes(out);\n },\n cross() {\n const aggr = this,\n curr = aggr.value,\n dims = aggr._dnames,\n vals = dims.map(() => ({})),\n n = dims.length;\n\n // collect all group-by domain values\n function collect(cells) {\n let key, i, t, v;\n for (key in cells) {\n t = cells[key].tuple;\n for (i = 0; i < n; ++i) {\n vals[i][v = t[dims[i]]] = v;\n }\n }\n }\n collect(aggr._prev);\n collect(curr);\n\n // iterate over key cross-product, create cells as needed\n function generate(base, tuple, index) {\n const name = dims[index],\n v = vals[index++];\n for (const k in v) {\n const key = base ? base + '|' + k : k;\n tuple[name] = v[k];\n if (index < n) generate(key, tuple, index);else if (!curr[key]) aggr.cell(key, tuple);\n }\n }\n generate('', {}, 0);\n },\n init(_) {\n // initialize input and output fields\n const inputs = this._inputs = [],\n outputs = this._outputs = [],\n inputMap = {};\n function inputVisit(get) {\n const fields = array(accessorFields(get)),\n n = fields.length;\n let i = 0,\n f;\n for (; i < n; ++i) {\n if (!inputMap[f = fields[i]]) {\n inputMap[f] = 1;\n inputs.push(f);\n }\n }\n }\n\n // initialize group-by dimensions\n this._dims = array(_.groupby);\n this._dnames = this._dims.map(d => {\n const dname = accessorName(d);\n inputVisit(d);\n outputs.push(dname);\n return dname;\n });\n this.cellkey = _.key ? _.key : groupkey(this._dims);\n\n // initialize aggregate measures\n this._countOnly = true;\n this._counts = [];\n this._measures = [];\n const fields = _.fields || [null],\n ops = _.ops || ['count'],\n aggregate_params = _.aggregate_params || [null],\n as = _.as || [],\n n = fields.length,\n map = {};\n let field, op, aggregate_param, m, mname, outname, i;\n if (n !== ops.length) {\n error('Unmatched number of fields and aggregate ops.');\n }\n for (i = 0; i < n; ++i) {\n field = fields[i];\n op = ops[i];\n aggregate_param = aggregate_params[i] || null;\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n mname = accessorName(field);\n outname = measureName(op, mname, as[i]);\n outputs.push(outname);\n if (op === 'count') {\n this._counts.push(outname);\n continue;\n }\n m = map[mname];\n if (!m) {\n inputVisit(field);\n m = map[mname] = [];\n m.field = field;\n this._measures.push(m);\n }\n if (op !== 'count') this._countOnly = false;\n m.push(createMeasure(op, aggregate_param, outname));\n }\n this._measures = this._measures.map(m => compileMeasures(m, m.field));\n return Object.create(null); // aggregation cells (this.value)\n },\n\n // -- Cell Management -----\n\n cellkey: groupkey(),\n cell(key, t) {\n let cell = this.value[key];\n if (!cell) {\n cell = this.value[key] = this.newcell(key, t);\n this._adds[this._alen++] = cell;\n } else if (cell.num === 0 && this._drop && cell.stamp < this.stamp) {\n cell.stamp = this.stamp;\n this._adds[this._alen++] = cell;\n } else if (cell.stamp < this.stamp) {\n cell.stamp = this.stamp;\n this._mods[this._mlen++] = cell;\n }\n return cell;\n },\n newcell(key, t) {\n const cell = {\n key: key,\n num: 0,\n agg: null,\n tuple: this.newtuple(t, this._prev && this._prev[key]),\n stamp: this.stamp,\n store: false\n };\n if (!this._countOnly) {\n const measures = this._measures,\n n = measures.length;\n cell.agg = Array(n);\n for (let i = 0; i < n; ++i) {\n cell.agg[i] = new measures[i](cell);\n }\n }\n if (cell.store) {\n cell.data = new TupleStore();\n }\n return cell;\n },\n newtuple(t, p) {\n const names = this._dnames,\n dims = this._dims,\n n = dims.length,\n x = {};\n for (let i = 0; i < n; ++i) {\n x[names[i]] = dims[i](t);\n }\n return p ? replace(p.tuple, x) : ingest(x);\n },\n clean() {\n const cells = this.value;\n for (const key in cells) {\n if (cells[key].num === 0) {\n delete cells[key];\n }\n }\n },\n // -- Process Tuples -----\n\n add(t) {\n const key = this.cellkey(t),\n cell = this.cell(key, t);\n cell.num += 1;\n if (this._countOnly) return;\n if (cell.store) cell.data.add(t);\n const agg = cell.agg;\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].add(agg[i].get(t), t);\n }\n },\n rem(t) {\n const key = this.cellkey(t),\n cell = this.cell(key, t);\n cell.num -= 1;\n if (this._countOnly) return;\n if (cell.store) cell.data.rem(t);\n const agg = cell.agg;\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].rem(agg[i].get(t), t);\n }\n },\n celltuple(cell) {\n const tuple = cell.tuple,\n counts = this._counts;\n\n // consolidate stored values\n if (cell.store) {\n cell.data.values();\n }\n\n // update tuple properties\n for (let i = 0, n = counts.length; i < n; ++i) {\n tuple[counts[i]] = cell.num;\n }\n if (!this._countOnly) {\n const agg = cell.agg;\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].set(tuple);\n }\n }\n return tuple;\n },\n changes(out) {\n const adds = this._adds,\n mods = this._mods,\n prev = this._prev,\n drop = this._drop,\n add = out.add,\n rem = out.rem,\n mod = out.mod;\n let cell, key, i, n;\n if (prev) for (key in prev) {\n cell = prev[key];\n if (!drop || cell.num) rem.push(cell.tuple);\n }\n for (i = 0, n = this._alen; i < n; ++i) {\n add.push(this.celltuple(adds[i]));\n adds[i] = null; // for garbage collection\n }\n\n for (i = 0, n = this._mlen; i < n; ++i) {\n cell = mods[i];\n (cell.num === 0 && drop ? rem : mod).push(this.celltuple(cell));\n mods[i] = null; // for garbage collection\n }\n\n this._alen = this._mlen = 0; // reset list of active cells\n this._prev = null;\n return out;\n }\n});\n\n// epsilon bias to offset floating point error (#1737)\nconst EPSILON$1 = 1e-14;\n\n/**\n * Generates a binning function for discretizing data.\n * @constructor\n * @param {object} params - The parameters for this operator. The\n * provided values should be valid options for the {@link bin} function.\n * @param {function(object): *} params.field - The data field to bin.\n */\nfunction Bin(params) {\n Transform.call(this, null, params);\n}\nBin.Definition = {\n 'type': 'Bin',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'interval',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'anchor',\n 'type': 'number'\n }, {\n 'name': 'maxbins',\n 'type': 'number',\n 'default': 20\n }, {\n 'name': 'base',\n 'type': 'number',\n 'default': 10\n }, {\n 'name': 'divide',\n 'type': 'number',\n 'array': true,\n 'default': [5, 2]\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'span',\n 'type': 'number'\n }, {\n 'name': 'step',\n 'type': 'number'\n }, {\n 'name': 'steps',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'minstep',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'name',\n 'type': 'string'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['bin0', 'bin1']\n }]\n};\ninherits(Bin, Transform, {\n transform(_, pulse) {\n const band = _.interval !== false,\n bins = this._bins(_),\n start = bins.start,\n step = bins.step,\n as = _.as || ['bin0', 'bin1'],\n b0 = as[0],\n b1 = as[1];\n let flag;\n if (_.modified()) {\n pulse = pulse.reflow(true);\n flag = pulse.SOURCE;\n } else {\n flag = pulse.modified(accessorFields(_.field)) ? pulse.ADD_MOD : pulse.ADD;\n }\n pulse.visit(flag, band ? t => {\n const v = bins(t);\n // minimum bin value (inclusive)\n t[b0] = v;\n // maximum bin value (exclusive)\n // use convoluted math for better floating point agreement\n // see https://github.com/vega/vega/issues/830\n // infinite values propagate through this formula! #2227\n t[b1] = v == null ? null : start + step * (1 + (v - start) / step);\n } : t => t[b0] = bins(t));\n return pulse.modifies(band ? as : b0);\n },\n _bins(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n const field = _.field,\n bins = bin(_),\n step = bins.step;\n let start = bins.start,\n stop = start + Math.ceil((bins.stop - start) / step) * step,\n a,\n d;\n if ((a = _.anchor) != null) {\n d = a - (start + step * Math.floor((a - start) / step));\n start += d;\n stop += d;\n }\n const f = function (t) {\n let v = toNumber(field(t));\n return v == null ? null : v < start ? -Infinity : v > stop ? +Infinity : (v = Math.max(start, Math.min(v, stop - step)), start + step * Math.floor(EPSILON$1 + (v - start) / step));\n };\n f.start = start;\n f.stop = bins.stop;\n f.step = step;\n return this.value = accessor(f, accessorFields(field), _.name || 'bin_' + accessorName(field));\n }\n});\n\nfunction SortedList (idFunc, source, input) {\n const $ = idFunc;\n let data = source || [],\n add = input || [],\n rem = {},\n cnt = 0;\n return {\n add: t => add.push(t),\n remove: t => rem[$(t)] = ++cnt,\n size: () => data.length,\n data: (compare, resort) => {\n if (cnt) {\n data = data.filter(t => !rem[$(t)]);\n rem = {};\n cnt = 0;\n }\n if (resort && compare) {\n data.sort(compare);\n }\n if (add.length) {\n data = compare ? merge(compare, data, add.sort(compare)) : data.concat(add);\n add = [];\n }\n return data;\n }\n };\n}\n\n/**\n * Collects all data tuples that pass through this operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for additionally sorting the collected tuples.\n */\nfunction Collect(params) {\n Transform.call(this, [], params);\n}\nCollect.Definition = {\n 'type': 'Collect',\n 'metadata': {\n 'source': true\n },\n 'params': [{\n 'name': 'sort',\n 'type': 'compare'\n }]\n};\ninherits(Collect, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.ALL),\n list = SortedList(tupleid, this.value, out.materialize(out.ADD).add),\n sort = _.sort,\n mod = pulse.changed() || sort && (_.modified('sort') || pulse.modified(sort.fields));\n out.visit(out.REM, list.remove);\n this.modified(mod);\n this.value = out.source = list.data(stableCompare(sort), mod);\n\n // propagate tree root if defined\n if (pulse.source && pulse.source.root) {\n this.value.root = pulse.source.root;\n }\n return out;\n }\n});\n\n/**\n * Generates a comparator function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - The fields to compare.\n * @param {Array} [params.orders] - The sort orders.\n * Each entry should be one of \"ascending\" (default) or \"descending\".\n */\nfunction Compare(params) {\n Operator.call(this, null, update$5, params);\n}\ninherits(Compare, Operator);\nfunction update$5(_) {\n return this.value && !_.modified() ? this.value : compare(_.fields, _.orders);\n}\n\n/**\n * Count regexp-defined pattern occurrences in a text field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the text field.\n * @param {string} [params.pattern] - RegExp string defining the text pattern.\n * @param {string} [params.case] - One of 'lower', 'upper' or null (mixed) case.\n * @param {string} [params.stopwords] - RegExp string of words to ignore.\n */\nfunction CountPattern(params) {\n Transform.call(this, null, params);\n}\nCountPattern.Definition = {\n 'type': 'CountPattern',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'case',\n 'type': 'enum',\n 'values': ['upper', 'lower', 'mixed'],\n 'default': 'mixed'\n }, {\n 'name': 'pattern',\n 'type': 'string',\n 'default': '[\\\\w\"]+'\n }, {\n 'name': 'stopwords',\n 'type': 'string',\n 'default': ''\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['text', 'count']\n }]\n};\nfunction tokenize(text, tcase, match) {\n switch (tcase) {\n case 'upper':\n text = text.toUpperCase();\n break;\n case 'lower':\n text = text.toLowerCase();\n break;\n }\n return text.match(match);\n}\ninherits(CountPattern, Transform, {\n transform(_, pulse) {\n const process = update => tuple => {\n var tokens = tokenize(get(tuple), _.case, match) || [],\n t;\n for (var i = 0, n = tokens.length; i < n; ++i) {\n if (!stop.test(t = tokens[i])) update(t);\n }\n };\n const init = this._parameterCheck(_, pulse),\n counts = this._counts,\n match = this._match,\n stop = this._stop,\n get = _.field,\n as = _.as || ['text', 'count'],\n add = process(t => counts[t] = 1 + (counts[t] || 0)),\n rem = process(t => counts[t] -= 1);\n if (init) {\n pulse.visit(pulse.SOURCE, add);\n } else {\n pulse.visit(pulse.ADD, add);\n pulse.visit(pulse.REM, rem);\n }\n return this._finish(pulse, as); // generate output tuples\n },\n\n _parameterCheck(_, pulse) {\n let init = false;\n if (_.modified('stopwords') || !this._stop) {\n this._stop = new RegExp('^' + (_.stopwords || '') + '$', 'i');\n init = true;\n }\n if (_.modified('pattern') || !this._match) {\n this._match = new RegExp(_.pattern || '[\\\\w\\']+', 'g');\n init = true;\n }\n if (_.modified('field') || pulse.modified(_.field.fields)) {\n init = true;\n }\n if (init) this._counts = {};\n return init;\n },\n _finish(pulse, as) {\n const counts = this._counts,\n tuples = this._tuples || (this._tuples = {}),\n text = as[0],\n count = as[1],\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n let w, t, c;\n for (w in counts) {\n t = tuples[w];\n c = counts[w] || 0;\n if (!t && c) {\n tuples[w] = t = ingest({});\n t[text] = w;\n t[count] = c;\n out.add.push(t);\n } else if (c === 0) {\n if (t) out.rem.push(t);\n counts[w] = null;\n tuples[w] = null;\n } else if (t[count] !== c) {\n t[count] = c;\n out.mod.push(t);\n }\n }\n return out.modifies(as);\n }\n});\n\n/**\n * Perform a cross-product of a tuple stream with itself.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object):boolean} [params.filter] - An optional filter\n * function for selectively including tuples in the cross product.\n * @param {Array} [params.as] - The names of the output fields.\n */\nfunction Cross(params) {\n Transform.call(this, null, params);\n}\nCross.Definition = {\n 'type': 'Cross',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'filter',\n 'type': 'expr'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['a', 'b']\n }]\n};\ninherits(Cross, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n as = _.as || ['a', 'b'],\n a = as[0],\n b = as[1],\n reset = !this.value || pulse.changed(pulse.ADD_REM) || _.modified('as') || _.modified('filter');\n let data = this.value;\n if (reset) {\n if (data) out.rem = data;\n data = pulse.materialize(pulse.SOURCE).source;\n out.add = this.value = cross(data, a, b, _.filter || truthy);\n } else {\n out.mod = data;\n }\n out.source = this.value;\n return out.modifies(as);\n }\n});\nfunction cross(input, a, b, filter) {\n var data = [],\n t = {},\n n = input.length,\n i = 0,\n j,\n left;\n for (; i < n; ++i) {\n t[a] = left = input[i];\n for (j = 0; j < n; ++j) {\n t[b] = input[j];\n if (filter(t)) {\n data.push(ingest(t));\n t = {};\n t[a] = left;\n }\n }\n }\n return data;\n}\n\nconst Distributions = {\n kde: randomKDE,\n mixture: randomMixture,\n normal: randomNormal,\n lognormal: randomLogNormal,\n uniform: randomUniform\n};\nconst DISTRIBUTIONS = 'distributions',\n FUNCTION = 'function',\n FIELD = 'field';\n\n/**\n * Parse a parameter object for a probability distribution.\n * @param {object} def - The distribution parameter object.\n * @param {function():Array} - A method for requesting\n * source data. Used for distributions (such as KDE) that\n * require sample data points. This method will only be\n * invoked if the 'from' parameter for a target data source\n * is not provided. Typically this method returns backing\n * source data for a Pulse object.\n * @return {object} - The output distribution object.\n */\nfunction parse(def, data) {\n const func = def[FUNCTION];\n if (!hasOwnProperty(Distributions, func)) {\n error('Unknown distribution function: ' + func);\n }\n const d = Distributions[func]();\n for (const name in def) {\n // if data field, extract values\n if (name === FIELD) {\n d.data((def.from || data()).map(def[name]));\n }\n\n // if distribution mixture, recurse to parse each definition\n else if (name === DISTRIBUTIONS) {\n d[name](def[name].map(_ => parse(_, data)));\n }\n\n // otherwise, simply set the parameter\n else if (typeof d[name] === FUNCTION) {\n d[name](def[name]);\n }\n }\n return d;\n}\n\n/**\n * Grid sample points for a probability density. Given a distribution and\n * a sampling extent, will generate points suitable for plotting either\n * PDF (probability density function) or CDF (cumulative distribution\n * function) curves.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.distribution - The probability distribution. This\n * is an object parameter dependent on the distribution type.\n * @param {string} [params.method='pdf'] - The distribution method to sample.\n * One of 'pdf' or 'cdf'.\n * @param {Array} [params.extent] - The [min, max] extent over which\n * to sample the distribution. This argument is required in most cases, but\n * can be omitted if the distribution (e.g., 'kde') supports a 'data' method\n * that returns numerical sample points from which the extent can be deduced.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\nfunction Density(params) {\n Transform.call(this, null, params);\n}\nconst distributions = [{\n 'key': {\n 'function': 'normal'\n },\n 'params': [{\n 'name': 'mean',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'stdev',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'lognormal'\n },\n 'params': [{\n 'name': 'mean',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'stdev',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'uniform'\n },\n 'params': [{\n 'name': 'min',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'max',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'kde'\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'from',\n 'type': 'data'\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0\n }]\n}];\nconst mixture = {\n 'key': {\n 'function': 'mixture'\n },\n 'params': [{\n 'name': 'distributions',\n 'type': 'param',\n 'array': true,\n 'params': distributions\n }, {\n 'name': 'weights',\n 'type': 'number',\n 'array': true\n }]\n};\nDensity.Definition = {\n 'type': 'Density',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'steps',\n 'type': 'number'\n }, {\n 'name': 'minsteps',\n 'type': 'number',\n 'default': 25\n }, {\n 'name': 'maxsteps',\n 'type': 'number',\n 'default': 200\n }, {\n 'name': 'method',\n 'type': 'string',\n 'default': 'pdf',\n 'values': ['pdf', 'cdf']\n }, {\n 'name': 'distribution',\n 'type': 'param',\n 'params': distributions.concat(mixture)\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['value', 'density']\n }]\n};\ninherits(Density, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const dist = parse(_.distribution, source(pulse)),\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200;\n let method = _.method || 'pdf';\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n if (!_.extent && !dist.data) {\n error('Missing density extent parameter.');\n }\n method = dist[method];\n const as = _.as || ['value', 'density'],\n domain = _.extent || extent(dist.data()),\n values = sampleCurve(method, domain, minsteps, maxsteps).map(v => {\n const tuple = {};\n tuple[as[0]] = v[0];\n tuple[as[1]] = v[1];\n return ingest(tuple);\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\nfunction source(pulse) {\n return () => pulse.materialize(pulse.SOURCE).source;\n}\n\n// use either provided alias or accessor field name\nfunction fieldNames(fields, as) {\n if (!fields) return null;\n return fields.map((f, i) => as[i] || accessorName(f));\n}\nfunction partition$1(data, groupby, field) {\n const groups = [],\n get = f => f(t);\n let map, i, n, t, k, g;\n\n // partition data points into groups\n if (groupby == null) {\n groups.push(data.map(field));\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n g.push(field(t));\n }\n }\n return groups;\n}\n\nconst Output = 'bin';\n\n/**\n * Dot density binning for dot plot construction.\n * Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n * https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to bin.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {number} [params.step] - The step size (bin width) within which dots should be\n * stacked. Defaults to 1/30 of the extent of the data *field*.\n * @param {boolean} [params.smooth=false] - A boolean flag indicating if dot density\n * stacks should be smoothed to reduce variance.\n */\nfunction DotBin(params) {\n Transform.call(this, null, params);\n}\nDotBin.Definition = {\n 'type': 'DotBin',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number'\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': Output\n }]\n};\nconst autostep = (data, field) => span(extent(data, field)) / 30;\ninherits(DotBin, Transform, {\n transform(_, pulse) {\n if (this.value && !(_.modified() || pulse.changed())) {\n return pulse; // early exit\n }\n\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(pulse.source, _.groupby, identity),\n smooth = _.smooth || false,\n field = _.field,\n step = _.step || autostep(source, field),\n sort = stableCompare((a, b) => field(a) - field(b)),\n as = _.as || Output,\n n = groups.length;\n\n // compute dotplot bins per group\n let min = Infinity,\n max = -Infinity,\n i = 0,\n j;\n for (; i < n; ++i) {\n const g = groups[i].sort(sort);\n j = -1;\n for (const v of dotbin(g, step, smooth, field)) {\n if (v < min) min = v;\n if (v > max) max = v;\n g[++j][as] = v;\n }\n }\n this.value = {\n start: min,\n stop: max,\n step: step\n };\n return pulse.reflow(true).modifies(as);\n }\n});\n\n/**\n * Wraps an expression function with access to external parameters.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function} params.expr - The expression function. The\n * function should accept both a datum and a parameter object.\n * This operator's value will be a new function that wraps the\n * expression function with access to this operator's parameters.\n */\nfunction Expression(params) {\n Operator.call(this, null, update$4, params);\n this.modified(true);\n}\ninherits(Expression, Operator);\nfunction update$4(_) {\n const expr = _.expr;\n return this.value && !_.modified('expr') ? this.value : accessor(datum => expr(datum, _), accessorFields(expr), accessorName(expr));\n}\n\n/**\n * Computes extents (min/max) for a data field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field over which to compute extends.\n */\nfunction Extent(params) {\n Transform.call(this, [undefined, undefined], params);\n}\nExtent.Definition = {\n 'type': 'Extent',\n 'metadata': {},\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }]\n};\ninherits(Extent, Transform, {\n transform(_, pulse) {\n const extent = this.value,\n field = _.field,\n mod = pulse.changed() || pulse.modified(field.fields) || _.modified('field');\n let min = extent[0],\n max = extent[1];\n if (mod || min == null) {\n min = +Infinity;\n max = -Infinity;\n }\n pulse.visit(mod ? pulse.SOURCE : pulse.ADD, t => {\n const v = toNumber(field(t));\n if (v != null) {\n // NaNs will fail all comparisons!\n if (v < min) min = v;\n if (v > max) max = v;\n }\n });\n if (!Number.isFinite(min) || !Number.isFinite(max)) {\n let name = accessorName(field);\n if (name) name = ` for field \"${name}\"`;\n pulse.dataflow.warn(`Infinite extent${name}: [${min}, ${max}]`);\n min = max = undefined;\n }\n this.value = [min, max];\n }\n});\n\n/**\n * Provides a bridge between a parent transform and a target subflow that\n * consumes only a subset of the tuples that pass through the parent.\n * @constructor\n * @param {Pulse} pulse - A pulse to use as the value of this operator.\n * @param {Transform} parent - The parent transform (typically a Facet instance).\n */\nfunction Subflow(pulse, parent) {\n Operator.call(this, pulse);\n this.parent = parent;\n this.count = 0;\n}\ninherits(Subflow, Operator, {\n /**\n * Routes pulses from this subflow to a target transform.\n * @param {Transform} target - A transform that receives the subflow of tuples.\n */\n connect(target) {\n this.detachSubflow = target.detachSubflow;\n this.targets().add(target);\n return target.source = this;\n },\n /**\n * Add an 'add' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being added.\n */\n add(t) {\n this.count += 1;\n this.value.add.push(t);\n },\n /**\n * Add a 'rem' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being removed.\n */\n rem(t) {\n this.count -= 1;\n this.value.rem.push(t);\n },\n /**\n * Add a 'mod' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being modified.\n */\n mod(t) {\n this.value.mod.push(t);\n },\n /**\n * Re-initialize this operator's pulse value.\n * @param {Pulse} pulse - The pulse to copy from.\n * @see Pulse.init\n */\n init(pulse) {\n this.value.init(pulse, pulse.NO_SOURCE);\n },\n /**\n * Evaluate this operator. This method overrides the\n * default behavior to simply return the contained pulse value.\n * @return {Pulse}\n */\n evaluate() {\n // assert: this.value.stamp === pulse.stamp\n return this.value;\n }\n});\n\n/**\n * Facets a dataflow into a set of subflows based on a key.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): *} params.key - The key field to facet by.\n */\nfunction Facet(params) {\n Transform.call(this, {}, params);\n this._keys = fastmap(); // cache previously calculated key values\n\n // keep track of active subflows, use as targets array for listeners\n // this allows us to limit propagation to only updated subflows\n const a = this._targets = [];\n a.active = 0;\n a.forEach = f => {\n for (let i = 0, n = a.active; i < n; ++i) {\n f(a[i], i, a);\n }\n };\n}\ninherits(Facet, Transform, {\n activate(flow) {\n this._targets[this._targets.active++] = flow;\n },\n // parent argument provided by PreFacet subclass\n subflow(key, flow, pulse, parent) {\n const flows = this.value;\n let sf = hasOwnProperty(flows, key) && flows[key],\n df,\n p;\n if (!sf) {\n p = parent || (p = this._group[key]) && p.tuple;\n df = pulse.dataflow;\n sf = new Subflow(pulse.fork(pulse.NO_SOURCE), this);\n df.add(sf).connect(flow(df, key, p));\n flows[key] = sf;\n this.activate(sf);\n } else if (sf.value.stamp < pulse.stamp) {\n sf.init(pulse);\n this.activate(sf);\n }\n return sf;\n },\n clean() {\n const flows = this.value;\n let detached = 0;\n for (const key in flows) {\n if (flows[key].count === 0) {\n const detach = flows[key].detachSubflow;\n if (detach) detach();\n delete flows[key];\n ++detached;\n }\n }\n\n // remove inactive targets from the active targets array\n if (detached) {\n const active = this._targets.filter(sf => sf && sf.count > 0);\n this.initTargets(active);\n }\n },\n initTargets(act) {\n const a = this._targets,\n n = a.length,\n m = act ? act.length : 0;\n let i = 0;\n for (; i < m; ++i) {\n a[i] = act[i];\n }\n for (; i < n && a[i] != null; ++i) {\n a[i] = null; // ensure old flows can be garbage collected\n }\n\n a.active = m;\n },\n transform(_, pulse) {\n const df = pulse.dataflow,\n key = _.key,\n flow = _.subflow,\n cache = this._keys,\n rekey = _.modified('key'),\n subflow = key => this.subflow(key, flow, pulse);\n this._group = _.group || {};\n this.initTargets(); // reset list of active subflows\n\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t),\n k = cache.get(id);\n if (k !== undefined) {\n cache.delete(id);\n subflow(k).rem(t);\n }\n });\n pulse.visit(pulse.ADD, t => {\n const k = key(t);\n cache.set(tupleid(t), k);\n subflow(k).add(t);\n });\n if (rekey || pulse.modified(key.fields)) {\n pulse.visit(pulse.MOD, t => {\n const id = tupleid(t),\n k0 = cache.get(id),\n k1 = key(t);\n if (k0 === k1) {\n subflow(k1).mod(t);\n } else {\n cache.set(id, k1);\n subflow(k0).rem(t);\n subflow(k1).add(t);\n }\n });\n } else if (pulse.changed(pulse.MOD)) {\n pulse.visit(pulse.MOD, t => {\n subflow(cache.get(tupleid(t))).mod(t);\n });\n }\n if (rekey) {\n pulse.visit(pulse.REFLOW, t => {\n const id = tupleid(t),\n k0 = cache.get(id),\n k1 = key(t);\n if (k0 !== k1) {\n cache.set(id, k1);\n subflow(k0).rem(t);\n subflow(k1).add(t);\n }\n });\n }\n if (pulse.clean()) {\n df.runAfter(() => {\n this.clean();\n cache.clean();\n });\n } else if (cache.empty > df.cleanThreshold) {\n df.runAfter(cache.clean);\n }\n return pulse;\n }\n});\n\n/**\n * Generates one or more field accessor functions.\n * If the 'name' parameter is an array, an array of field accessors\n * will be created and the 'as' parameter will be ignored.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.name - The field name(s) to access.\n * @param {string} params.as - The accessor function name.\n */\nfunction Field(params) {\n Operator.call(this, null, update$3, params);\n}\ninherits(Field, Operator);\nfunction update$3(_) {\n return this.value && !_.modified() ? this.value : isArray(_.name) ? array(_.name).map(f => field(f)) : field(_.name, _.as);\n}\n\n/**\n * Filters data tuples according to a predicate function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The predicate expression function\n * that determines a tuple's filter status. Truthy values pass the filter.\n */\nfunction Filter(params) {\n Transform.call(this, fastmap(), params);\n}\nFilter.Definition = {\n 'type': 'Filter',\n 'metadata': {\n 'changes': true\n },\n 'params': [{\n 'name': 'expr',\n 'type': 'expr',\n 'required': true\n }]\n};\ninherits(Filter, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow,\n cache = this.value,\n // cache ids of filtered tuples\n output = pulse.fork(),\n add = output.add,\n rem = output.rem,\n mod = output.mod,\n test = _.expr;\n let isMod = true;\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n if (!cache.has(id)) rem.push(t);else cache.delete(id);\n });\n pulse.visit(pulse.ADD, t => {\n if (test(t, _)) add.push(t);else cache.set(tupleid(t), 1);\n });\n function revisit(t) {\n const id = tupleid(t),\n b = test(t, _),\n s = cache.get(id);\n if (b && s) {\n cache.delete(id);\n add.push(t);\n } else if (!b && !s) {\n cache.set(id, 1);\n rem.push(t);\n } else if (isMod && b && !s) {\n mod.push(t);\n }\n }\n pulse.visit(pulse.MOD, revisit);\n if (_.modified()) {\n isMod = false;\n pulse.visit(pulse.REFLOW, revisit);\n }\n if (cache.empty > df.cleanThreshold) df.runAfter(cache.clean);\n return output;\n }\n});\n\n/**\n * Flattens array-typed field values into new data objects.\n * If multiple fields are specified, they are treated as parallel arrays,\n * with output values included for each matching index (or null if missing).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of field\n * accessors for the tuple fields that should be flattened.\n * @param {string} [params.index] - Optional output field name for index\n * value. If unspecified, no index field is included in the output.\n * @param {Array} [params.as] - Output field names for flattened\n * array fields. Any unspecified fields will use the field name provided\n * by the fields accessors.\n */\nfunction Flatten(params) {\n Transform.call(this, [], params);\n}\nFlatten.Definition = {\n 'type': 'Flatten',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'index',\n 'type': 'string'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Flatten, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(fields, _.as || []),\n index = _.index || null,\n m = as.length;\n\n // remove any previous results\n out.rem = this.value;\n\n // generate flattened tuples\n pulse.visit(pulse.SOURCE, t => {\n const arrays = fields.map(f => f(t)),\n maxlen = arrays.reduce((l, a) => Math.max(l, a.length), 0);\n let i = 0,\n j,\n d,\n v;\n for (; i < maxlen; ++i) {\n d = derive(t);\n for (j = 0; j < m; ++j) {\n d[as[j]] = (v = arrays[j][i]) == null ? null : v;\n }\n if (index) {\n d[index] = i;\n }\n out.add.push(d);\n }\n });\n this.value = out.source = out.add;\n if (index) out.modifies(index);\n return out.modifies(as);\n }\n});\n\n/**\n * Folds one more tuple fields into multiple tuples in which the field\n * name and values are available under new 'key' and 'value' fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.fields - An array of field accessors\n * for the tuple fields that should be folded.\n * @param {Array} [params.as] - Output field names for folded key\n * and value fields, defaults to ['key', 'value'].\n */\nfunction Fold(params) {\n Transform.call(this, [], params);\n}\nFold.Definition = {\n 'type': 'Fold',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['key', 'value']\n }]\n};\ninherits(Fold, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n fnames = fields.map(accessorName),\n as = _.as || ['key', 'value'],\n k = as[0],\n v = as[1],\n n = fields.length;\n out.rem = this.value;\n pulse.visit(pulse.SOURCE, t => {\n for (let i = 0, d; i < n; ++i) {\n d = derive(t);\n d[k] = fnames[i];\n d[v] = fields[i](t);\n out.add.push(d);\n }\n });\n this.value = out.source = out.add;\n return out.modifies(as);\n }\n});\n\n/**\n * Invokes a function for each data tuple and saves the results as a new field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The formula function to invoke for each tuple.\n * @param {string} params.as - The field name under which to save the result.\n * @param {boolean} [params.initonly=false] - If true, the formula is applied to\n * added tuples only, and does not update in response to modifications.\n */\nfunction Formula(params) {\n Transform.call(this, null, params);\n}\nFormula.Definition = {\n 'type': 'Formula',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'expr',\n 'type': 'expr',\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'required': true\n }, {\n 'name': 'initonly',\n 'type': 'boolean'\n }]\n};\ninherits(Formula, Transform, {\n transform(_, pulse) {\n const func = _.expr,\n as = _.as,\n mod = _.modified(),\n flag = _.initonly ? pulse.ADD : mod ? pulse.SOURCE : pulse.modified(func.fields) || pulse.modified(as) ? pulse.ADD_MOD : pulse.ADD;\n if (mod) {\n // parameters updated, need to reflow\n pulse = pulse.materialize().reflow(true);\n }\n if (!_.initonly) {\n pulse.modifies(as);\n }\n return pulse.visit(flag, t => t[as] = func(t, _));\n }\n});\n\n/**\n * Generates data tuples using a provided generator function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Parameters): object} params.generator - A tuple generator\n * function. This function is given the operator parameters as input.\n * Changes to any additional parameters will not trigger re-calculation\n * of previously generated tuples. Only future tuples are affected.\n * @param {number} params.size - The number of tuples to produce.\n */\nfunction Generate(params) {\n Transform.call(this, [], params);\n}\ninherits(Generate, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.ALL),\n gen = _.generator;\n let data = this.value,\n num = _.size - data.length,\n add,\n rem,\n t;\n if (num > 0) {\n // need more tuples, generate and add\n for (add = []; --num >= 0;) {\n add.push(t = ingest(gen(_)));\n data.push(t);\n }\n out.add = out.add.length ? out.materialize(out.ADD).add.concat(add) : add;\n } else {\n // need fewer tuples, remove\n rem = data.slice(0, -num);\n out.rem = out.rem.length ? out.materialize(out.REM).rem.concat(rem) : rem;\n data = data.slice(-num);\n }\n out.source = this.value = data;\n return out;\n }\n});\n\nconst Methods = {\n value: 'value',\n median: median,\n mean: mean,\n min: min,\n max: max\n};\nconst Empty = [];\n\n/**\n * Impute missing values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to impute.\n * @param {Array} [params.groupby] - An array of\n * accessors to determine series within which to perform imputation.\n * @param {function(object): *} params.key - An accessor for a key value.\n * Each key value should be unique within a group. New tuples will be\n * imputed for any key values that are not found within a group.\n * @param {Array<*>} [params.keyvals] - Optional array of required key\n * values. New tuples will be imputed for any key values that are not\n * found within a group. In addition, these values will be automatically\n * augmented with the key values observed in the input data.\n * @param {string} [method='value'] - The imputation method to use. One of\n * 'value', 'mean', 'median', 'max', 'min'.\n * @param {*} [value=0] - The constant value to use for imputation\n * when using method 'value'.\n */\nfunction Impute(params) {\n Transform.call(this, [], params);\n}\nImpute.Definition = {\n 'type': 'Impute',\n 'metadata': {\n 'changes': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'keyvals',\n 'array': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'value',\n 'values': ['value', 'mean', 'median', 'max', 'min']\n }, {\n 'name': 'value',\n 'default': 0\n }]\n};\nfunction getValue(_) {\n var m = _.method || Methods.value,\n v;\n if (Methods[m] == null) {\n error('Unrecognized imputation method: ' + m);\n } else if (m === Methods.value) {\n v = _.value !== undefined ? _.value : 0;\n return () => v;\n } else {\n return Methods[m];\n }\n}\nfunction getField(_) {\n const f = _.field;\n return t => t ? f(t) : NaN;\n}\ninherits(Impute, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n impute = getValue(_),\n field = getField(_),\n fName = accessorName(_.field),\n kName = accessorName(_.key),\n gNames = (_.groupby || []).map(accessorName),\n groups = partition(pulse.source, _.groupby, _.key, _.keyvals),\n curr = [],\n prev = this.value,\n m = groups.domain.length,\n group,\n value,\n gVals,\n kVal,\n g,\n i,\n j,\n l,\n n,\n t;\n for (g = 0, l = groups.length; g < l; ++g) {\n group = groups[g];\n gVals = group.values;\n value = NaN;\n\n // add tuples for missing values\n for (j = 0; j < m; ++j) {\n if (group[j] != null) continue;\n kVal = groups.domain[j];\n t = {\n _impute: true\n };\n for (i = 0, n = gVals.length; i < n; ++i) t[gNames[i]] = gVals[i];\n t[kName] = kVal;\n t[fName] = Number.isNaN(value) ? value = impute(group, field) : value;\n curr.push(ingest(t));\n }\n }\n\n // update pulse with imputed tuples\n if (curr.length) out.add = out.materialize(out.ADD).add.concat(curr);\n if (prev.length) out.rem = out.materialize(out.REM).rem.concat(prev);\n this.value = curr;\n return out;\n }\n});\nfunction partition(data, groupby, key, keyvals) {\n var get = f => f(t),\n groups = [],\n domain = keyvals ? keyvals.slice() : [],\n kMap = {},\n gMap = {},\n gVals,\n gKey,\n group,\n i,\n j,\n k,\n n,\n t;\n domain.forEach((k, i) => kMap[k] = i + 1);\n for (i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = key(t);\n j = kMap[k] || (kMap[k] = domain.push(k));\n gKey = (gVals = groupby ? groupby.map(get) : Empty) + '';\n if (!(group = gMap[gKey])) {\n group = gMap[gKey] = [];\n groups.push(group);\n group.values = gVals;\n }\n group[j - 1] = t;\n }\n groups.domain = domain;\n return groups;\n}\n\n/**\n * Extend input tuples with aggregate values.\n * Calcuates aggregate values and joins them with the input stream.\n * @constructor\n */\nfunction JoinAggregate(params) {\n Aggregate.call(this, params);\n}\nJoinAggregate.Definition = {\n 'type': 'JoinAggregate',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidAggregateOps\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(JoinAggregate, Aggregate, {\n transform(_, pulse) {\n const aggr = this,\n mod = _.modified();\n let cells;\n\n // process all input tuples to calculate aggregates\n if (aggr.value && (mod || pulse.modified(aggr._inputs, true))) {\n cells = aggr.value = mod ? aggr.init(_) : {};\n pulse.visit(pulse.SOURCE, t => aggr.add(t));\n } else {\n cells = aggr.value = aggr.value || this.init(_);\n pulse.visit(pulse.REM, t => aggr.rem(t));\n pulse.visit(pulse.ADD, t => aggr.add(t));\n }\n\n // update aggregation cells\n aggr.changes();\n\n // write aggregate values to input tuples\n pulse.visit(pulse.SOURCE, t => {\n extend(t, cells[aggr.cellkey(t)].tuple);\n });\n return pulse.reflow(mod).modifies(this._outputs);\n },\n changes() {\n const adds = this._adds,\n mods = this._mods;\n let i, n;\n for (i = 0, n = this._alen; i < n; ++i) {\n this.celltuple(adds[i]);\n adds[i] = null; // for garbage collection\n }\n\n for (i = 0, n = this._mlen; i < n; ++i) {\n this.celltuple(mods[i]);\n mods[i] = null; // for garbage collection\n }\n\n this._alen = this._mlen = 0; // reset list of active cells\n }\n});\n\n/**\n * Compute kernel density estimates (KDE) for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {function(object): *} params.field - An accessor for the data field\n * to estimate.\n * @param {number} [params.bandwidth=0] - The KDE kernel bandwidth.\n * If zero or unspecified, the bandwidth is automatically determined.\n * @param {boolean} [params.counts=false] - A boolean flag indicating if the\n * output values should be probability estimates (false, default) or\n * smoothed counts (true).\n * @param {string} [params.cumulative=false] - A boolean flag indicating if a\n * density (false) or cumulative distribution (true) should be generated.\n * @param {Array} [params.extent] - The domain extent over which to\n * plot the density. If unspecified, the [min, max] data extent is used.\n * @param {string} [params.resolve='independent'] - Indicates how parameters for\n * multiple densities should be resolved. If \"independent\" (the default), each\n * density may have its own domain extent and dynamic number of curve sample\n * steps. If \"shared\", the KDE transform will ensure that all densities are\n * defined over a shared domain and curve steps, enabling stacking.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\nfunction KDE(params) {\n Transform.call(this, null, params);\n}\nKDE.Definition = {\n 'type': 'KDE',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'cumulative',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'counts',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'steps',\n 'type': 'number'\n }, {\n 'name': 'minsteps',\n 'type': 'number',\n 'default': 25\n }, {\n 'name': 'maxsteps',\n 'type': 'number',\n 'default': 200\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['value', 'density']\n }]\n};\ninherits(KDE, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(source, _.groupby, _.field),\n names = (_.groupby || []).map(accessorName),\n bandwidth = _.bandwidth,\n method = _.cumulative ? 'cdf' : 'pdf',\n as = _.as || ['value', 'density'],\n values = [];\n let domain = _.extent,\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200;\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n if (_.resolve === 'shared') {\n if (!domain) domain = extent(source, _.field);\n minsteps = maxsteps = _.steps || maxsteps;\n }\n groups.forEach(g => {\n const density = randomKDE(g, bandwidth)[method],\n scale = _.counts ? g.length : 1,\n local = domain || extent(g);\n sampleCurve(density, local, minsteps, maxsteps).forEach(v => {\n const t = {};\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = v[0];\n t[as[1]] = v[1] * scale;\n values.push(ingest(t));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\n\n/**\n * Generates a key function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - The field name(s) for the key function.\n * @param {boolean} params.flat - A boolean flag indicating if the field names\n * should be treated as flat property names, side-stepping nested field\n * lookups normally indicated by dot or bracket notation.\n */\nfunction Key(params) {\n Operator.call(this, null, update$2, params);\n}\ninherits(Key, Operator);\nfunction update$2(_) {\n return this.value && !_.modified() ? this.value : key(_.fields, _.flat);\n}\n\n/**\n * Load and parse data from an external source. Marshalls parameter\n * values and then invokes the Dataflow request method.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.url - The URL to load from.\n * @param {object} params.format - The data format options.\n */\nfunction Load(params) {\n Transform.call(this, [], params);\n this._pending = null;\n}\ninherits(Load, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow;\n if (this._pending) {\n // update state and return pulse\n return output(this, pulse, this._pending);\n }\n if (stop(_)) return pulse.StopPropagation;\n if (_.values) {\n // parse and ingest values, return output pulse\n return output(this, pulse, df.parse(_.values, _.format));\n } else if (_.async) {\n // return promise for non-blocking async loading\n const p = df.request(_.url, _.format).then(res => {\n this._pending = array(res.data);\n return df => df.touch(this);\n });\n return {\n async: p\n };\n } else {\n // return promise for synchronous loading\n return df.request(_.url, _.format).then(res => output(this, pulse, array(res.data)));\n }\n }\n});\nfunction stop(_) {\n return _.modified('async') && !(_.modified('values') || _.modified('url') || _.modified('format'));\n}\nfunction output(op, pulse, data) {\n data.forEach(ingest);\n const out = pulse.fork(pulse.NO_FIELDS & pulse.NO_SOURCE);\n out.rem = op.value;\n op.value = out.source = out.add = data;\n op._pending = null;\n if (out.rem.length) out.clean(true);\n return out;\n}\n\n/**\n * Extend tuples by joining them with values from a lookup table.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Map} params.index - The lookup table map.\n * @param {Array} params.as - Output field names for each lookup value.\n * @param {*} [params.default] - A default value to use if lookup fails.\n */\nfunction Lookup(params) {\n Transform.call(this, {}, params);\n}\nLookup.Definition = {\n 'type': 'Lookup',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'index',\n 'type': 'index',\n 'params': [{\n 'name': 'from',\n 'type': 'data',\n 'required': true\n }, {\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }]\n }, {\n 'name': 'values',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }, {\n 'name': 'default',\n 'default': null\n }]\n};\ninherits(Lookup, Transform, {\n transform(_, pulse) {\n const keys = _.fields,\n index = _.index,\n values = _.values,\n defaultValue = _.default == null ? null : _.default,\n reset = _.modified(),\n n = keys.length;\n let flag = reset ? pulse.SOURCE : pulse.ADD,\n out = pulse,\n as = _.as,\n set,\n m,\n mods;\n if (values) {\n m = values.length;\n if (n > 1 && !as) {\n error('Multi-field lookup requires explicit \"as\" parameter.');\n }\n if (as && as.length !== n * m) {\n error('The \"as\" parameter has too few output field names.');\n }\n as = as || values.map(accessorName);\n set = function (t) {\n for (var i = 0, k = 0, j, v; i < n; ++i) {\n v = index.get(keys[i](t));\n if (v == null) for (j = 0; j < m; ++j, ++k) t[as[k]] = defaultValue;else for (j = 0; j < m; ++j, ++k) t[as[k]] = values[j](v);\n }\n };\n } else {\n if (!as) {\n error('Missing output field names.');\n }\n set = function (t) {\n for (var i = 0, v; i < n; ++i) {\n v = index.get(keys[i](t));\n t[as[i]] = v == null ? defaultValue : v;\n }\n };\n }\n if (reset) {\n out = pulse.reflow(true);\n } else {\n mods = keys.some(k => pulse.modified(k.fields));\n flag |= mods ? pulse.MOD : 0;\n }\n pulse.visit(flag, set);\n return out.modifies(as);\n }\n});\n\n/**\n * Computes global min/max extents over a collection of extents.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array>} params.extents - The input extents.\n */\nfunction MultiExtent(params) {\n Operator.call(this, null, update$1, params);\n}\ninherits(MultiExtent, Operator);\nfunction update$1(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n const ext = _.extents,\n n = ext.length;\n let min = +Infinity,\n max = -Infinity,\n i,\n e;\n for (i = 0; i < n; ++i) {\n e = ext[i];\n if (e[0] < min) min = e[0];\n if (e[1] > max) max = e[1];\n }\n return [min, max];\n}\n\n/**\n * Merge a collection of value arrays.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array>} params.values - The input value arrrays.\n */\nfunction MultiValues(params) {\n Operator.call(this, null, update, params);\n}\ninherits(MultiValues, Operator);\nfunction update(_) {\n return this.value && !_.modified() ? this.value : _.values.reduce((data, _) => data.concat(_), []);\n}\n\n/**\n * Operator whose value is simply its parameter hash. This operator is\n * useful for enabling reactive updates to values of nested objects.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Params(params) {\n Transform.call(this, null, params);\n}\ninherits(Params, Transform, {\n transform(_, pulse) {\n this.modified(_.modified());\n this.value = _;\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); // do not pass tuples\n }\n});\n\n/**\n * Aggregate and pivot selected field values to become new fields.\n * This operator is useful to construction cross-tabulations.\n * @constructor\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby. These fields act just like groupby fields of an Aggregate transform.\n * @param {function(object): *} params.field - The field to pivot on. The unique\n * values of this field become new field names in the output stream.\n * @param {function(object): *} params.value - The field to populate pivoted fields.\n * The aggregate values of this field become the values of the new pivoted fields.\n * @param {string} [params.op] - The aggregation operation for the value field,\n * applied per cell in the output stream. The default is \"sum\".\n * @param {number} [params.limit] - An optional parameter indicating the maximum\n * number of pivoted fields to generate. The pivoted field names are sorted in\n * ascending order prior to enforcing the limit.\n */\nfunction Pivot(params) {\n Aggregate.call(this, params);\n}\nPivot.Definition = {\n 'type': 'Pivot',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'value',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'op',\n 'type': 'enum',\n 'values': ValidAggregateOps,\n 'default': 'sum'\n }, {\n 'name': 'limit',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(Pivot, Aggregate, {\n _transform: Aggregate.prototype.transform,\n transform(_, pulse) {\n return this._transform(aggregateParams(_, pulse), pulse);\n }\n});\n\n// Shoehorn a pivot transform into an aggregate transform!\n// First collect all unique pivot field values.\n// Then generate aggregate fields for each output pivot field.\nfunction aggregateParams(_, pulse) {\n const key = _.field,\n value = _.value,\n op = (_.op === 'count' ? '__count__' : _.op) || 'sum',\n fields = accessorFields(key).concat(accessorFields(value)),\n keys = pivotKeys(key, _.limit || 0, pulse);\n\n // if data stream content changes, pivot fields may change\n // flag parameter modification to ensure re-initialization\n if (pulse.changed()) _.set('__pivot__', null, null, true);\n return {\n key: _.key,\n groupby: _.groupby,\n ops: keys.map(() => op),\n fields: keys.map(k => get(k, key, value, fields)),\n as: keys.map(k => k + ''),\n modified: _.modified.bind(_)\n };\n}\n\n// Generate aggregate field accessor.\n// Output NaN for non-existent values; aggregator will ignore!\nfunction get(k, key, value, fields) {\n return accessor(d => key(d) === k ? value(d) : NaN, fields, k + '');\n}\n\n// Collect (and optionally limit) all unique pivot values.\nfunction pivotKeys(key, limit, pulse) {\n const map = {},\n list = [];\n pulse.visit(pulse.SOURCE, t => {\n const k = key(t);\n if (!map[k]) {\n map[k] = 1;\n list.push(k);\n }\n });\n list.sort(ascending);\n return limit ? list.slice(0, limit) : list;\n}\n\n/**\n * Partitions pre-faceted data into tuple subflows.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): Array} params.field - The field\n * accessor for an array of subflow tuple objects.\n */\nfunction PreFacet(params) {\n Facet.call(this, params);\n}\ninherits(PreFacet, Facet, {\n transform(_, pulse) {\n const flow = _.subflow,\n field = _.field,\n subflow = t => this.subflow(tupleid(t), flow, pulse, t);\n if (_.modified('field') || field && pulse.modified(accessorFields(field))) {\n error('PreFacet does not support field modification.');\n }\n this.initTargets(); // reset list of active subflows\n\n if (field) {\n pulse.visit(pulse.MOD, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.mod(_));\n });\n pulse.visit(pulse.ADD, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.add(ingest(_)));\n });\n pulse.visit(pulse.REM, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.rem(_));\n });\n } else {\n pulse.visit(pulse.MOD, t => subflow(t).mod(t));\n pulse.visit(pulse.ADD, t => subflow(t).add(t));\n pulse.visit(pulse.REM, t => subflow(t).rem(t));\n }\n if (pulse.clean()) {\n pulse.runAfter(() => this.clean());\n }\n return pulse;\n }\n});\n\n/**\n * Performs a relational projection, copying selected fields from source\n * tuples to a new set of derived tuples.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.as] - Output field names for each projected\n * field. Any unspecified fields will use the field name provided by\n * the field accessor.\n */\nfunction Project(params) {\n Transform.call(this, null, params);\n}\nProject.Definition = {\n 'type': 'Project',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }]\n};\ninherits(Project, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(_.fields, _.as || []),\n derive = fields ? (s, t) => project(s, t, fields, as) : rederive;\n let lut;\n if (this.value) {\n lut = this.value;\n } else {\n pulse = pulse.addAll();\n lut = this.value = {};\n }\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n pulse.visit(pulse.ADD, t => {\n const dt = derive(t, ingest({}));\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n pulse.visit(pulse.MOD, t => {\n out.mod.push(derive(t, lut[tupleid(t)]));\n });\n return out;\n }\n});\nfunction project(s, t, fields, as) {\n for (let i = 0, n = fields.length; i < n; ++i) {\n t[as[i]] = fields[i](s);\n }\n return t;\n}\n\n/**\n * Proxy the value of another operator as a pure signal value.\n * Ensures no tuples are propagated.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {*} params.value - The value to proxy, becomes the value of this operator.\n */\nfunction Proxy(params) {\n Transform.call(this, null, params);\n}\ninherits(Proxy, Transform, {\n transform(_, pulse) {\n this.value = _.value;\n return _.modified('value') ? pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS) : pulse.StopPropagation;\n }\n});\n\n/**\n * Generates sample quantile values from an input data stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the data field\n * over which to calculate quantile values.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {Array} [params.probs] - An array of probabilities in\n * the range (0, 1) for which to compute quantile values. If not specified,\n * the *step* parameter will be used.\n * @param {Array} [params.step=0.01] - A probability step size for\n * sampling quantile values. All values from one-half the step size up to\n * 1 (exclusive) will be sampled. This parameter is only used if the\n * *quantiles* parameter is not provided.\n */\nfunction Quantile(params) {\n Transform.call(this, null, params);\n}\nQuantile.Definition = {\n 'type': 'Quantile',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'probs',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 0.01\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['prob', 'value']\n }]\n};\nconst EPSILON = 1e-14;\ninherits(Quantile, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n as = _.as || ['prob', 'value'];\n if (this.value && !_.modified() && !pulse.changed()) {\n out.source = this.value;\n return out;\n }\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(source, _.groupby, _.field),\n names = (_.groupby || []).map(accessorName),\n values = [],\n step = _.step || 0.01,\n p = _.probs || range(step / 2, 1 - EPSILON, step),\n n = p.length;\n groups.forEach(g => {\n const q = quantiles(g, p);\n for (let i = 0; i < n; ++i) {\n const t = {};\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = p[i];\n t[as[1]] = q[i];\n values.push(ingest(t));\n }\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n return out;\n }\n});\n\n/**\n * Relays a data stream between data processing pipelines.\n * If the derive parameter is set, this transform will create derived\n * copies of observed tuples. This provides derived data streams in which\n * modifications to the tuples do not pollute an upstream data source.\n * @param {object} params - The parameters for this operator.\n * @param {number} [params.derive=false] - Boolean flag indicating if\n * the transform should make derived copies of incoming tuples.\n * @constructor\n */\nfunction Relay(params) {\n Transform.call(this, null, params);\n}\ninherits(Relay, Transform, {\n transform(_, pulse) {\n let out, lut;\n if (this.value) {\n lut = this.value;\n } else {\n out = pulse = pulse.addAll();\n lut = this.value = {};\n }\n if (_.derive) {\n out = pulse.fork(pulse.NO_SOURCE);\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n pulse.visit(pulse.ADD, t => {\n const dt = derive(t);\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n pulse.visit(pulse.MOD, t => {\n const dt = lut[tupleid(t)];\n for (const k in t) {\n dt[k] = t[k];\n // down stream writes may overwrite re-derived tuples\n // conservatively mark all source fields as modified\n out.modifies(k);\n }\n out.mod.push(dt);\n });\n }\n return out;\n }\n});\n\n/**\n * Samples tuples passing through this operator.\n * Uses reservoir sampling to maintain a representative sample.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {number} [params.size=1000] - The maximum number of samples.\n */\nfunction Sample(params) {\n Transform.call(this, [], params);\n this.count = 0;\n}\nSample.Definition = {\n 'type': 'Sample',\n 'metadata': {},\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'default': 1000\n }]\n};\ninherits(Sample, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n mod = _.modified('size'),\n num = _.size,\n map = this.value.reduce((m, t) => (m[tupleid(t)] = 1, m), {});\n let res = this.value,\n cnt = this.count,\n cap = 0;\n\n // sample reservoir update function\n function update(t) {\n let p, idx;\n if (res.length < num) {\n res.push(t);\n } else {\n idx = ~~((cnt + 1) * random());\n if (idx < res.length && idx >= cap) {\n p = res[idx];\n if (map[tupleid(p)]) out.rem.push(p); // eviction\n res[idx] = t;\n }\n }\n ++cnt;\n }\n if (pulse.rem.length) {\n // find all tuples that should be removed, add to output\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n if (map[id]) {\n map[id] = -1;\n out.rem.push(t);\n }\n --cnt;\n });\n\n // filter removed tuples out of the sample reservoir\n res = res.filter(t => map[tupleid(t)] !== -1);\n }\n if ((pulse.rem.length || mod) && res.length < num && pulse.source) {\n // replenish sample if backing data source is available\n cap = cnt = res.length;\n pulse.visit(pulse.SOURCE, t => {\n // update, but skip previously sampled tuples\n if (!map[tupleid(t)]) update(t);\n });\n cap = -1;\n }\n if (mod && res.length > num) {\n const n = res.length - num;\n for (let i = 0; i < n; ++i) {\n map[tupleid(res[i])] = -1;\n out.rem.push(res[i]);\n }\n res = res.slice(n);\n }\n if (pulse.mod.length) {\n // propagate modified tuples in the sample reservoir\n pulse.visit(pulse.MOD, t => {\n if (map[tupleid(t)]) out.mod.push(t);\n });\n }\n if (pulse.add.length) {\n // update sample reservoir\n pulse.visit(pulse.ADD, update);\n }\n if (pulse.add.length || cap < 0) {\n // output newly added tuples\n out.add = res.filter(t => !map[tupleid(t)]);\n }\n this.count = cnt;\n this.value = out.source = res;\n return out;\n }\n});\n\n/**\n * Generates data tuples for a specified sequence range of numbers.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {number} params.start - The first number in the sequence.\n * @param {number} params.stop - The last number (exclusive) in the sequence.\n * @param {number} [params.step=1] - The step size between numbers in the sequence.\n */\nfunction Sequence(params) {\n Transform.call(this, null, params);\n}\nSequence.Definition = {\n 'type': 'Sequence',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'start',\n 'type': 'number',\n 'required': true\n }, {\n 'name': 'stop',\n 'type': 'number',\n 'required': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'data'\n }]\n};\ninherits(Sequence, Transform, {\n transform(_, pulse) {\n if (this.value && !_.modified()) return;\n const out = pulse.materialize().fork(pulse.MOD),\n as = _.as || 'data';\n out.rem = this.value ? pulse.rem.concat(this.value) : pulse.rem;\n this.value = range(_.start, _.stop, _.step || 1).map(v => {\n const t = {};\n t[as] = v;\n return ingest(t);\n });\n out.add = pulse.add.concat(this.value);\n return out;\n }\n});\n\n/**\n * Propagates a new pulse without any tuples so long as the input\n * pulse contains some added, removed or modified tuples.\n * @param {object} params - The parameters for this operator.\n * @constructor\n */\nfunction Sieve(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\n\ninherits(Sieve, Transform, {\n transform(_, pulse) {\n this.value = pulse.source;\n return pulse.changed() ? pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS) : pulse.StopPropagation;\n }\n});\n\n/**\n * Discretize dates to specific time units.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The data field containing date/time values.\n */\nfunction TimeUnit(params) {\n Transform.call(this, null, params);\n}\nconst OUTPUT = ['unit0', 'unit1'];\nTimeUnit.Definition = {\n 'type': 'TimeUnit',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'interval',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'units',\n 'type': 'enum',\n 'values': TIME_UNITS,\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'maxbins',\n 'type': 'number',\n 'default': 40\n }, {\n 'name': 'extent',\n 'type': 'date',\n 'array': true\n }, {\n 'name': 'timezone',\n 'type': 'enum',\n 'default': 'local',\n 'values': ['local', 'utc']\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': OUTPUT\n }]\n};\ninherits(TimeUnit, Transform, {\n transform(_, pulse) {\n const field = _.field,\n band = _.interval !== false,\n utc = _.timezone === 'utc',\n floor = this._floor(_, pulse),\n offset = (utc ? utcInterval : timeInterval)(floor.unit).offset,\n as = _.as || OUTPUT,\n u0 = as[0],\n u1 = as[1],\n step = floor.step;\n let min = floor.start || Infinity,\n max = floor.stop || -Infinity,\n flag = pulse.ADD;\n if (_.modified() || pulse.changed(pulse.REM) || pulse.modified(accessorFields(field))) {\n pulse = pulse.reflow(true);\n flag = pulse.SOURCE;\n min = Infinity;\n max = -Infinity;\n }\n pulse.visit(flag, t => {\n const v = field(t);\n let a, b;\n if (v == null) {\n t[u0] = null;\n if (band) t[u1] = null;\n } else {\n t[u0] = a = b = floor(v);\n if (band) t[u1] = b = offset(a, step);\n if (a < min) min = a;\n if (b > max) max = b;\n }\n });\n floor.start = min;\n floor.stop = max;\n return pulse.modifies(band ? as : u0);\n },\n _floor(_, pulse) {\n const utc = _.timezone === 'utc';\n\n // get parameters\n const {\n units,\n step\n } = _.units ? {\n units: _.units,\n step: _.step || 1\n } : timeBin({\n extent: _.extent || extent(pulse.materialize(pulse.SOURCE).source, _.field),\n maxbins: _.maxbins\n });\n\n // check / standardize time units\n const tunits = timeUnits(units),\n prev = this.value || {},\n floor = (utc ? utcFloor : timeFloor)(tunits, step);\n floor.unit = peek(tunits);\n floor.units = tunits;\n floor.step = step;\n floor.start = prev.start;\n floor.stop = prev.stop;\n return this.value = floor;\n }\n});\n\n/**\n * An index that maps from unique, string-coerced, field values to tuples.\n * Assumes that the field serves as a unique key with no duplicate values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field accessor to index.\n */\nfunction TupleIndex(params) {\n Transform.call(this, fastmap(), params);\n}\ninherits(TupleIndex, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow,\n field = _.field,\n index = this.value,\n set = t => index.set(field(t), t);\n let mod = true;\n if (_.modified('field') || pulse.modified(field.fields)) {\n index.clear();\n pulse.visit(pulse.SOURCE, set);\n } else if (pulse.changed()) {\n pulse.visit(pulse.REM, t => index.delete(field(t)));\n pulse.visit(pulse.ADD, set);\n } else {\n mod = false;\n }\n this.modified(mod);\n if (index.empty > df.cleanThreshold) df.runAfter(index.clean);\n return pulse.fork();\n }\n});\n\n/**\n * Extracts an array of values. Assumes the source data has already been\n * reduced as needed (e.g., by an upstream Aggregate transform).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The domain field to extract.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting the values. The comparator will be\n * applied to backing tuples prior to value extraction.\n */\nfunction Values(params) {\n Transform.call(this, null, params);\n}\ninherits(Values, Transform, {\n transform(_, pulse) {\n const run = !this.value || _.modified('field') || _.modified('sort') || pulse.changed() || _.sort && pulse.modified(_.sort.fields);\n if (run) {\n this.value = (_.sort ? pulse.source.slice().sort(stableCompare(_.sort)) : pulse.source).map(_.field);\n }\n }\n});\n\nfunction WindowOp(op, field, param, as) {\n const fn = WindowOps[op](field, param);\n return {\n init: fn.init || zero,\n update: function (w, t) {\n t[as] = fn.next(w);\n }\n };\n}\nconst WindowOps = {\n row_number: function () {\n return {\n next: w => w.index + 1\n };\n },\n rank: function () {\n let rank;\n return {\n init: () => rank = 1,\n next: w => {\n const i = w.index,\n data = w.data;\n return i && w.compare(data[i - 1], data[i]) ? rank = i + 1 : rank;\n }\n };\n },\n dense_rank: function () {\n let drank;\n return {\n init: () => drank = 1,\n next: w => {\n const i = w.index,\n d = w.data;\n return i && w.compare(d[i - 1], d[i]) ? ++drank : drank;\n }\n };\n },\n percent_rank: function () {\n const rank = WindowOps.rank(),\n next = rank.next;\n return {\n init: rank.init,\n next: w => (next(w) - 1) / (w.data.length - 1)\n };\n },\n cume_dist: function () {\n let cume;\n return {\n init: () => cume = 0,\n next: w => {\n const d = w.data,\n c = w.compare;\n let i = w.index;\n if (cume < i) {\n while (i + 1 < d.length && !c(d[i], d[i + 1])) ++i;\n cume = i;\n }\n return (1 + cume) / d.length;\n }\n };\n },\n ntile: function (field, num) {\n num = +num;\n if (!(num > 0)) error('ntile num must be greater than zero.');\n const cume = WindowOps.cume_dist(),\n next = cume.next;\n return {\n init: cume.init,\n next: w => Math.ceil(num * next(w))\n };\n },\n lag: function (field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n const i = w.index - offset;\n return i >= 0 ? field(w.data[i]) : null;\n }\n };\n },\n lead: function (field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n const i = w.index + offset,\n d = w.data;\n return i < d.length ? field(d[i]) : null;\n }\n };\n },\n first_value: function (field) {\n return {\n next: w => field(w.data[w.i0])\n };\n },\n last_value: function (field) {\n return {\n next: w => field(w.data[w.i1 - 1])\n };\n },\n nth_value: function (field, nth) {\n nth = +nth;\n if (!(nth > 0)) error('nth_value nth must be greater than zero.');\n return {\n next: w => {\n const i = w.i0 + (nth - 1);\n return i < w.i1 ? field(w.data[i]) : null;\n }\n };\n },\n prev_value: function (field) {\n let prev;\n return {\n init: () => prev = null,\n next: w => {\n const v = field(w.data[w.index]);\n return v != null ? prev = v : prev;\n }\n };\n },\n next_value: function (field) {\n let v, i;\n return {\n init: () => (v = null, i = -1),\n next: w => {\n const d = w.data;\n return w.index <= i ? v : (i = find(field, d, w.index)) < 0 ? (i = d.length, v = null) : v = field(d[i]);\n }\n };\n }\n};\nfunction find(field, data, index) {\n for (let n = data.length; index < n; ++index) {\n const v = field(data[index]);\n if (v != null) return index;\n }\n return -1;\n}\nconst ValidWindowOps = Object.keys(WindowOps);\n\nfunction WindowState(_) {\n const ops = array(_.ops),\n fields = array(_.fields),\n params = array(_.params),\n aggregate_params = array(_.aggregate_params),\n as = array(_.as),\n outputs = this.outputs = [],\n windows = this.windows = [],\n inputs = {},\n map = {},\n counts = [],\n measures = [];\n let countOnly = true;\n function visitInputs(f) {\n array(accessorFields(f)).forEach(_ => inputs[_] = 1);\n }\n visitInputs(_.sort);\n ops.forEach((op, i) => {\n const field = fields[i],\n param = params[i],\n aggregate_param = aggregate_params[i] || null,\n mname = accessorName(field),\n name = measureName(op, mname, as[i]);\n visitInputs(field);\n outputs.push(name);\n\n // Window operation\n if (hasOwnProperty(WindowOps, op)) {\n windows.push(WindowOp(op, field, param, name));\n }\n\n // Aggregate operation\n else {\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n if (op === 'count') {\n counts.push(name);\n return;\n }\n countOnly = false;\n let m = map[mname];\n if (!m) {\n m = map[mname] = [];\n m.field = field;\n measures.push(m);\n }\n m.push(createMeasure(op, aggregate_param, name));\n }\n });\n if (counts.length || measures.length) {\n this.cell = cell(measures, counts, countOnly);\n }\n this.inputs = Object.keys(inputs);\n}\nconst prototype = WindowState.prototype;\nprototype.init = function () {\n this.windows.forEach(_ => _.init());\n if (this.cell) this.cell.init();\n};\nprototype.update = function (w, t) {\n const cell = this.cell,\n wind = this.windows,\n data = w.data,\n m = wind && wind.length;\n let j;\n if (cell) {\n for (j = w.p0; j < w.i0; ++j) cell.rem(data[j]);\n for (j = w.p1; j < w.i1; ++j) cell.add(data[j]);\n cell.set(t);\n }\n for (j = 0; j < m; ++j) wind[j].update(w, t);\n};\nfunction cell(measures, counts, countOnly) {\n measures = measures.map(m => compileMeasures(m, m.field));\n const cell = {\n num: 0,\n agg: null,\n store: false,\n count: counts\n };\n if (!countOnly) {\n var n = measures.length,\n a = cell.agg = Array(n),\n i = 0;\n for (; i < n; ++i) a[i] = new measures[i](cell);\n }\n if (cell.store) {\n var store = cell.data = new TupleStore();\n }\n cell.add = function (t) {\n cell.num += 1;\n if (countOnly) return;\n if (store) store.add(t);\n for (let i = 0; i < n; ++i) {\n a[i].add(a[i].get(t), t);\n }\n };\n cell.rem = function (t) {\n cell.num -= 1;\n if (countOnly) return;\n if (store) store.rem(t);\n for (let i = 0; i < n; ++i) {\n a[i].rem(a[i].get(t), t);\n }\n };\n cell.set = function (t) {\n let i, n;\n\n // consolidate stored values\n if (store) store.values();\n\n // update tuple properties\n for (i = 0, n = counts.length; i < n; ++i) t[counts[i]] = cell.num;\n if (!countOnly) for (i = 0, n = a.length; i < n; ++i) a[i].set(t);\n };\n cell.init = function () {\n cell.num = 0;\n if (store) store.reset();\n for (let i = 0; i < n; ++i) a[i].init();\n };\n return cell;\n}\n\n/**\n * Perform window calculations and write results to the input stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator function for sorting tuples within a window.\n * @param {Array} [params.groupby] - An array of accessors by which to partition tuples into separate windows.\n * @param {Array} params.ops - An array of strings indicating window operations to perform.\n * @param {Array} [params.fields] - An array of accessors\n * for data fields to use as inputs to window operations.\n * @param {Array<*>} [params.params] - An array of parameter values for window operations.\n * @param {Array} [params.aggregate_params] - An optional array of parameter values for aggregation operations.\n * @param {Array} [params.as] - An array of output field names for window operations.\n * @param {Array} [params.frame] - Window frame definition as two-element array.\n * @param {boolean} [params.ignorePeers=false] - If true, base window frame boundaries on row\n * number alone, ignoring peers with identical sort values. If false (default),\n * the window boundaries will be adjusted to include peer values.\n */\nfunction Window(params) {\n Transform.call(this, {}, params);\n this._mlen = 0;\n this._mods = [];\n}\nWindow.Definition = {\n 'type': 'Window',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidWindowOps.concat(ValidAggregateOps)\n }, {\n 'name': 'params',\n 'type': 'number',\n 'null': true,\n 'array': true\n }, {\n 'name': 'aggregate_params',\n 'type': 'field',\n 'null': true,\n 'array': true,\n 'default': [null]\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'frame',\n 'type': 'number',\n 'null': true,\n 'array': true,\n 'length': 2,\n 'default': [null, 0]\n }, {\n 'name': 'ignorePeers',\n 'type': 'boolean',\n 'default': false\n }]\n};\ninherits(Window, Transform, {\n transform(_, pulse) {\n this.stamp = pulse.stamp;\n const mod = _.modified(),\n cmp = stableCompare(_.sort),\n key = groupkey(_.groupby),\n group = t => this.group(key(t));\n\n // initialize window state\n let state = this.state;\n if (!state || mod) {\n state = this.state = new WindowState(_);\n }\n\n // partition input tuples\n if (mod || pulse.modified(state.inputs)) {\n this.value = {};\n pulse.visit(pulse.SOURCE, t => group(t).add(t));\n } else {\n pulse.visit(pulse.REM, t => group(t).remove(t));\n pulse.visit(pulse.ADD, t => group(t).add(t));\n }\n\n // perform window calculations for each modified partition\n for (let i = 0, n = this._mlen; i < n; ++i) {\n processPartition(this._mods[i], state, cmp, _);\n }\n this._mlen = 0;\n this._mods = [];\n\n // TODO don't reflow everything?\n return pulse.reflow(mod).modifies(state.outputs);\n },\n group(key) {\n let group = this.value[key];\n if (!group) {\n group = this.value[key] = SortedList(tupleid);\n group.stamp = -1;\n }\n if (group.stamp < this.stamp) {\n group.stamp = this.stamp;\n this._mods[this._mlen++] = group;\n }\n return group;\n }\n});\nfunction processPartition(list, state, cmp, _) {\n const sort = _.sort,\n range = sort && !_.ignorePeers,\n frame = _.frame || [null, 0],\n data = list.data(cmp),\n // use cmp for stable sort\n n = data.length,\n b = range ? bisector(sort) : null,\n w = {\n i0: 0,\n i1: 0,\n p0: 0,\n p1: 0,\n index: 0,\n data: data,\n compare: sort || constant(-1)\n };\n state.init();\n for (let i = 0; i < n; ++i) {\n setWindow(w, frame, i, n);\n if (range) adjustRange(w, b);\n state.update(w, data[i]);\n }\n}\nfunction setWindow(w, f, i, n) {\n w.p0 = w.i0;\n w.p1 = w.i1;\n w.i0 = f[0] == null ? 0 : Math.max(0, i - Math.abs(f[0]));\n w.i1 = f[1] == null ? n : Math.min(n, i + Math.abs(f[1]) + 1);\n w.index = i;\n}\n\n// if frame type is 'range', adjust window for peer values\nfunction adjustRange(w, bisect) {\n const r0 = w.i0,\n r1 = w.i1 - 1,\n c = w.compare,\n d = w.data,\n n = d.length - 1;\n if (r0 > 0 && !c(d[r0], d[r0 - 1])) w.i0 = bisect.left(d, d[r0]);\n if (r1 < n && !c(d[r1], d[r1 + 1])) w.i1 = bisect.right(d, d[r1]);\n}\n\nexport { Aggregate as aggregate, Bin as bin, Collect as collect, Compare as compare, CountPattern as countpattern, Cross as cross, Density as density, DotBin as dotbin, Expression as expression, Extent as extent, Facet as facet, Field as field, Filter as filter, Flatten as flatten, Fold as fold, Formula as formula, Generate as generate, Impute as impute, JoinAggregate as joinaggregate, KDE as kde, Key as key, Load as load, Lookup as lookup, MultiExtent as multiextent, MultiValues as multivalues, Params as params, Pivot as pivot, PreFacet as prefacet, Project as project, Proxy as proxy, Quantile as quantile, Relay as relay, Sample as sample, Sequence as sequence, Sieve as sieve, Subflow as subflow, TimeUnit as timeunit, TupleIndex as tupleindex, Values as values, Window as window };\n","export default function mean(values, valueof) {\n let count = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n }\n if (count) return sum / count;\n}\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n var x1 = null,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(area);\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import {pi, sqrt, tau} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const r = sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // falls through\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop.js\";\nimport {point} from \"./cardinal.js\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal.js\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed.js\";\nimport noop from \"../noop.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","function domCanvas(w, h) {\n if (typeof document !== 'undefined' && document.createElement) {\n const c = document.createElement('canvas');\n if (c && c.getContext) {\n c.width = w;\n c.height = h;\n return c;\n }\n }\n return null;\n}\nconst domImage = () => typeof Image !== 'undefined' ? Image : null;\n\nexport { domCanvas as canvas, domCanvas, domImage as image };\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb() {\n return hcl2lab(this).rgb();\n }\n}));\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n if (values === undefined) values = interpolate, interpolate = value;\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n","import {hue} from \"./color.js\";\n\nexport default function(a, b) {\n var i = hue(+a, +b);\n return function(t) {\n var x = i(t);\n return x - 360 * Math.floor(x / 360);\n };\n}\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n a = color(start.a, end.a),\n b = color(start.b, end.b),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n const scale = transform(transformLog, transformExp);\n const domain = scale.domain;\n let base = 10;\n let logs;\n let pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = count => {\n const d = domain();\n let u = d[0];\n let v = d[d.length - 1];\n const r = v < u;\n\n if (r) ([u, v] = [v, u]);\n\n let i = logs(u);\n let j = logs(v);\n let k;\n let t;\n const n = count == null ? 10 : +count;\n let z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.floor(i), j = Math.ceil(j);\n if (u > 0) for (; i <= j; ++i) {\n for (k = 1; k < base; ++k) {\n t = i < 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i <= j; ++i) {\n for (k = base - 1; k >= 1; --k) {\n t = i > 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n if (z.length * 2 < n) z = ticks(u, v, n);\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = (count, specifier) => {\n if (count == null) count = 10;\n if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n if (typeof specifier !== \"function\") {\n if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n specifier = format(specifier);\n }\n if (count === Infinity) return specifier;\n const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return d => {\n let i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = () => {\n return domain(nice(domain(), {\n floor: x => pows(Math.floor(logs(x))),\n ceil: x => pows(Math.ceil(logs(x)))\n }));\n };\n\n return scale;\n}\n\nexport default function log() {\n const scale = loggish(transformer()).domain([1, 10]);\n scale.copy = () => copy(scale, log()).base(scale.base());\n initRange.apply(scale, arguments);\n return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n s = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1, r2;\n return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n return scale;\n };\n}\n\nexport default function diverging() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, diverging());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","import { toNumber, peek, toSet, array, constant, isNumber, span, isObject, isString, error, isArray } from 'vega-util';\nimport { bisectRight, range, bisect } from 'd3-array';\nimport * as $ from 'd3-scale';\nimport { scaleOrdinal, tickFormat as tickFormat$1 } from 'd3-scale';\nexport { scaleImplicit } from 'd3-scale';\nimport * as $$1 from 'd3-interpolate';\nimport { timeInterval, utcInterval } from 'vega-time';\n\nfunction bandSpace (count, paddingInner, paddingOuter) {\n const space = count - paddingInner + paddingOuter * 2;\n return count ? space > 0 ? space : 1 : 0;\n}\n\nconst Identity = 'identity';\nconst Linear = 'linear';\nconst Log = 'log';\nconst Pow = 'pow';\nconst Sqrt = 'sqrt';\nconst Symlog = 'symlog';\nconst Time = 'time';\nconst UTC = 'utc';\nconst Sequential = 'sequential';\nconst Diverging = 'diverging';\nconst Quantile = 'quantile';\nconst Quantize = 'quantize';\nconst Threshold = 'threshold';\nconst Ordinal = 'ordinal';\nconst Point = 'point';\nconst Band = 'band';\nconst BinOrdinal = 'bin-ordinal';\n\n// categories\nconst Continuous = 'continuous';\nconst Discrete = 'discrete';\nconst Discretizing = 'discretizing';\nconst Interpolating = 'interpolating';\nconst Temporal = 'temporal';\n\nfunction invertRange (scale) {\n return function (_) {\n let lo = _[0],\n hi = _[1],\n t;\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n return [scale.invert(lo), scale.invert(hi)];\n };\n}\n\nfunction invertRangeExtent (scale) {\n return function (_) {\n const range = scale.range();\n let lo = _[0],\n hi = _[1],\n min = -1,\n max,\n t,\n i,\n n;\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n for (i = 0, n = range.length; i < n; ++i) {\n if (range[i] >= lo && range[i] <= hi) {\n if (min < 0) min = i;\n max = i;\n }\n }\n if (min < 0) return undefined;\n lo = scale.invertExtent(range[min]);\n hi = scale.invertExtent(range[max]);\n return [lo[0] === undefined ? lo[1] : lo[0], hi[1] === undefined ? hi[0] : hi[1]];\n };\n}\n\nfunction band() {\n const scale = scaleOrdinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range;\n let range$1 = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n delete scale.unknown;\n function rescale() {\n const n = domain().length,\n reverse = range$1[1] < range$1[0],\n stop = range$1[1 - reverse],\n space = bandSpace(n, paddingInner, paddingOuter);\n let start = range$1[reverse - 0];\n step = (stop - start) / (space || 1);\n if (round) {\n step = Math.floor(step);\n }\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) {\n start = Math.round(start);\n bandwidth = Math.round(bandwidth);\n }\n const values = range(n).map(i => start + step * i);\n return ordinalRange(reverse ? values.reverse() : values);\n }\n scale.domain = function (_) {\n if (arguments.length) {\n domain(_);\n return rescale();\n } else {\n return domain();\n }\n };\n scale.range = function (_) {\n if (arguments.length) {\n range$1 = [+_[0], +_[1]];\n return rescale();\n } else {\n return range$1.slice();\n }\n };\n scale.rangeRound = function (_) {\n range$1 = [+_[0], +_[1]];\n round = true;\n return rescale();\n };\n scale.bandwidth = function () {\n return bandwidth;\n };\n scale.step = function () {\n return step;\n };\n scale.round = function (_) {\n if (arguments.length) {\n round = !!_;\n return rescale();\n } else {\n return round;\n }\n };\n scale.padding = function (_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n paddingInner = paddingOuter;\n return rescale();\n } else {\n return paddingInner;\n }\n };\n scale.paddingInner = function (_) {\n if (arguments.length) {\n paddingInner = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingInner;\n }\n };\n scale.paddingOuter = function (_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingOuter;\n }\n };\n scale.align = function (_) {\n if (arguments.length) {\n align = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return align;\n }\n };\n scale.invertRange = function (_) {\n // bail if range has null or undefined values\n if (_[0] == null || _[1] == null) return;\n const reverse = range$1[1] < range$1[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1;\n let lo = +_[0],\n hi = +_[1],\n a,\n b,\n t;\n\n // bail if either range endpoint is invalid\n if (lo !== lo || hi !== hi) return;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n if (hi < values[0] || lo > range$1[1 - reverse]) return;\n\n // binary search to index into scale range\n a = Math.max(0, bisectRight(values, lo) - 1);\n b = lo === hi ? a : bisectRight(values, hi) - 1;\n\n // increment index a if lo is within padding gap\n if (lo - values[a] > bandwidth + 1e-10) ++a;\n if (reverse) {\n // map + swap\n t = a;\n a = n - b;\n b = n - t;\n }\n return a > b ? undefined : domain().slice(a, b + 1);\n };\n scale.invert = function (_) {\n const value = scale.invertRange([_, _]);\n return value ? value[0] : value;\n };\n scale.copy = function () {\n return band().domain(domain()).range(range$1).round(round).paddingInner(paddingInner).paddingOuter(paddingOuter).align(align);\n };\n return rescale();\n}\nfunction pointish(scale) {\n const copy = scale.copy;\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n scale.copy = function () {\n return pointish(copy());\n };\n return scale;\n}\nfunction point() {\n return pointish(band().paddingInner(1));\n}\n\nvar map = Array.prototype.map;\nfunction numbers(_) {\n return map.call(_, toNumber);\n}\n\nconst slice = Array.prototype.slice;\n\nfunction scaleBinOrdinal() {\n let domain = [],\n range = [];\n function scale(x) {\n return x == null || x !== x ? undefined : range[(bisect(domain, x) - 1) % range.length];\n }\n scale.domain = function (_) {\n if (arguments.length) {\n domain = numbers(_);\n return scale;\n } else {\n return domain.slice();\n }\n };\n scale.range = function (_) {\n if (arguments.length) {\n range = slice.call(_);\n return scale;\n } else {\n return range.slice();\n }\n };\n scale.tickFormat = function (count, specifier) {\n return tickFormat$1(domain[0], peek(domain), count == null ? 10 : count, specifier);\n };\n scale.copy = function () {\n return scaleBinOrdinal().domain(scale.domain()).range(scale.range());\n };\n return scale;\n}\n\n/** Private scale registry: should not be exported */\nconst scales = new Map();\nconst VEGA_SCALE = Symbol('vega_scale');\nfunction registerScale(scale) {\n scale[VEGA_SCALE] = true;\n return scale;\n}\n\n/**\n * Return true if object was created by a constructor from the vega-scale `scale` function.\n */\nfunction isRegisteredScale(scale) {\n return scale && scale[VEGA_SCALE] === true;\n}\n\n/**\n * Augment scales with their type and needed inverse methods.\n */\nfunction create(type, constructor, metadata) {\n const ctr = function scale() {\n const s = constructor();\n if (!s.invertRange) {\n s.invertRange = s.invert ? invertRange(s) : s.invertExtent ? invertRangeExtent(s) : undefined;\n }\n s.type = type;\n return registerScale(s);\n };\n ctr.metadata = toSet(array(metadata));\n return ctr;\n}\n\n/**\n * Registry function for adding and accessing scale constructor functions.\n * The *type* argument is a String indicating the name of the scale type.\n *\n * If the *scale* argument is not specified, this method returns the matching scale constructor in the registry, or `null` if not found.\n * If the *scale* argument is provided, it must be a scale constructor function to add to the registry under the given *type* name.\n * The *metadata* argument provides additional information to guide appropriate use of scales within Vega.\n *\n * *metadata* can be either a string or string array. The valid string values are:\n * - `\"continuous\"` - the scale is defined over a continuous-valued domain.\n * - `\"discrete\"` - the scale is defined over a discrete domain and range.\n * - `\"discretizing\"` - the scale discretizes a continuous domain to a discrete range.\n * - `\"interpolating\"` - the scale range is defined using a color interpolator.\n * - `\"log\"` - the scale performs a logarithmic transform of the continuous domain.\n * - `\"temporal\"` - the scale domain is defined over date-time values.\n */\nfunction scale(type, scale, metadata) {\n if (arguments.length > 1) {\n scales.set(type, create(type, scale, metadata));\n return this;\n } else {\n return isValidScaleType(type) ? scales.get(type) : undefined;\n }\n}\n\n// identity scale\nscale(Identity, $.scaleIdentity);\n\n// continuous scales\nscale(Linear, $.scaleLinear, Continuous);\nscale(Log, $.scaleLog, [Continuous, Log]);\nscale(Pow, $.scalePow, Continuous);\nscale(Sqrt, $.scaleSqrt, Continuous);\nscale(Symlog, $.scaleSymlog, Continuous);\nscale(Time, $.scaleTime, [Continuous, Temporal]);\nscale(UTC, $.scaleUtc, [Continuous, Temporal]);\n\n// sequential scales\nscale(Sequential, $.scaleSequential, [Continuous, Interpolating]); // backwards compat\nscale(`${Sequential}-${Linear}`, $.scaleSequential, [Continuous, Interpolating]);\nscale(`${Sequential}-${Log}`, $.scaleSequentialLog, [Continuous, Interpolating, Log]);\nscale(`${Sequential}-${Pow}`, $.scaleSequentialPow, [Continuous, Interpolating]);\nscale(`${Sequential}-${Sqrt}`, $.scaleSequentialSqrt, [Continuous, Interpolating]);\nscale(`${Sequential}-${Symlog}`, $.scaleSequentialSymlog, [Continuous, Interpolating]);\n\n// diverging scales\nscale(`${Diverging}-${Linear}`, $.scaleDiverging, [Continuous, Interpolating]);\nscale(`${Diverging}-${Log}`, $.scaleDivergingLog, [Continuous, Interpolating, Log]);\nscale(`${Diverging}-${Pow}`, $.scaleDivergingPow, [Continuous, Interpolating]);\nscale(`${Diverging}-${Sqrt}`, $.scaleDivergingSqrt, [Continuous, Interpolating]);\nscale(`${Diverging}-${Symlog}`, $.scaleDivergingSymlog, [Continuous, Interpolating]);\n\n// discretizing scales\nscale(Quantile, $.scaleQuantile, [Discretizing, Quantile]);\nscale(Quantize, $.scaleQuantize, Discretizing);\nscale(Threshold, $.scaleThreshold, Discretizing);\n\n// discrete scales\nscale(BinOrdinal, scaleBinOrdinal, [Discrete, Discretizing]);\nscale(Ordinal, $.scaleOrdinal, Discrete);\nscale(Band, band, Discrete);\nscale(Point, point, Discrete);\nfunction isValidScaleType(type) {\n return scales.has(type);\n}\nfunction hasType(key, type) {\n const s = scales.get(key);\n return s && s.metadata[type];\n}\nfunction isContinuous(key) {\n return hasType(key, Continuous);\n}\nfunction isDiscrete(key) {\n return hasType(key, Discrete);\n}\nfunction isDiscretizing(key) {\n return hasType(key, Discretizing);\n}\nfunction isLogarithmic(key) {\n return hasType(key, Log);\n}\nfunction isTemporal(key) {\n return hasType(key, Temporal);\n}\nfunction isInterpolating(key) {\n return hasType(key, Interpolating);\n}\nfunction isQuantile(key) {\n return hasType(key, Quantile);\n}\n\nconst scaleProps = ['clamp', 'base', 'constant', 'exponent'];\nfunction interpolateRange(interpolator, range) {\n const start = range[0],\n span = peek(range) - start;\n return function (i) {\n return interpolator(start + i * span);\n };\n}\nfunction interpolateColors(colors, type, gamma) {\n return $$1.piecewise(interpolate(type || 'rgb', gamma), colors);\n}\nfunction quantizeInterpolator(interpolator, count) {\n const samples = new Array(count),\n n = count + 1;\n for (let i = 0; i < count;) samples[i] = interpolator(++i / n);\n return samples;\n}\nfunction scaleCopy(scale) {\n const t = scale.type,\n s = scale.copy();\n s.type = t;\n return s;\n}\nfunction scaleFraction(scale$1, min, max) {\n const delta = max - min;\n let i, t, s;\n if (!delta || !Number.isFinite(delta)) {\n return constant(0.5);\n } else {\n i = (t = scale$1.type).indexOf('-');\n t = i < 0 ? t : t.slice(i + 1);\n s = scale(t)().domain([min, max]).range([0, 1]);\n scaleProps.forEach(m => scale$1[m] ? s[m](scale$1[m]()) : 0);\n return s;\n }\n}\nfunction interpolate(type, gamma) {\n const interp = $$1[method(type)];\n return gamma != null && interp && interp.gamma ? interp.gamma(gamma) : interp;\n}\nfunction method(type) {\n return 'interpolate' + type.toLowerCase().split('-').map(s => s[0].toUpperCase() + s.slice(1)).join('');\n}\n\nconst continuous = {\n blues: 'cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90',\n greens: 'd3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429',\n greys: 'e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e',\n oranges: 'fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303',\n purples: 'e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c',\n reds: 'fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13',\n blueGreen: 'd5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429',\n bluePurple: 'ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71',\n greenBlue: 'd3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1',\n orangeRed: 'fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403',\n purpleBlue: 'dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281',\n purpleBlueGreen: 'dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353',\n purpleRed: 'dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a',\n redPurple: 'fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174',\n yellowGreen: 'e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034',\n yellowOrangeBrown: 'feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204',\n yellowOrangeRed: 'fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225',\n blueOrange: '134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07',\n brownBlueGreen: '704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147',\n purpleGreen: '5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29',\n purpleOrange: '4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07',\n redBlue: '8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85',\n redGrey: '8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434',\n yellowGreenBlue: 'eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185',\n redYellowBlue: 'a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695',\n redYellowGreen: 'a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837',\n pinkYellowGreen: '8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419',\n spectral: '9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2',\n viridis: '440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725',\n magma: '0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf',\n inferno: '0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4',\n plasma: '0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921',\n cividis: '00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647',\n rainbow: '6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa',\n sinebow: 'ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040',\n turbo: '23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00',\n browns: 'eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632',\n tealBlues: 'bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985',\n teals: 'bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667',\n warmGreys: 'dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e',\n goldGreen: 'f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36',\n goldOrange: 'f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26',\n goldRed: 'f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e',\n lightGreyRed: 'efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b',\n lightGreyTeal: 'e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc',\n lightMulti: 'e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c',\n lightOrange: 'f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b',\n lightTealBlue: 'e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988',\n darkBlue: '3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff',\n darkGold: '3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff',\n darkGreen: '3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa',\n darkMulti: '3737371f5287197d8c29a86995ce3fffe800ffffff',\n darkRed: '3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c'\n};\nconst discrete = {\n category10: '1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf',\n category20: '1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5',\n category20b: '393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6',\n category20c: '3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9',\n tableau10: '4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac',\n tableau20: '4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5',\n accent: '7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666',\n dark2: '1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666',\n paired: 'a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928',\n pastel1: 'fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2',\n pastel2: 'b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc',\n set1: 'e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999',\n set2: '66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3',\n set3: '8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f'\n};\n\nfunction colors(palette) {\n const n = palette.length / 6 | 0,\n c = new Array(n);\n for (let i = 0; i < n;) {\n c[i] = '#' + palette.slice(i * 6, ++i * 6);\n }\n return c;\n}\nfunction apply(_, f) {\n for (const k in _) scheme(k, f(_[k]));\n}\nconst schemes = {};\napply(discrete, colors);\napply(continuous, _ => interpolateColors(colors(_)));\nfunction scheme(name, scheme) {\n name = name && name.toLowerCase();\n if (arguments.length > 1) {\n schemes[name] = scheme;\n return this;\n } else {\n return schemes[name];\n }\n}\n\nconst SymbolLegend = 'symbol';\nconst DiscreteLegend = 'discrete';\nconst GradientLegend = 'gradient';\n\nconst defaultFormatter = value => isArray(value) ? value.map(v => String(v)) : String(value);\nconst ascending = (a, b) => a[1] - b[1];\nconst descending = (a, b) => b[1] - a[1];\n\n/**\n * Determine the tick count or interval function.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} count - The desired tick count or interval specifier.\n * @param {number} minStep - The desired minimum step between tick values.\n * @return {*} - The tick count or interval function.\n */\nfunction tickCount(scale, count, minStep) {\n let step;\n if (isNumber(count)) {\n if (scale.bins) {\n count = Math.max(count, scale.bins.length);\n }\n if (minStep != null) {\n count = Math.min(count, Math.floor(span(scale.domain()) / minStep || 1) + 1);\n }\n }\n if (isObject(count)) {\n step = count.step;\n count = count.interval;\n }\n if (isString(count)) {\n count = scale.type === Time ? timeInterval(count) : scale.type == UTC ? utcInterval(count) : error('Only time and utc scales accept interval strings.');\n if (step) count = count.every(step);\n }\n return count;\n}\n\n/**\n * Filter a set of candidate tick values, ensuring that only tick values\n * that lie within the scale range are included.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {Array<*>} ticks - The candidate tick values.\n * @param {*} count - The tick count or interval function.\n * @return {Array<*>} - The filtered tick values.\n */\nfunction validTicks(scale, ticks, count) {\n let range = scale.range(),\n lo = range[0],\n hi = peek(range),\n cmp = ascending;\n if (lo > hi) {\n range = hi;\n hi = lo;\n lo = range;\n cmp = descending;\n }\n lo = Math.floor(lo);\n hi = Math.ceil(hi);\n\n // filter ticks to valid values within the range\n // additionally sort ticks in range order (#2579)\n ticks = ticks.map(v => [v, scale(v)]).filter(_ => lo <= _[1] && _[1] <= hi).sort(cmp).map(_ => _[0]);\n if (count > 0 && ticks.length > 1) {\n const endpoints = [ticks[0], peek(ticks)];\n while (ticks.length > count && ticks.length >= 3) {\n ticks = ticks.filter((_, i) => !(i % 2));\n }\n if (ticks.length < 3) {\n ticks = endpoints;\n }\n }\n return ticks;\n}\n\n/**\n * Generate tick values for the given scale and approximate tick count or\n * interval value. If the scale has a 'ticks' method, it will be used to\n * generate the ticks, with the count argument passed as a parameter. If the\n * scale lacks a 'ticks' method, the full scale domain will be returned.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} [count] - The approximate number of desired ticks.\n * @return {Array<*>} - The generated tick values.\n */\nfunction tickValues(scale, count) {\n return scale.bins ? validTicks(scale, scale.bins) : scale.ticks ? scale.ticks(count) : scale.domain();\n}\n\n/**\n * Generate a label format function for a scale. If the scale has a\n * 'tickFormat' method, it will be used to generate the formatter, with the\n * count and specifier arguments passed as parameters. If the scale lacks a\n * 'tickFormat' method, the returned formatter performs simple string coercion.\n * If the input scale is a logarithmic scale and the format specifier does not\n * indicate a desired decimal precision, a special variable precision formatter\n * that automatically trims trailing zeroes will be generated.\n * @param {Scale} scale - The scale for which to generate the label formatter.\n * @param {*} [count] - The approximate number of desired ticks.\n * @param {string} [specifier] - The format specifier. Must be a legal d3\n * specifier string (see https://github.com/d3/d3-format#formatSpecifier) or\n * time multi-format specifier object.\n * @return {function(*):string} - The generated label formatter.\n */\nfunction tickFormat(locale, scale, count, specifier, formatType, noSkip) {\n const type = scale.type;\n let format = defaultFormatter;\n if (type === Time || formatType === Time) {\n format = locale.timeFormat(specifier);\n } else if (type === UTC || formatType === UTC) {\n format = locale.utcFormat(specifier);\n } else if (isLogarithmic(type)) {\n const varfmt = locale.formatFloat(specifier);\n if (noSkip || scale.bins) {\n format = varfmt;\n } else {\n const test = tickLog(scale, count, false);\n format = _ => test(_) ? varfmt(_) : '';\n }\n } else if (scale.tickFormat) {\n // if d3 scale has tickFormat, it must be continuous\n const d = scale.domain();\n format = locale.formatSpan(d[0], d[d.length - 1], count, specifier);\n } else if (specifier) {\n format = locale.format(specifier);\n }\n return format;\n}\nfunction tickLog(scale, count, values) {\n const ticks = tickValues(scale, count),\n base = scale.base(),\n logb = Math.log(base),\n k = Math.max(1, base * count / ticks.length);\n\n // apply d3-scale's log format filter criteria\n const test = d => {\n let i = d / Math.pow(base, Math.round(Math.log(d) / logb));\n if (i * base < base - 0.5) i *= base;\n return i <= k;\n };\n return values ? ticks.filter(test) : test;\n}\n\nconst symbols = {\n [Quantile]: 'quantiles',\n [Quantize]: 'thresholds',\n [Threshold]: 'domain'\n};\nconst formats = {\n [Quantile]: 'quantiles',\n [Quantize]: 'domain'\n};\nfunction labelValues(scale, count) {\n return scale.bins ? binValues(scale.bins) : scale.type === Log ? tickLog(scale, count, true) : symbols[scale.type] ? thresholdValues(scale[symbols[scale.type]]()) : tickValues(scale, count);\n}\nfunction thresholdFormat(locale, scale, specifier) {\n const _ = scale[formats[scale.type]](),\n n = _.length;\n let d = n > 1 ? _[1] - _[0] : _[0],\n i;\n for (i = 1; i < n; ++i) {\n d = Math.min(d, _[i] - _[i - 1]);\n }\n\n // tickCount = 3 ticks times 10 for increased resolution\n return locale.formatSpan(0, d, 3 * 10, specifier);\n}\nfunction thresholdValues(thresholds) {\n const values = [-Infinity].concat(thresholds);\n values.max = +Infinity;\n return values;\n}\nfunction binValues(bins) {\n const values = bins.slice(0, -1);\n values.max = peek(bins);\n return values;\n}\nconst isDiscreteRange = scale => symbols[scale.type] || scale.bins;\nfunction labelFormat(locale, scale, count, type, specifier, formatType, noSkip) {\n const format = formats[scale.type] && formatType !== Time && formatType !== UTC ? thresholdFormat(locale, scale, specifier) : tickFormat(locale, scale, count, specifier, formatType, noSkip);\n return type === SymbolLegend && isDiscreteRange(scale) ? formatRange(format) : type === DiscreteLegend ? formatDiscrete(format) : formatPoint(format);\n}\nconst formatRange = format => (value, index, array) => {\n const limit = get(array[index + 1], get(array.max, +Infinity)),\n lo = formatValue(value, format),\n hi = formatValue(limit, format);\n return lo && hi ? lo + ' \\u2013 ' + hi : hi ? '< ' + hi : '\\u2265 ' + lo;\n};\nconst get = (value, dflt) => value != null ? value : dflt;\nconst formatDiscrete = format => (value, index) => index ? format(value) : null;\nconst formatPoint = format => value => format(value);\nconst formatValue = (value, format) => Number.isFinite(value) ? format(value) : null;\nfunction labelFraction(scale) {\n const domain = scale.domain(),\n count = domain.length - 1;\n let lo = +domain[0],\n hi = +peek(domain),\n span = hi - lo;\n if (scale.type === Threshold) {\n const adjust = count ? span / count : 0.1;\n lo -= adjust;\n hi += adjust;\n span = hi - lo;\n }\n return value => (value - lo) / span;\n}\n\nfunction format(locale, scale, specifier, formatType) {\n const type = formatType || scale.type;\n\n // replace abbreviated time specifiers to improve screen reader experience\n if (isString(specifier) && isTemporal(type)) {\n specifier = specifier.replace(/%a/g, '%A').replace(/%b/g, '%B');\n }\n return !specifier && type === Time ? locale.timeFormat('%A, %d %B %Y, %X') : !specifier && type === UTC ? locale.utcFormat('%A, %d %B %Y, %X UTC') : labelFormat(locale, scale, 5, null, specifier, formatType, true);\n}\nfunction domainCaption(locale, scale, opt) {\n opt = opt || {};\n const max = Math.max(3, opt.maxlen || 7),\n fmt = format(locale, scale, opt.format, opt.formatType);\n\n // if scale breaks domain into bins, describe boundaries\n if (isDiscretizing(scale.type)) {\n const v = labelValues(scale).slice(1).map(fmt),\n n = v.length;\n return `${n} boundar${n === 1 ? 'y' : 'ies'}: ${v.join(', ')}`;\n }\n\n // if scale domain is discrete, list values\n else if (isDiscrete(scale.type)) {\n const d = scale.domain(),\n n = d.length,\n v = n > max ? d.slice(0, max - 2).map(fmt).join(', ') + ', ending with ' + d.slice(-1).map(fmt) : d.map(fmt).join(', ');\n return `${n} value${n === 1 ? '' : 's'}: ${v}`;\n }\n\n // if scale domain is continuous, describe value range\n else {\n const d = scale.domain();\n return `values from ${fmt(d[0])} to ${fmt(peek(d))}`;\n }\n}\n\nexport { Band, BinOrdinal, DiscreteLegend, Diverging, GradientLegend, Identity, Linear, Log, Ordinal, Point, Pow, Quantile, Quantize, Sequential, Sqrt, SymbolLegend, Symlog, Threshold, Time, UTC, bandSpace, domainCaption, interpolate, interpolateColors, interpolateRange, isContinuous, isDiscrete, isDiscretizing, isInterpolating, isLogarithmic, isQuantile, isRegisteredScale, isTemporal, isValidScaleType, labelFormat, labelFraction, labelValues, quantizeInterpolator, registerScale, scale, scaleCopy, scaleFraction, scheme, tickCount, tickFormat, tickValues, validTicks };\n","import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n var unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n return linearish(scale);\n}\n","import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import { hasOwnProperty, isFunction, inherits, truthy, lruCache, isArray, error, toSet, array, peek, extend, isNumber, isObject } from 'vega-util';\nimport { curveBasis, curveBasisClosed, curveBasisOpen, curveBundle, curveCardinal, curveCardinalOpen, curveCardinalClosed, curveCatmullRom, curveCatmullRomClosed, curveCatmullRomOpen, curveLinear, curveLinearClosed, curveMonotoneY, curveMonotoneX, curveNatural, curveStep, curveStepAfter, curveStepBefore, arc as arc$2, area as area$2, line as line$2, symbol as symbol$2 } from 'd3-shape';\nimport { path as path$3 } from 'd3-path';\nexport { path } from 'd3-path';\nimport { image as image$1, canvas } from 'vega-canvas';\nimport { loader } from 'vega-loader';\nimport { isDiscrete, domainCaption } from 'vega-scale';\n\nlet gradient_id = 0;\nfunction resetSVGGradientId() {\n gradient_id = 0;\n}\nconst patternPrefix = 'p_';\nfunction isGradient(value) {\n return value && value.gradient;\n}\nfunction gradientRef(g, defs, base) {\n const type = g.gradient;\n let id = g.id,\n prefix = type === 'radial' ? patternPrefix : '';\n\n // check id, assign default values as needed\n if (!id) {\n id = g.id = 'gradient_' + gradient_id++;\n if (type === 'radial') {\n g.x1 = get(g.x1, 0.5);\n g.y1 = get(g.y1, 0.5);\n g.r1 = get(g.r1, 0);\n g.x2 = get(g.x2, 0.5);\n g.y2 = get(g.y2, 0.5);\n g.r2 = get(g.r2, 0.5);\n prefix = patternPrefix;\n } else {\n g.x1 = get(g.x1, 0);\n g.y1 = get(g.y1, 0);\n g.x2 = get(g.x2, 1);\n g.y2 = get(g.y2, 0);\n }\n }\n\n // register definition\n defs[id] = g;\n\n // return url reference\n return 'url(' + (base || '') + '#' + prefix + id + ')';\n}\nfunction get(val, def) {\n return val != null ? val : def;\n}\nfunction Gradient (p0, p1) {\n var stops = [],\n gradient;\n return gradient = {\n gradient: 'linear',\n x1: p0 ? p0[0] : 0,\n y1: p0 ? p0[1] : 0,\n x2: p1 ? p1[0] : 1,\n y2: p1 ? p1[1] : 0,\n stops: stops,\n stop: function (offset, color) {\n stops.push({\n offset: offset,\n color: color\n });\n return gradient;\n }\n };\n}\n\nconst lookup = {\n 'basis': {\n curve: curveBasis\n },\n 'basis-closed': {\n curve: curveBasisClosed\n },\n 'basis-open': {\n curve: curveBasisOpen\n },\n 'bundle': {\n curve: curveBundle,\n tension: 'beta',\n value: 0.85\n },\n 'cardinal': {\n curve: curveCardinal,\n tension: 'tension',\n value: 0\n },\n 'cardinal-open': {\n curve: curveCardinalOpen,\n tension: 'tension',\n value: 0\n },\n 'cardinal-closed': {\n curve: curveCardinalClosed,\n tension: 'tension',\n value: 0\n },\n 'catmull-rom': {\n curve: curveCatmullRom,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-closed': {\n curve: curveCatmullRomClosed,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-open': {\n curve: curveCatmullRomOpen,\n tension: 'alpha',\n value: 0.5\n },\n 'linear': {\n curve: curveLinear\n },\n 'linear-closed': {\n curve: curveLinearClosed\n },\n 'monotone': {\n horizontal: curveMonotoneY,\n vertical: curveMonotoneX\n },\n 'natural': {\n curve: curveNatural\n },\n 'step': {\n curve: curveStep\n },\n 'step-after': {\n curve: curveStepAfter\n },\n 'step-before': {\n curve: curveStepBefore\n }\n};\nfunction curves(type, orientation, tension) {\n var entry = hasOwnProperty(lookup, type) && lookup[type],\n curve = null;\n if (entry) {\n curve = entry.curve || entry[orientation || 'vertical'];\n if (entry.tension && tension != null) {\n curve = curve[entry.tension](tension);\n }\n }\n return curve;\n}\n\nconst paramCounts = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n z: 0,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7\n};\nconst commandPattern = /[mlhvzcsqta]([^mlhvzcsqta]+|$)/gi;\nconst numberPattern = /^[+-]?(([0-9]*\\.[0-9]+)|([0-9]+\\.)|([0-9]+))([eE][+-]?[0-9]+)?/;\nconst spacePattern = /^((\\s+,?\\s*)|(,\\s*))/;\nconst flagPattern = /^[01]/;\nfunction parse(path) {\n const commands = [];\n const matches = path.match(commandPattern) || [];\n matches.forEach(str => {\n let cmd = str[0];\n const type = cmd.toLowerCase();\n\n // parse parameters\n const paramCount = paramCounts[type];\n const params = parseParams(type, paramCount, str.slice(1).trim());\n const count = params.length;\n\n // error checking based on parameter count\n if (count < paramCount || count && count % paramCount !== 0) {\n throw Error('Invalid SVG path, incorrect parameter count');\n }\n\n // register the command\n commands.push([cmd, ...params.slice(0, paramCount)]);\n\n // exit now if we're done, also handles zero-param 'z'\n if (count === paramCount) {\n return;\n }\n\n // handle implicit line-to\n if (type === 'm') {\n cmd = cmd === 'M' ? 'L' : 'l';\n }\n\n // repeat command when given extended param list\n for (let i = paramCount; i < count; i += paramCount) {\n commands.push([cmd, ...params.slice(i, i + paramCount)]);\n }\n });\n return commands;\n}\nfunction parseParams(type, paramCount, segment) {\n const params = [];\n for (let index = 0; paramCount && index < segment.length;) {\n for (let i = 0; i < paramCount; ++i) {\n const pattern = type === 'a' && (i === 3 || i === 4) ? flagPattern : numberPattern;\n const match = segment.slice(index).match(pattern);\n if (match === null) {\n throw Error('Invalid SVG path, incorrect parameter type');\n }\n index += match[0].length;\n params.push(+match[0]);\n const ws = segment.slice(index).match(spacePattern);\n if (ws !== null) {\n index += ws[0].length;\n }\n }\n }\n return params;\n}\n\nconst DegToRad = Math.PI / 180;\nconst Epsilon = 1e-14;\nconst HalfPi = Math.PI / 2;\nconst Tau = Math.PI * 2;\nconst HalfSqrt3 = Math.sqrt(3) / 2;\n\nvar segmentCache = {};\nvar bezierCache = {};\nvar join = [].join;\n\n// Copied from Inkscape svgtopdf, thanks!\nfunction segments(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\n const key = join.call(arguments);\n if (segmentCache[key]) {\n return segmentCache[key];\n }\n const th = rotateX * DegToRad;\n const sin_th = Math.sin(th);\n const cos_th = Math.cos(th);\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n const px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\n const py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\n let pl = px * px / (rx * rx) + py * py / (ry * ry);\n if (pl > 1) {\n pl = Math.sqrt(pl);\n rx *= pl;\n ry *= pl;\n }\n const a00 = cos_th / rx;\n const a01 = sin_th / rx;\n const a10 = -sin_th / ry;\n const a11 = cos_th / ry;\n const x0 = a00 * ox + a01 * oy;\n const y0 = a10 * ox + a11 * oy;\n const x1 = a00 * x + a01 * y;\n const y1 = a10 * x + a11 * y;\n const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\n let sfactor_sq = 1 / d - 0.25;\n if (sfactor_sq < 0) sfactor_sq = 0;\n let sfactor = Math.sqrt(sfactor_sq);\n if (sweep == large) sfactor = -sfactor;\n const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\n const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\n const th0 = Math.atan2(y0 - yc, x0 - xc);\n const th1 = Math.atan2(y1 - yc, x1 - xc);\n let th_arc = th1 - th0;\n if (th_arc < 0 && sweep === 1) {\n th_arc += Tau;\n } else if (th_arc > 0 && sweep === 0) {\n th_arc -= Tau;\n }\n const segs = Math.ceil(Math.abs(th_arc / (HalfPi + 0.001)));\n const result = [];\n for (let i = 0; i < segs; ++i) {\n const th2 = th0 + i * th_arc / segs;\n const th3 = th0 + (i + 1) * th_arc / segs;\n result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\n }\n return segmentCache[key] = result;\n}\nfunction bezier(params) {\n const key = join.call(params);\n if (bezierCache[key]) {\n return bezierCache[key];\n }\n var cx = params[0],\n cy = params[1],\n th0 = params[2],\n th1 = params[3],\n rx = params[4],\n ry = params[5],\n sin_th = params[6],\n cos_th = params[7];\n const a00 = cos_th * rx;\n const a01 = -sin_th * ry;\n const a10 = sin_th * rx;\n const a11 = cos_th * ry;\n const cos_th0 = Math.cos(th0);\n const sin_th0 = Math.sin(th0);\n const cos_th1 = Math.cos(th1);\n const sin_th1 = Math.sin(th1);\n const th_half = 0.5 * (th1 - th0);\n const sin_th_h2 = Math.sin(th_half * 0.5);\n const t = 8 / 3 * sin_th_h2 * sin_th_h2 / Math.sin(th_half);\n const x1 = cx + cos_th0 - t * sin_th0;\n const y1 = cy + sin_th0 + t * cos_th0;\n const x3 = cx + cos_th1;\n const y3 = cy + sin_th1;\n const x2 = x3 + t * sin_th1;\n const y2 = y3 - t * cos_th1;\n return bezierCache[key] = [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3];\n}\n\nconst temp = ['l', 0, 0, 0, 0, 0, 0, 0];\nfunction scale$1(current, sX, sY) {\n const c = temp[0] = current[0];\n if (c === 'a' || c === 'A') {\n temp[1] = sX * current[1];\n temp[2] = sY * current[2];\n temp[3] = current[3];\n temp[4] = current[4];\n temp[5] = current[5];\n temp[6] = sX * current[6];\n temp[7] = sY * current[7];\n } else if (c === 'h' || c === 'H') {\n temp[1] = sX * current[1];\n } else if (c === 'v' || c === 'V') {\n temp[1] = sY * current[1];\n } else {\n for (var i = 1, n = current.length; i < n; ++i) {\n temp[i] = (i % 2 == 1 ? sX : sY) * current[i];\n }\n }\n return temp;\n}\nfunction pathRender (context, path, l, t, sX, sY) {\n var current,\n // current instruction\n previous = null,\n x = 0,\n // current x\n y = 0,\n // current y\n controlX = 0,\n // current control point x\n controlY = 0,\n // current control point y\n tempX,\n tempY,\n tempControlX,\n tempControlY,\n anchorX = 0,\n anchorY = 0;\n if (l == null) l = 0;\n if (t == null) t = 0;\n if (sX == null) sX = 1;\n if (sY == null) sY = sX;\n if (context.beginPath) context.beginPath();\n for (var i = 0, len = path.length; i < len; ++i) {\n current = path[i];\n if (sX !== 1 || sY !== 1) {\n current = scale$1(current, sX, sY);\n }\n switch (current[0]) {\n // first letter\n\n case 'l':\n // lineto, relative\n x += current[1];\n y += current[2];\n context.lineTo(x + l, y + t);\n break;\n case 'L':\n // lineto, absolute\n x = current[1];\n y = current[2];\n context.lineTo(x + l, y + t);\n break;\n case 'h':\n // horizontal lineto, relative\n x += current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'H':\n // horizontal lineto, absolute\n x = current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'v':\n // vertical lineto, relative\n y += current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'V':\n // verical lineto, absolute\n y = current[1];\n context.lineTo(x + l, y + t);\n break;\n case 'm':\n // moveTo, relative\n x += current[1];\n y += current[2];\n anchorX = x;\n anchorY = y;\n context.moveTo(x + l, y + t);\n break;\n case 'M':\n // moveTo, absolute\n x = current[1];\n y = current[2];\n anchorX = x;\n anchorY = y;\n context.moveTo(x + l, y + t);\n break;\n case 'c':\n // bezierCurveTo, relative\n tempX = x + current[5];\n tempY = y + current[6];\n controlX = x + current[3];\n controlY = y + current[4];\n context.bezierCurveTo(x + current[1] + l,\n // x1\n y + current[2] + t,\n // y1\n controlX + l,\n // x2\n controlY + t,\n // y2\n tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n case 'C':\n // bezierCurveTo, absolute\n x = current[5];\n y = current[6];\n controlX = current[3];\n controlY = current[4];\n context.bezierCurveTo(current[1] + l, current[2] + t, controlX + l, controlY + t, x + l, y + t);\n break;\n case 's':\n // shorthand cubic bezierCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.bezierCurveTo(controlX + l, controlY + t, x + current[1] + l, y + current[2] + t, tempX + l, tempY + t);\n\n // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n controlX = x + current[1];\n controlY = y + current[2];\n x = tempX;\n y = tempY;\n break;\n case 'S':\n // shorthand cubic bezierCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.bezierCurveTo(controlX + l, controlY + t, current[1] + l, current[2] + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n controlX = current[1];\n controlY = current[2];\n break;\n case 'q':\n // quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n controlX = x + current[1];\n controlY = y + current[2];\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n case 'Q':\n // quadraticCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n context.quadraticCurveTo(current[1] + l, current[2] + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = current[1];\n controlY = current[2];\n break;\n case 't':\n // shorthand quadraticCurveTo, relative\n\n // transform to absolute x,y\n tempX = x + current[1];\n tempY = y + current[2];\n if (previous[0].match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else if (previous[0] === 't') {\n // calculate reflection of previous control points for t\n controlX = 2 * x - tempControlX;\n controlY = 2 * y - tempControlY;\n } else if (previous[0] === 'q') {\n // calculate reflection of previous control points for q\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n tempControlX = controlX;\n tempControlY = controlY;\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = x + current[1];\n controlY = y + current[2];\n break;\n case 'T':\n tempX = current[1];\n tempY = current[2];\n\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n case 'a':\n drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + x + l, current[7] + y + t]);\n x += current[6];\n y += current[7];\n break;\n case 'A':\n drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + l, current[7] + t]);\n x = current[6];\n y = current[7];\n break;\n case 'z':\n case 'Z':\n x = anchorX;\n y = anchorY;\n context.closePath();\n break;\n }\n previous = current;\n }\n}\nfunction drawArc(context, x, y, coords) {\n const seg = segments(coords[5],\n // end x\n coords[6],\n // end y\n coords[0],\n // radius x\n coords[1],\n // radius y\n coords[3],\n // large flag\n coords[4],\n // sweep flag\n coords[2],\n // rotation\n x, y);\n for (let i = 0; i < seg.length; ++i) {\n const bez = bezier(seg[i]);\n context.bezierCurveTo(bez[0], bez[1], bez[2], bez[3], bez[4], bez[5]);\n }\n}\n\nconst Tan30 = 0.5773502691896257;\nconst builtins = {\n 'circle': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, Tau);\n }\n },\n 'cross': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n s = r / 2.5;\n context.moveTo(-r, -s);\n context.lineTo(-r, s);\n context.lineTo(-s, s);\n context.lineTo(-s, r);\n context.lineTo(s, r);\n context.lineTo(s, s);\n context.lineTo(r, s);\n context.lineTo(r, -s);\n context.lineTo(s, -s);\n context.lineTo(s, -r);\n context.lineTo(-s, -r);\n context.lineTo(-s, -s);\n context.closePath();\n }\n },\n 'diamond': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(-r, 0);\n context.lineTo(0, -r);\n context.lineTo(r, 0);\n context.lineTo(0, r);\n context.closePath();\n }\n },\n 'square': {\n draw: function (context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n },\n 'arrow': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n s = r / 7,\n t = r / 2.5,\n v = r / 8;\n context.moveTo(-s, r);\n context.lineTo(s, r);\n context.lineTo(s, -v);\n context.lineTo(t, -v);\n context.lineTo(0, -r);\n context.lineTo(-t, -v);\n context.lineTo(-s, -v);\n context.closePath();\n }\n },\n 'wedge': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r,\n o = h - r * Tan30,\n b = r / 4;\n context.moveTo(0, -h - o);\n context.lineTo(-b, h - o);\n context.lineTo(b, h - o);\n context.closePath();\n }\n },\n 'triangle': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r,\n o = h - r * Tan30;\n context.moveTo(0, -h - o);\n context.lineTo(-r, h - o);\n context.lineTo(r, h - o);\n context.closePath();\n }\n },\n 'triangle-up': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(0, -h);\n context.lineTo(-r, h);\n context.lineTo(r, h);\n context.closePath();\n }\n },\n 'triangle-down': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(0, h);\n context.lineTo(-r, -h);\n context.lineTo(r, -h);\n context.closePath();\n }\n },\n 'triangle-right': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(h, 0);\n context.lineTo(-h, -r);\n context.lineTo(-h, r);\n context.closePath();\n }\n },\n 'triangle-left': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(-h, 0);\n context.lineTo(h, -r);\n context.lineTo(h, r);\n context.closePath();\n }\n },\n 'stroke': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(-r, 0);\n context.lineTo(r, 0);\n }\n }\n};\nfunction symbols(_) {\n return hasOwnProperty(builtins, _) ? builtins[_] : customSymbol(_);\n}\nvar custom = {};\nfunction customSymbol(path) {\n if (!hasOwnProperty(custom, path)) {\n const parsed = parse(path);\n custom[path] = {\n draw: function (context, size) {\n pathRender(context, parsed, 0, 0, Math.sqrt(size) / 2);\n }\n };\n }\n return custom[path];\n}\n\n// See http://spencermortensen.com/articles/bezier-circle/\nconst C = 0.448084975506; // C = 1 - c\n\nfunction rectangleX(d) {\n return d.x;\n}\nfunction rectangleY(d) {\n return d.y;\n}\nfunction rectangleWidth(d) {\n return d.width;\n}\nfunction rectangleHeight(d) {\n return d.height;\n}\nfunction number(_) {\n return typeof _ === 'function' ? _ : () => +_;\n}\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(value, max));\n}\nfunction vg_rect () {\n var x = rectangleX,\n y = rectangleY,\n width = rectangleWidth,\n height = rectangleHeight,\n crTL = number(0),\n crTR = crTL,\n crBL = crTL,\n crBR = crTL,\n context = null;\n function rectangle(_, x0, y0) {\n var buffer,\n x1 = x0 != null ? x0 : +x.call(this, _),\n y1 = y0 != null ? y0 : +y.call(this, _),\n w = +width.call(this, _),\n h = +height.call(this, _),\n s = Math.min(w, h) / 2,\n tl = clamp(+crTL.call(this, _), 0, s),\n tr = clamp(+crTR.call(this, _), 0, s),\n bl = clamp(+crBL.call(this, _), 0, s),\n br = clamp(+crBR.call(this, _), 0, s);\n if (!context) context = buffer = path$3();\n if (tl <= 0 && tr <= 0 && bl <= 0 && br <= 0) {\n context.rect(x1, y1, w, h);\n } else {\n var x2 = x1 + w,\n y2 = y1 + h;\n context.moveTo(x1 + tl, y1);\n context.lineTo(x2 - tr, y1);\n context.bezierCurveTo(x2 - C * tr, y1, x2, y1 + C * tr, x2, y1 + tr);\n context.lineTo(x2, y2 - br);\n context.bezierCurveTo(x2, y2 - C * br, x2 - C * br, y2, x2 - br, y2);\n context.lineTo(x1 + bl, y2);\n context.bezierCurveTo(x1 + C * bl, y2, x1, y2 - C * bl, x1, y2 - bl);\n context.lineTo(x1, y1 + tl);\n context.bezierCurveTo(x1, y1 + C * tl, x1 + C * tl, y1, x1 + tl, y1);\n context.closePath();\n }\n if (buffer) {\n context = null;\n return buffer + '' || null;\n }\n }\n rectangle.x = function (_) {\n if (arguments.length) {\n x = number(_);\n return rectangle;\n } else {\n return x;\n }\n };\n rectangle.y = function (_) {\n if (arguments.length) {\n y = number(_);\n return rectangle;\n } else {\n return y;\n }\n };\n rectangle.width = function (_) {\n if (arguments.length) {\n width = number(_);\n return rectangle;\n } else {\n return width;\n }\n };\n rectangle.height = function (_) {\n if (arguments.length) {\n height = number(_);\n return rectangle;\n } else {\n return height;\n }\n };\n rectangle.cornerRadius = function (tl, tr, br, bl) {\n if (arguments.length) {\n crTL = number(tl);\n crTR = tr != null ? number(tr) : crTL;\n crBR = br != null ? number(br) : crTL;\n crBL = bl != null ? number(bl) : crTR;\n return rectangle;\n } else {\n return crTL;\n }\n };\n rectangle.context = function (_) {\n if (arguments.length) {\n context = _ == null ? null : _;\n return rectangle;\n } else {\n return context;\n }\n };\n return rectangle;\n}\n\nfunction vg_trail () {\n var x,\n y,\n size,\n defined,\n context = null,\n ready,\n x1,\n y1,\n r1;\n function point(x2, y2, w2) {\n const r2 = w2 / 2;\n if (ready) {\n var ux = y1 - y2,\n uy = x2 - x1;\n if (ux || uy) {\n // get normal vector\n var ud = Math.hypot(ux, uy),\n rx = (ux /= ud) * r1,\n ry = (uy /= ud) * r1,\n t = Math.atan2(uy, ux);\n\n // draw segment\n context.moveTo(x1 - rx, y1 - ry);\n context.lineTo(x2 - ux * r2, y2 - uy * r2);\n context.arc(x2, y2, r2, t - Math.PI, t);\n context.lineTo(x1 + rx, y1 + ry);\n context.arc(x1, y1, r1, t, t + Math.PI);\n } else {\n context.arc(x2, y2, r2, 0, Tau);\n }\n context.closePath();\n } else {\n ready = 1;\n }\n x1 = x2;\n y1 = y2;\n r1 = r2;\n }\n function trail(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n if (context == null) context = buffer = path$3();\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) ready = 0;\n }\n if (defined0) point(+x(d, i, data), +y(d, i, data), +size(d, i, data));\n }\n if (buffer) {\n context = null;\n return buffer + '' || null;\n }\n }\n trail.x = function (_) {\n if (arguments.length) {\n x = _;\n return trail;\n } else {\n return x;\n }\n };\n trail.y = function (_) {\n if (arguments.length) {\n y = _;\n return trail;\n } else {\n return y;\n }\n };\n trail.size = function (_) {\n if (arguments.length) {\n size = _;\n return trail;\n } else {\n return size;\n }\n };\n trail.defined = function (_) {\n if (arguments.length) {\n defined = _;\n return trail;\n } else {\n return defined;\n }\n };\n trail.context = function (_) {\n if (arguments.length) {\n if (_ == null) {\n context = null;\n } else {\n context = _;\n }\n return trail;\n } else {\n return context;\n }\n };\n return trail;\n}\n\nfunction value$1(a, b) {\n return a != null ? a : b;\n}\nconst x = item => item.x || 0,\n y = item => item.y || 0,\n w = item => item.width || 0,\n h = item => item.height || 0,\n xw = item => (item.x || 0) + (item.width || 0),\n yh = item => (item.y || 0) + (item.height || 0),\n sa = item => item.startAngle || 0,\n ea = item => item.endAngle || 0,\n pa = item => item.padAngle || 0,\n ir = item => item.innerRadius || 0,\n or = item => item.outerRadius || 0,\n cr = item => item.cornerRadius || 0,\n tl = item => value$1(item.cornerRadiusTopLeft, item.cornerRadius) || 0,\n tr = item => value$1(item.cornerRadiusTopRight, item.cornerRadius) || 0,\n br = item => value$1(item.cornerRadiusBottomRight, item.cornerRadius) || 0,\n bl = item => value$1(item.cornerRadiusBottomLeft, item.cornerRadius) || 0,\n sz = item => value$1(item.size, 64),\n ts = item => item.size || 1,\n def = item => !(item.defined === false),\n type = item => symbols(item.shape || 'circle');\nconst arcShape = arc$2().startAngle(sa).endAngle(ea).padAngle(pa).innerRadius(ir).outerRadius(or).cornerRadius(cr),\n areavShape = area$2().x(x).y1(y).y0(yh).defined(def),\n areahShape = area$2().y(y).x1(x).x0(xw).defined(def),\n lineShape = line$2().x(x).y(y).defined(def),\n rectShape = vg_rect().x(x).y(y).width(w).height(h).cornerRadius(tl, tr, br, bl),\n symbolShape = symbol$2().type(type).size(sz),\n trailShape = vg_trail().x(x).y(y).defined(def).size(ts);\nfunction hasCornerRadius(item) {\n return item.cornerRadius || item.cornerRadiusTopLeft || item.cornerRadiusTopRight || item.cornerRadiusBottomRight || item.cornerRadiusBottomLeft;\n}\nfunction arc$1(context, item) {\n return arcShape.context(context)(item);\n}\nfunction area$1(context, items) {\n const item = items[0],\n interp = item.interpolate || 'linear';\n return (item.orient === 'horizontal' ? areahShape : areavShape).curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction line$1(context, items) {\n const item = items[0],\n interp = item.interpolate || 'linear';\n return lineShape.curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction rectangle(context, item, x, y) {\n return rectShape.context(context)(item, x, y);\n}\nfunction shape$1(context, item) {\n return (item.mark.shape || item.shape).context(context)(item);\n}\nfunction symbol$1(context, item) {\n return symbolShape.context(context)(item);\n}\nfunction trail$1(context, items) {\n return trailShape.context(context)(items);\n}\n\nvar clip_id = 1;\nfunction resetSVGClipId() {\n clip_id = 1;\n}\nfunction clip$1 (renderer, item, size) {\n var clip = item.clip,\n defs = renderer._defs,\n id = item.clip_id || (item.clip_id = 'clip' + clip_id++),\n c = defs.clipping[id] || (defs.clipping[id] = {\n id: id\n });\n if (isFunction(clip)) {\n c.path = clip(null);\n } else if (hasCornerRadius(size)) {\n c.path = rectangle(null, size, 0, 0);\n } else {\n c.width = size.width || 0;\n c.height = size.height || 0;\n }\n return 'url(#' + id + ')';\n}\n\nfunction Bounds(b) {\n this.clear();\n if (b) this.union(b);\n}\nBounds.prototype = {\n clone() {\n return new Bounds(this);\n },\n clear() {\n this.x1 = +Number.MAX_VALUE;\n this.y1 = +Number.MAX_VALUE;\n this.x2 = -Number.MAX_VALUE;\n this.y2 = -Number.MAX_VALUE;\n return this;\n },\n empty() {\n return this.x1 === +Number.MAX_VALUE && this.y1 === +Number.MAX_VALUE && this.x2 === -Number.MAX_VALUE && this.y2 === -Number.MAX_VALUE;\n },\n equals(b) {\n return this.x1 === b.x1 && this.y1 === b.y1 && this.x2 === b.x2 && this.y2 === b.y2;\n },\n set(x1, y1, x2, y2) {\n if (x2 < x1) {\n this.x2 = x1;\n this.x1 = x2;\n } else {\n this.x1 = x1;\n this.x2 = x2;\n }\n if (y2 < y1) {\n this.y2 = y1;\n this.y1 = y2;\n } else {\n this.y1 = y1;\n this.y2 = y2;\n }\n return this;\n },\n add(x, y) {\n if (x < this.x1) this.x1 = x;\n if (y < this.y1) this.y1 = y;\n if (x > this.x2) this.x2 = x;\n if (y > this.y2) this.y2 = y;\n return this;\n },\n expand(d) {\n this.x1 -= d;\n this.y1 -= d;\n this.x2 += d;\n this.y2 += d;\n return this;\n },\n round() {\n this.x1 = Math.floor(this.x1);\n this.y1 = Math.floor(this.y1);\n this.x2 = Math.ceil(this.x2);\n this.y2 = Math.ceil(this.y2);\n return this;\n },\n scale(s) {\n this.x1 *= s;\n this.y1 *= s;\n this.x2 *= s;\n this.y2 *= s;\n return this;\n },\n translate(dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n },\n rotate(angle, x, y) {\n const p = this.rotatedPoints(angle, x, y);\n return this.clear().add(p[0], p[1]).add(p[2], p[3]).add(p[4], p[5]).add(p[6], p[7]);\n },\n rotatedPoints(angle, x, y) {\n var {\n x1,\n y1,\n x2,\n y2\n } = this,\n cos = Math.cos(angle),\n sin = Math.sin(angle),\n cx = x - x * cos + y * sin,\n cy = y - x * sin - y * cos;\n return [cos * x1 - sin * y1 + cx, sin * x1 + cos * y1 + cy, cos * x1 - sin * y2 + cx, sin * x1 + cos * y2 + cy, cos * x2 - sin * y1 + cx, sin * x2 + cos * y1 + cy, cos * x2 - sin * y2 + cx, sin * x2 + cos * y2 + cy];\n },\n union(b) {\n if (b.x1 < this.x1) this.x1 = b.x1;\n if (b.y1 < this.y1) this.y1 = b.y1;\n if (b.x2 > this.x2) this.x2 = b.x2;\n if (b.y2 > this.y2) this.y2 = b.y2;\n return this;\n },\n intersect(b) {\n if (b.x1 > this.x1) this.x1 = b.x1;\n if (b.y1 > this.y1) this.y1 = b.y1;\n if (b.x2 < this.x2) this.x2 = b.x2;\n if (b.y2 < this.y2) this.y2 = b.y2;\n return this;\n },\n encloses(b) {\n return b && this.x1 <= b.x1 && this.x2 >= b.x2 && this.y1 <= b.y1 && this.y2 >= b.y2;\n },\n alignsWith(b) {\n return b && (this.x1 == b.x1 || this.x2 == b.x2 || this.y1 == b.y1 || this.y2 == b.y2);\n },\n intersects(b) {\n return b && !(this.x2 < b.x1 || this.x1 > b.x2 || this.y2 < b.y1 || this.y1 > b.y2);\n },\n contains(x, y) {\n return !(x < this.x1 || x > this.x2 || y < this.y1 || y > this.y2);\n },\n width() {\n return this.x2 - this.x1;\n },\n height() {\n return this.y2 - this.y1;\n }\n};\n\nfunction Item(mark) {\n this.mark = mark;\n this.bounds = this.bounds || new Bounds();\n}\n\nfunction GroupItem(mark) {\n Item.call(this, mark);\n this.items = this.items || [];\n}\ninherits(GroupItem, Item);\n\nfunction ResourceLoader(customLoader) {\n this._pending = 0;\n this._loader = customLoader || loader();\n}\nfunction increment(loader) {\n loader._pending += 1;\n}\nfunction decrement(loader) {\n loader._pending -= 1;\n}\nResourceLoader.prototype = {\n pending() {\n return this._pending;\n },\n sanitizeURL(uri) {\n const loader = this;\n increment(loader);\n return loader._loader.sanitize(uri, {\n context: 'href'\n }).then(opt => {\n decrement(loader);\n return opt;\n }).catch(() => {\n decrement(loader);\n return null;\n });\n },\n loadImage(uri) {\n const loader = this,\n Image = image$1();\n increment(loader);\n return loader._loader.sanitize(uri, {\n context: 'image'\n }).then(opt => {\n const url = opt.href;\n if (!url || !Image) throw {\n url: url\n };\n const img = new Image();\n\n // set crossOrigin only if cors is defined; empty string sets anonymous mode\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/crossOrigin\n const cors = hasOwnProperty(opt, 'crossOrigin') ? opt.crossOrigin : 'anonymous';\n if (cors != null) img.crossOrigin = cors;\n\n // attempt to load image resource\n img.onload = () => decrement(loader);\n img.onerror = () => decrement(loader);\n img.src = url;\n return img;\n }).catch(e => {\n decrement(loader);\n return {\n complete: false,\n width: 0,\n height: 0,\n src: e && e.url || ''\n };\n });\n },\n ready() {\n const loader = this;\n return new Promise(accept => {\n function poll(value) {\n if (!loader.pending()) accept(value);else setTimeout(() => {\n poll(true);\n }, 10);\n }\n poll(false);\n });\n }\n};\n\nfunction boundStroke (bounds, item, miter) {\n if (item.stroke && item.opacity !== 0 && item.strokeOpacity !== 0) {\n const sw = item.strokeWidth != null ? +item.strokeWidth : 1;\n bounds.expand(sw + (miter ? miterAdjustment(item, sw) : 0));\n }\n return bounds;\n}\nfunction miterAdjustment(item, strokeWidth) {\n // TODO: more sophisticated adjustment? Or miter support in boundContext?\n return item.strokeJoin && item.strokeJoin !== 'miter' ? 0 : strokeWidth;\n}\n\nconst circleThreshold = Tau - 1e-8;\nlet bounds, lx, ly, rot, ma, mb, mc, md;\nconst add = (x, y) => bounds.add(x, y);\nconst addL = (x, y) => add(lx = x, ly = y);\nconst addX = x => add(x, bounds.y1);\nconst addY = y => add(bounds.x1, y);\nconst px = (x, y) => ma * x + mc * y;\nconst py = (x, y) => mb * x + md * y;\nconst addp = (x, y) => add(px(x, y), py(x, y));\nconst addpL = (x, y) => addL(px(x, y), py(x, y));\nfunction boundContext (_, deg) {\n bounds = _;\n if (deg) {\n rot = deg * DegToRad;\n ma = md = Math.cos(rot);\n mb = Math.sin(rot);\n mc = -mb;\n } else {\n ma = md = 1;\n rot = mb = mc = 0;\n }\n return context$1;\n}\nconst context$1 = {\n beginPath() {},\n closePath() {},\n moveTo: addpL,\n lineTo: addpL,\n rect(x, y, w, h) {\n if (rot) {\n addp(x + w, y);\n addp(x + w, y + h);\n addp(x, y + h);\n addpL(x, y);\n } else {\n add(x + w, y + h);\n addL(x, y);\n }\n },\n quadraticCurveTo(x1, y1, x2, y2) {\n const px1 = px(x1, y1),\n py1 = py(x1, y1),\n px2 = px(x2, y2),\n py2 = py(x2, y2);\n quadExtrema(lx, px1, px2, addX);\n quadExtrema(ly, py1, py2, addY);\n addL(px2, py2);\n },\n bezierCurveTo(x1, y1, x2, y2, x3, y3) {\n const px1 = px(x1, y1),\n py1 = py(x1, y1),\n px2 = px(x2, y2),\n py2 = py(x2, y2),\n px3 = px(x3, y3),\n py3 = py(x3, y3);\n cubicExtrema(lx, px1, px2, px3, addX);\n cubicExtrema(ly, py1, py2, py3, addY);\n addL(px3, py3);\n },\n arc(cx, cy, r, sa, ea, ccw) {\n sa += rot;\n ea += rot;\n\n // store last point on path\n lx = r * Math.cos(ea) + cx;\n ly = r * Math.sin(ea) + cy;\n if (Math.abs(ea - sa) > circleThreshold) {\n // treat as full circle\n add(cx - r, cy - r);\n add(cx + r, cy + r);\n } else {\n const update = a => add(r * Math.cos(a) + cx, r * Math.sin(a) + cy);\n let s, i;\n\n // sample end points\n update(sa);\n update(ea);\n\n // sample interior points aligned with 90 degrees\n if (ea !== sa) {\n sa = sa % Tau;\n if (sa < 0) sa += Tau;\n ea = ea % Tau;\n if (ea < 0) ea += Tau;\n if (ea < sa) {\n ccw = !ccw; // flip direction\n s = sa;\n sa = ea;\n ea = s; // swap end-points\n }\n\n if (ccw) {\n ea -= Tau;\n s = sa - sa % HalfPi;\n for (i = 0; i < 4 && s > ea; ++i, s -= HalfPi) update(s);\n } else {\n s = sa - sa % HalfPi + HalfPi;\n for (i = 0; i < 4 && s < ea; ++i, s = s + HalfPi) update(s);\n }\n }\n }\n }\n};\nfunction quadExtrema(x0, x1, x2, cb) {\n const t = (x0 - x1) / (x0 + x2 - 2 * x1);\n if (0 < t && t < 1) cb(x0 + (x1 - x0) * t);\n}\nfunction cubicExtrema(x0, x1, x2, x3, cb) {\n const a = x3 - x0 + 3 * x1 - 3 * x2,\n b = x0 + x2 - 2 * x1,\n c = x0 - x1;\n let t0 = 0,\n t1 = 0,\n r;\n\n // solve for parameter t\n if (Math.abs(a) > Epsilon) {\n // quadratic equation\n r = b * b + c * a;\n if (r >= 0) {\n r = Math.sqrt(r);\n t0 = (-b + r) / a;\n t1 = (-b - r) / a;\n }\n } else {\n // linear equation\n t0 = 0.5 * c / b;\n }\n\n // calculate position\n if (0 < t0 && t0 < 1) cb(cubic(t0, x0, x1, x2, x3));\n if (0 < t1 && t1 < 1) cb(cubic(t1, x0, x1, x2, x3));\n}\nfunction cubic(t, x0, x1, x2, x3) {\n const s = 1 - t,\n s2 = s * s,\n t2 = t * t;\n return s2 * s * x0 + 3 * s2 * t * x1 + 3 * s * t2 * x2 + t2 * t * x3;\n}\n\nvar context = (context = canvas(1, 1)) ? context.getContext('2d') : null;\n\nconst b = new Bounds();\nfunction intersectPath(draw) {\n return function (item, brush) {\n // rely on (inaccurate) bounds intersection if no context\n if (!context) return true;\n\n // add path to offscreen graphics context\n draw(context, item);\n\n // get bounds intersection region\n b.clear().union(item.bounds).intersect(brush).round();\n const {\n x1,\n y1,\n x2,\n y2\n } = b;\n\n // iterate over intersection region\n // perform fine grained inclusion test\n for (let y = y1; y <= y2; ++y) {\n for (let x = x1; x <= x2; ++x) {\n if (context.isPointInPath(x, y)) {\n return true;\n }\n }\n }\n\n // false if no hits in intersection region\n return false;\n };\n}\nfunction intersectPoint(item, box) {\n return box.contains(item.x || 0, item.y || 0);\n}\nfunction intersectRect(item, box) {\n const x = item.x || 0,\n y = item.y || 0,\n w = item.width || 0,\n h = item.height || 0;\n return box.intersects(b.set(x, y, x + w, y + h));\n}\nfunction intersectRule(item, box) {\n const x = item.x || 0,\n y = item.y || 0,\n x2 = item.x2 != null ? item.x2 : x,\n y2 = item.y2 != null ? item.y2 : y;\n return intersectBoxLine(box, x, y, x2, y2);\n}\nfunction intersectBoxLine(box, x, y, u, v) {\n const {\n x1,\n y1,\n x2,\n y2\n } = box,\n dx = u - x,\n dy = v - y;\n let t0 = 0,\n t1 = 1,\n p,\n q,\n r,\n e;\n for (e = 0; e < 4; ++e) {\n if (e === 0) {\n p = -dx;\n q = -(x1 - x);\n }\n if (e === 1) {\n p = dx;\n q = x2 - x;\n }\n if (e === 2) {\n p = -dy;\n q = -(y1 - y);\n }\n if (e === 3) {\n p = dy;\n q = y2 - y;\n }\n if (Math.abs(p) < 1e-10 && q < 0) return false;\n r = q / p;\n if (p < 0) {\n if (r > t1) return false;else if (r > t0) t0 = r;\n } else if (p > 0) {\n if (r < t0) return false;else if (r < t1) t1 = r;\n }\n }\n return true;\n}\n\nfunction blend (context, item) {\n context.globalCompositeOperation = item.blend || 'source-over';\n}\n\nfunction value (value, dflt) {\n return value == null ? dflt : value;\n}\n\nfunction addStops(gradient, stops) {\n const n = stops.length;\n for (let i = 0; i < n; ++i) {\n gradient.addColorStop(stops[i].offset, stops[i].color);\n }\n return gradient;\n}\nfunction gradient (context, spec, bounds) {\n const w = bounds.width(),\n h = bounds.height();\n let gradient;\n if (spec.gradient === 'radial') {\n gradient = context.createRadialGradient(bounds.x1 + value(spec.x1, 0.5) * w, bounds.y1 + value(spec.y1, 0.5) * h, Math.max(w, h) * value(spec.r1, 0), bounds.x1 + value(spec.x2, 0.5) * w, bounds.y1 + value(spec.y2, 0.5) * h, Math.max(w, h) * value(spec.r2, 0.5));\n } else {\n // linear gradient\n const x1 = value(spec.x1, 0),\n y1 = value(spec.y1, 0),\n x2 = value(spec.x2, 1),\n y2 = value(spec.y2, 0);\n if (x1 === x2 || y1 === y2 || w === h) {\n // axis aligned: use normal gradient\n gradient = context.createLinearGradient(bounds.x1 + x1 * w, bounds.y1 + y1 * h, bounds.x1 + x2 * w, bounds.y1 + y2 * h);\n } else {\n // not axis aligned: render gradient into a pattern (#2365)\n // this allows us to use normalized bounding box coordinates\n const image = canvas(Math.ceil(w), Math.ceil(h)),\n ictx = image.getContext('2d');\n ictx.scale(w, h);\n ictx.fillStyle = addStops(ictx.createLinearGradient(x1, y1, x2, y2), spec.stops);\n ictx.fillRect(0, 0, w, h);\n return context.createPattern(image, 'no-repeat');\n }\n }\n return addStops(gradient, spec.stops);\n}\n\nfunction color (context, item, value) {\n return isGradient(value) ? gradient(context, value, item.bounds) : value;\n}\n\nfunction fill (context, item, opacity) {\n opacity *= item.fillOpacity == null ? 1 : item.fillOpacity;\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.fillStyle = color(context, item, item.fill);\n return true;\n } else {\n return false;\n }\n}\n\nvar Empty = [];\nfunction stroke (context, item, opacity) {\n var lw = (lw = item.strokeWidth) != null ? lw : 1;\n if (lw <= 0) return false;\n opacity *= item.strokeOpacity == null ? 1 : item.strokeOpacity;\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.strokeStyle = color(context, item, item.stroke);\n context.lineWidth = lw;\n context.lineCap = item.strokeCap || 'butt';\n context.lineJoin = item.strokeJoin || 'miter';\n context.miterLimit = item.strokeMiterLimit || 10;\n if (context.setLineDash) {\n context.setLineDash(item.strokeDash || Empty);\n context.lineDashOffset = item.strokeDashOffset || 0;\n }\n return true;\n } else {\n return false;\n }\n}\n\nfunction compare(a, b) {\n return a.zindex - b.zindex || a.index - b.index;\n}\nfunction zorder(scene) {\n if (!scene.zdirty) return scene.zitems;\n var items = scene.items,\n output = [],\n item,\n i,\n n;\n for (i = 0, n = items.length; i < n; ++i) {\n item = items[i];\n item.index = i;\n if (item.zindex) output.push(item);\n }\n scene.zdirty = false;\n return scene.zitems = output.sort(compare);\n}\nfunction visit(scene, visitor) {\n var items = scene.items,\n i,\n n;\n if (!items || !items.length) return;\n const zitems = zorder(scene);\n if (zitems && zitems.length) {\n for (i = 0, n = items.length; i < n; ++i) {\n if (!items[i].zindex) visitor(items[i]);\n }\n items = zitems;\n }\n for (i = 0, n = items.length; i < n; ++i) {\n visitor(items[i]);\n }\n}\nfunction pickVisit(scene, visitor) {\n var items = scene.items,\n hit,\n i;\n if (!items || !items.length) return null;\n const zitems = zorder(scene);\n if (zitems && zitems.length) items = zitems;\n for (i = items.length; --i >= 0;) {\n if (hit = visitor(items[i])) return hit;\n }\n if (items === zitems) {\n for (items = scene.items, i = items.length; --i >= 0;) {\n if (!items[i].zindex) {\n if (hit = visitor(items[i])) return hit;\n }\n }\n }\n return null;\n}\n\nfunction drawAll(path) {\n return function (context, scene, bounds) {\n visit(scene, item => {\n if (!bounds || bounds.intersects(item.bounds)) {\n drawPath(path, context, item, item);\n }\n });\n };\n}\nfunction drawOne(path) {\n return function (context, scene, bounds) {\n if (scene.items.length && (!bounds || bounds.intersects(scene.bounds))) {\n drawPath(path, context, scene.items[0], scene.items);\n }\n };\n}\nfunction drawPath(path, context, item, items) {\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity === 0) return;\n if (path(context, items)) return;\n blend(context, item);\n if (item.fill && fill(context, item, opacity)) {\n context.fill();\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.stroke();\n }\n}\n\nfunction pick$1(test) {\n test = test || truthy;\n return function (context, scene, x, y, gx, gy) {\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return pickVisit(scene, item => {\n const b = item.bounds;\n // first hit test against bounding box\n if (b && !b.contains(gx, gy) || !b) return;\n // if in bounding box, perform more careful test\n if (test(context, item, x, y, gx, gy)) return item;\n });\n };\n}\nfunction hitPath(path, filled) {\n return function (context, o, x, y) {\n var item = Array.isArray(o) ? o[0] : o,\n fill = filled == null ? item.fill : filled,\n stroke = item.stroke && context.isPointInStroke,\n lw,\n lc;\n if (stroke) {\n lw = item.strokeWidth;\n lc = item.strokeCap;\n context.lineWidth = lw != null ? lw : 1;\n context.lineCap = lc != null ? lc : 'butt';\n }\n return path(context, o) ? false : fill && context.isPointInPath(x, y) || stroke && context.isPointInStroke(x, y);\n };\n}\nfunction pickPath(path) {\n return pick$1(hitPath(path));\n}\n\nfunction translate(x, y) {\n return 'translate(' + x + ',' + y + ')';\n}\nfunction rotate(a) {\n return 'rotate(' + a + ')';\n}\nfunction scale(scaleX, scaleY) {\n return 'scale(' + scaleX + ',' + scaleY + ')';\n}\nfunction translateItem(item) {\n return translate(item.x || 0, item.y || 0);\n}\nfunction rotateItem(item) {\n return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '');\n}\nfunction transformItem(item) {\n return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '') + (item.scaleX || item.scaleY ? ' ' + scale(item.scaleX || 1, item.scaleY || 1) : '');\n}\n\nfunction markItemPath (type, shape, isect) {\n function attr(emit, item) {\n emit('transform', rotateItem(item));\n emit('d', shape(null, item));\n }\n function bound(bounds, item) {\n shape(boundContext(bounds, item.angle), item);\n return boundStroke(bounds, item).translate(item.x || 0, item.y || 0);\n }\n function draw(context, item) {\n var x = item.x || 0,\n y = item.y || 0,\n a = item.angle || 0;\n context.translate(x, y);\n if (a) context.rotate(a *= DegToRad);\n context.beginPath();\n shape(context, item);\n if (a) context.rotate(-a);\n context.translate(-x, -y);\n }\n return {\n type: type,\n tag: 'path',\n nested: false,\n attr: attr,\n bound: bound,\n draw: drawAll(draw),\n pick: pickPath(draw),\n isect: isect || intersectPath(draw)\n };\n}\n\nvar arc = markItemPath('arc', arc$1);\n\nfunction pickArea(a, p) {\n var v = a[0].orient === 'horizontal' ? p[1] : p[0],\n z = a[0].orient === 'horizontal' ? 'y' : 'x',\n i = a.length,\n min = +Infinity,\n hit,\n d;\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n d = Math.abs(a[i][z] - v);\n if (d < min) {\n min = d;\n hit = a[i];\n }\n }\n return hit;\n}\nfunction pickLine(a, p) {\n var t = Math.pow(a[0].strokeWidth || 1, 2),\n i = a.length,\n dx,\n dy,\n dd;\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n if (dd < t) return a[i];\n }\n return null;\n}\nfunction pickTrail(a, p) {\n var i = a.length,\n dx,\n dy,\n dd;\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n dx = a[i].size || 1;\n if (dd < dx * dx) return a[i];\n }\n return null;\n}\n\nfunction markMultiItemPath (type, shape, tip) {\n function attr(emit, item) {\n var items = item.mark.items;\n if (items.length) emit('d', shape(null, items));\n }\n function bound(bounds, mark) {\n var items = mark.items;\n if (items.length === 0) {\n return bounds;\n } else {\n shape(boundContext(bounds), items);\n return boundStroke(bounds, items[0]);\n }\n }\n function draw(context, items) {\n context.beginPath();\n shape(context, items);\n }\n const hit = hitPath(draw);\n function pick(context, scene, x, y, gx, gy) {\n var items = scene.items,\n b = scene.bounds;\n if (!items || !items.length || b && !b.contains(gx, gy)) {\n return null;\n }\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return hit(context, items, x, y) ? items[0] : null;\n }\n return {\n type: type,\n tag: 'path',\n nested: true,\n attr: attr,\n bound: bound,\n draw: drawOne(draw),\n pick: pick,\n isect: intersectPoint,\n tip: tip\n };\n}\n\nvar area = markMultiItemPath('area', area$1, pickArea);\n\nfunction clip (context, scene) {\n var clip = scene.clip;\n context.save();\n if (isFunction(clip)) {\n context.beginPath();\n clip(context);\n context.clip();\n } else {\n clipGroup(context, scene.group);\n }\n}\nfunction clipGroup(context, group) {\n context.beginPath();\n hasCornerRadius(group) ? rectangle(context, group, 0, 0) : context.rect(0, 0, group.width || 0, group.height || 0);\n context.clip();\n}\n\nfunction offset$1(item) {\n const sw = value(item.strokeWidth, 1);\n return item.strokeOffset != null ? item.strokeOffset : item.stroke && sw > 0.5 && sw < 1.5 ? 0.5 - Math.abs(sw - 1) : 0;\n}\nfunction attr$5(emit, item) {\n emit('transform', translateItem(item));\n}\nfunction emitRectangle(emit, item) {\n const off = offset$1(item);\n emit('d', rectangle(null, item, off, off));\n}\nfunction background(emit, item) {\n emit('class', 'background');\n emit('aria-hidden', true);\n emitRectangle(emit, item);\n}\nfunction foreground(emit, item) {\n emit('class', 'foreground');\n emit('aria-hidden', true);\n if (item.strokeForeground) {\n emitRectangle(emit, item);\n } else {\n emit('d', '');\n }\n}\nfunction content(emit, item, renderer) {\n const url = item.clip ? clip$1(renderer, item, item) : null;\n emit('clip-path', url);\n}\nfunction bound$5(bounds, group) {\n if (!group.clip && group.items) {\n const items = group.items,\n m = items.length;\n for (let j = 0; j < m; ++j) {\n bounds.union(items[j].bounds);\n }\n }\n if ((group.clip || group.width || group.height) && !group.noBound) {\n bounds.add(0, 0).add(group.width || 0, group.height || 0);\n }\n boundStroke(bounds, group);\n return bounds.translate(group.x || 0, group.y || 0);\n}\nfunction rectanglePath(context, group, x, y) {\n const off = offset$1(group);\n context.beginPath();\n rectangle(context, group, (x || 0) + off, (y || 0) + off);\n}\nconst hitBackground = hitPath(rectanglePath);\nconst hitForeground = hitPath(rectanglePath, false);\nconst hitCorner = hitPath(rectanglePath, true);\nfunction draw$4(context, scene, bounds, markTypes) {\n visit(scene, group => {\n const gx = group.x || 0,\n gy = group.y || 0,\n fore = group.strokeForeground,\n opacity = group.opacity == null ? 1 : group.opacity;\n\n // draw group background\n if ((group.stroke || group.fill) && opacity) {\n rectanglePath(context, group, gx, gy);\n blend(context, group);\n if (group.fill && fill(context, group, opacity)) {\n context.fill();\n }\n if (group.stroke && !fore && stroke(context, group, opacity)) {\n context.stroke();\n }\n }\n\n // setup graphics context, set clip and bounds\n context.save();\n context.translate(gx, gy);\n if (group.clip) clipGroup(context, group);\n if (bounds) bounds.translate(-gx, -gy);\n\n // draw group contents\n visit(group, item => {\n if (item.marktype === 'group' || markTypes == null || markTypes.includes(item.marktype)) {\n this.draw(context, item, bounds, markTypes);\n }\n });\n\n // restore graphics context\n if (bounds) bounds.translate(gx, gy);\n context.restore();\n\n // draw group foreground\n if (fore && group.stroke && opacity) {\n rectanglePath(context, group, gx, gy);\n blend(context, group);\n if (stroke(context, group, opacity)) {\n context.stroke();\n }\n }\n });\n}\nfunction pick(context, scene, x, y, gx, gy) {\n if (scene.bounds && !scene.bounds.contains(gx, gy) || !scene.items) {\n return null;\n }\n const cx = x * context.pixelRatio,\n cy = y * context.pixelRatio;\n return pickVisit(scene, group => {\n let hit, dx, dy;\n\n // first hit test bounding box\n const b = group.bounds;\n if (b && !b.contains(gx, gy)) return;\n\n // passed bounds check, test rectangular clip\n dx = group.x || 0;\n dy = group.y || 0;\n const dw = dx + (group.width || 0),\n dh = dy + (group.height || 0),\n c = group.clip;\n if (c && (gx < dx || gx > dw || gy < dy || gy > dh)) return;\n\n // adjust coordinate system\n context.save();\n context.translate(dx, dy);\n dx = gx - dx;\n dy = gy - dy;\n\n // test background for rounded corner clip\n if (c && hasCornerRadius(group) && !hitCorner(context, group, cx, cy)) {\n context.restore();\n return null;\n }\n const fore = group.strokeForeground,\n ix = scene.interactive !== false;\n\n // hit test against group foreground\n if (ix && fore && group.stroke && hitForeground(context, group, cx, cy)) {\n context.restore();\n return group;\n }\n\n // hit test against contained marks\n hit = pickVisit(group, mark => pickMark(mark, dx, dy) ? this.pick(mark, x, y, dx, dy) : null);\n\n // hit test against group background\n if (!hit && ix && (group.fill || !fore && group.stroke) && hitBackground(context, group, cx, cy)) {\n hit = group;\n }\n\n // restore state and return\n context.restore();\n return hit || null;\n });\n}\nfunction pickMark(mark, x, y) {\n return (mark.interactive !== false || mark.marktype === 'group') && mark.bounds && mark.bounds.contains(x, y);\n}\nvar group = {\n type: 'group',\n tag: 'g',\n nested: false,\n attr: attr$5,\n bound: bound$5,\n draw: draw$4,\n pick: pick,\n isect: intersectRect,\n content: content,\n background: background,\n foreground: foreground\n};\n\nvar metadata = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'version': '1.1'\n};\n\nfunction getImage(item, renderer) {\n var image = item.image;\n if (!image || item.url && item.url !== image.url) {\n image = {\n complete: false,\n width: 0,\n height: 0\n };\n renderer.loadImage(item.url).then(image => {\n item.image = image;\n item.image.url = item.url;\n });\n }\n return image;\n}\nfunction imageWidth(item, image) {\n return item.width != null ? item.width : !image || !image.width ? 0 : item.aspect !== false && item.height ? item.height * image.width / image.height : image.width;\n}\nfunction imageHeight(item, image) {\n return item.height != null ? item.height : !image || !image.height ? 0 : item.aspect !== false && item.width ? item.width * image.height / image.width : image.height;\n}\nfunction imageXOffset(align, w) {\n return align === 'center' ? w / 2 : align === 'right' ? w : 0;\n}\nfunction imageYOffset(baseline, h) {\n return baseline === 'middle' ? h / 2 : baseline === 'bottom' ? h : 0;\n}\nfunction attr$4(emit, item, renderer) {\n const img = getImage(item, renderer),\n w = imageWidth(item, img),\n h = imageHeight(item, img),\n x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h),\n i = !img.src && img.toDataURL ? img.toDataURL() : img.src || '';\n emit('href', i, metadata['xmlns:xlink'], 'xlink:href');\n emit('transform', translate(x, y));\n emit('width', w);\n emit('height', h);\n emit('preserveAspectRatio', item.aspect === false ? 'none' : 'xMidYMid');\n}\nfunction bound$4(bounds, item) {\n const img = item.image,\n w = imageWidth(item, img),\n h = imageHeight(item, img),\n x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h);\n return bounds.set(x, y, x + w, y + h);\n}\nfunction draw$3(context, scene, bounds) {\n visit(scene, item => {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n const img = getImage(item, this);\n let w = imageWidth(item, img);\n let h = imageHeight(item, img);\n if (w === 0 || h === 0) return; // early exit\n\n let x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h),\n opacity,\n ar0,\n ar1,\n t;\n if (item.aspect !== false) {\n ar0 = img.width / img.height;\n ar1 = item.width / item.height;\n if (ar0 === ar0 && ar1 === ar1 && ar0 !== ar1) {\n if (ar1 < ar0) {\n t = w / ar0;\n y += (h - t) / 2;\n h = t;\n } else {\n t = h * ar0;\n x += (w - t) / 2;\n w = t;\n }\n }\n }\n if (img.complete || img.toDataURL) {\n blend(context, item);\n context.globalAlpha = (opacity = item.opacity) != null ? opacity : 1;\n context.imageSmoothingEnabled = item.smooth !== false;\n context.drawImage(img, x, y, w, h);\n }\n });\n}\nvar image = {\n type: 'image',\n tag: 'image',\n nested: false,\n attr: attr$4,\n bound: bound$4,\n draw: draw$3,\n pick: pick$1(),\n isect: truthy,\n // bounds check is sufficient\n get: getImage,\n xOffset: imageXOffset,\n yOffset: imageYOffset\n};\n\nvar line = markMultiItemPath('line', line$1, pickLine);\n\nfunction attr$3(emit, item) {\n var sx = item.scaleX || 1,\n sy = item.scaleY || 1;\n if (sx !== 1 || sy !== 1) {\n emit('vector-effect', 'non-scaling-stroke');\n }\n emit('transform', transformItem(item));\n emit('d', item.path);\n}\nfunction path$1(context, item) {\n var path = item.path;\n if (path == null) return true;\n var x = item.x || 0,\n y = item.y || 0,\n sx = item.scaleX || 1,\n sy = item.scaleY || 1,\n a = (item.angle || 0) * DegToRad,\n cache = item.pathCache;\n if (!cache || cache.path !== path) {\n (item.pathCache = cache = parse(path)).path = path;\n }\n if (a && context.rotate && context.translate) {\n context.translate(x, y);\n context.rotate(a);\n pathRender(context, cache, 0, 0, sx, sy);\n context.rotate(-a);\n context.translate(-x, -y);\n } else {\n pathRender(context, cache, x, y, sx, sy);\n }\n}\nfunction bound$3(bounds, item) {\n return path$1(boundContext(bounds, item.angle), item) ? bounds.set(0, 0, 0, 0) : boundStroke(bounds, item, true);\n}\nvar path$2 = {\n type: 'path',\n tag: 'path',\n nested: false,\n attr: attr$3,\n bound: bound$3,\n draw: drawAll(path$1),\n pick: pickPath(path$1),\n isect: intersectPath(path$1)\n};\n\nfunction attr$2(emit, item) {\n emit('d', rectangle(null, item));\n}\nfunction bound$2(bounds, item) {\n var x, y;\n return boundStroke(bounds.set(x = item.x || 0, y = item.y || 0, x + item.width || 0, y + item.height || 0), item);\n}\nfunction draw$2(context, item) {\n context.beginPath();\n rectangle(context, item);\n}\nvar rect = {\n type: 'rect',\n tag: 'path',\n nested: false,\n attr: attr$2,\n bound: bound$2,\n draw: drawAll(draw$2),\n pick: pickPath(draw$2),\n isect: intersectRect\n};\n\nfunction attr$1(emit, item) {\n emit('transform', translateItem(item));\n emit('x2', item.x2 != null ? item.x2 - (item.x || 0) : 0);\n emit('y2', item.y2 != null ? item.y2 - (item.y || 0) : 0);\n}\nfunction bound$1(bounds, item) {\n var x1, y1;\n return boundStroke(bounds.set(x1 = item.x || 0, y1 = item.y || 0, item.x2 != null ? item.x2 : x1, item.y2 != null ? item.y2 : y1), item);\n}\nfunction path(context, item, opacity) {\n var x1, y1, x2, y2;\n if (item.stroke && stroke(context, item, opacity)) {\n x1 = item.x || 0;\n y1 = item.y || 0;\n x2 = item.x2 != null ? item.x2 : x1;\n y2 = item.y2 != null ? item.y2 : y1;\n context.beginPath();\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n return true;\n }\n return false;\n}\nfunction draw$1(context, scene, bounds) {\n visit(scene, item => {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity && path(context, item, opacity)) {\n blend(context, item);\n context.stroke();\n }\n });\n}\nfunction hit$1(context, item, x, y) {\n if (!context.isPointInStroke) return false;\n return path(context, item, 1) && context.isPointInStroke(x, y);\n}\nvar rule = {\n type: 'rule',\n tag: 'line',\n nested: false,\n attr: attr$1,\n bound: bound$1,\n draw: draw$1,\n pick: pick$1(hit$1),\n isect: intersectRule\n};\n\nvar shape = markItemPath('shape', shape$1);\n\nvar symbol = markItemPath('symbol', symbol$1, intersectPoint);\n\n// memoize text width measurement\nconst widthCache = lruCache();\nvar textMetrics = {\n height: fontSize,\n measureWidth: measureWidth,\n estimateWidth: estimateWidth,\n width: estimateWidth,\n canvas: useCanvas\n};\nuseCanvas(true);\nfunction useCanvas(use) {\n textMetrics.width = use && context ? measureWidth : estimateWidth;\n}\n\n// make simple estimate if no canvas is available\nfunction estimateWidth(item, text) {\n return _estimateWidth(textValue(item, text), fontSize(item));\n}\nfunction _estimateWidth(text, currentFontHeight) {\n return ~~(0.8 * text.length * currentFontHeight);\n}\n\n// measure text width if canvas is available\nfunction measureWidth(item, text) {\n return fontSize(item) <= 0 || !(text = textValue(item, text)) ? 0 : _measureWidth(text, font(item));\n}\nfunction _measureWidth(text, currentFont) {\n const key = `(${currentFont}) ${text}`;\n let width = widthCache.get(key);\n if (width === undefined) {\n context.font = currentFont;\n width = context.measureText(text).width;\n widthCache.set(key, width);\n }\n return width;\n}\nfunction fontSize(item) {\n return item.fontSize != null ? +item.fontSize || 0 : 11;\n}\nfunction lineHeight(item) {\n return item.lineHeight != null ? item.lineHeight : fontSize(item) + 2;\n}\nfunction lineArray(_) {\n return isArray(_) ? _.length > 1 ? _ : _[0] : _;\n}\nfunction textLines(item) {\n return lineArray(item.lineBreak && item.text && !isArray(item.text) ? item.text.split(item.lineBreak) : item.text);\n}\nfunction multiLineOffset(item) {\n const tl = textLines(item);\n return (isArray(tl) ? tl.length - 1 : 0) * lineHeight(item);\n}\nfunction textValue(item, line) {\n const text = line == null ? '' : (line + '').trim();\n return item.limit > 0 && text.length ? truncate(item, text) : text;\n}\nfunction widthGetter(item) {\n if (textMetrics.width === measureWidth) {\n // we are using canvas\n const currentFont = font(item);\n return text => _measureWidth(text, currentFont);\n } else if (textMetrics.width === estimateWidth) {\n // we are relying on estimates\n const currentFontHeight = fontSize(item);\n return text => _estimateWidth(text, currentFontHeight);\n } else {\n // User defined textMetrics.width function in use (e.g. vl-convert)\n return text => textMetrics.width(item, text);\n }\n}\nfunction truncate(item, text) {\n var limit = +item.limit,\n width = widthGetter(item);\n if (width(text) < limit) return text;\n var ellipsis = item.ellipsis || '\\u2026',\n rtl = item.dir === 'rtl',\n lo = 0,\n hi = text.length,\n mid;\n limit -= width(ellipsis);\n if (rtl) {\n while (lo < hi) {\n mid = lo + hi >>> 1;\n if (width(text.slice(mid)) > limit) lo = mid + 1;else hi = mid;\n }\n return ellipsis + text.slice(lo);\n } else {\n while (lo < hi) {\n mid = 1 + (lo + hi >>> 1);\n if (width(text.slice(0, mid)) < limit) lo = mid;else hi = mid - 1;\n }\n return text.slice(0, lo) + ellipsis;\n }\n}\nfunction fontFamily(item, quote) {\n var font = item.font;\n return (quote && font ? String(font).replace(/\"/g, '\\'') : font) || 'sans-serif';\n}\nfunction font(item, quote) {\n return '' + (item.fontStyle ? item.fontStyle + ' ' : '') + (item.fontVariant ? item.fontVariant + ' ' : '') + (item.fontWeight ? item.fontWeight + ' ' : '') + fontSize(item) + 'px ' + fontFamily(item, quote);\n}\nfunction offset(item) {\n // perform our own font baseline calculation\n // why? not all browsers support SVG 1.1 'alignment-baseline' :(\n // this also ensures consistent layout across renderers\n var baseline = item.baseline,\n h = fontSize(item);\n return Math.round(baseline === 'top' ? 0.79 * h : baseline === 'middle' ? 0.30 * h : baseline === 'bottom' ? -0.21 * h : baseline === 'line-top' ? 0.29 * h + 0.5 * lineHeight(item) : baseline === 'line-bottom' ? 0.29 * h - 0.5 * lineHeight(item) : 0);\n}\n\nconst textAlign = {\n 'left': 'start',\n 'center': 'middle',\n 'right': 'end'\n};\nconst tempBounds = new Bounds();\nfunction anchorPoint(item) {\n var x = item.x || 0,\n y = item.y || 0,\n r = item.radius || 0,\n t;\n if (r) {\n t = (item.theta || 0) - HalfPi;\n x += r * Math.cos(t);\n y += r * Math.sin(t);\n }\n tempBounds.x1 = x;\n tempBounds.y1 = y;\n return tempBounds;\n}\nfunction attr(emit, item) {\n var dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item),\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n a = item.angle || 0,\n t;\n emit('text-anchor', textAlign[item.align] || 'start');\n if (a) {\n t = translate(x, y) + ' ' + rotate(a);\n if (dx || dy) t += ' ' + translate(dx, dy);\n } else {\n t = translate(x + dx, y + dy);\n }\n emit('transform', t);\n}\nfunction bound(bounds, item, mode) {\n var h = textMetrics.height(item),\n a = item.align,\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item) - Math.round(0.8 * h),\n // use 4/5 offset\n tl = textLines(item),\n w;\n\n // get dimensions\n if (isArray(tl)) {\n // multi-line text\n h += lineHeight(item) * (tl.length - 1);\n w = tl.reduce((w, t) => Math.max(w, textMetrics.width(item, t)), 0);\n } else {\n // single-line text\n w = textMetrics.width(item, tl);\n }\n\n // horizontal alignment\n if (a === 'center') {\n dx -= w / 2;\n } else if (a === 'right') {\n dx -= w;\n } else ;\n bounds.set(dx += x, dy += y, dx + w, dy + h);\n if (item.angle && !mode) {\n bounds.rotate(item.angle * DegToRad, x, y);\n } else if (mode === 2) {\n return bounds.rotatedPoints(item.angle * DegToRad, x, y);\n }\n return bounds;\n}\nfunction draw(context, scene, bounds) {\n visit(scene, item => {\n var opacity = item.opacity == null ? 1 : item.opacity,\n p,\n x,\n y,\n i,\n lh,\n tl,\n str;\n if (bounds && !bounds.intersects(item.bounds) ||\n // bounds check\n opacity === 0 || item.fontSize <= 0 || item.text == null || item.text.length === 0) return;\n context.font = font(item);\n context.textAlign = item.align || 'left';\n p = anchorPoint(item);\n x = p.x1, y = p.y1;\n if (item.angle) {\n context.save();\n context.translate(x, y);\n context.rotate(item.angle * DegToRad);\n x = y = 0; // reset x, y\n }\n\n x += item.dx || 0;\n y += (item.dy || 0) + offset(item);\n tl = textLines(item);\n blend(context, item);\n if (isArray(tl)) {\n lh = lineHeight(item);\n for (i = 0; i < tl.length; ++i) {\n str = textValue(item, tl[i]);\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n y += lh;\n }\n } else {\n str = textValue(item, tl);\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n }\n if (item.angle) context.restore();\n });\n}\nfunction hit(context, item, x, y, gx, gy) {\n if (item.fontSize <= 0) return false;\n if (!item.angle) return true; // bounds sufficient if no rotation\n\n // project point into space of unrotated bounds\n var p = anchorPoint(item),\n ax = p.x1,\n ay = p.y1,\n b = bound(tempBounds, item, 1),\n a = -item.angle * DegToRad,\n cos = Math.cos(a),\n sin = Math.sin(a),\n px = cos * gx - sin * gy + (ax - cos * ax + sin * ay),\n py = sin * gx + cos * gy + (ay - sin * ax - cos * ay);\n return b.contains(px, py);\n}\nfunction intersectText(item, box) {\n const p = bound(tempBounds, item, 2);\n return intersectBoxLine(box, p[0], p[1], p[2], p[3]) || intersectBoxLine(box, p[0], p[1], p[4], p[5]) || intersectBoxLine(box, p[4], p[5], p[6], p[7]) || intersectBoxLine(box, p[2], p[3], p[6], p[7]);\n}\nvar text = {\n type: 'text',\n tag: 'text',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick$1(hit),\n isect: intersectText\n};\n\nvar trail = markMultiItemPath('trail', trail$1, pickTrail);\n\nvar Marks = {\n arc: arc,\n area: area,\n group: group,\n image: image,\n line: line,\n path: path$2,\n rect: rect,\n rule: rule,\n shape: shape,\n symbol: symbol,\n text: text,\n trail: trail\n};\n\nfunction boundItem (item, func, opt) {\n var type = Marks[item.mark.marktype],\n bound = func || type.bound;\n if (type.nested) item = item.mark;\n return bound(item.bounds || (item.bounds = new Bounds()), item, opt);\n}\n\nvar DUMMY = {\n mark: null\n};\nfunction boundMark (mark, bounds, opt) {\n var type = Marks[mark.marktype],\n bound = type.bound,\n items = mark.items,\n hasItems = items && items.length,\n i,\n n,\n item,\n b;\n if (type.nested) {\n if (hasItems) {\n item = items[0];\n } else {\n // no items, fake it\n DUMMY.mark = mark;\n item = DUMMY;\n }\n b = boundItem(item, bound, opt);\n bounds = bounds && bounds.union(b) || b;\n return bounds;\n }\n bounds = bounds || mark.bounds && mark.bounds.clear() || new Bounds();\n if (hasItems) {\n for (i = 0, n = items.length; i < n; ++i) {\n bounds.union(boundItem(items[i], bound, opt));\n }\n }\n return mark.bounds = bounds;\n}\n\nconst keys = ['marktype', 'name', 'role', 'interactive', 'clip', 'items', 'zindex', 'x', 'y', 'width', 'height', 'align', 'baseline',\n// layout\n'fill', 'fillOpacity', 'opacity', 'blend',\n// fill\n'stroke', 'strokeOpacity', 'strokeWidth', 'strokeCap',\n// stroke\n'strokeDash', 'strokeDashOffset',\n// stroke dash\n'strokeForeground', 'strokeOffset',\n// group\n'startAngle', 'endAngle', 'innerRadius', 'outerRadius',\n// arc\n'cornerRadius', 'padAngle',\n// arc, rect\n'cornerRadiusTopLeft', 'cornerRadiusTopRight',\n// rect, group\n'cornerRadiusBottomLeft', 'cornerRadiusBottomRight', 'interpolate', 'tension', 'orient', 'defined',\n// area, line\n'url', 'aspect', 'smooth',\n// image\n'path', 'scaleX', 'scaleY',\n// path\n'x2', 'y2',\n// rule\n'size', 'shape',\n// symbol\n'text', 'angle', 'theta', 'radius', 'dir', 'dx', 'dy',\n// text\n'ellipsis', 'limit', 'lineBreak', 'lineHeight', 'font', 'fontSize', 'fontWeight', 'fontStyle', 'fontVariant',\n// font\n'description', 'aria', 'ariaRole', 'ariaRoleDescription' // aria\n];\n\nfunction sceneToJSON(scene, indent) {\n return JSON.stringify(scene, keys, indent);\n}\nfunction sceneFromJSON(json) {\n const scene = typeof json === 'string' ? JSON.parse(json) : json;\n return initialize(scene);\n}\nfunction initialize(scene) {\n var type = scene.marktype,\n items = scene.items,\n parent,\n i,\n n;\n if (items) {\n for (i = 0, n = items.length; i < n; ++i) {\n parent = type ? 'mark' : 'group';\n items[i][parent] = scene;\n if (items[i].zindex) items[i][parent].zdirty = true;\n if ('group' === (type || parent)) initialize(items[i]);\n }\n }\n if (type) boundMark(scene);\n return scene;\n}\n\nfunction Scenegraph(scene) {\n if (arguments.length) {\n this.root = sceneFromJSON(scene);\n } else {\n this.root = createMark({\n marktype: 'group',\n name: 'root',\n role: 'frame'\n });\n this.root.items = [new GroupItem(this.root)];\n }\n}\nScenegraph.prototype = {\n toJSON(indent) {\n return sceneToJSON(this.root, indent || 0);\n },\n mark(markdef, group, index) {\n group = group || this.root.items[0];\n const mark = createMark(markdef, group);\n group.items[index] = mark;\n if (mark.zindex) mark.group.zdirty = true;\n return mark;\n }\n};\nfunction createMark(def, group) {\n const mark = {\n bounds: new Bounds(),\n clip: !!def.clip,\n group: group,\n interactive: def.interactive === false ? false : true,\n items: [],\n marktype: def.marktype,\n name: def.name || undefined,\n role: def.role || undefined,\n zindex: def.zindex || 0\n };\n\n // add accessibility properties if defined\n if (def.aria != null) {\n mark.aria = def.aria;\n }\n if (def.description) {\n mark.description = def.description;\n }\n return mark;\n}\n\n// create a new DOM element\nfunction domCreate(doc, tag, ns) {\n if (!doc && typeof document !== 'undefined' && document.createElement) {\n doc = document;\n }\n return doc ? ns ? doc.createElementNS(ns, tag) : doc.createElement(tag) : null;\n}\n\n// find first child element with matching tag\nfunction domFind(el, tag) {\n tag = tag.toLowerCase();\n var nodes = el.childNodes,\n i = 0,\n n = nodes.length;\n for (; i < n; ++i) if (nodes[i].tagName.toLowerCase() === tag) {\n return nodes[i];\n }\n}\n\n// retrieve child element at given index\n// create & insert if doesn't exist or if tags do not match\nfunction domChild(el, index, tag, ns) {\n var a = el.childNodes[index],\n b;\n if (!a || a.tagName.toLowerCase() !== tag.toLowerCase()) {\n b = a || null;\n a = domCreate(el.ownerDocument, tag, ns);\n el.insertBefore(a, b);\n }\n return a;\n}\n\n// remove all child elements at or above the given index\nfunction domClear(el, index) {\n var nodes = el.childNodes,\n curr = nodes.length;\n while (curr > index) el.removeChild(nodes[--curr]);\n return el;\n}\n\n// generate css class name for mark\nfunction cssClass(mark) {\n return 'mark-' + mark.marktype + (mark.role ? ' role-' + mark.role : '') + (mark.name ? ' ' + mark.name : '');\n}\n\nfunction point (event, el) {\n const rect = el.getBoundingClientRect();\n return [event.clientX - rect.left - (el.clientLeft || 0), event.clientY - rect.top - (el.clientTop || 0)];\n}\n\nfunction resolveItem (item, event, el, origin) {\n var mark = item && item.mark,\n mdef,\n p;\n if (mark && (mdef = Marks[mark.marktype]).tip) {\n p = point(event, el);\n p[0] -= origin[0];\n p[1] -= origin[1];\n while (item = item.mark.group) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n }\n item = mdef.tip(mark.items, p);\n }\n return item;\n}\n\n/**\n * Create a new Handler instance.\n * @param {object} [customLoader] - Optional loader instance for\n * href URL sanitization. If not specified, a standard loader\n * instance will be generated.\n * @param {function} [customTooltip] - Optional tooltip handler\n * function for custom tooltip display.\n * @constructor\n */\nfunction Handler(customLoader, customTooltip) {\n this._active = null;\n this._handlers = {};\n this._loader = customLoader || loader();\n this._tooltip = customTooltip || defaultTooltip;\n}\n\n// The default tooltip display handler.\n// Sets the HTML title attribute on the visualization container.\nfunction defaultTooltip(handler, event, item, value) {\n handler.element().setAttribute('title', value || '');\n}\nHandler.prototype = {\n /**\n * Initialize a new Handler instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {object} [obj] - Optional context object that should serve as\n * the \"this\" context for event callbacks.\n * @return {Handler} - This handler instance.\n */\n initialize(el, origin, obj) {\n this._el = el;\n this._obj = obj || null;\n return this.origin(origin);\n },\n /**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\n element() {\n return this._el;\n },\n /**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\n canvas() {\n return this._el && this._el.firstChild;\n },\n /**\n * Get / set the origin coordinates of the visualization.\n */\n origin(origin) {\n if (arguments.length) {\n this._origin = origin || [0, 0];\n return this;\n } else {\n return this._origin.slice();\n }\n },\n /**\n * Get / set the scenegraph root.\n */\n scene(scene) {\n if (!arguments.length) return this._scene;\n this._scene = scene;\n return this;\n },\n /**\n * Add an event handler. Subclasses should override this method.\n */\n on( /*type, handler*/) {},\n /**\n * Remove an event handler. Subclasses should override this method.\n */\n off( /*type, handler*/) {},\n /**\n * Utility method for finding the array index of an event handler.\n * @param {Array} h - An array of registered event handlers.\n * @param {string} type - The event type.\n * @param {function} handler - The event handler instance to find.\n * @return {number} - The handler's array index or -1 if not registered.\n */\n _handlerIndex(h, type, handler) {\n for (let i = h ? h.length : 0; --i >= 0;) {\n if (h[i].type === type && (!handler || h[i].handler === handler)) {\n return i;\n }\n }\n return -1;\n },\n /**\n * Returns an array with registered event handlers.\n * @param {string} [type] - The event type to query. Any annotations\n * are ignored; for example, for the argument \"click.foo\", \".foo\" will\n * be ignored and the method returns all \"click\" handlers. If type is\n * null or unspecified, this method returns handlers for all types.\n * @return {Array} - A new array containing all registered event handlers.\n */\n handlers(type) {\n const h = this._handlers,\n a = [];\n if (type) {\n a.push(...h[this.eventName(type)]);\n } else {\n for (const k in h) {\n a.push(...h[k]);\n }\n }\n return a;\n },\n /**\n * Parses an event name string to return the specific event type.\n * For example, given \"click.foo\" returns \"click\"\n * @param {string} name - The input event type string.\n * @return {string} - A string with the event type only.\n */\n eventName(name) {\n const i = name.indexOf('.');\n return i < 0 ? name : name.slice(0, i);\n },\n /**\n * Handle hyperlink navigation in response to an item.href value.\n * @param {Event} event - The event triggering hyperlink navigation.\n * @param {Item} item - The scenegraph item.\n * @param {string} href - The URL to navigate to.\n */\n handleHref(event, item, href) {\n this._loader.sanitize(href, {\n context: 'href'\n }).then(opt => {\n const e = new MouseEvent(event.type, event),\n a = domCreate(null, 'a');\n for (const name in opt) a.setAttribute(name, opt[name]);\n a.dispatchEvent(e);\n }).catch(() => {/* do nothing */});\n },\n /**\n * Handle tooltip display in response to an item.tooltip value.\n * @param {Event} event - The event triggering tooltip display.\n * @param {Item} item - The scenegraph item.\n * @param {boolean} show - A boolean flag indicating whether\n * to show or hide a tooltip for the given item.\n */\n handleTooltip(event, item, show) {\n if (item && item.tooltip != null) {\n item = resolveItem(item, event, this.canvas(), this._origin);\n const value = show && item && item.tooltip || null;\n this._tooltip.call(this._obj, this, event, item, value);\n }\n },\n /**\n * Returns the size of a scenegraph item and its position relative\n * to the viewport.\n * @param {Item} item - The scenegraph item.\n * @return {object} - A bounding box object (compatible with the\n * DOMRect type) consisting of x, y, width, heigh, top, left,\n * right, and bottom properties.\n */\n getItemBoundingClientRect(item) {\n const el = this.canvas();\n if (!el) return;\n const rect = el.getBoundingClientRect(),\n origin = this._origin,\n bounds = item.bounds,\n width = bounds.width(),\n height = bounds.height();\n let x = bounds.x1 + origin[0] + rect.left,\n y = bounds.y1 + origin[1] + rect.top;\n\n // translate coordinate for each parent group\n while (item.mark && (item = item.mark.group)) {\n x += item.x || 0;\n y += item.y || 0;\n }\n\n // return DOMRect-compatible bounding box\n return {\n x,\n y,\n width,\n height,\n left: x,\n top: y,\n right: x + width,\n bottom: y + height\n };\n }\n};\n\n/**\n * Create a new Renderer instance.\n * @param {object} [loader] - Optional loader instance for\n * image and href URL sanitization. If not specified, a\n * standard loader instance will be generated.\n * @constructor\n */\nfunction Renderer(loader) {\n this._el = null;\n this._bgcolor = null;\n this._loader = new ResourceLoader(loader);\n}\nRenderer.prototype = {\n /**\n * Initialize a new Renderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n this._el = el;\n return this.resize(width, height, origin, scaleFactor);\n },\n /**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\n element() {\n return this._el;\n },\n /**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\n canvas() {\n return this._el && this._el.firstChild;\n },\n /**\n * Get / set the background color.\n */\n background(bgcolor) {\n if (arguments.length === 0) return this._bgcolor;\n this._bgcolor = bgcolor;\n return this;\n },\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n this._width = width;\n this._height = height;\n this._origin = origin || [0, 0];\n this._scale = scaleFactor || 1;\n return this;\n },\n /**\n * Report a dirty item whose bounds should be redrawn.\n * This base class method does nothing. Subclasses that perform\n * incremental should implement this method.\n * @param {Item} item - The dirty item whose bounds should be redrawn.\n */\n dirty( /*item*/) {},\n /**\n * Render an input scenegraph, potentially with a set of dirty items.\n * This method will perform an immediate rendering with available resources.\n * The renderer may also need to perform image loading to perform a complete\n * render. This process can lead to asynchronous re-rendering of the scene\n * after this method returns. To receive notification when rendering is\n * complete, use the renderAsync method instead.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @param {Array} markTypes - Array of the mark types to render.\n * If undefined, render all mark types\n * @return {Renderer} - This renderer instance.\n */\n render(scene, markTypes) {\n const r = this;\n\n // bind arguments into a render call, and cache it\n // this function may be subsequently called for async redraw\n r._call = function () {\n r._render(scene, markTypes);\n };\n\n // invoke the renderer\n r._call();\n\n // clear the cached call for garbage collection\n // async redraws will stash their own copy\n r._call = null;\n return r;\n },\n /**\n * Internal rendering method. Renderer subclasses should override this\n * method to actually perform rendering.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @param {Array} markTypes - Array of the mark types to render.\n * If undefined, render all mark types\n */\n _render( /*scene, markTypes*/\n ) {\n // subclasses to override\n },\n /**\n * Asynchronous rendering method. Similar to render, but returns a Promise\n * that resolves when all rendering is completed. Sometimes a renderer must\n * perform image loading to get a complete rendering. The returned\n * Promise will not resolve until this process completes.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @param {Array} markTypes - Array of the mark types to render.\n * If undefined, render all mark types\n * @return {Promise} - A Promise that resolves when rendering is complete.\n */\n renderAsync(scene, markTypes) {\n const r = this.render(scene, markTypes);\n return this._ready ? this._ready.then(() => r) : Promise.resolve(r);\n },\n /**\n * Internal method for asynchronous resource loading.\n * Proxies method calls to the ImageLoader, and tracks loading\n * progress to invoke a re-render once complete.\n * @param {string} method - The method name to invoke on the ImageLoader.\n * @param {string} uri - The URI for the requested resource.\n * @return {Promise} - A Promise that resolves to the requested resource.\n */\n _load(method, uri) {\n var r = this,\n p = r._loader[method](uri);\n if (!r._ready) {\n // re-render the scene when loading completes\n const call = r._call;\n r._ready = r._loader.ready().then(redraw => {\n if (redraw) call();\n r._ready = null;\n });\n }\n return p;\n },\n /**\n * Sanitize a URL to include as a hyperlink in the rendered scene.\n * This method proxies a call to ImageLoader.sanitizeURL, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string to sanitize.\n * @return {Promise} - A Promise that resolves to the sanitized URL.\n */\n sanitizeURL(uri) {\n return this._load('sanitizeURL', uri);\n },\n /**\n * Requests an image to include in the rendered scene.\n * This method proxies a call to ImageLoader.loadImage, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string of the image.\n * @return {Promise} - A Promise that resolves to the loaded Image.\n */\n loadImage(uri) {\n return this._load('loadImage', uri);\n }\n};\n\nconst KeyDownEvent = 'keydown';\nconst KeyPressEvent = 'keypress';\nconst KeyUpEvent = 'keyup';\nconst DragEnterEvent = 'dragenter';\nconst DragLeaveEvent = 'dragleave';\nconst DragOverEvent = 'dragover';\nconst PointerDownEvent = 'pointerdown';\nconst PointerUpEvent = 'pointerup';\nconst PointerMoveEvent = 'pointermove';\nconst PointerOutEvent = 'pointerout';\nconst PointerOverEvent = 'pointerover';\nconst ClickEvent = 'click';\nconst DoubleClickEvent = 'dblclick';\nconst WheelEvent = 'wheel';\nconst MouseWheelEvent = 'mousewheel';\nconst TouchStartEvent = 'touchstart';\nconst TouchMoveEvent = 'touchmove';\nconst TouchEndEvent = 'touchend';\nconst Events = [KeyDownEvent, KeyPressEvent, KeyUpEvent, DragEnterEvent, DragLeaveEvent, DragOverEvent, PointerDownEvent, PointerUpEvent, PointerMoveEvent, PointerOutEvent, PointerOverEvent, ClickEvent, DoubleClickEvent, WheelEvent, MouseWheelEvent, TouchStartEvent, TouchMoveEvent, TouchEndEvent];\nconst TooltipShowEvent = PointerMoveEvent;\nconst TooltipHideEvent = PointerOutEvent;\nconst HrefEvent = ClickEvent;\n\nfunction CanvasHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n this._down = null;\n this._touch = null;\n this._first = true;\n this._events = {};\n}\nconst eventBundle = type => type === TouchStartEvent || type === TouchMoveEvent || type === TouchEndEvent ? [TouchStartEvent, TouchMoveEvent, TouchEndEvent] : [type];\n\n// lazily add listeners to the canvas as needed\nfunction eventListenerCheck(handler, type) {\n eventBundle(type).forEach(_ => addEventListener(handler, _));\n}\nfunction addEventListener(handler, type) {\n const canvas = handler.canvas();\n if (canvas && !handler._events[type]) {\n handler._events[type] = 1;\n canvas.addEventListener(type, handler[type] ? evt => handler[type](evt) : evt => handler.fire(type, evt));\n }\n}\nfunction move(moveEvent, overEvent, outEvent) {\n return function (evt) {\n const a = this._active,\n p = this.pickEvent(evt);\n if (p === a) {\n // active item and picked item are the same\n this.fire(moveEvent, evt); // fire move\n } else {\n // active item and picked item are different\n if (!a || !a.exit) {\n // fire out for prior active item\n // suppress if active item was removed from scene\n this.fire(outEvent, evt);\n }\n this._active = p; // set new active item\n this.fire(overEvent, evt); // fire over for new active item\n this.fire(moveEvent, evt); // fire move for new active item\n }\n };\n}\n\nfunction inactive(type) {\n return function (evt) {\n this.fire(type, evt);\n this._active = null;\n };\n}\ninherits(CanvasHandler, Handler, {\n initialize(el, origin, obj) {\n this._canvas = el && domFind(el, 'canvas');\n\n // add minimal events required for proper state management\n [ClickEvent, PointerDownEvent, PointerMoveEvent, PointerOutEvent, DragLeaveEvent].forEach(type => eventListenerCheck(this, type));\n return Handler.prototype.initialize.call(this, el, origin, obj);\n },\n // return the backing canvas instance\n canvas() {\n return this._canvas;\n },\n // retrieve the current canvas context\n context() {\n return this._canvas.getContext('2d');\n },\n // supported events\n events: Events,\n // to keep old versions of firefox happy\n DOMMouseScroll(evt) {\n this.fire(MouseWheelEvent, evt);\n },\n pointermove: move(PointerMoveEvent, PointerOverEvent, PointerOutEvent),\n dragover: move(DragOverEvent, DragEnterEvent, DragLeaveEvent),\n pointerout: inactive(PointerOutEvent),\n dragleave: inactive(DragLeaveEvent),\n pointerdown(evt) {\n this._down = this._active;\n this.fire(PointerDownEvent, evt);\n },\n click(evt) {\n if (this._down === this._active) {\n this.fire(ClickEvent, evt);\n this._down = null;\n }\n },\n touchstart(evt) {\n this._touch = this.pickEvent(evt.changedTouches[0]);\n if (this._first) {\n this._active = this._touch;\n this._first = false;\n }\n this.fire(TouchStartEvent, evt, true);\n },\n touchmove(evt) {\n this.fire(TouchMoveEvent, evt, true);\n },\n touchend(evt) {\n this.fire(TouchEndEvent, evt, true);\n this._touch = null;\n },\n // fire an event\n fire(type, evt, touch) {\n const a = touch ? this._touch : this._active,\n h = this._handlers[type];\n\n // set event type relative to scenegraph items\n evt.vegaType = type;\n\n // handle hyperlinks and tooltips first\n if (type === HrefEvent && a && a.href) {\n this.handleHref(evt, a, a.href);\n } else if (type === TooltipShowEvent || type === TooltipHideEvent) {\n this.handleTooltip(evt, a, type !== TooltipHideEvent);\n }\n\n // invoke all registered handlers\n if (h) {\n for (let i = 0, len = h.length; i < len; ++i) {\n h[i].handler.call(this._obj, evt, a);\n }\n }\n },\n // add an event handler\n on(type, handler) {\n const name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n if (i < 0) {\n eventListenerCheck(this, type);\n (h[name] || (h[name] = [])).push({\n type: type,\n handler: handler\n });\n }\n return this;\n },\n // remove an event handler\n off(type, handler) {\n const name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n if (i >= 0) {\n h.splice(i, 1);\n }\n return this;\n },\n pickEvent(evt) {\n const p = point(evt, this._canvas),\n o = this._origin;\n return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]);\n },\n // find the scenegraph item at the current pointer position\n // x, y -- the absolute x, y pointer coordinates on the canvas element\n // gx, gy -- the relative coordinates within the current group\n pick(scene, x, y, gx, gy) {\n const g = this.context(),\n mark = Marks[scene.marktype];\n return mark.pick.call(this, g, scene, x, y, gx, gy);\n }\n});\n\nfunction devicePixelRatio() {\n return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n}\nvar pixelRatio = devicePixelRatio();\nfunction resize (canvas, width, height, origin, scaleFactor, opt) {\n const inDOM = typeof HTMLElement !== 'undefined' && canvas instanceof HTMLElement && canvas.parentNode != null,\n context = canvas.getContext('2d'),\n ratio = inDOM ? pixelRatio : scaleFactor;\n canvas.width = width * ratio;\n canvas.height = height * ratio;\n for (const key in opt) {\n context[key] = opt[key];\n }\n if (inDOM && ratio !== 1) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n context.pixelRatio = ratio;\n context.setTransform(ratio, 0, 0, ratio, ratio * origin[0], ratio * origin[1]);\n return canvas;\n}\n\nfunction CanvasRenderer(loader) {\n Renderer.call(this, loader);\n this._options = {};\n this._redraw = false;\n this._dirty = new Bounds();\n this._tempb = new Bounds();\n}\nconst base$2 = Renderer.prototype;\nconst viewBounds = (origin, width, height) => new Bounds().set(0, 0, width, height).translate(-origin[0], -origin[1]);\nfunction clipToBounds(g, b, origin) {\n // expand bounds by 1 pixel, then round to pixel boundaries\n b.expand(1).round();\n\n // align to base pixel grid in case of non-integer scaling (#2425)\n if (g.pixelRatio % 1) {\n b.scale(g.pixelRatio).round().scale(1 / g.pixelRatio);\n }\n\n // to avoid artifacts translate if origin has fractional pixels\n b.translate(-(origin[0] % 1), -(origin[1] % 1));\n\n // set clip path\n g.beginPath();\n g.rect(b.x1, b.y1, b.width(), b.height());\n g.clip();\n return b;\n}\ninherits(CanvasRenderer, Renderer, {\n initialize(el, width, height, origin, scaleFactor, options) {\n this._options = options || {};\n this._canvas = this._options.externalContext ? null : canvas(1, 1, this._options.type); // instantiate a small canvas\n\n if (el && this._canvas) {\n domClear(el, 0).appendChild(this._canvas);\n this._canvas.setAttribute('class', 'marks');\n }\n\n // this method will invoke resize to size the canvas appropriately\n return base$2.initialize.call(this, el, width, height, origin, scaleFactor);\n },\n resize(width, height, origin, scaleFactor) {\n base$2.resize.call(this, width, height, origin, scaleFactor);\n if (this._canvas) {\n // configure canvas size and transform\n resize(this._canvas, this._width, this._height, this._origin, this._scale, this._options.context);\n } else {\n // external context needs to be scaled and positioned to origin\n const ctx = this._options.externalContext;\n if (!ctx) error('CanvasRenderer is missing a valid canvas or context');\n ctx.scale(this._scale, this._scale);\n ctx.translate(this._origin[0], this._origin[1]);\n }\n this._redraw = true;\n return this;\n },\n canvas() {\n return this._canvas;\n },\n context() {\n return this._options.externalContext || (this._canvas ? this._canvas.getContext('2d') : null);\n },\n dirty(item) {\n const b = this._tempb.clear().union(item.bounds);\n let g = item.mark.group;\n while (g) {\n b.translate(g.x || 0, g.y || 0);\n g = g.mark.group;\n }\n this._dirty.union(b);\n },\n _render(scene, markTypes) {\n const g = this.context(),\n o = this._origin,\n w = this._width,\n h = this._height,\n db = this._dirty,\n vb = viewBounds(o, w, h);\n\n // setup\n g.save();\n const b = this._redraw || db.empty() ? (this._redraw = false, vb.expand(1)) : clipToBounds(g, vb.intersect(db), o);\n this.clear(-o[0], -o[1], w, h);\n\n // render\n this.draw(g, scene, b, markTypes);\n\n // takedown\n g.restore();\n db.clear();\n return this;\n },\n draw(ctx, scene, bounds, markTypes) {\n if (scene.marktype !== 'group' && markTypes != null && !markTypes.includes(scene.marktype)) {\n return;\n }\n const mark = Marks[scene.marktype];\n if (scene.clip) clip(ctx, scene);\n mark.draw.call(this, ctx, scene, bounds, markTypes);\n if (scene.clip) ctx.restore();\n },\n clear(x, y, w, h) {\n const opt = this._options,\n g = this.context();\n if (opt.type !== 'pdf' && !opt.externalContext) {\n // calling clear rect voids vector output in pdf mode\n // and could remove external context content (#2615)\n g.clearRect(x, y, w, h);\n }\n if (this._bgcolor != null) {\n g.fillStyle = this._bgcolor;\n g.fillRect(x, y, w, h);\n }\n }\n});\n\nfunction SVGHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n const h = this;\n h._hrefHandler = listener(h, (evt, item) => {\n if (item && item.href) h.handleHref(evt, item, item.href);\n });\n h._tooltipHandler = listener(h, (evt, item) => {\n h.handleTooltip(evt, item, evt.type !== TooltipHideEvent);\n });\n}\n\n// wrap an event listener for the SVG DOM\nconst listener = (context, handler) => evt => {\n let item = evt.target.__data__;\n item = Array.isArray(item) ? item[0] : item;\n evt.vegaType = evt.type;\n handler.call(context._obj, evt, item);\n};\ninherits(SVGHandler, Handler, {\n initialize(el, origin, obj) {\n let svg = this._svg;\n if (svg) {\n svg.removeEventListener(HrefEvent, this._hrefHandler);\n svg.removeEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.removeEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n this._svg = svg = el && domFind(el, 'svg');\n if (svg) {\n svg.addEventListener(HrefEvent, this._hrefHandler);\n svg.addEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.addEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n return Handler.prototype.initialize.call(this, el, origin, obj);\n },\n canvas() {\n return this._svg;\n },\n // add an event handler\n on(type, handler) {\n const name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n if (i < 0) {\n const x = {\n type,\n handler,\n listener: listener(this, handler)\n };\n (h[name] || (h[name] = [])).push(x);\n if (this._svg) {\n this._svg.addEventListener(name, x.listener);\n }\n }\n return this;\n },\n // remove an event handler\n off(type, handler) {\n const name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n if (i >= 0) {\n if (this._svg) {\n this._svg.removeEventListener(name, h[i].listener);\n }\n h.splice(i, 1);\n }\n return this;\n }\n});\n\nconst ARIA_HIDDEN = 'aria-hidden';\nconst ARIA_LABEL = 'aria-label';\nconst ARIA_ROLE = 'role';\nconst ARIA_ROLEDESCRIPTION = 'aria-roledescription';\nconst GRAPHICS_OBJECT = 'graphics-object';\nconst GRAPHICS_SYMBOL = 'graphics-symbol';\nconst bundle = (role, roledesc, label) => ({\n [ARIA_ROLE]: role,\n [ARIA_ROLEDESCRIPTION]: roledesc,\n [ARIA_LABEL]: label || undefined\n});\n\n// these roles are covered by related roles\n// we can ignore them, no need to generate attributes\nconst AriaIgnore = toSet(['axis-domain', 'axis-grid', 'axis-label', 'axis-tick', 'axis-title', 'legend-band', 'legend-entry', 'legend-gradient', 'legend-label', 'legend-title', 'legend-symbol', 'title']);\n\n// aria attribute generators for guide roles\nconst AriaGuides = {\n 'axis': {\n desc: 'axis',\n caption: axisCaption\n },\n 'legend': {\n desc: 'legend',\n caption: legendCaption\n },\n 'title-text': {\n desc: 'title',\n caption: item => `Title text '${titleCaption(item)}'`\n },\n 'title-subtitle': {\n desc: 'subtitle',\n caption: item => `Subtitle text '${titleCaption(item)}'`\n }\n};\n\n// aria properties generated for mark item encoding channels\nconst AriaEncode = {\n ariaRole: ARIA_ROLE,\n ariaRoleDescription: ARIA_ROLEDESCRIPTION,\n description: ARIA_LABEL\n};\nfunction ariaItemAttributes(emit, item) {\n const hide = item.aria === false;\n emit(ARIA_HIDDEN, hide || undefined);\n if (hide || item.description == null) {\n for (const prop in AriaEncode) {\n emit(AriaEncode[prop], undefined);\n }\n } else {\n const type = item.mark.marktype;\n emit(ARIA_LABEL, item.description);\n emit(ARIA_ROLE, item.ariaRole || (type === 'group' ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL));\n emit(ARIA_ROLEDESCRIPTION, item.ariaRoleDescription || `${type} mark`);\n }\n}\nfunction ariaMarkAttributes(mark) {\n return mark.aria === false ? {\n [ARIA_HIDDEN]: true\n } : AriaIgnore[mark.role] ? null : AriaGuides[mark.role] ? ariaGuide(mark, AriaGuides[mark.role]) : ariaMark(mark);\n}\nfunction ariaMark(mark) {\n const type = mark.marktype;\n const recurse = type === 'group' || type === 'text' || mark.items.some(_ => _.description != null && _.aria !== false);\n return bundle(recurse ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL, `${type} mark container`, mark.description);\n}\nfunction ariaGuide(mark, opt) {\n try {\n const item = mark.items[0],\n caption = opt.caption || (() => '');\n return bundle(opt.role || GRAPHICS_SYMBOL, opt.desc, item.description || caption(item));\n } catch (err) {\n return null;\n }\n}\nfunction titleCaption(item) {\n return array(item.text).join(' ');\n}\nfunction axisCaption(item) {\n const datum = item.datum,\n orient = item.orient,\n title = datum.title ? extractTitle(item) : null,\n ctx = item.context,\n scale = ctx.scales[datum.scale].value,\n locale = ctx.dataflow.locale(),\n type = scale.type,\n xy = orient === 'left' || orient === 'right' ? 'Y' : 'X';\n return `${xy}-axis` + (title ? ` titled '${title}'` : '') + ` for a ${isDiscrete(type) ? 'discrete' : type} scale` + ` with ${domainCaption(locale, scale, item)}`;\n}\nfunction legendCaption(item) {\n const datum = item.datum,\n title = datum.title ? extractTitle(item) : null,\n type = `${datum.type || ''} legend`.trim(),\n scales = datum.scales,\n props = Object.keys(scales),\n ctx = item.context,\n scale = ctx.scales[scales[props[0]]].value,\n locale = ctx.dataflow.locale();\n return capitalize(type) + (title ? ` titled '${title}'` : '') + ` for ${channelCaption(props)}` + ` with ${domainCaption(locale, scale, item)}`;\n}\nfunction extractTitle(item) {\n try {\n return array(peek(item.items).items[0].text).join(' ');\n } catch (err) {\n return null;\n }\n}\nfunction channelCaption(props) {\n props = props.map(p => p + (p === 'fill' || p === 'stroke' ? ' color' : ''));\n return props.length < 2 ? props[0] : props.slice(0, -1).join(', ') + ' and ' + peek(props);\n}\nfunction capitalize(s) {\n return s.length ? s[0].toUpperCase() + s.slice(1) : s;\n}\n\nconst innerText = val => (val + '').replace(/&/g, '&').replace(//g, '>');\nconst attrText = val => innerText(val).replace(/\"/g, '"').replace(/\\t/g, ' ').replace(/\\n/g, ' ').replace(/\\r/g, ' ');\nfunction markup() {\n let buf = '',\n outer = '',\n inner = '';\n const stack = [],\n clear = () => outer = inner = '',\n push = tag => {\n if (outer) {\n buf += `${outer}>${inner}`;\n clear();\n }\n stack.push(tag);\n },\n attr = (name, value) => {\n if (value != null) outer += ` ${name}=\"${attrText(value)}\"`;\n return m;\n },\n m = {\n open(tag) {\n push(tag);\n outer = '<' + tag;\n for (var _len = arguments.length, attrs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n attrs[_key - 1] = arguments[_key];\n }\n for (const set of attrs) {\n for (const key in set) attr(key, set[key]);\n }\n return m;\n },\n close() {\n const tag = stack.pop();\n if (outer) {\n buf += outer + (inner ? `>${inner}` : '/>');\n } else {\n buf += ``;\n }\n clear();\n return m;\n },\n attr,\n text: t => (inner += innerText(t), m),\n toString: () => buf\n };\n return m;\n}\nconst serializeXML = node => _serialize(markup(), node) + '';\nfunction _serialize(m, node) {\n m.open(node.tagName);\n if (node.hasAttributes()) {\n const attrs = node.attributes,\n n = attrs.length;\n for (let i = 0; i < n; ++i) {\n m.attr(attrs[i].name, attrs[i].value);\n }\n }\n if (node.hasChildNodes()) {\n const children = node.childNodes;\n for (const child of children) {\n child.nodeType === 3 // text node\n ? m.text(child.nodeValue) : _serialize(m, child);\n }\n }\n return m.close();\n}\n\nconst stylesAttr = {\n fill: 'fill',\n fillOpacity: 'fill-opacity',\n stroke: 'stroke',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n strokeCap: 'stroke-linecap',\n strokeJoin: 'stroke-linejoin',\n strokeDash: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeMiterLimit: 'stroke-miterlimit',\n opacity: 'opacity'\n};\nconst stylesCss = {\n blend: 'mix-blend-mode'\n};\n\n// ensure miter limit default is consistent with canvas (#2498)\nconst rootAttributes = {\n 'fill': 'none',\n 'stroke-miterlimit': 10\n};\n\nconst RootIndex = 0,\n xmlns = 'http://www.w3.org/2000/xmlns/',\n svgns = metadata.xmlns;\nfunction SVGRenderer(loader) {\n Renderer.call(this, loader);\n this._dirtyID = 0;\n this._dirty = [];\n this._svg = null;\n this._root = null;\n this._defs = null;\n}\nconst base$1 = Renderer.prototype;\ninherits(SVGRenderer, Renderer, {\n /**\n * Initialize a new SVGRenderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n // create the svg definitions cache\n this._defs = {};\n this._clearDefs();\n if (el) {\n this._svg = domChild(el, 0, 'svg', svgns);\n this._svg.setAttributeNS(xmlns, 'xmlns', svgns);\n this._svg.setAttributeNS(xmlns, 'xmlns:xlink', metadata['xmlns:xlink']);\n this._svg.setAttribute('version', metadata['version']);\n this._svg.setAttribute('class', 'marks');\n domClear(el, 1);\n\n // set the svg root group\n this._root = domChild(this._svg, RootIndex, 'g', svgns);\n setAttributes(this._root, rootAttributes);\n\n // ensure no additional child elements\n domClear(this._svg, RootIndex + 1);\n }\n\n // set background color if defined\n this.background(this._bgcolor);\n return base$1.initialize.call(this, el, width, height, origin, scaleFactor);\n },\n /**\n * Get / set the background color.\n */\n background(bgcolor) {\n if (arguments.length && this._svg) {\n this._svg.style.setProperty('background-color', bgcolor);\n }\n return base$1.background.apply(this, arguments);\n },\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n base$1.resize.call(this, width, height, origin, scaleFactor);\n if (this._svg) {\n setAttributes(this._svg, {\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: `0 0 ${this._width} ${this._height}`\n });\n this._root.setAttribute('transform', `translate(${this._origin})`);\n }\n this._dirty = [];\n return this;\n },\n /**\n * Returns the SVG element of the visualization.\n * @return {DOMElement} - The SVG element.\n */\n canvas() {\n return this._svg;\n },\n /**\n * Returns an SVG text string for the rendered content,\n * or null if this renderer is currently headless.\n */\n svg() {\n const svg = this._svg,\n bg = this._bgcolor;\n if (!svg) return null;\n let node;\n if (bg) {\n svg.removeAttribute('style');\n node = domChild(svg, RootIndex, 'rect', svgns);\n setAttributes(node, {\n width: this._width,\n height: this._height,\n fill: bg\n });\n }\n const text = serializeXML(svg);\n if (bg) {\n svg.removeChild(node);\n this._svg.style.setProperty('background-color', bg);\n }\n return text;\n },\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @param {Array} markTypes - Array of the mark types to render.\n * If undefined, render all mark types\n */\n _render(scene, markTypes) {\n // perform spot updates and re-render markup\n if (this._dirtyCheck()) {\n if (this._dirtyAll) this._clearDefs();\n this.mark(this._root, scene, undefined, markTypes);\n domClear(this._root, 1);\n }\n this.defs();\n this._dirty = [];\n ++this._dirtyID;\n return this;\n },\n // -- Manage rendering of items marked as dirty --\n\n /**\n * Flag a mark item as dirty.\n * @param {Item} item - The mark item.\n */\n dirty(item) {\n if (item.dirty !== this._dirtyID) {\n item.dirty = this._dirtyID;\n this._dirty.push(item);\n }\n },\n /**\n * Check if a mark item is considered dirty.\n * @param {Item} item - The mark item.\n */\n isDirty(item) {\n return this._dirtyAll || !item._svg || !item._svg.ownerSVGElement || item.dirty === this._dirtyID;\n },\n /**\n * Internal method to check dirty status and, if possible,\n * make targetted updates without a full rendering pass.\n */\n _dirtyCheck() {\n this._dirtyAll = true;\n const items = this._dirty;\n if (!items.length || !this._dirtyID) return true;\n const id = ++this._dirtyID;\n let item, mark, type, mdef, i, n, o;\n for (i = 0, n = items.length; i < n; ++i) {\n item = items[i];\n mark = item.mark;\n if (mark.marktype !== type) {\n // memoize mark instance lookup\n type = mark.marktype;\n mdef = Marks[type];\n }\n if (mark.zdirty && mark.dirty !== id) {\n this._dirtyAll = false;\n dirtyParents(item, id);\n mark.items.forEach(i => {\n i.dirty = id;\n });\n }\n if (mark.zdirty) continue; // handle in standard drawing pass\n\n if (item.exit) {\n // EXIT\n if (mdef.nested && mark.items.length) {\n // if nested mark with remaining points, update instead\n o = mark.items[0];\n if (o._svg) this._update(mdef, o._svg, o);\n } else if (item._svg) {\n // otherwise remove from DOM\n o = item._svg.parentNode;\n if (o) o.removeChild(item._svg);\n }\n item._svg = null;\n continue;\n }\n item = mdef.nested ? mark.items[0] : item;\n if (item._update === id) continue; // already visited\n\n if (!item._svg || !item._svg.ownerSVGElement) {\n // ENTER\n this._dirtyAll = false;\n dirtyParents(item, id);\n } else {\n // IN-PLACE UPDATE\n this._update(mdef, item._svg, item);\n }\n item._update = id;\n }\n return !this._dirtyAll;\n },\n // -- Construct & maintain scenegraph to SVG mapping ---\n\n /**\n * Render a set of mark items.\n * @param {SVGElement} el - The parent element in the SVG tree.\n * @param {object} scene - The mark parent to render.\n * @param {SVGElement} prev - The previous sibling in the SVG tree.\n * @param {Array} markTypes - Array of the mark types to render.\n * If undefined, render all mark types\n */\n mark(el, scene, prev, markTypes) {\n if (!this.isDirty(scene)) {\n return scene._svg;\n }\n const svg = this._svg,\n markType = scene.marktype,\n mdef = Marks[markType],\n events = scene.interactive === false ? 'none' : null,\n isGroup = mdef.tag === 'g';\n const parent = bind(scene, el, prev, 'g', svg);\n if (markType !== 'group' && markTypes != null && !markTypes.includes(markType)) {\n domClear(parent, 0);\n return scene._svg;\n }\n parent.setAttribute('class', cssClass(scene));\n\n // apply aria attributes to parent container element\n const aria = ariaMarkAttributes(scene);\n for (const key in aria) setAttribute(parent, key, aria[key]);\n if (!isGroup) {\n setAttribute(parent, 'pointer-events', events);\n }\n setAttribute(parent, 'clip-path', scene.clip ? clip$1(this, scene, scene.group) : null);\n let sibling = null,\n i = 0;\n const process = item => {\n const dirty = this.isDirty(item),\n node = bind(item, parent, sibling, mdef.tag, svg);\n if (dirty) {\n this._update(mdef, node, item);\n if (isGroup) recurse(this, node, item, markTypes);\n }\n sibling = node;\n ++i;\n };\n if (mdef.nested) {\n if (scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n }\n domClear(parent, i);\n return parent;\n },\n /**\n * Update the attributes of an SVG element for a mark item.\n * @param {object} mdef - The mark definition object\n * @param {SVGElement} el - The SVG element.\n * @param {Item} item - The mark item.\n */\n _update(mdef, el, item) {\n // set dom element and values cache\n // provides access to emit method\n element = el;\n values = el.__values__;\n\n // apply aria-specific properties\n ariaItemAttributes(emit, item);\n\n // apply svg attributes\n mdef.attr(emit, item, this);\n\n // some marks need special treatment\n const extra = mark_extras[mdef.type];\n if (extra) extra.call(this, mdef, el, item);\n\n // apply svg style attributes\n // note: element state may have been modified by 'extra' method\n if (element) this.style(element, item);\n },\n /**\n * Update the presentation attributes of an SVG element for a mark item.\n * @param {SVGElement} el - The SVG element.\n * @param {Item} item - The mark item.\n */\n style(el, item) {\n if (item == null) return;\n for (const prop in stylesAttr) {\n let value = prop === 'font' ? fontFamily(item) : item[prop];\n if (value === values[prop]) continue;\n const name = stylesAttr[prop];\n if (value == null) {\n el.removeAttribute(name);\n } else {\n if (isGradient(value)) {\n value = gradientRef(value, this._defs.gradient, href());\n }\n el.setAttribute(name, value + '');\n }\n values[prop] = value;\n }\n for (const prop in stylesCss) {\n setStyle(el, stylesCss[prop], item[prop]);\n }\n },\n /**\n * Render SVG defs, as needed.\n * Must be called *after* marks have been processed to ensure the\n * collected state is current and accurate.\n */\n defs() {\n const svg = this._svg,\n defs = this._defs;\n let el = defs.el,\n index = 0;\n for (const id in defs.gradient) {\n if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', svgns);\n index = updateGradient(el, defs.gradient[id], index);\n }\n for (const id in defs.clipping) {\n if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', svgns);\n index = updateClipping(el, defs.clipping[id], index);\n }\n\n // clean-up\n if (el) {\n index === 0 ? (svg.removeChild(el), defs.el = null) : domClear(el, index);\n }\n },\n /**\n * Clear defs caches.\n */\n _clearDefs() {\n const def = this._defs;\n def.gradient = {};\n def.clipping = {};\n }\n});\n\n// mark ancestor chain with a dirty id\nfunction dirtyParents(item, id) {\n for (; item && item.dirty !== id; item = item.mark.group) {\n item.dirty = id;\n if (item.mark && item.mark.dirty !== id) {\n item.mark.dirty = id;\n } else return;\n }\n}\n\n// update gradient definitions\nfunction updateGradient(el, grad, index) {\n let i, n, stop;\n if (grad.gradient === 'radial') {\n // SVG radial gradients automatically transform to normalized bbox\n // coordinates, in a way that is cumbersome to replicate in canvas.\n // We wrap the radial gradient in a pattern element, allowing us to\n // maintain a circular gradient that matches what canvas provides.\n let pt = domChild(el, index++, 'pattern', svgns);\n setAttributes(pt, {\n id: patternPrefix + grad.id,\n viewBox: '0,0,1,1',\n width: '100%',\n height: '100%',\n preserveAspectRatio: 'xMidYMid slice'\n });\n pt = domChild(pt, 0, 'rect', svgns);\n setAttributes(pt, {\n width: 1,\n height: 1,\n fill: `url(${href()}#${grad.id})`\n });\n el = domChild(el, index++, 'radialGradient', svgns);\n setAttributes(el, {\n id: grad.id,\n fx: grad.x1,\n fy: grad.y1,\n fr: grad.r1,\n cx: grad.x2,\n cy: grad.y2,\n r: grad.r2\n });\n } else {\n el = domChild(el, index++, 'linearGradient', svgns);\n setAttributes(el, {\n id: grad.id,\n x1: grad.x1,\n x2: grad.x2,\n y1: grad.y1,\n y2: grad.y2\n });\n }\n for (i = 0, n = grad.stops.length; i < n; ++i) {\n stop = domChild(el, i, 'stop', svgns);\n stop.setAttribute('offset', grad.stops[i].offset);\n stop.setAttribute('stop-color', grad.stops[i].color);\n }\n domClear(el, i);\n return index;\n}\n\n// update clipping path definitions\nfunction updateClipping(el, clip, index) {\n let mask;\n el = domChild(el, index, 'clipPath', svgns);\n el.setAttribute('id', clip.id);\n if (clip.path) {\n mask = domChild(el, 0, 'path', svgns);\n mask.setAttribute('d', clip.path);\n } else {\n mask = domChild(el, 0, 'rect', svgns);\n setAttributes(mask, {\n x: 0,\n y: 0,\n width: clip.width,\n height: clip.height\n });\n }\n domClear(el, 1);\n return index + 1;\n}\n\n// Recursively process group contents.\nfunction recurse(renderer, el, group, markTypes) {\n // child 'g' element is second to last among children (path, g, path)\n // other children here are foreground and background path elements\n el = el.lastChild.previousSibling;\n let prev,\n idx = 0;\n visit(group, item => {\n prev = renderer.mark(el, item, prev, markTypes);\n ++idx;\n });\n\n // remove any extraneous DOM elements\n domClear(el, 1 + idx);\n}\n\n// Bind a scenegraph item to an SVG DOM element.\n// Create new SVG elements as needed.\nfunction bind(item, el, sibling, tag, svg) {\n let node = item._svg,\n doc;\n\n // create a new dom node if needed\n if (!node) {\n doc = el.ownerDocument;\n node = domCreate(doc, tag, svgns);\n item._svg = node;\n if (item.mark) {\n node.__data__ = item;\n node.__values__ = {\n fill: 'default'\n };\n\n // if group, create background, content, and foreground elements\n if (tag === 'g') {\n const bg = domCreate(doc, 'path', svgns);\n node.appendChild(bg);\n bg.__data__ = item;\n const cg = domCreate(doc, 'g', svgns);\n node.appendChild(cg);\n cg.__data__ = item;\n const fg = domCreate(doc, 'path', svgns);\n node.appendChild(fg);\n fg.__data__ = item;\n fg.__values__ = {\n fill: 'default'\n };\n }\n }\n }\n\n // (re-)insert if (a) not contained in SVG or (b) sibling order has changed\n if (node.ownerSVGElement !== svg || siblingCheck(node, sibling)) {\n el.insertBefore(node, sibling ? sibling.nextSibling : el.firstChild);\n }\n return node;\n}\n\n// check if two nodes are ordered siblings\nfunction siblingCheck(node, sibling) {\n return node.parentNode && node.parentNode.childNodes.length > 1 && node.previousSibling != sibling; // treat null/undefined the same\n}\n\n// -- Set attributes & styles on SVG elements ---\n\nlet element = null,\n // temp var for current SVG element\n values = null; // temp var for current values hash\n\n// Extra configuration for certain mark types\nconst mark_extras = {\n group(mdef, el, item) {\n const fg = element = el.childNodes[2];\n values = fg.__values__;\n mdef.foreground(emit, item, this);\n values = el.__values__; // use parent's values hash\n element = el.childNodes[1];\n mdef.content(emit, item, this);\n const bg = element = el.childNodes[0];\n mdef.background(emit, item, this);\n const value = item.mark.interactive === false ? 'none' : null;\n if (value !== values.events) {\n setAttribute(fg, 'pointer-events', value);\n setAttribute(bg, 'pointer-events', value);\n values.events = value;\n }\n if (item.strokeForeground && item.stroke) {\n const fill = item.fill;\n setAttribute(fg, 'display', null);\n\n // set style of background\n this.style(bg, item);\n setAttribute(bg, 'stroke', null);\n\n // set style of foreground\n if (fill) item.fill = null;\n values = fg.__values__;\n this.style(fg, item);\n if (fill) item.fill = fill;\n\n // leave element null to prevent downstream styling\n element = null;\n } else {\n // ensure foreground is ignored\n setAttribute(fg, 'display', 'none');\n }\n },\n image(mdef, el, item) {\n if (item.smooth === false) {\n setStyle(el, 'image-rendering', 'optimizeSpeed');\n setStyle(el, 'image-rendering', 'pixelated');\n } else {\n setStyle(el, 'image-rendering', null);\n }\n },\n text(mdef, el, item) {\n const tl = textLines(item);\n let key, value, doc, lh;\n if (isArray(tl)) {\n // multi-line text\n value = tl.map(_ => textValue(item, _));\n key = value.join('\\n'); // content cache key\n\n if (key !== values.text) {\n domClear(el, 0);\n doc = el.ownerDocument;\n lh = lineHeight(item);\n value.forEach((t, i) => {\n const ts = domCreate(doc, 'tspan', svgns);\n ts.__data__ = item; // data binding\n ts.textContent = t;\n if (i) {\n ts.setAttribute('x', 0);\n ts.setAttribute('dy', lh);\n }\n el.appendChild(ts);\n });\n values.text = key;\n }\n } else {\n // single-line text\n value = textValue(item, tl);\n if (value !== values.text) {\n el.textContent = value;\n values.text = value;\n }\n }\n setAttribute(el, 'font-family', fontFamily(item));\n setAttribute(el, 'font-size', fontSize(item) + 'px');\n setAttribute(el, 'font-style', item.fontStyle);\n setAttribute(el, 'font-variant', item.fontVariant);\n setAttribute(el, 'font-weight', item.fontWeight);\n }\n};\nfunction emit(name, value, ns) {\n // early exit if value is unchanged\n if (value === values[name]) return;\n\n // use appropriate method given namespace (ns)\n if (ns) {\n setAttributeNS(element, name, value, ns);\n } else {\n setAttribute(element, name, value);\n }\n\n // note current value for future comparison\n values[name] = value;\n}\nfunction setStyle(el, name, value) {\n if (value !== values[name]) {\n if (value == null) {\n el.style.removeProperty(name);\n } else {\n el.style.setProperty(name, value + '');\n }\n values[name] = value;\n }\n}\nfunction setAttributes(el, attrs) {\n for (const key in attrs) {\n setAttribute(el, key, attrs[key]);\n }\n}\nfunction setAttribute(el, name, value) {\n if (value != null) {\n // if value is provided, update DOM attribute\n el.setAttribute(name, value);\n } else {\n // else remove DOM attribute\n el.removeAttribute(name);\n }\n}\nfunction setAttributeNS(el, name, value, ns) {\n if (value != null) {\n // if value is provided, update DOM attribute\n el.setAttributeNS(ns, name, value);\n } else {\n // else remove DOM attribute\n el.removeAttributeNS(ns, name);\n }\n}\nfunction href() {\n let loc;\n return typeof window === 'undefined' ? '' : (loc = window.location).hash ? loc.href.slice(0, -loc.hash.length) : loc.href;\n}\n\nfunction SVGStringRenderer(loader) {\n Renderer.call(this, loader);\n this._text = null;\n this._defs = {\n gradient: {},\n clipping: {}\n };\n}\ninherits(SVGStringRenderer, Renderer, {\n /**\n * Returns the rendered SVG text string,\n * or null if rendering has not yet occurred.\n */\n svg() {\n return this._text;\n },\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\n _render(scene) {\n const m = markup();\n\n // svg tag\n m.open('svg', extend({}, metadata, {\n class: 'marks',\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: `0 0 ${this._width} ${this._height}`\n }));\n\n // background, if defined\n const bg = this._bgcolor;\n if (bg && bg !== 'transparent' && bg !== 'none') {\n m.open('rect', {\n width: this._width,\n height: this._height,\n fill: bg\n }).close();\n }\n\n // root content group\n m.open('g', rootAttributes, {\n transform: 'translate(' + this._origin + ')'\n });\n this.mark(m, scene);\n m.close(); // \n\n // defs\n this.defs(m);\n\n // get SVG text string\n this._text = m.close() + '';\n return this;\n },\n /**\n * Render a set of mark items.\n * @param {object} m - The markup context.\n * @param {object} scene - The mark parent to render.\n */\n mark(m, scene) {\n const mdef = Marks[scene.marktype],\n tag = mdef.tag,\n attrList = [ariaItemAttributes, mdef.attr];\n\n // render opening group tag\n m.open('g', {\n 'class': cssClass(scene),\n 'clip-path': scene.clip ? clip$1(this, scene, scene.group) : null\n }, ariaMarkAttributes(scene), {\n 'pointer-events': tag !== 'g' && scene.interactive === false ? 'none' : null\n });\n\n // render contained elements\n const process = item => {\n const href = this.href(item);\n if (href) m.open('a', href);\n m.open(tag, this.attr(scene, item, attrList, tag !== 'g' ? tag : null));\n if (tag === 'text') {\n const tl = textLines(item);\n if (isArray(tl)) {\n // multi-line text\n const attrs = {\n x: 0,\n dy: lineHeight(item)\n };\n for (let i = 0; i < tl.length; ++i) {\n m.open('tspan', i ? attrs : null).text(textValue(item, tl[i])).close();\n }\n } else {\n // single-line text\n m.text(textValue(item, tl));\n }\n } else if (tag === 'g') {\n const fore = item.strokeForeground,\n fill = item.fill,\n stroke = item.stroke;\n if (fore && stroke) {\n item.stroke = null;\n }\n m.open('path', this.attr(scene, item, mdef.background, 'bgrect')).close();\n\n // recurse for group content\n m.open('g', this.attr(scene, item, mdef.content));\n visit(item, scene => this.mark(m, scene));\n m.close();\n if (fore && stroke) {\n if (fill) item.fill = null;\n item.stroke = stroke;\n m.open('path', this.attr(scene, item, mdef.foreground, 'bgrect')).close();\n if (fill) item.fill = fill;\n } else {\n m.open('path', this.attr(scene, item, mdef.foreground, 'bgfore')).close();\n }\n }\n m.close(); // \n if (href) m.close(); // \n };\n\n if (mdef.nested) {\n if (scene.items && scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n }\n\n // render closing group tag\n return m.close(); // \n },\n\n /**\n * Get href attributes for a hyperlinked mark item.\n * @param {Item} item - The mark item.\n */\n href(item) {\n const href = item.href;\n let attr;\n if (href) {\n if (attr = this._hrefs && this._hrefs[href]) {\n return attr;\n } else {\n this.sanitizeURL(href).then(attr => {\n // rewrite to use xlink namespace\n attr['xlink:href'] = attr.href;\n attr.href = null;\n (this._hrefs || (this._hrefs = {}))[href] = attr;\n });\n }\n }\n return null;\n },\n /**\n * Get an object of SVG attributes for a mark item.\n * @param {object} scene - The mark parent.\n * @param {Item} item - The mark item.\n * @param {array|function} attrs - One or more attribute emitters.\n * @param {string} tag - The tag being rendered.\n */\n attr(scene, item, attrs, tag) {\n const object = {},\n emit = (name, value, ns, prefixed) => {\n object[prefixed || name] = value;\n };\n\n // apply mark specific attributes\n if (Array.isArray(attrs)) {\n attrs.forEach(fn => fn(emit, item, this));\n } else {\n attrs(emit, item, this);\n }\n\n // apply style attributes\n if (tag) {\n style(object, item, scene, tag, this._defs);\n }\n return object;\n },\n /**\n * Render SVG defs, as needed.\n * Must be called *after* marks have been processed to ensure the\n * collected state is current and accurate.\n * @param {object} m - The markup context.\n */\n defs(m) {\n const gradient = this._defs.gradient,\n clipping = this._defs.clipping,\n count = Object.keys(gradient).length + Object.keys(clipping).length;\n if (count === 0) return; // nothing to do\n\n m.open('defs');\n for (const id in gradient) {\n const def = gradient[id],\n stops = def.stops;\n if (def.gradient === 'radial') {\n // SVG radial gradients automatically transform to normalized bbox\n // coordinates, in a way that is cumbersome to replicate in canvas.\n // We wrap the radial gradient in a pattern element, allowing us to\n // maintain a circular gradient that matches what canvas provides.\n\n m.open('pattern', {\n id: patternPrefix + id,\n viewBox: '0,0,1,1',\n width: '100%',\n height: '100%',\n preserveAspectRatio: 'xMidYMid slice'\n });\n m.open('rect', {\n width: '1',\n height: '1',\n fill: 'url(#' + id + ')'\n }).close();\n m.close(); // \n\n m.open('radialGradient', {\n id: id,\n fx: def.x1,\n fy: def.y1,\n fr: def.r1,\n cx: def.x2,\n cy: def.y2,\n r: def.r2\n });\n } else {\n m.open('linearGradient', {\n id: id,\n x1: def.x1,\n x2: def.x2,\n y1: def.y1,\n y2: def.y2\n });\n }\n for (let i = 0; i < stops.length; ++i) {\n m.open('stop', {\n offset: stops[i].offset,\n 'stop-color': stops[i].color\n }).close();\n }\n m.close();\n }\n for (const id in clipping) {\n const def = clipping[id];\n m.open('clipPath', {\n id: id\n });\n if (def.path) {\n m.open('path', {\n d: def.path\n }).close();\n } else {\n m.open('rect', {\n x: 0,\n y: 0,\n width: def.width,\n height: def.height\n }).close();\n }\n m.close();\n }\n m.close();\n }\n});\n\n// Helper function for attr for style presentation attributes\nfunction style(s, item, scene, tag, defs) {\n let styleList;\n if (item == null) return s;\n if (tag === 'bgrect' && scene.interactive === false) {\n s['pointer-events'] = 'none';\n }\n if (tag === 'bgfore') {\n if (scene.interactive === false) {\n s['pointer-events'] = 'none';\n }\n s.display = 'none';\n if (item.fill !== null) return s;\n }\n if (tag === 'image' && item.smooth === false) {\n styleList = ['image-rendering: optimizeSpeed;', 'image-rendering: pixelated;'];\n }\n if (tag === 'text') {\n s['font-family'] = fontFamily(item);\n s['font-size'] = fontSize(item) + 'px';\n s['font-style'] = item.fontStyle;\n s['font-variant'] = item.fontVariant;\n s['font-weight'] = item.fontWeight;\n }\n for (const prop in stylesAttr) {\n let value = item[prop];\n const name = stylesAttr[prop];\n if (value === 'transparent' && (name === 'fill' || name === 'stroke')) ; else if (value != null) {\n if (isGradient(value)) {\n value = gradientRef(value, defs.gradient, '');\n }\n s[name] = value;\n }\n }\n for (const prop in stylesCss) {\n const value = item[prop];\n if (value != null) {\n styleList = styleList || [];\n styleList.push(`${stylesCss[prop]}: ${value};`);\n }\n }\n if (styleList) {\n s.style = styleList.join(' ');\n }\n return s;\n}\n\n/**\n * @typedef {Object} HybridRendererOptions\n *\n * @property {string[]} [svgMarkTypes=['text']] - An array of SVG mark types to render\n * in the SVG layer. All other mark types\n * will be rendered in the Canvas layer.\n * @property {boolean} [svgOnTop=true] - Flag to determine if SVG should be rendered on top.\n * @property {boolean} [debug=false] - Flag to enable or disable debugging mode. When true,\n * the top layer will be stacked below the bottom layer\n * rather than overlaid on top.\n */\n\n/** @type {HybridRendererOptions} */\nconst OPTS = {\n svgMarkTypes: ['text'],\n svgOnTop: true,\n debug: false\n};\n\n/**\n * Configure the HybridRenderer\n *\n * @param {HybridRendererOptions} options - HybridRenderer configuration options.\n */\nfunction setHybridRendererOptions(options) {\n OPTS['svgMarkTypes'] = options.svgMarkTypes ?? ['text'];\n OPTS['svgOnTop'] = options.svgOnTop ?? true;\n OPTS['debug'] = options.debug ?? false;\n}\nfunction HybridRenderer(loader) {\n Renderer.call(this, loader);\n this._svgRenderer = new SVGRenderer(loader);\n this._canvasRenderer = new CanvasRenderer(loader);\n}\nconst base = Renderer.prototype;\ninherits(HybridRenderer, Renderer, {\n /**\n * Initialize a new HybridRenderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {HybridRenderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n this._root_el = domChild(el, 0, 'div');\n const bottomEl = domChild(this._root_el, 0, 'div');\n const topEl = domChild(this._root_el, 1, 'div');\n this._root_el.style.position = 'relative';\n\n // Set position absolute to overlay svg on top of canvas\n if (!OPTS.debug) {\n bottomEl.style.height = '100%';\n topEl.style.position = 'absolute';\n topEl.style.top = '0';\n topEl.style.left = '0';\n topEl.style.height = '100%';\n topEl.style.width = '100%';\n }\n this._svgEl = OPTS.svgOnTop ? topEl : bottomEl;\n this._canvasEl = OPTS.svgOnTop ? bottomEl : topEl;\n\n // pointer-events to none on SVG layer so that canvas gets all events\n this._svgEl.style.pointerEvents = 'none';\n this._canvasRenderer.initialize(this._canvasEl, width, height, origin, scaleFactor);\n this._svgRenderer.initialize(this._svgEl, width, height, origin, scaleFactor);\n return base.initialize.call(this, el, width, height, origin, scaleFactor);\n },\n /**\n * Flag a mark item as dirty.\n * @param {Item} item - The mark item.\n */\n dirty(item) {\n if (OPTS.svgMarkTypes.includes(item.mark.marktype)) {\n this._svgRenderer.dirty(item);\n } else {\n this._canvasRenderer.dirty(item);\n }\n return this;\n },\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @param {Array} markTypes - Array of the mark types to render.\n * If undefined, render all mark types\n */\n _render(scene, markTypes) {\n const allMarkTypes = markTypes ?? ['arc', 'area', 'image', 'line', 'path', 'rect', 'rule', 'shape', 'symbol', 'text', 'trail'];\n const canvasMarkTypes = allMarkTypes.filter(m => !OPTS.svgMarkTypes.includes(m));\n this._svgRenderer.render(scene, OPTS.svgMarkTypes);\n this._canvasRenderer.render(scene, canvasMarkTypes);\n },\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n base.resize.call(this, width, height, origin, scaleFactor);\n this._svgRenderer.resize(width, height, origin, scaleFactor);\n this._canvasRenderer.resize(width, height, origin, scaleFactor);\n return this;\n },\n background(bgcolor) {\n // Propagate background color to lower canvas renderer\n if (OPTS.svgOnTop) {\n this._canvasRenderer.background(bgcolor);\n } else {\n this._svgRenderer.background(bgcolor);\n }\n return this;\n }\n});\n\nfunction HybridHandler(loader, tooltip) {\n CanvasHandler.call(this, loader, tooltip);\n}\ninherits(HybridHandler, CanvasHandler, {\n initialize(el, origin, obj) {\n const canvas = domChild(domChild(el, 0, 'div'), OPTS.svgOnTop ? 0 : 1, 'div');\n return CanvasHandler.prototype.initialize.call(this, canvas, origin, obj);\n }\n});\n\nconst Canvas = 'canvas';\nconst Hybrid = 'hybrid';\nconst PNG = 'png';\nconst SVG = 'svg';\nconst None = 'none';\nconst RenderType = {\n Canvas: Canvas,\n PNG: PNG,\n SVG: SVG,\n Hybrid: Hybrid,\n None: None\n};\nconst modules = {};\nmodules[Canvas] = modules[PNG] = {\n renderer: CanvasRenderer,\n headless: CanvasRenderer,\n handler: CanvasHandler\n};\nmodules[SVG] = {\n renderer: SVGRenderer,\n headless: SVGStringRenderer,\n handler: SVGHandler\n};\nmodules[Hybrid] = {\n renderer: HybridRenderer,\n headless: HybridRenderer,\n handler: HybridHandler\n};\nmodules[None] = {};\nfunction renderModule(name, _) {\n name = String(name || '').toLowerCase();\n if (arguments.length > 1) {\n modules[name] = _;\n return this;\n } else {\n return modules[name];\n }\n}\n\nfunction intersect(scene, bounds, filter) {\n const hits = [],\n // intersection results\n box = new Bounds().union(bounds),\n // defensive copy\n type = scene.marktype;\n return type ? intersectMark(scene, box, filter, hits) : type === 'group' ? intersectGroup(scene, box, filter, hits) : error('Intersect scene must be mark node or group item.');\n}\nfunction intersectMark(mark, box, filter, hits) {\n if (visitMark(mark, box, filter)) {\n const items = mark.items,\n type = mark.marktype,\n n = items.length;\n let i = 0;\n if (type === 'group') {\n for (; i < n; ++i) {\n intersectGroup(items[i], box, filter, hits);\n }\n } else {\n for (const test = Marks[type].isect; i < n; ++i) {\n const item = items[i];\n if (intersectItem(item, box, test)) hits.push(item);\n }\n }\n }\n return hits;\n}\nfunction visitMark(mark, box, filter) {\n // process if bounds intersect and if\n // (1) mark is a group mark (so we must recurse), or\n // (2) mark is interactive and passes filter\n return mark.bounds && box.intersects(mark.bounds) && (mark.marktype === 'group' || mark.interactive !== false && (!filter || filter(mark)));\n}\nfunction intersectGroup(group, box, filter, hits) {\n // test intersect against group\n // skip groups by default unless filter says otherwise\n if (filter && filter(group.mark) && intersectItem(group, box, Marks.group.isect)) {\n hits.push(group);\n }\n\n // recursively test children marks\n // translate box to group coordinate space\n const marks = group.items,\n n = marks && marks.length;\n if (n) {\n const x = group.x || 0,\n y = group.y || 0;\n box.translate(-x, -y);\n for (let i = 0; i < n; ++i) {\n intersectMark(marks[i], box, filter, hits);\n }\n box.translate(x, y);\n }\n return hits;\n}\nfunction intersectItem(item, box, test) {\n // test bounds enclosure, bounds intersection, then detailed test\n const bounds = item.bounds;\n return box.encloses(bounds) || box.intersects(bounds) && test(item, box);\n}\n\nconst clipBounds = new Bounds();\nfunction boundClip (mark) {\n const clip = mark.clip;\n if (isFunction(clip)) {\n clip(boundContext(clipBounds.clear()));\n } else if (clip) {\n clipBounds.set(0, 0, mark.group.width, mark.group.height);\n } else return;\n mark.bounds.intersect(clipBounds);\n}\n\nconst TOLERANCE = 1e-9;\nfunction sceneEqual(a, b, key) {\n return a === b ? true : key === 'path' ? pathEqual(a, b) : a instanceof Date && b instanceof Date ? +a === +b : isNumber(a) && isNumber(b) ? Math.abs(a - b) <= TOLERANCE : !a || !b || !isObject(a) && !isObject(b) ? a == b : objectEqual(a, b);\n}\nfunction pathEqual(a, b) {\n return sceneEqual(parse(a), parse(b));\n}\nfunction objectEqual(a, b) {\n var ka = Object.keys(a),\n kb = Object.keys(b),\n key,\n i;\n if (ka.length !== kb.length) return false;\n ka.sort();\n kb.sort();\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) return false;\n }\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!sceneEqual(a[key], b[key], key)) return false;\n }\n return typeof a === typeof b;\n}\n\nfunction resetSVGDefIds() {\n resetSVGClipId();\n resetSVGGradientId();\n}\n\nexport { Bounds, CanvasHandler, CanvasRenderer, Gradient, GroupItem, Handler, HybridHandler, HybridRenderer, Item, Marks, RenderType, Renderer, ResourceLoader, SVGHandler, SVGRenderer, SVGStringRenderer, Scenegraph, boundClip, boundContext, boundItem, boundMark, boundStroke, domChild, domClear, domCreate, domFind, font, fontFamily, fontSize, intersect, intersectBoxLine, intersectPath, intersectPoint, intersectRule, lineHeight, markup, multiLineOffset, curves as pathCurves, pathEqual, parse as pathParse, vg_rect as pathRectangle, pathRender, symbols as pathSymbols, vg_trail as pathTrail, point, renderModule, resetSVGClipId, resetSVGDefIds, sceneEqual, sceneFromJSON, pickVisit as scenePickVisit, sceneToJSON, visit as sceneVisit, zorder as sceneZOrder, serializeXML, setHybridRendererOptions, textMetrics };\n","import constant from \"./constant.js\";\nimport {withPath} from \"./path.js\";\nimport asterisk from \"./symbol/asterisk.js\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport diamond2 from \"./symbol/diamond2.js\";\nimport plus from \"./symbol/plus.js\";\nimport square from \"./symbol/square.js\";\nimport square2 from \"./symbol/square2.js\";\nimport star from \"./symbol/star.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport triangle2 from \"./symbol/triangle2.js\";\nimport wye from \"./symbol/wye.js\";\nimport times from \"./symbol/times.js\";\n\n// These symbols are designed to be filled.\nexport const symbolsFill = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\n// These symbols are designed to be stroked (with a width of 1.5px and round caps).\nexport const symbolsStroke = [\n circle,\n plus,\n times,\n triangle2,\n asterisk,\n square2,\n diamond2\n];\n\nexport default function Symbol(type, size) {\n let context = null,\n path = withPath(symbol);\n\n type = typeof type === \"function\" ? type : constant(type || circle);\n size = typeof size === \"function\" ? size : constant(size === undefined ? 64 : +size);\n\n function symbol() {\n let buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","import { Transform } from 'vega-dataflow';\nimport { Marks, boundClip, GroupItem, Item, Bounds, multiLineOffset, boundStroke } from 'vega-scenegraph';\nimport { inherits, peek, isObject } from 'vega-util';\n\nconst Top = 'top';\nconst Left = 'left';\nconst Right = 'right';\nconst Bottom = 'bottom';\nconst TopLeft = 'top-left';\nconst TopRight = 'top-right';\nconst BottomLeft = 'bottom-left';\nconst BottomRight = 'bottom-right';\nconst Start = 'start';\nconst Middle = 'middle';\nconst End = 'end';\nconst X = 'x';\nconst Y = 'y';\nconst Group = 'group';\nconst AxisRole = 'axis';\nconst TitleRole = 'title';\nconst FrameRole = 'frame';\nconst ScopeRole = 'scope';\nconst LegendRole = 'legend';\nconst RowHeader = 'row-header';\nconst RowFooter = 'row-footer';\nconst RowTitle = 'row-title';\nconst ColHeader = 'column-header';\nconst ColFooter = 'column-footer';\nconst ColTitle = 'column-title';\nconst Padding = 'padding';\nconst Symbols = 'symbol';\nconst Fit = 'fit';\nconst FitX = 'fit-x';\nconst FitY = 'fit-y';\nconst Pad = 'pad';\nconst None = 'none';\nconst All = 'all';\nconst Each = 'each';\nconst Flush = 'flush';\nconst Column = 'column';\nconst Row = 'row';\n\n/**\n * Calculate bounding boxes for scenegraph items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - The scenegraph mark instance to bound.\n */\nfunction Bound(params) {\n Transform.call(this, null, params);\n}\ninherits(Bound, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow,\n mark = _.mark,\n type = mark.marktype,\n entry = Marks[type],\n bound = entry.bound;\n let markBounds = mark.bounds,\n rebound;\n if (entry.nested) {\n // multi-item marks have a single bounds instance\n if (mark.items.length) view.dirty(mark.items[0]);\n markBounds = boundItem(mark, bound);\n mark.items.forEach(item => {\n item.bounds.clear().union(markBounds);\n });\n } else if (type === Group || _.modified()) {\n // operator parameters modified -> re-bound all items\n // updates group bounds in response to modified group content\n pulse.visit(pulse.MOD, item => view.dirty(item));\n markBounds.clear();\n mark.items.forEach(item => markBounds.union(boundItem(item, bound)));\n\n // force reflow for axes/legends/titles to propagate any layout changes\n switch (mark.role) {\n case AxisRole:\n case LegendRole:\n case TitleRole:\n pulse.reflow();\n }\n } else {\n // incrementally update bounds, re-bound mark as needed\n rebound = pulse.changed(pulse.REM);\n pulse.visit(pulse.ADD, item => {\n markBounds.union(boundItem(item, bound));\n });\n pulse.visit(pulse.MOD, item => {\n rebound = rebound || markBounds.alignsWith(item.bounds);\n view.dirty(item);\n markBounds.union(boundItem(item, bound));\n });\n if (rebound) {\n markBounds.clear();\n mark.items.forEach(item => markBounds.union(item.bounds));\n }\n }\n\n // ensure mark bounds do not exceed any clipping region\n boundClip(mark);\n return pulse.modifies('bounds');\n }\n});\nfunction boundItem(item, bound, opt) {\n return bound(item.bounds.clear(), item, opt);\n}\n\nconst COUNTER_NAME = ':vega_identifier:';\n\n/**\n * Adds a unique identifier to all added tuples.\n * This transform creates a new signal that serves as an id counter.\n * As a result, the id counter is shared across all instances of this\n * transform, generating unique ids across multiple data streams. In\n * addition, this signal value can be included in a snapshot of the\n * dataflow state, enabling correct resumption of id allocation.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.as - The field name for the generated identifier.\n */\nfunction Identifier(params) {\n Transform.call(this, 0, params);\n}\nIdentifier.Definition = {\n 'type': 'Identifier',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'as',\n 'type': 'string',\n 'required': true\n }]\n};\ninherits(Identifier, Transform, {\n transform(_, pulse) {\n const counter = getCounter(pulse.dataflow),\n as = _.as;\n let id = counter.value;\n pulse.visit(pulse.ADD, t => t[as] = t[as] || ++id);\n counter.set(this.value = id);\n return pulse;\n }\n});\nfunction getCounter(view) {\n return view._signals[COUNTER_NAME] || (view._signals[COUNTER_NAME] = view.add(0));\n}\n\n/**\n * Bind scenegraph items to a scenegraph mark instance.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.markdef - The mark definition for creating the mark.\n * This is an object of legal scenegraph mark properties which *must* include\n * the 'marktype' property.\n */\nfunction Mark(params) {\n Transform.call(this, null, params);\n}\ninherits(Mark, Transform, {\n transform(_, pulse) {\n let mark = this.value;\n\n // acquire mark on first invocation, bind context and group\n if (!mark) {\n mark = pulse.dataflow.scenegraph().mark(_.markdef, lookup$1(_), _.index);\n mark.group.context = _.context;\n if (!_.context.group) _.context.group = mark.group;\n mark.source = this.source; // point to upstream collector\n mark.clip = _.clip;\n mark.interactive = _.interactive;\n this.value = mark;\n }\n\n // initialize entering items\n const Init = mark.marktype === Group ? GroupItem : Item;\n pulse.visit(pulse.ADD, item => Init.call(item, mark));\n\n // update clipping and/or interactive status\n if (_.modified('clip') || _.modified('interactive')) {\n mark.clip = _.clip;\n mark.interactive = !!_.interactive;\n mark.zdirty = true; // force scenegraph re-eval\n pulse.reflow();\n }\n\n // bind items array to scenegraph mark\n mark.items = pulse.source;\n return pulse;\n }\n});\nfunction lookup$1(_) {\n const g = _.groups,\n p = _.parent;\n return g && g.size === 1 ? g.get(Object.keys(g.object)[0]) : g && p ? g.lookup(p) : null;\n}\n\n/**\n * Analyze items for overlap, changing opacity to hide items with\n * overlapping bounding boxes. This transform will preserve at least\n * two items (e.g., first and last) even if overlap persists.\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting items.\n * @param {object} [params.method] - The overlap removal method to apply.\n * One of 'parity' (default, hide every other item until there is no\n * more overlap) or 'greedy' (sequentially scan and hide and items that\n * overlap with the last visible item).\n * @param {object} [params.boundScale] - A scale whose range should be used\n * to bound the items. Items exceeding the bounds of the scale range\n * will be treated as overlapping. If null or undefined, no bounds check\n * will be applied.\n * @param {object} [params.boundOrient] - The orientation of the scale\n * (top, bottom, left, or right) used to bound items. This parameter is\n * ignored if boundScale is null or undefined.\n * @param {object} [params.boundTolerance] - The tolerance in pixels for\n * bound inclusion testing (default 1). This specifies by how many pixels\n * an item's bounds may exceed the scale range bounds and not be culled.\n * @constructor\n */\nfunction Overlap(params) {\n Transform.call(this, null, params);\n}\nconst methods = {\n parity: items => items.filter((item, i) => i % 2 ? item.opacity = 0 : 1),\n greedy: (items, sep) => {\n let a;\n return items.filter((b, i) => !i || !intersect(a.bounds, b.bounds, sep) ? (a = b, 1) : b.opacity = 0);\n }\n};\n\n// compute bounding box intersection\n// including padding pixels of separation\nconst intersect = (a, b, sep) => sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\nconst hasOverlap = (items, pad) => {\n for (var i = 1, n = items.length, a = items[0].bounds, b; i < n; a = b, ++i) {\n if (intersect(a, b = items[i].bounds, pad)) return true;\n }\n};\nconst hasBounds = item => {\n const b = item.bounds;\n return b.width() > 1 && b.height() > 1;\n};\nconst boundTest = (scale, orient, tolerance) => {\n var range = scale.range(),\n b = new Bounds();\n if (orient === Top || orient === Bottom) {\n b.set(range[0], -Infinity, range[1], +Infinity);\n } else {\n b.set(-Infinity, range[0], +Infinity, range[1]);\n }\n b.expand(tolerance || 1);\n return item => b.encloses(item.bounds);\n};\n\n// reset all items to be fully opaque\nconst reset = source => {\n source.forEach(item => item.opacity = 1);\n return source;\n};\n\n// add all tuples to mod, fork pulse if parameters were modified\n// fork prevents cross-stream tuple pollution (e.g., pulse from scale)\nconst reflow = (pulse, _) => pulse.reflow(_.modified()).modifies('opacity');\ninherits(Overlap, Transform, {\n transform(_, pulse) {\n const reduce = methods[_.method] || methods.parity,\n sep = _.separation || 0;\n let source = pulse.materialize(pulse.SOURCE).source,\n items,\n test;\n if (!source || !source.length) return;\n if (!_.method) {\n // early exit if method is falsy\n if (_.modified('method')) {\n reset(source);\n pulse = reflow(pulse, _);\n }\n return pulse;\n }\n\n // skip labels with no content\n source = source.filter(hasBounds);\n\n // early exit, nothing to do\n if (!source.length) return;\n if (_.sort) {\n source = source.slice().sort(_.sort);\n }\n items = reset(source);\n pulse = reflow(pulse, _);\n if (items.length >= 3 && hasOverlap(items, sep)) {\n do {\n items = reduce(items, sep);\n } while (items.length >= 3 && hasOverlap(items, sep));\n if (items.length < 3 && !peek(source).opacity) {\n if (items.length > 1) peek(items).opacity = 0;\n peek(source).opacity = 1;\n }\n }\n if (_.boundScale && _.boundTolerance >= 0) {\n test = boundTest(_.boundScale, _.boundOrient, +_.boundTolerance);\n source.forEach(item => {\n if (!test(item)) item.opacity = 0;\n });\n }\n\n // re-calculate mark bounds\n const bounds = items[0].mark.bounds.clear();\n source.forEach(item => {\n if (item.opacity) bounds.union(item.bounds);\n });\n return pulse;\n }\n});\n\n/**\n * Queue modified scenegraph items for rendering.\n * @constructor\n */\nfunction Render(params) {\n Transform.call(this, null, params);\n}\ninherits(Render, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow;\n pulse.visit(pulse.ALL, item => view.dirty(item));\n\n // set z-index dirty flag as needed\n if (pulse.fields && pulse.fields['zindex']) {\n const item = pulse.source && pulse.source[0];\n if (item) item.mark.zdirty = true;\n }\n }\n});\n\nconst tempBounds = new Bounds();\nfunction set(item, property, value) {\n return item[property] === value ? 0 : (item[property] = value, 1);\n}\n\nfunction isYAxis(mark) {\n var orient = mark.items[0].orient;\n return orient === Left || orient === Right;\n}\nfunction axisIndices(datum) {\n let index = +datum.grid;\n return [datum.ticks ? index++ : -1,\n // ticks index\n datum.labels ? index++ : -1,\n // labels index\n index + +datum.domain // title index\n ];\n}\n\nfunction axisLayout(view, axis, width, height) {\n var item = axis.items[0],\n datum = item.datum,\n delta = item.translate != null ? item.translate : 0.5,\n orient = item.orient,\n indices = axisIndices(datum),\n range = item.range,\n offset = item.offset,\n position = item.position,\n minExtent = item.minExtent,\n maxExtent = item.maxExtent,\n title = datum.title && item.items[indices[2]].items[0],\n titlePadding = item.titlePadding,\n bounds = item.bounds,\n dl = title && multiLineOffset(title),\n x = 0,\n y = 0,\n i,\n s;\n tempBounds.clear().union(bounds);\n bounds.clear();\n if ((i = indices[0]) > -1) bounds.union(item.items[i].bounds);\n if ((i = indices[1]) > -1) bounds.union(item.items[i].bounds);\n\n // position axis group and title\n switch (orient) {\n case Top:\n x = position || 0;\n y = -offset;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.y1));\n bounds.add(0, -s).add(range, 0);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 0, -1, bounds);\n break;\n case Left:\n x = -offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.x1));\n bounds.add(-s, 0).add(0, range);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 1, -1, bounds);\n break;\n case Right:\n x = width + offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.x2));\n bounds.add(0, 0).add(s, range);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 1, 1, bounds);\n break;\n case Bottom:\n x = position || 0;\n y = height + offset;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.y2));\n bounds.add(0, 0).add(range, s);\n if (title) axisTitleLayout(view, title, s, titlePadding, 0, 0, 1, bounds);\n break;\n default:\n x = item.x;\n y = item.y;\n }\n\n // update bounds\n boundStroke(bounds.translate(x, y), item);\n if (set(item, 'x', x + delta) | set(item, 'y', y + delta)) {\n item.bounds = tempBounds;\n view.dirty(item);\n item.bounds = bounds;\n view.dirty(item);\n }\n return item.mark.bounds.clear().union(bounds);\n}\nfunction axisTitleLayout(view, title, offset, pad, dl, isYAxis, sign, bounds) {\n const b = title.bounds;\n if (title.auto) {\n const v = sign * (offset + dl + pad);\n let dx = 0,\n dy = 0;\n view.dirty(title);\n isYAxis ? dx = (title.x || 0) - (title.x = v) : dy = (title.y || 0) - (title.y = v);\n title.mark.bounds.clear().union(b.translate(-dx, -dy));\n view.dirty(title);\n }\n bounds.union(b);\n}\n\n// aggregation functions for grid margin determination\nconst min = (a, b) => Math.floor(Math.min(a, b));\nconst max = (a, b) => Math.ceil(Math.max(a, b));\nfunction gridLayoutGroups(group) {\n var groups = group.items,\n n = groups.length,\n i = 0,\n mark,\n items;\n const views = {\n marks: [],\n rowheaders: [],\n rowfooters: [],\n colheaders: [],\n colfooters: [],\n rowtitle: null,\n coltitle: null\n };\n\n // layout axes, gather legends, collect bounds\n for (; i < n; ++i) {\n mark = groups[i];\n items = mark.items;\n if (mark.marktype === Group) {\n switch (mark.role) {\n case AxisRole:\n case LegendRole:\n case TitleRole:\n break;\n case RowHeader:\n views.rowheaders.push(...items);\n break;\n case RowFooter:\n views.rowfooters.push(...items);\n break;\n case ColHeader:\n views.colheaders.push(...items);\n break;\n case ColFooter:\n views.colfooters.push(...items);\n break;\n case RowTitle:\n views.rowtitle = items[0];\n break;\n case ColTitle:\n views.coltitle = items[0];\n break;\n default:\n views.marks.push(...items);\n }\n }\n }\n return views;\n}\nfunction bboxFlush(item) {\n return new Bounds().set(0, 0, item.width || 0, item.height || 0);\n}\nfunction bboxFull(item) {\n const b = item.bounds.clone();\n return b.empty() ? b.set(0, 0, 0, 0) : b.translate(-(item.x || 0), -(item.y || 0));\n}\nfunction get(opt, key, d) {\n const v = isObject(opt) ? opt[key] : opt;\n return v != null ? v : d !== undefined ? d : 0;\n}\nfunction offsetValue(v) {\n return v < 0 ? Math.ceil(-v) : 0;\n}\nfunction gridLayout(view, groups, opt) {\n var dirty = !opt.nodirty,\n bbox = opt.bounds === Flush ? bboxFlush : bboxFull,\n bounds = tempBounds.set(0, 0, 0, 0),\n alignCol = get(opt.align, Column),\n alignRow = get(opt.align, Row),\n padCol = get(opt.padding, Column),\n padRow = get(opt.padding, Row),\n ncols = opt.columns || groups.length,\n nrows = ncols <= 0 ? 1 : Math.ceil(groups.length / ncols),\n n = groups.length,\n xOffset = Array(n),\n xExtent = Array(ncols),\n xMax = 0,\n yOffset = Array(n),\n yExtent = Array(nrows),\n yMax = 0,\n dx = Array(n),\n dy = Array(n),\n boxes = Array(n),\n m,\n i,\n c,\n r,\n b,\n g,\n px,\n py,\n x,\n y,\n offset;\n for (i = 0; i < ncols; ++i) xExtent[i] = 0;\n for (i = 0; i < nrows; ++i) yExtent[i] = 0;\n\n // determine offsets for each group\n for (i = 0; i < n; ++i) {\n g = groups[i];\n b = boxes[i] = bbox(g);\n g.x = g.x || 0;\n dx[i] = 0;\n g.y = g.y || 0;\n dy[i] = 0;\n c = i % ncols;\n r = ~~(i / ncols);\n xMax = Math.max(xMax, px = Math.ceil(b.x2));\n yMax = Math.max(yMax, py = Math.ceil(b.y2));\n xExtent[c] = Math.max(xExtent[c], px);\n yExtent[r] = Math.max(yExtent[r], py);\n xOffset[i] = padCol + offsetValue(b.x1);\n yOffset[i] = padRow + offsetValue(b.y1);\n if (dirty) view.dirty(groups[i]);\n }\n\n // set initial alignment offsets\n for (i = 0; i < n; ++i) {\n if (i % ncols === 0) xOffset[i] = 0;\n if (i < ncols) yOffset[i] = 0;\n }\n\n // enforce column alignment constraints\n if (alignCol === Each) {\n for (c = 1; c < ncols; ++c) {\n for (offset = 0, i = c; i < n; i += ncols) {\n if (offset < xOffset[i]) offset = xOffset[i];\n }\n for (i = c; i < n; i += ncols) {\n xOffset[i] = offset + xExtent[c - 1];\n }\n }\n } else if (alignCol === All) {\n for (offset = 0, i = 0; i < n; ++i) {\n if (i % ncols && offset < xOffset[i]) offset = xOffset[i];\n }\n for (i = 0; i < n; ++i) {\n if (i % ncols) xOffset[i] = offset + xMax;\n }\n } else {\n for (alignCol = false, c = 1; c < ncols; ++c) {\n for (i = c; i < n; i += ncols) {\n xOffset[i] += xExtent[c - 1];\n }\n }\n }\n\n // enforce row alignment constraints\n if (alignRow === Each) {\n for (r = 1; r < nrows; ++r) {\n for (offset = 0, i = r * ncols, m = i + ncols; i < m; ++i) {\n if (offset < yOffset[i]) offset = yOffset[i];\n }\n for (i = r * ncols; i < m; ++i) {\n yOffset[i] = offset + yExtent[r - 1];\n }\n }\n } else if (alignRow === All) {\n for (offset = 0, i = ncols; i < n; ++i) {\n if (offset < yOffset[i]) offset = yOffset[i];\n }\n for (i = ncols; i < n; ++i) {\n yOffset[i] = offset + yMax;\n }\n } else {\n for (alignRow = false, r = 1; r < nrows; ++r) {\n for (i = r * ncols, m = i + ncols; i < m; ++i) {\n yOffset[i] += yExtent[r - 1];\n }\n }\n }\n\n // perform horizontal grid layout\n for (x = 0, i = 0; i < n; ++i) {\n x = xOffset[i] + (i % ncols ? x : 0);\n dx[i] += x - groups[i].x;\n }\n\n // perform vertical grid layout\n for (c = 0; c < ncols; ++c) {\n for (y = 0, i = c; i < n; i += ncols) {\n y += yOffset[i];\n dy[i] += y - groups[i].y;\n }\n }\n\n // perform horizontal centering\n if (alignCol && get(opt.center, Column) && nrows > 1) {\n for (i = 0; i < n; ++i) {\n b = alignCol === All ? xMax : xExtent[i % ncols];\n x = b - boxes[i].x2 - groups[i].x - dx[i];\n if (x > 0) dx[i] += x / 2;\n }\n }\n\n // perform vertical centering\n if (alignRow && get(opt.center, Row) && ncols !== 1) {\n for (i = 0; i < n; ++i) {\n b = alignRow === All ? yMax : yExtent[~~(i / ncols)];\n y = b - boxes[i].y2 - groups[i].y - dy[i];\n if (y > 0) dy[i] += y / 2;\n }\n }\n\n // position grid relative to anchor\n for (i = 0; i < n; ++i) {\n bounds.union(boxes[i].translate(dx[i], dy[i]));\n }\n x = get(opt.anchor, X);\n y = get(opt.anchor, Y);\n switch (get(opt.anchor, Column)) {\n case End:\n x -= bounds.width();\n break;\n case Middle:\n x -= bounds.width() / 2;\n }\n switch (get(opt.anchor, Row)) {\n case End:\n y -= bounds.height();\n break;\n case Middle:\n y -= bounds.height() / 2;\n }\n x = Math.round(x);\n y = Math.round(y);\n\n // update mark positions, bounds, dirty\n bounds.clear();\n for (i = 0; i < n; ++i) {\n groups[i].mark.bounds.clear();\n }\n for (i = 0; i < n; ++i) {\n g = groups[i];\n g.x += dx[i] += x;\n g.y += dy[i] += y;\n bounds.union(g.mark.bounds.union(g.bounds.translate(dx[i], dy[i])));\n if (dirty) view.dirty(g);\n }\n return bounds;\n}\nfunction trellisLayout(view, group, opt) {\n var views = gridLayoutGroups(group),\n groups = views.marks,\n bbox = opt.bounds === Flush ? boundFlush : boundFull,\n off = opt.offset,\n ncols = opt.columns || groups.length,\n nrows = ncols <= 0 ? 1 : Math.ceil(groups.length / ncols),\n cells = nrows * ncols,\n x,\n y,\n x2,\n y2,\n anchor,\n band,\n offset;\n\n // -- initial grid layout\n const bounds = gridLayout(view, groups, opt);\n if (bounds.empty()) bounds.set(0, 0, 0, 0); // empty grid\n\n // -- layout grid headers and footers --\n\n // perform row header layout\n if (views.rowheaders) {\n band = get(opt.headerBand, Row, null);\n x = layoutHeaders(view, views.rowheaders, groups, ncols, nrows, -get(off, 'rowHeader'), min, 0, bbox, 'x1', 0, ncols, 1, band);\n }\n\n // perform column header layout\n if (views.colheaders) {\n band = get(opt.headerBand, Column, null);\n y = layoutHeaders(view, views.colheaders, groups, ncols, ncols, -get(off, 'columnHeader'), min, 1, bbox, 'y1', 0, 1, ncols, band);\n }\n\n // perform row footer layout\n if (views.rowfooters) {\n band = get(opt.footerBand, Row, null);\n x2 = layoutHeaders(view, views.rowfooters, groups, ncols, nrows, get(off, 'rowFooter'), max, 0, bbox, 'x2', ncols - 1, ncols, 1, band);\n }\n\n // perform column footer layout\n if (views.colfooters) {\n band = get(opt.footerBand, Column, null);\n y2 = layoutHeaders(view, views.colfooters, groups, ncols, ncols, get(off, 'columnFooter'), max, 1, bbox, 'y2', cells - ncols, 1, ncols, band);\n }\n\n // perform row title layout\n if (views.rowtitle) {\n anchor = get(opt.titleAnchor, Row);\n offset = get(off, 'rowTitle');\n offset = anchor === End ? x2 + offset : x - offset;\n band = get(opt.titleBand, Row, 0.5);\n layoutTitle(view, views.rowtitle, offset, 0, bounds, band);\n }\n\n // perform column title layout\n if (views.coltitle) {\n anchor = get(opt.titleAnchor, Column);\n offset = get(off, 'columnTitle');\n offset = anchor === End ? y2 + offset : y - offset;\n band = get(opt.titleBand, Column, 0.5);\n layoutTitle(view, views.coltitle, offset, 1, bounds, band);\n }\n}\nfunction boundFlush(item, field) {\n return field === 'x1' ? item.x || 0 : field === 'y1' ? item.y || 0 : field === 'x2' ? (item.x || 0) + (item.width || 0) : field === 'y2' ? (item.y || 0) + (item.height || 0) : undefined;\n}\nfunction boundFull(item, field) {\n return item.bounds[field];\n}\nfunction layoutHeaders(view, headers, groups, ncols, limit, offset, agg, isX, bound, bf, start, stride, back, band) {\n var n = groups.length,\n init = 0,\n edge = 0,\n i,\n j,\n k,\n m,\n b,\n h,\n g,\n x,\n y;\n\n // if no groups, early exit and return 0\n if (!n) return init;\n\n // compute margin\n for (i = start; i < n; i += stride) {\n if (groups[i]) init = agg(init, bound(groups[i], bf));\n }\n\n // if no headers, return margin calculation\n if (!headers.length) return init;\n\n // check if number of headers exceeds number of rows or columns\n if (headers.length > limit) {\n view.warn('Grid headers exceed limit: ' + limit);\n headers = headers.slice(0, limit);\n }\n\n // apply offset\n init += offset;\n\n // clear mark bounds for all headers\n for (j = 0, m = headers.length; j < m; ++j) {\n view.dirty(headers[j]);\n headers[j].mark.bounds.clear();\n }\n\n // layout each header\n for (i = start, j = 0, m = headers.length; j < m; ++j, i += stride) {\n h = headers[j];\n b = h.mark.bounds;\n\n // search for nearest group to align to\n // necessary if table has empty cells\n for (k = i; k >= 0 && (g = groups[k]) == null; k -= back);\n\n // assign coordinates and update bounds\n if (isX) {\n x = band == null ? g.x : Math.round(g.bounds.x1 + band * g.bounds.width());\n y = init;\n } else {\n x = init;\n y = band == null ? g.y : Math.round(g.bounds.y1 + band * g.bounds.height());\n }\n b.union(h.bounds.translate(x - (h.x || 0), y - (h.y || 0)));\n h.x = x;\n h.y = y;\n view.dirty(h);\n\n // update current edge of layout bounds\n edge = agg(edge, b[bf]);\n }\n return edge;\n}\nfunction layoutTitle(view, g, offset, isX, bounds, band) {\n if (!g) return;\n view.dirty(g);\n\n // compute title coordinates\n var x = offset,\n y = offset;\n isX ? x = Math.round(bounds.x1 + band * bounds.width()) : y = Math.round(bounds.y1 + band * bounds.height());\n\n // assign coordinates and update bounds\n g.bounds.translate(x - (g.x || 0), y - (g.y || 0));\n g.mark.bounds.clear().union(g.bounds);\n g.x = x;\n g.y = y;\n\n // queue title for redraw\n view.dirty(g);\n}\n\n// utility for looking up legend layout configuration\nfunction lookup(config, orient) {\n const opt = config[orient] || {};\n return (key, d) => opt[key] != null ? opt[key] : config[key] != null ? config[key] : d;\n}\n\n// if legends specify offset directly, use the maximum specified value\nfunction offsets(legends, value) {\n let max = -Infinity;\n legends.forEach(item => {\n if (item.offset != null) max = Math.max(max, item.offset);\n });\n return max > -Infinity ? max : value;\n}\nfunction legendParams(g, orient, config, xb, yb, w, h) {\n const _ = lookup(config, orient),\n offset = offsets(g, _('offset', 0)),\n anchor = _('anchor', Start),\n mult = anchor === End ? 1 : anchor === Middle ? 0.5 : 0;\n const p = {\n align: Each,\n bounds: _('bounds', Flush),\n columns: _('direction') === 'vertical' ? 1 : g.length,\n padding: _('margin', 8),\n center: _('center'),\n nodirty: true\n };\n switch (orient) {\n case Left:\n p.anchor = {\n x: Math.floor(xb.x1) - offset,\n column: End,\n y: mult * (h || xb.height() + 2 * xb.y1),\n row: anchor\n };\n break;\n case Right:\n p.anchor = {\n x: Math.ceil(xb.x2) + offset,\n y: mult * (h || xb.height() + 2 * xb.y1),\n row: anchor\n };\n break;\n case Top:\n p.anchor = {\n y: Math.floor(yb.y1) - offset,\n row: End,\n x: mult * (w || yb.width() + 2 * yb.x1),\n column: anchor\n };\n break;\n case Bottom:\n p.anchor = {\n y: Math.ceil(yb.y2) + offset,\n x: mult * (w || yb.width() + 2 * yb.x1),\n column: anchor\n };\n break;\n case TopLeft:\n p.anchor = {\n x: offset,\n y: offset\n };\n break;\n case TopRight:\n p.anchor = {\n x: w - offset,\n y: offset,\n column: End\n };\n break;\n case BottomLeft:\n p.anchor = {\n x: offset,\n y: h - offset,\n row: End\n };\n break;\n case BottomRight:\n p.anchor = {\n x: w - offset,\n y: h - offset,\n column: End,\n row: End\n };\n break;\n }\n return p;\n}\nfunction legendLayout(view, legend) {\n var item = legend.items[0],\n datum = item.datum,\n orient = item.orient,\n bounds = item.bounds,\n x = item.x,\n y = item.y,\n w,\n h;\n\n // cache current bounds for later comparison\n item._bounds ? item._bounds.clear().union(bounds) : item._bounds = bounds.clone();\n bounds.clear();\n\n // adjust legend to accommodate padding and title\n legendGroupLayout(view, item, item.items[0].items[0]);\n\n // aggregate bounds to determine size, and include origin\n bounds = legendBounds(item, bounds);\n w = 2 * item.padding;\n h = 2 * item.padding;\n if (!bounds.empty()) {\n w = Math.ceil(bounds.width() + w);\n h = Math.ceil(bounds.height() + h);\n }\n if (datum.type === Symbols) {\n legendEntryLayout(item.items[0].items[0].items[0].items);\n }\n if (orient !== None) {\n item.x = x = 0;\n item.y = y = 0;\n }\n item.width = w;\n item.height = h;\n boundStroke(bounds.set(x, y, x + w, y + h), item);\n item.mark.bounds.clear().union(bounds);\n return item;\n}\nfunction legendBounds(item, b) {\n // aggregate item bounds\n item.items.forEach(_ => b.union(_.bounds));\n\n // anchor to legend origin\n b.x1 = item.padding;\n b.y1 = item.padding;\n return b;\n}\nfunction legendGroupLayout(view, item, entry) {\n var pad = item.padding,\n ex = pad - entry.x,\n ey = pad - entry.y;\n if (!item.datum.title) {\n if (ex || ey) translate(view, entry, ex, ey);\n } else {\n var title = item.items[1].items[0],\n anchor = title.anchor,\n tpad = item.titlePadding || 0,\n tx = pad - title.x,\n ty = pad - title.y;\n switch (title.orient) {\n case Left:\n ex += Math.ceil(title.bounds.width()) + tpad;\n break;\n case Right:\n case Bottom:\n break;\n default:\n ey += title.bounds.height() + tpad;\n }\n if (ex || ey) translate(view, entry, ex, ey);\n switch (title.orient) {\n case Left:\n ty += legendTitleOffset(item, entry, title, anchor, 1, 1);\n break;\n case Right:\n tx += legendTitleOffset(item, entry, title, End, 0, 0) + tpad;\n ty += legendTitleOffset(item, entry, title, anchor, 1, 1);\n break;\n case Bottom:\n tx += legendTitleOffset(item, entry, title, anchor, 0, 0);\n ty += legendTitleOffset(item, entry, title, End, -1, 0, 1) + tpad;\n break;\n default:\n tx += legendTitleOffset(item, entry, title, anchor, 0, 0);\n }\n if (tx || ty) translate(view, title, tx, ty);\n\n // translate legend if title pushes into negative coordinates\n if ((tx = Math.round(title.bounds.x1 - pad)) < 0) {\n translate(view, entry, -tx, 0);\n translate(view, title, -tx, 0);\n }\n }\n}\nfunction legendTitleOffset(item, entry, title, anchor, y, lr, noBar) {\n const grad = item.datum.type !== 'symbol',\n vgrad = title.datum.vgrad,\n e = grad && (lr || !vgrad) && !noBar ? entry.items[0] : entry,\n s = e.bounds[y ? 'y2' : 'x2'] - item.padding,\n u = vgrad && lr ? s : 0,\n v = vgrad && lr ? 0 : s,\n o = y <= 0 ? 0 : multiLineOffset(title);\n return Math.round(anchor === Start ? u : anchor === End ? v - o : 0.5 * (s - o));\n}\nfunction translate(view, item, dx, dy) {\n item.x += dx;\n item.y += dy;\n item.bounds.translate(dx, dy);\n item.mark.bounds.translate(dx, dy);\n view.dirty(item);\n}\nfunction legendEntryLayout(entries) {\n // get max widths for each column\n const widths = entries.reduce((w, g) => {\n w[g.column] = Math.max(g.bounds.x2 - g.x, w[g.column] || 0);\n return w;\n }, {});\n\n // set dimensions of legend entry groups\n entries.forEach(g => {\n g.width = widths[g.column];\n g.height = g.bounds.y2 - g.y;\n });\n}\n\nfunction titleLayout(view, mark, width, height, viewBounds) {\n var group = mark.items[0],\n frame = group.frame,\n orient = group.orient,\n anchor = group.anchor,\n offset = group.offset,\n padding = group.padding,\n title = group.items[0].items[0],\n subtitle = group.items[1] && group.items[1].items[0],\n end = orient === Left || orient === Right ? height : width,\n start = 0,\n x = 0,\n y = 0,\n sx = 0,\n sy = 0,\n pos;\n if (frame !== Group) {\n orient === Left ? (start = viewBounds.y2, end = viewBounds.y1) : orient === Right ? (start = viewBounds.y1, end = viewBounds.y2) : (start = viewBounds.x1, end = viewBounds.x2);\n } else if (orient === Left) {\n start = height, end = 0;\n }\n pos = anchor === Start ? start : anchor === End ? end : (start + end) / 2;\n if (subtitle && subtitle.text) {\n // position subtitle\n switch (orient) {\n case Top:\n case Bottom:\n sy = title.bounds.height() + padding;\n break;\n case Left:\n sx = title.bounds.width() + padding;\n break;\n case Right:\n sx = -title.bounds.width() - padding;\n break;\n }\n tempBounds.clear().union(subtitle.bounds);\n tempBounds.translate(sx - (subtitle.x || 0), sy - (subtitle.y || 0));\n if (set(subtitle, 'x', sx) | set(subtitle, 'y', sy)) {\n view.dirty(subtitle);\n subtitle.bounds.clear().union(tempBounds);\n subtitle.mark.bounds.clear().union(tempBounds);\n view.dirty(subtitle);\n }\n tempBounds.clear().union(subtitle.bounds);\n } else {\n tempBounds.clear();\n }\n tempBounds.union(title.bounds);\n\n // position title group\n switch (orient) {\n case Top:\n x = pos;\n y = viewBounds.y1 - tempBounds.height() - offset;\n break;\n case Left:\n x = viewBounds.x1 - tempBounds.width() - offset;\n y = pos;\n break;\n case Right:\n x = viewBounds.x2 + tempBounds.width() + offset;\n y = pos;\n break;\n case Bottom:\n x = pos;\n y = viewBounds.y2 + offset;\n break;\n default:\n x = group.x;\n y = group.y;\n }\n if (set(group, 'x', x) | set(group, 'y', y)) {\n tempBounds.translate(x, y);\n view.dirty(group);\n group.bounds.clear().union(tempBounds);\n mark.bounds.clear().union(tempBounds);\n view.dirty(group);\n }\n return group.bounds;\n}\n\n/**\n * Layout view elements such as axes and legends.\n * Also performs size adjustments.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - Scenegraph mark of groups to layout.\n */\nfunction ViewLayout(params) {\n Transform.call(this, null, params);\n}\ninherits(ViewLayout, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow;\n _.mark.items.forEach(group => {\n if (_.layout) trellisLayout(view, group, _.layout);\n layoutGroup(view, group, _);\n });\n return shouldReflow(_.mark.group) ? pulse.reflow() : pulse;\n }\n});\nfunction shouldReflow(group) {\n // We typically should reflow if layout is invoked (#2568), as child items\n // may have resized and reflow ensures group bounds are re-calculated.\n // However, legend entries have a special exception to avoid instability.\n // For example, if a selected legend symbol gains a stroke on hover,\n // we don't want to re-position subsequent elements in the legend.\n return group && group.mark.role !== 'legend-entry';\n}\nfunction layoutGroup(view, group, _) {\n var items = group.items,\n width = Math.max(0, group.width || 0),\n height = Math.max(0, group.height || 0),\n viewBounds = new Bounds().set(0, 0, width, height),\n xBounds = viewBounds.clone(),\n yBounds = viewBounds.clone(),\n legends = [],\n title,\n mark,\n orient,\n b,\n i,\n n;\n\n // layout axes, gather legends, collect bounds\n for (i = 0, n = items.length; i < n; ++i) {\n mark = items[i];\n switch (mark.role) {\n case AxisRole:\n b = isYAxis(mark) ? xBounds : yBounds;\n b.union(axisLayout(view, mark, width, height));\n break;\n case TitleRole:\n title = mark;\n break;\n case LegendRole:\n legends.push(legendLayout(view, mark));\n break;\n case FrameRole:\n case ScopeRole:\n case RowHeader:\n case RowFooter:\n case RowTitle:\n case ColHeader:\n case ColFooter:\n case ColTitle:\n xBounds.union(mark.bounds);\n yBounds.union(mark.bounds);\n break;\n default:\n viewBounds.union(mark.bounds);\n }\n }\n\n // layout legends, adjust viewBounds\n if (legends.length) {\n // group legends by orient\n const l = {};\n legends.forEach(item => {\n orient = item.orient || Right;\n if (orient !== None) (l[orient] || (l[orient] = [])).push(item);\n });\n\n // perform grid layout for each orient group\n for (const orient in l) {\n const g = l[orient];\n gridLayout(view, g, legendParams(g, orient, _.legends, xBounds, yBounds, width, height));\n }\n\n // update view bounds\n legends.forEach(item => {\n const b = item.bounds;\n if (!b.equals(item._bounds)) {\n item.bounds = item._bounds;\n view.dirty(item); // dirty previous location\n item.bounds = b;\n view.dirty(item);\n }\n if (_.autosize && (_.autosize.type === Fit || _.autosize.type === FitX || _.autosize.type === FitY)) {\n // For autosize fit, incorporate the orthogonal dimension only.\n // Legends that overrun the chart area will then be clipped;\n // otherwise the chart area gets reduced to nothing!\n switch (item.orient) {\n case Left:\n case Right:\n viewBounds.add(b.x1, 0).add(b.x2, 0);\n break;\n case Top:\n case Bottom:\n viewBounds.add(0, b.y1).add(0, b.y2);\n }\n } else {\n viewBounds.union(b);\n }\n });\n }\n\n // combine bounding boxes\n viewBounds.union(xBounds).union(yBounds);\n\n // layout title, adjust bounds\n if (title) {\n viewBounds.union(titleLayout(view, title, width, height, viewBounds));\n }\n\n // override aggregated view bounds if content is clipped\n if (group.clip) {\n viewBounds.set(0, 0, group.width || 0, group.height || 0);\n }\n\n // perform size adjustment\n viewSizeLayout(view, group, viewBounds, _);\n}\nfunction viewSizeLayout(view, group, viewBounds, _) {\n const auto = _.autosize || {},\n type = auto.type;\n if (view._autosize < 1 || !type) return;\n let viewWidth = view._width,\n viewHeight = view._height,\n width = Math.max(0, group.width || 0),\n left = Math.max(0, Math.ceil(-viewBounds.x1)),\n height = Math.max(0, group.height || 0),\n top = Math.max(0, Math.ceil(-viewBounds.y1));\n const right = Math.max(0, Math.ceil(viewBounds.x2 - width)),\n bottom = Math.max(0, Math.ceil(viewBounds.y2 - height));\n if (auto.contains === Padding) {\n const padding = view.padding();\n viewWidth -= padding.left + padding.right;\n viewHeight -= padding.top + padding.bottom;\n }\n if (type === None) {\n left = 0;\n top = 0;\n width = viewWidth;\n height = viewHeight;\n } else if (type === Fit) {\n width = Math.max(0, viewWidth - left - right);\n height = Math.max(0, viewHeight - top - bottom);\n } else if (type === FitX) {\n width = Math.max(0, viewWidth - left - right);\n viewHeight = height + top + bottom;\n } else if (type === FitY) {\n viewWidth = width + left + right;\n height = Math.max(0, viewHeight - top - bottom);\n } else if (type === Pad) {\n viewWidth = width + left + right;\n viewHeight = height + top + bottom;\n }\n view._resizeView(viewWidth, viewHeight, width, height, [left, top], auto.resize);\n}\n\nexport { Bound as bound, Identifier as identifier, Mark as mark, Overlap as overlap, Render as render, ViewLayout as viewlayout };\n","import { Transform, ingest, tupleid, stableCompare } from 'vega-dataflow';\nimport { tickCount, tickFormat, validTicks, tickValues, SymbolLegend, labelFormat, labelValues, GradientLegend, scaleFraction, labelFraction, scale, Sequential, Linear, isContinuous, Time, UTC, Ordinal, scaleImplicit, Log, Sqrt, Pow, Symlog, isLogarithmic, BinOrdinal, isInterpolating, interpolateColors, interpolate, Band, Point, bandSpace, scheme, Threshold, Quantile, Quantize, quantizeInterpolator, interpolateRange, Diverging } from 'vega-scale';\nimport { inherits, isArray, error, fastmap, falsy, isFunction, constant, peek, one, toSet, isString, zoomLog, zoomPow, zoomSymlog, zoomLinear, stringValue } from 'vega-util';\nimport { sum, range } from 'd3-array';\nimport { interpolateRound, interpolate as interpolate$1 } from 'd3-interpolate';\n\n/**\n * Generates axis ticks for visualizing a spatial scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate ticks for.\n * @param {*} [params.count=10] - The approximate number of ticks, or\n * desired tick interval, to use.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {function(*):string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid d3 4.0 format specifier.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\nfunction AxisTicks(params) {\n Transform.call(this, null, params);\n}\ninherits(AxisTicks, Transform, {\n transform(_, pulse) {\n if (this.value && !_.modified()) {\n return pulse.StopPropagation;\n }\n var locale = pulse.dataflow.locale(),\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n ticks = this.value,\n scale = _.scale,\n tally = _.count == null ? _.values ? _.values.length : 10 : _.count,\n count = tickCount(scale, tally, _.minstep),\n format = _.format || tickFormat(locale, scale, count, _.formatSpecifier, _.formatType, !!_.values),\n values = _.values ? validTicks(scale, _.values, count) : tickValues(scale, count);\n if (ticks) out.rem = ticks;\n ticks = values.map((value, i) => ingest({\n index: i / (values.length - 1 || 1),\n value: value,\n label: format(value)\n }));\n if (_.extra && ticks.length) {\n // add an extra tick pegged to the initial domain value\n // this is used to generate axes with 'binned' domains\n ticks.push(ingest({\n index: -1,\n extra: {\n value: ticks[0].value\n },\n label: ''\n }));\n }\n out.source = ticks;\n out.add = ticks;\n this.value = ticks;\n return out;\n }\n});\n\n/**\n * Joins a set of data elements against a set of visual items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): object} [params.item] - An item generator function.\n * @param {function(object): *} [params.key] - The key field associating data and visual items.\n */\nfunction DataJoin(params) {\n Transform.call(this, null, params);\n}\nfunction defaultItemCreate() {\n return ingest({});\n}\nfunction newMap(key) {\n const map = fastmap().test(t => t.exit);\n map.lookup = t => map.get(key(t));\n return map;\n}\ninherits(DataJoin, Transform, {\n transform(_, pulse) {\n var df = pulse.dataflow,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n item = _.item || defaultItemCreate,\n key = _.key || tupleid,\n map = this.value;\n\n // prevent transient (e.g., hover) requests from\n // cascading across marks derived from marks\n if (isArray(out.encode)) {\n out.encode = null;\n }\n if (map && (_.modified('key') || pulse.modified(key))) {\n error('DataJoin does not support modified key function or fields.');\n }\n if (!map) {\n pulse = pulse.addAll();\n this.value = map = newMap(key);\n }\n pulse.visit(pulse.ADD, t => {\n const k = key(t);\n let x = map.get(k);\n if (x) {\n if (x.exit) {\n map.empty--;\n out.add.push(x);\n } else {\n out.mod.push(x);\n }\n } else {\n x = item(t);\n map.set(k, x);\n out.add.push(x);\n }\n x.datum = t;\n x.exit = false;\n });\n pulse.visit(pulse.MOD, t => {\n const k = key(t),\n x = map.get(k);\n if (x) {\n x.datum = t;\n out.mod.push(x);\n }\n });\n pulse.visit(pulse.REM, t => {\n const k = key(t),\n x = map.get(k);\n if (t === x.datum && !x.exit) {\n out.rem.push(x);\n x.exit = true;\n ++map.empty;\n }\n });\n if (pulse.changed(pulse.ADD_MOD)) out.modifies('datum');\n if (pulse.clean() || _.clean && map.empty > df.cleanThreshold) {\n df.runAfter(map.clean);\n }\n return out;\n }\n});\n\n/**\n * Invokes encoding functions for visual items.\n * @constructor\n * @param {object} params - The parameters to the encoding functions. This\n * parameter object will be passed through to all invoked encoding functions.\n * @param {object} [params.mod=false] - Flag indicating if tuples in the input\n * mod set that are unmodified by encoders should be included in the output.\n * @param {object} param.encoders - The encoding functions\n * @param {function(object, object): boolean} [param.encoders.update] - Update encoding set\n * @param {function(object, object): boolean} [param.encoders.enter] - Enter encoding set\n * @param {function(object, object): boolean} [param.encoders.exit] - Exit encoding set\n */\nfunction Encode(params) {\n Transform.call(this, null, params);\n}\ninherits(Encode, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ADD_REM),\n fmod = _.mod || false,\n encoders = _.encoders,\n encode = pulse.encode;\n\n // if an array, the encode directive includes additional sets\n // that must be defined in order for the primary set to be invoked\n // e.g., only run the update set if the hover set is defined\n if (isArray(encode)) {\n if (out.changed() || encode.every(e => encoders[e])) {\n encode = encode[0];\n out.encode = null; // consume targeted encode directive\n } else {\n return pulse.StopPropagation;\n }\n }\n\n // marshall encoder functions\n var reenter = encode === 'enter',\n update = encoders.update || falsy,\n enter = encoders.enter || falsy,\n exit = encoders.exit || falsy,\n set = (encode && !reenter ? encoders[encode] : update) || falsy;\n if (pulse.changed(pulse.ADD)) {\n pulse.visit(pulse.ADD, t => {\n enter(t, _);\n update(t, _);\n });\n out.modifies(enter.output);\n out.modifies(update.output);\n if (set !== falsy && set !== update) {\n pulse.visit(pulse.ADD, t => {\n set(t, _);\n });\n out.modifies(set.output);\n }\n }\n if (pulse.changed(pulse.REM) && exit !== falsy) {\n pulse.visit(pulse.REM, t => {\n exit(t, _);\n });\n out.modifies(exit.output);\n }\n if (reenter || set !== falsy) {\n const flag = pulse.MOD | (_.modified() ? pulse.REFLOW : 0);\n if (reenter) {\n pulse.visit(flag, t => {\n const mod = enter(t, _) || fmod;\n if (set(t, _) || mod) out.mod.push(t);\n });\n if (out.mod.length) out.modifies(enter.output);\n } else {\n pulse.visit(flag, t => {\n if (set(t, _) || fmod) out.mod.push(t);\n });\n }\n if (out.mod.length) out.modifies(set.output);\n }\n return out.changed() ? out : pulse.StopPropagation;\n }\n});\n\n/**\n * Generates legend entries for visualizing a scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate items for.\n * @param {*} [params.count=5] - The approximate number of items, or\n * desired tick interval, to use.\n * @param {*} [params.limit] - The maximum number of entries to\n * include in a symbol legend.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid D3 format specifier string.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\nfunction LegendEntries(params) {\n Transform.call(this, [], params);\n}\ninherits(LegendEntries, Transform, {\n transform(_, pulse) {\n if (this.value != null && !_.modified()) {\n return pulse.StopPropagation;\n }\n var locale = pulse.dataflow.locale(),\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n items = this.value,\n type = _.type || SymbolLegend,\n scale = _.scale,\n limit = +_.limit,\n count = tickCount(scale, _.count == null ? 5 : _.count, _.minstep),\n lskip = !!_.values || type === SymbolLegend,\n format = _.format || labelFormat(locale, scale, count, type, _.formatSpecifier, _.formatType, lskip),\n values = _.values || labelValues(scale, count),\n domain,\n fraction,\n size,\n offset,\n ellipsis;\n if (items) out.rem = items;\n if (type === SymbolLegend) {\n if (limit && values.length > limit) {\n pulse.dataflow.warn('Symbol legend count exceeds limit, filtering items.');\n items = values.slice(0, limit - 1);\n ellipsis = true;\n } else {\n items = values;\n }\n if (isFunction(size = _.size)) {\n // if first value maps to size zero, remove from list (vega#717)\n if (!_.values && scale(items[0]) === 0) {\n items = items.slice(1);\n }\n // compute size offset for legend entries\n offset = items.reduce((max, value) => Math.max(max, size(value, _)), 0);\n } else {\n size = constant(offset = size || 8);\n }\n items = items.map((value, index) => ingest({\n index: index,\n label: format(value, index, items),\n value: value,\n offset: offset,\n size: size(value, _)\n }));\n if (ellipsis) {\n ellipsis = values[items.length];\n items.push(ingest({\n index: items.length,\n label: `\\u2026${values.length - items.length} entries`,\n value: ellipsis,\n offset: offset,\n size: size(ellipsis, _)\n }));\n }\n } else if (type === GradientLegend) {\n domain = scale.domain(), fraction = scaleFraction(scale, domain[0], peek(domain));\n\n // if automatic label generation produces 2 or fewer values,\n // use the domain end points instead (fixes vega/vega#1364)\n if (values.length < 3 && !_.values && domain[0] !== peek(domain)) {\n values = [domain[0], peek(domain)];\n }\n items = values.map((value, index) => ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: fraction(value)\n }));\n } else {\n size = values.length - 1;\n fraction = labelFraction(scale);\n items = values.map((value, index) => ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: index ? fraction(value) : 0,\n perc2: index === size ? 1 : fraction(values[index + 1])\n }));\n }\n out.source = items;\n out.add = items;\n this.value = items;\n return out;\n }\n});\n\nconst sourceX = t => t.source.x;\nconst sourceY = t => t.source.y;\nconst targetX = t => t.target.x;\nconst targetY = t => t.target.y;\n\n/**\n * Layout paths linking source and target elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction LinkPath(params) {\n Transform.call(this, {}, params);\n}\nLinkPath.Definition = {\n 'type': 'LinkPath',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'sourceX',\n 'type': 'field',\n 'default': 'source.x'\n }, {\n 'name': 'sourceY',\n 'type': 'field',\n 'default': 'source.y'\n }, {\n 'name': 'targetX',\n 'type': 'field',\n 'default': 'target.x'\n }, {\n 'name': 'targetY',\n 'type': 'field',\n 'default': 'target.y'\n }, {\n 'name': 'orient',\n 'type': 'enum',\n 'default': 'vertical',\n 'values': ['horizontal', 'vertical', 'radial']\n }, {\n 'name': 'shape',\n 'type': 'enum',\n 'default': 'line',\n 'values': ['line', 'arc', 'curve', 'diagonal', 'orthogonal']\n }, {\n 'name': 'require',\n 'type': 'signal'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\ninherits(LinkPath, Transform, {\n transform(_, pulse) {\n var sx = _.sourceX || sourceX,\n sy = _.sourceY || sourceY,\n tx = _.targetX || targetX,\n ty = _.targetY || targetY,\n as = _.as || 'path',\n orient = _.orient || 'vertical',\n shape = _.shape || 'line',\n path = Paths.get(shape + '-' + orient) || Paths.get(shape);\n if (!path) {\n error('LinkPath unsupported type: ' + _.shape + (_.orient ? '-' + _.orient : ''));\n }\n pulse.visit(pulse.SOURCE, t => {\n t[as] = path(sx(t), sy(t), tx(t), ty(t));\n });\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\nconst line = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'L' + tx + ',' + ty;\nconst lineR = (sa, sr, ta, tr) => line(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\nconst arc = (sx, sy, tx, ty) => {\n var dx = tx - sx,\n dy = ty - sy,\n rr = Math.hypot(dx, dy) / 2,\n ra = 180 * Math.atan2(dy, dx) / Math.PI;\n return 'M' + sx + ',' + sy + 'A' + rr + ',' + rr + ' ' + ra + ' 0 1' + ' ' + tx + ',' + ty;\n};\nconst arcR = (sa, sr, ta, tr) => arc(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\nconst curve = (sx, sy, tx, ty) => {\n const dx = tx - sx,\n dy = ty - sy,\n ix = 0.2 * (dx + dy),\n iy = 0.2 * (dy - dx);\n return 'M' + sx + ',' + sy + 'C' + (sx + ix) + ',' + (sy + iy) + ' ' + (tx + iy) + ',' + (ty - ix) + ' ' + tx + ',' + ty;\n};\nconst curveR = (sa, sr, ta, tr) => curve(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\nconst orthoX = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'V' + ty + 'H' + tx;\nconst orthoY = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'H' + tx + 'V' + ty;\nconst orthoR = (sa, sr, ta, tr) => {\n const sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n sf = Math.abs(ta - sa) > Math.PI ? ta <= sa : ta > sa;\n return 'M' + sr * sc + ',' + sr * ss + 'A' + sr + ',' + sr + ' 0 0,' + (sf ? 1 : 0) + ' ' + sr * tc + ',' + sr * ts + 'L' + tr * tc + ',' + tr * ts;\n};\nconst diagonalX = (sx, sy, tx, ty) => {\n const m = (sx + tx) / 2;\n return 'M' + sx + ',' + sy + 'C' + m + ',' + sy + ' ' + m + ',' + ty + ' ' + tx + ',' + ty;\n};\nconst diagonalY = (sx, sy, tx, ty) => {\n const m = (sy + ty) / 2;\n return 'M' + sx + ',' + sy + 'C' + sx + ',' + m + ' ' + tx + ',' + m + ' ' + tx + ',' + ty;\n};\nconst diagonalR = (sa, sr, ta, tr) => {\n const sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n mr = (sr + tr) / 2;\n return 'M' + sr * sc + ',' + sr * ss + 'C' + mr * sc + ',' + mr * ss + ' ' + mr * tc + ',' + mr * ts + ' ' + tr * tc + ',' + tr * ts;\n};\nconst Paths = fastmap({\n 'line': line,\n 'line-radial': lineR,\n 'arc': arc,\n 'arc-radial': arcR,\n 'curve': curve,\n 'curve-radial': curveR,\n 'orthogonal-horizontal': orthoX,\n 'orthogonal-vertical': orthoY,\n 'orthogonal-radial': orthoR,\n 'diagonal-horizontal': diagonalX,\n 'diagonal-vertical': diagonalY,\n 'diagonal-radial': diagonalR\n});\n\n/**\n * Pie and donut chart layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size pie segments.\n * @param {number} [params.startAngle=0] - The start angle (in radians) of the layout.\n * @param {number} [params.endAngle=2π] - The end angle (in radians) of the layout.\n * @param {boolean} [params.sort] - Boolean flag for sorting sectors by value.\n */\nfunction Pie(params) {\n Transform.call(this, null, params);\n}\nPie.Definition = {\n 'type': 'Pie',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'startAngle',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'endAngle',\n 'type': 'number',\n 'default': 6.283185307179586\n }, {\n 'name': 'sort',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['startAngle', 'endAngle']\n }]\n};\ninherits(Pie, Transform, {\n transform(_, pulse) {\n var as = _.as || ['startAngle', 'endAngle'],\n startAngle = as[0],\n endAngle = as[1],\n field = _.field || one,\n start = _.startAngle || 0,\n stop = _.endAngle != null ? _.endAngle : 2 * Math.PI,\n data = pulse.source,\n values = data.map(field),\n n = values.length,\n a = start,\n k = (stop - start) / sum(values),\n index = range(n),\n i,\n t,\n v;\n if (_.sort) {\n index.sort((a, b) => values[a] - values[b]);\n }\n for (i = 0; i < n; ++i) {\n v = values[index[i]];\n t = data[index[i]];\n t[startAngle] = a;\n t[endAngle] = a += v * k;\n }\n this.value = values;\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\n\nconst DEFAULT_COUNT = 5;\nfunction includeZero(scale) {\n const type = scale.type;\n return !scale.bins && (type === Linear || type === Pow || type === Sqrt);\n}\nfunction includePad(type) {\n return isContinuous(type) && type !== Sequential;\n}\nconst SKIP = toSet(['set', 'modified', 'clear', 'type', 'scheme', 'schemeExtent', 'schemeCount', 'domain', 'domainMin', 'domainMid', 'domainMax', 'domainRaw', 'domainImplicit', 'nice', 'zero', 'bins', 'range', 'rangeStep', 'round', 'reverse', 'interpolate', 'interpolateGamma']);\n\n/**\n * Maintains a scale function mapping data values to visual channels.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Scale(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\n\ninherits(Scale, Transform, {\n transform(_, pulse) {\n var df = pulse.dataflow,\n scale$1 = this.value,\n key = scaleKey(_);\n if (!scale$1 || key !== scale$1.type) {\n this.value = scale$1 = scale(key)();\n }\n for (key in _) if (!SKIP[key]) {\n // padding is a scale property for band/point but not others\n if (key === 'padding' && includePad(scale$1.type)) continue;\n // invoke scale property setter, raise warning if not found\n isFunction(scale$1[key]) ? scale$1[key](_[key]) : df.warn('Unsupported scale property: ' + key);\n }\n configureRange(scale$1, _, configureBins(scale$1, _, configureDomain(scale$1, _, df)));\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n }\n});\nfunction scaleKey(_) {\n var t = _.type,\n d = '',\n n;\n\n // backwards compatibility pre Vega 5.\n if (t === Sequential) return Sequential + '-' + Linear;\n if (isContinuousColor(_)) {\n n = _.rawDomain ? _.rawDomain.length : _.domain ? _.domain.length + +(_.domainMid != null) : 0;\n d = n === 2 ? Sequential + '-' : n === 3 ? Diverging + '-' : '';\n }\n return (d + t || Linear).toLowerCase();\n}\nfunction isContinuousColor(_) {\n const t = _.type;\n return isContinuous(t) && t !== Time && t !== UTC && (_.scheme || _.range && _.range.length && _.range.every(isString));\n}\nfunction configureDomain(scale, _, df) {\n // check raw domain, if provided use that and exit early\n const raw = rawDomain(scale, _.domainRaw, df);\n if (raw > -1) return raw;\n var domain = _.domain,\n type = scale.type,\n zero = _.zero || _.zero === undefined && includeZero(scale),\n n,\n mid;\n if (!domain) return 0;\n\n // adjust continuous domain for minimum pixel padding\n if (includePad(type) && _.padding && domain[0] !== peek(domain)) {\n domain = padDomain(type, domain, _.range, _.padding, _.exponent, _.constant);\n }\n\n // adjust domain based on zero, min, max settings\n if (zero || _.domainMin != null || _.domainMax != null || _.domainMid != null) {\n n = (domain = domain.slice()).length - 1 || 1;\n if (zero) {\n if (domain[0] > 0) domain[0] = 0;\n if (domain[n] < 0) domain[n] = 0;\n }\n if (_.domainMin != null) domain[0] = _.domainMin;\n if (_.domainMax != null) domain[n] = _.domainMax;\n if (_.domainMid != null) {\n mid = _.domainMid;\n const i = mid > domain[n] ? n + 1 : mid < domain[0] ? 0 : n;\n if (i !== n) df.warn('Scale domainMid exceeds domain min or max.', mid);\n domain.splice(i, 0, mid);\n }\n }\n\n // set the scale domain\n scale.domain(domainCheck(type, domain, df));\n\n // if ordinal scale domain is defined, prevent implicit\n // domain construction as side-effect of scale lookup\n if (type === Ordinal) {\n scale.unknown(_.domainImplicit ? scaleImplicit : undefined);\n }\n\n // perform 'nice' adjustment as requested\n if (_.nice && scale.nice) {\n scale.nice(_.nice !== true && tickCount(scale, _.nice) || null);\n }\n\n // return the cardinality of the domain\n return domain.length;\n}\nfunction rawDomain(scale, raw, df) {\n if (raw) {\n scale.domain(domainCheck(scale.type, raw, df));\n return raw.length;\n } else {\n return -1;\n }\n}\nfunction padDomain(type, domain, range, pad, exponent, constant) {\n var span = Math.abs(peek(range) - range[0]),\n frac = span / (span - 2 * pad),\n d = type === Log ? zoomLog(domain, null, frac) : type === Sqrt ? zoomPow(domain, null, frac, 0.5) : type === Pow ? zoomPow(domain, null, frac, exponent || 1) : type === Symlog ? zoomSymlog(domain, null, frac, constant || 1) : zoomLinear(domain, null, frac);\n domain = domain.slice();\n domain[0] = d[0];\n domain[domain.length - 1] = d[1];\n return domain;\n}\nfunction domainCheck(type, domain, df) {\n if (isLogarithmic(type)) {\n // sum signs of domain values\n // if all pos or all neg, abs(sum) === domain.length\n var s = Math.abs(domain.reduce((s, v) => s + (v < 0 ? -1 : v > 0 ? 1 : 0), 0));\n if (s !== domain.length) {\n df.warn('Log scale domain includes zero: ' + stringValue(domain));\n }\n }\n return domain;\n}\nfunction configureBins(scale, _, count) {\n let bins = _.bins;\n if (bins && !isArray(bins)) {\n // generate bin boundary array\n const domain = scale.domain(),\n lo = domain[0],\n hi = peek(domain),\n step = bins.step;\n let start = bins.start == null ? lo : bins.start,\n stop = bins.stop == null ? hi : bins.stop;\n if (!step) error('Scale bins parameter missing step property.');\n if (start < lo) start = step * Math.ceil(lo / step);\n if (stop > hi) stop = step * Math.floor(hi / step);\n bins = range(start, stop + step / 2, step);\n }\n if (bins) {\n // assign bin boundaries to scale instance\n scale.bins = bins;\n } else if (scale.bins) {\n // no current bins, remove bins if previously set\n delete scale.bins;\n }\n\n // special handling for bin-ordinal scales\n if (scale.type === BinOrdinal) {\n if (!bins) {\n // the domain specifies the bins\n scale.bins = scale.domain();\n } else if (!_.domain && !_.domainRaw) {\n // the bins specify the domain\n scale.domain(bins);\n count = bins.length;\n }\n }\n\n // return domain cardinality\n return count;\n}\nfunction configureRange(scale, _, count) {\n var type = scale.type,\n round = _.round || false,\n range = _.range;\n\n // if range step specified, calculate full range extent\n if (_.rangeStep != null) {\n range = configureRangeStep(type, _, count);\n }\n\n // else if a range scheme is defined, use that\n else if (_.scheme) {\n range = configureScheme(type, _, count);\n if (isFunction(range)) {\n if (scale.interpolator) {\n return scale.interpolator(range);\n } else {\n error(`Scale type ${type} does not support interpolating color schemes.`);\n }\n }\n }\n\n // given a range array for an interpolating scale, convert to interpolator\n if (range && isInterpolating(type)) {\n return scale.interpolator(interpolateColors(flip(range, _.reverse), _.interpolate, _.interpolateGamma));\n }\n\n // configure rounding / interpolation\n if (range && _.interpolate && scale.interpolate) {\n scale.interpolate(interpolate(_.interpolate, _.interpolateGamma));\n } else if (isFunction(scale.round)) {\n scale.round(round);\n } else if (isFunction(scale.rangeRound)) {\n scale.interpolate(round ? interpolateRound : interpolate$1);\n }\n if (range) scale.range(flip(range, _.reverse));\n}\nfunction configureRangeStep(type, _, count) {\n if (type !== Band && type !== Point) {\n error('Only band and point scales support rangeStep.');\n }\n\n // calculate full range based on requested step size and padding\n var outer = (_.paddingOuter != null ? _.paddingOuter : _.padding) || 0,\n inner = type === Point ? 1 : (_.paddingInner != null ? _.paddingInner : _.padding) || 0;\n return [0, _.rangeStep * bandSpace(count, inner, outer)];\n}\nfunction configureScheme(type, _, count) {\n var extent = _.schemeExtent,\n name,\n scheme$1;\n if (isArray(_.scheme)) {\n scheme$1 = interpolateColors(_.scheme, _.interpolate, _.interpolateGamma);\n } else {\n name = _.scheme.toLowerCase();\n scheme$1 = scheme(name);\n if (!scheme$1) error(`Unrecognized scheme name: ${_.scheme}`);\n }\n\n // determine size for potential discrete range\n count = type === Threshold ? count + 1 : type === BinOrdinal ? count - 1 : type === Quantile || type === Quantize ? +_.schemeCount || DEFAULT_COUNT : count;\n\n // adjust and/or quantize scheme as appropriate\n return isInterpolating(type) ? adjustScheme(scheme$1, extent, _.reverse) : isFunction(scheme$1) ? quantizeInterpolator(adjustScheme(scheme$1, extent), count) : type === Ordinal ? scheme$1 : scheme$1.slice(0, count);\n}\nfunction adjustScheme(scheme, extent, reverse) {\n return isFunction(scheme) && (extent || reverse) ? interpolateRange(scheme, flip(extent || [0, 1], reverse)) : scheme;\n}\nfunction flip(array, reverse) {\n return reverse ? array.slice().reverse() : array;\n}\n\n/**\n * Sorts scenegraph items in the pulse source array.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting tuples.\n */\nfunction SortItems(params) {\n Transform.call(this, null, params);\n}\ninherits(SortItems, Transform, {\n transform(_, pulse) {\n const mod = _.modified('sort') || pulse.changed(pulse.ADD) || pulse.modified(_.sort.fields) || pulse.modified('datum');\n if (mod) pulse.source.sort(stableCompare(_.sort));\n this.modified(mod);\n return pulse;\n }\n});\n\nconst Zero = 'zero',\n Center = 'center',\n Normalize = 'normalize',\n DefOutput = ['y0', 'y1'];\n\n/**\n * Stack layout for visualization elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to stack.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {function(object,object): number} [params.sort] - A comparator for stack sorting.\n * @param {string} [offset='zero'] - Stack baseline offset. One of 'zero', 'center', 'normalize'.\n */\nfunction Stack(params) {\n Transform.call(this, null, params);\n}\nStack.Definition = {\n 'type': 'Stack',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'offset',\n 'type': 'enum',\n 'default': Zero,\n 'values': [Zero, Center, Normalize]\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': DefOutput\n }]\n};\ninherits(Stack, Transform, {\n transform(_, pulse) {\n var as = _.as || DefOutput,\n y0 = as[0],\n y1 = as[1],\n sort = stableCompare(_.sort),\n field = _.field || one,\n stack = _.offset === Center ? stackCenter : _.offset === Normalize ? stackNormalize : stackZero,\n groups,\n i,\n n,\n max;\n\n // partition, sum, and sort the stack groups\n groups = partition(pulse.source, _.groupby, sort, field);\n\n // compute stack layouts per group\n for (i = 0, n = groups.length, max = groups.max; i < n; ++i) {\n stack(groups[i], max, field, y0, y1);\n }\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\nfunction stackCenter(group, max, field, y0, y1) {\n var last = (max - group.sum) / 2,\n m = group.length,\n j = 0,\n t;\n for (; j < m; ++j) {\n t = group[j];\n t[y0] = last;\n t[y1] = last += Math.abs(field(t));\n }\n}\nfunction stackNormalize(group, max, field, y0, y1) {\n var scale = 1 / group.sum,\n last = 0,\n m = group.length,\n j = 0,\n v = 0,\n t;\n for (; j < m; ++j) {\n t = group[j];\n t[y0] = last;\n t[y1] = last = scale * (v += Math.abs(field(t)));\n }\n}\nfunction stackZero(group, max, field, y0, y1) {\n var lastPos = 0,\n lastNeg = 0,\n m = group.length,\n j = 0,\n v,\n t;\n for (; j < m; ++j) {\n t = group[j];\n v = +field(t);\n if (v < 0) {\n t[y0] = lastNeg;\n t[y1] = lastNeg += v;\n } else {\n t[y0] = lastPos;\n t[y1] = lastPos += v;\n }\n }\n}\nfunction partition(data, groupby, sort, field) {\n var groups = [],\n get = f => f(t),\n map,\n i,\n n,\n m,\n t,\n k,\n g,\n s,\n max;\n\n // partition data points into stack groups\n if (groupby == null) {\n groups.push(data.slice());\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n groups.push(g);\n }\n g.push(t);\n }\n }\n\n // compute sums of groups, sort groups as needed\n for (k = 0, max = 0, m = groups.length; k < m; ++k) {\n g = groups[k];\n for (i = 0, s = 0, n = g.length; i < n; ++i) {\n s += Math.abs(field(g[i]));\n }\n g.sum = s;\n if (s > max) max = s;\n if (sort) g.sort(sort);\n }\n groups.max = max;\n return groups;\n}\n\nexport { AxisTicks as axisticks, DataJoin as datajoin, Encode as encode, LegendEntries as legendentries, LinkPath as linkpath, Pie as pie, Scale as scale, SortItems as sortitems, Stack as stack };\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","import {Adder} from \"d3-array\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nexport var areaRingSum = new Adder();\n\n// hello?\n\nvar areaSum = new Adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum = new Adder();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum = new Adder();\n stream(object, areaStream);\n return areaSum * 2;\n}\n","import {Adder} from \"d3-array\";\nimport {areaStream, areaRingSum} from \"./area.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport {abs, degrees, epsilon, radians} from \"./math.js\";\nimport stream from \"./stream.js\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum,\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum = new Adder();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n },\n sphere: function() {\n lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import {Adder} from \"d3-array\";\nimport {asin, atan2, cos, degrees, epsilon, epsilon2, hypot, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar W0, W1,\n X0, Y0, Z0,\n X1, Y1, Z1,\n X2, Y2, Z2,\n lambda00, phi00, // first point\n x0, y0, z0; // previous point\n\nvar centroidStream = {\n sphere: noop,\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n centroidRingPoint(lambda00, phi00);\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n cx = y0 * z - z0 * y,\n cy = z0 * x - x0 * z,\n cz = x0 * y - y0 * x,\n m = hypot(cx, cy, cz),\n w = asin(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2.add(v * cx);\n Y2.add(v * cy);\n Z2.add(v * cz);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 = 0;\n X2 = new Adder();\n Y2 = new Adder();\n Z2 = new Adder();\n stream(object, centroidStream);\n\n var x = +X2,\n y = +Y2,\n z = +Z2,\n m = hypot(x, y, z);\n\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < epsilon2) {\n x = X1, y = Y1, z = Z1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n m = hypot(x, y, z);\n // If the feature still has an undefined ccentroid, then return.\n if (m < epsilon2) return [NaN, NaN];\n }\n\n return [atan2(y, x) * degrees, asin(z / m) * degrees];\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n return [lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n lambda += deltaLambda;\n if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n return [lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y, m) {\n line.push([x, y, m]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n if (pointEqual(p0, p1)) {\n if (!p0[2] && !p1[2]) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n // handle degenerate cases by moving the point\n p1[0] += 2 * epsilon;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n var lambda = longitude(point),\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n var sum = new Adder();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = longitude(point0),\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = longitude(point1),\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n point1[2] = 1;\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1], 2);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1], 3);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math.js\";\n\nfunction graticuleX(y0, y1, dy) {\n var y = range(y0, y1 - epsilon, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = range(x0, x1 - epsilon, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: \"MultiLineString\", coordinates: lines()};\n }\n\n function lines() {\n return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n return graticule()();\n}\n","export default x => x;\n","import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n areaRingSum = new Adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum = new Adder();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum = new Adder();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum = new Adder();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","// Simple caching for constant-radius points.\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\n\nexport default class PathString {\n constructor(digits) {\n this._append = digits == null ? append : appendRound(digits);\n this._radius = 4.5;\n this._ = \"\";\n }\n pointRadius(_) {\n this._radius = +_;\n return this;\n }\n polygonStart() {\n this._line = 0;\n }\n polygonEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {\n if (this._line === 0) this._ += \"Z\";\n this._point = NaN;\n }\n point(x, y) {\n switch (this._point) {\n case 0: {\n this._append`M${x},${y}`;\n this._point = 1;\n break;\n }\n case 1: {\n this._append`L${x},${y}`;\n break;\n }\n default: {\n this._append`M${x},${y}`;\n if (this._radius !== cacheRadius || this._append !== cacheAppend) {\n const r = this._radius;\n const s = this._;\n this._ = \"\"; // stash the old string so we can cache the circle path fragment\n this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\n cacheRadius = r;\n cacheAppend = this._append;\n cacheCircle = this._;\n this._ = s;\n }\n this._ += cacheCircle;\n break;\n }\n }\n }\n result() {\n const result = this._;\n this._ = \"\";\n return result.length ? result : null;\n }\n}\n\nfunction append(strings) {\n let i = 1;\n this._ += strings[0];\n for (const j = strings.length; i < j; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n const d = Math.floor(digits);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\n if (d > 15) return append;\n if (d !== cacheDigits) {\n const k = 10 ** d;\n cacheDigits = d;\n cacheAppend = function append(strings) {\n let i = 1;\n this._ += strings[0];\n for (const j = strings.length; i < j; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n }\n return cacheAppend;\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n let digits = 3,\n pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n if (!arguments.length) return projection;\n projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream;\n return path;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString(digits)) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n path.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) digits = null;\n else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n if (context === null) contextStream = new PathString(digits);\n return path;\n };\n\n return path.projection(projection).digits(digits).context(context);\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n function transform(x, y) {\n x *= sx; y *= sy;\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k * sx, (dy - y) / k * sy];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n x *= sx; y *= sy;\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n };\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate angle\n sx = 1, // reflectX\n sy = 1, // reflectX\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n };\n\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n","import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y,\n l = atan2(x, abs(r0y)) * sign(r0y);\n if (r0y * n < 0)\n l -= pi * sign(x) * sign(r0y);\n return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n","import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n","import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n if (k === Infinity) return [2, 0];\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\n\nfunction tany(y) {\n return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n f = cy0 * pow(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n l = atan2(x, abs(fy)) * sign(fy);\n if (fy * n < 0)\n l -= pi * sign(x) * sign(fy);\n return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n","import projection from \"./index.js\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {abs, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {equirectangularRaw} from \"./equirectangular.js\";\n\nexport function conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs(n) < epsilon) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y,\n l = atan2(x, abs(gy)) * sign(gy);\n if (gy * n < 0)\n l -= pi * sign(x) * sign(gy);\n return [l / n, g - sign(n) * sqrt(x * x + gy * gy)];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = sqrt(3) / 2,\n iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs(delta) < epsilon2) break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n asin(sin(l) / M)\n ];\n};\n\nexport default function() {\n return projection(equalEarthRaw)\n .scale(177.158);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n","import projection from \"./index.js\";\nimport {abs, epsilon} from \"../math.js\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\nexport default function() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math.js\";\nimport {mercatorProjection} from \"./mercator.js\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n","export var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var ceil = Math.ceil;\nexport var cos = Math.cos;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var pow = Math.pow;\nexport var round = Math.round;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sin = Math.sin;\nexport var tan = Math.tan;\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var sqrt1_2 = Math.SQRT1_2;\nexport var sqrt2 = sqrt(2);\nexport var sqrtPi = sqrt(pi);\nexport var tau = pi * 2;\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport function sinci(x) {\n return x ? x / Math.sin(x) : 1;\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function sqrt(x) {\n return x > 0 ? Math.sqrt(x) : 0;\n}\n\nexport function tanh(x) {\n x = exp(2 * x);\n return (x - 1) / (x + 1);\n}\n\nexport function sinh(x) {\n return (exp(x) - exp(-x)) / 2;\n}\n\nexport function cosh(x) {\n return (exp(x) + exp(-x)) / 2;\n}\n\nexport function arsinh(x) {\n return log(x + sqrt(x * x + 1));\n}\n\nexport function arcosh(x) {\n return log(x + sqrt(x * x - 1));\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, cos, epsilon, halfPi, pi, sin, sqrt2} from \"./math.js\";\n\nexport function mollweideBromleyTheta(cp, phi) {\n var cpsinPhi = cp * sin(phi), i = 30, delta;\n do phi -= delta = (phi + sin(phi) - cpsinPhi) / (1 + cos(phi));\n while (abs(delta) > epsilon && --i > 0);\n return phi / 2;\n}\n\nexport function mollweideBromleyRaw(cx, cy, cp) {\n\n function forward(lambda, phi) {\n return [cx * lambda * cos(phi = mollweideBromleyTheta(cp, phi)), cy * sin(phi)];\n }\n\n forward.invert = function(x, y) {\n return y = asin(y / cy), [x / (cx * cos(y)), asin((2 * y + sin(2 * y)) / cp)];\n };\n\n return forward;\n}\n\nexport var mollweideRaw = mollweideBromleyRaw(sqrt2 / halfPi, sqrt2, pi);\n\nexport default function() {\n return projection(mollweideRaw)\n .scale(169.529);\n}\n","import { geoPath, geoAlbers, geoAlbersUsa, geoAzimuthalEqualArea, geoAzimuthalEquidistant, geoConicConformal, geoConicEqualArea, geoConicEquidistant, geoEqualEarth, geoEquirectangular, geoGnomonic, geoIdentity, geoMercator, geoNaturalEarth1, geoOrthographic, geoStereographic, geoTransverseMercator } from 'd3-geo';\nimport { geoMollweide } from 'd3-geo-projection';\nimport { registerScale } from 'vega-scale';\n\nconst defaultPath = geoPath();\nconst projectionProperties = [\n// standard properties in d3-geo\n'clipAngle', 'clipExtent', 'scale', 'translate', 'center', 'rotate', 'parallels', 'precision', 'reflectX', 'reflectY',\n// extended properties in d3-geo-projections\n'coefficient', 'distance', 'fraction', 'lobes', 'parallel', 'radius', 'ratio', 'spacing', 'tilt'];\n\n/**\n * Augment projections with their type and a copy method.\n */\nfunction create(type, constructor) {\n return function projection() {\n const p = constructor();\n p.type = type;\n p.path = geoPath().projection(p);\n p.copy = p.copy || function () {\n const c = projection();\n projectionProperties.forEach(prop => {\n if (p[prop]) c[prop](p[prop]());\n });\n c.path.pointRadius(p.path.pointRadius());\n return c;\n };\n return registerScale(p);\n };\n}\nfunction projection(type, proj) {\n if (!type || typeof type !== 'string') {\n throw new Error('Projection type must be a name string.');\n }\n type = type.toLowerCase();\n if (arguments.length > 1) {\n projections[type] = create(type, proj);\n return this;\n } else {\n return projections[type] || null;\n }\n}\nfunction getProjectionPath(proj) {\n return proj && proj.path || defaultPath;\n}\nconst projections = {\n // base d3-geo projection types\n albers: geoAlbers,\n albersusa: geoAlbersUsa,\n azimuthalequalarea: geoAzimuthalEqualArea,\n azimuthalequidistant: geoAzimuthalEquidistant,\n conicconformal: geoConicConformal,\n conicequalarea: geoConicEqualArea,\n conicequidistant: geoConicEquidistant,\n equalEarth: geoEqualEarth,\n equirectangular: geoEquirectangular,\n gnomonic: geoGnomonic,\n identity: geoIdentity,\n mercator: geoMercator,\n mollweide: geoMollweide,\n naturalEarth1: geoNaturalEarth1,\n orthographic: geoOrthographic,\n stereographic: geoStereographic,\n transversemercator: geoTransverseMercator\n};\nfor (const key in projections) {\n projection(key, projections[key]);\n}\n\nexport { getProjectionPath, projection, projectionProperties };\n","import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n","import clipRectangle from \"../clip/rectangle.js\";\nimport identity from \"../identity.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport {cos, degrees, radians, sin} from \"../math.js\";\n\nexport default function() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\n alpha = 0, ca, sa, // angle\n x0 = null, y0, x1, y1, // clip extent\n kx = 1, ky = 1,\n transform = transformer({\n point: function(x, y) {\n var p = projection([x, y])\n this.stream.point(p[0], p[1]);\n }\n }),\n postclip = identity,\n cache,\n cacheStream;\n\n function reset() {\n kx = k * sx;\n ky = k * sy;\n cache = cacheStream = null;\n return projection;\n }\n\n function projection (p) {\n var x = p[0] * kx, y = p[1] * ky;\n if (alpha) {\n var t = y * ca - x * sa;\n x = x * ca + y * sa;\n y = t;\n } \n return [x + tx, y + ty];\n }\n projection.invert = function(p) {\n var x = p[0] - tx, y = p[1] - ty;\n if (alpha) {\n var t = y * ca + x * sa;\n x = x * ca - y * sa;\n y = t;\n }\n return [x / kx, y / ky];\n };\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n };\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n projection.scale = function(_) {\n return arguments.length ? (k = +_, reset()) : k;\n };\n projection.translate = function(_) {\n return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\n }\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;\n };\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\n };\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\n };\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n return projection;\n}\n","import { Transform, rederive, ingest, replace } from 'vega-dataflow';\nimport { error, extent, inherits, identity, isArray, isFunction, isNumber, array, constant, one, accessorName, accessorFields, field, extend, toSet, zero } from 'vega-util';\nimport { tickStep, range, max, sum } from 'd3-array';\nimport { bandwidthNRD } from 'vega-statistics';\nimport { getProjectionPath, projectionProperties, projection } from 'vega-projection';\nimport { geoGraticule } from 'd3-geo';\nimport { rgb } from 'd3-color';\nimport { canvas } from 'vega-canvas';\n\nfunction noop() {}\nconst cases = [[], [[[1.0, 1.5], [0.5, 1.0]]], [[[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [0.5, 1.0]]], [[[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 0.5], [1.0, 1.5]]], [[[1.0, 0.5], [0.5, 1.0]]], [[[0.5, 1.0], [1.0, 0.5]]], [[[1.0, 1.5], [1.0, 0.5]]], [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [1.0, 0.5]]], [[[0.5, 1.0], [1.5, 1.0]]], [[[1.0, 1.5], [1.5, 1.0]]], [[[0.5, 1.0], [1.0, 1.5]]], []];\n\n// Implementation adapted from d3/d3-contour. Thanks!\nfunction contours () {\n var dx = 1,\n dy = 1,\n smooth = smoothLinear;\n function contours(values, tz) {\n return tz.map(value => contour(values, value));\n }\n\n // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n function contour(values, value) {\n var polygons = [],\n holes = [];\n isorings(values, value, ring => {\n smooth(ring, values, value);\n if (area(ring) > 0) polygons.push([ring]);else holes.push(ring);\n });\n holes.forEach(hole => {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n return {\n type: 'MultiPolygon',\n value: value,\n coordinates: polygons\n };\n }\n\n // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n function isorings(values, value, callback) {\n var fragmentByStart = new Array(),\n fragmentByEnd = new Array(),\n x,\n y,\n t0,\n t1,\n t2,\n t3;\n\n // Special case for the first row (y = -1, t2 = t3 = 0).\n x = y = -1;\n t1 = values[0] >= value;\n cases[t1 << 1].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[x + 1] >= value;\n cases[t0 | t1 << 1].forEach(stitch);\n }\n cases[t1 << 0].forEach(stitch);\n\n // General case for the intermediate rows.\n while (++y < dy - 1) {\n x = -1;\n t1 = values[y * dx + dx] >= value;\n t2 = values[y * dx] >= value;\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t1 | t2 << 3].forEach(stitch);\n }\n\n // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t2 << 3].forEach(stitch);\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f,\n g;\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {\n start: f.start,\n end: g.end,\n ring: f.ring.concat(g.ring)\n };\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {\n start: g.start,\n end: f.end,\n ring: g.ring.concat(f.ring)\n };\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {\n start: startIndex,\n end: endIndex,\n ring: [start, end]\n };\n }\n }\n }\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n function smoothLinear(ring, values, value) {\n ring.forEach(point => {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v0,\n v1 = values[yt * dx + xt];\n if (x > 0 && x < dx && xt === x) {\n v0 = values[yt * dx + xt - 1];\n point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n }\n if (y > 0 && y < dy && yt === y) {\n v0 = values[(yt - 1) * dx + xt];\n point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n }\n });\n }\n contours.contour = contour;\n contours.size = function (_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.floor(_[0]),\n _1 = Math.floor(_[1]);\n if (!(_0 >= 0 && _1 >= 0)) error('invalid size');\n return dx = _0, dy = _1, contours;\n };\n contours.smooth = function (_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n };\n return contours;\n}\nfunction area(ring) {\n var i = 0,\n n = ring.length,\n area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n return area;\n}\nfunction contains(ring, hole) {\n var i = -1,\n n = hole.length,\n c;\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n return 0;\n}\nfunction ringContains(ring, point) {\n var x = point[0],\n y = point[1],\n contains = -1;\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i],\n xi = pi[0],\n yi = pi[1],\n pj = ring[j],\n xj = pj[0],\n yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi) contains = -contains;\n }\n return contains;\n}\nfunction segmentContains(a, b, c) {\n var i;\n return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n\nfunction quantize (k, nice, zero) {\n return function (values) {\n var ex = extent(values),\n start = zero ? Math.min(ex[0], 0) : ex[0],\n stop = ex[1],\n span = stop - start,\n step = nice ? tickStep(start, stop, k) : span / (k + 1);\n return range(start + step, stop, step);\n };\n}\n\n/**\n * Generate isocontours (level sets) based on input raster grid data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} [params.field] - The field with raster grid\n * data. If unspecified, the tuple itself is interpreted as a raster grid.\n * @param {Array} [params.thresholds] - Contour threshold array. If\n * specified, the levels, nice, resolve, and zero parameters are ignored.\n * @param {number} [params.levels] - The desired number of contour levels.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified levels.\n * @param {string} [params.resolve] - The method for resolving thresholds\n * across multiple input grids. If 'independent' (the default), threshold\n * calculation will be performed separately for each grid. If 'shared', a\n * single set of threshold values will be used for all input grids.\n * @param {boolean} [params.zero] - Boolean flag indicating if the contour\n * threshold values should include zero.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n * @param {boolean} [params.scale] - Optional numerical value by which to\n * scale the output isocontour coordinates. This parameter can be useful\n * to scale the contours to match a desired output resolution.\n * @param {string} [params.as='contour'] - The output field in which to store\n * the generated isocontour data (default 'contour').\n */\nfunction Isocontour(params) {\n Transform.call(this, null, params);\n}\nIsocontour.Definition = {\n 'type': 'Isocontour',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'thresholds',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'levels',\n 'type': 'number'\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'zero',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'scale',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'translate',\n 'type': 'number',\n 'array': true,\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'default': 'contour'\n }]\n};\ninherits(Isocontour, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n source = pulse.materialize(pulse.SOURCE).source,\n field = _.field || identity,\n contour = contours().smooth(_.smooth !== false),\n tz = _.thresholds || levels(source, field, _),\n as = _.as === null ? null : _.as || 'contour',\n values = [];\n source.forEach(t => {\n const grid = field(t);\n\n // generate contour paths in GeoJSON format\n const paths = contour.size([grid.width, grid.height])(grid.values, isArray(tz) ? tz : tz(grid.values));\n\n // adjust contour path coordinates as needed\n transformPaths(paths, grid, t, _);\n\n // ingest; copy source data properties to output\n paths.forEach(p => {\n values.push(rederive(t, ingest(as != null ? {\n [as]: p\n } : p)));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = values;\n return out;\n }\n});\nfunction levels(values, f, _) {\n const q = quantize(_.levels || 10, _.nice, _.zero !== false);\n return _.resolve !== 'shared' ? q : q(values.map(t => max(f(t).values)));\n}\nfunction transformPaths(paths, grid, datum, _) {\n let s = _.scale || grid.scale,\n t = _.translate || grid.translate;\n if (isFunction(s)) s = s(datum, _);\n if (isFunction(t)) t = t(datum, _);\n if ((s === 1 || s == null) && !t) return;\n const sx = (isNumber(s) ? s : s[0]) || 1,\n sy = (isNumber(s) ? s : s[1]) || 1,\n tx = t && t[0] || 0,\n ty = t && t[1] || 0;\n paths.forEach(transform(grid, sx, sy, tx, ty));\n}\nfunction transform(grid, sx, sy, tx, ty) {\n const x1 = grid.x1 || 0,\n y1 = grid.y1 || 0,\n flip = sx * sy < 0;\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n function transformRing(coordinates) {\n if (flip) coordinates.reverse(); // maintain winding order\n coordinates.forEach(transformPoint);\n }\n function transformPoint(coordinates) {\n coordinates[0] = (coordinates[0] - x1) * sx + tx;\n coordinates[1] = (coordinates[1] - y1) * sy + ty;\n }\n return function (geometry) {\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n };\n}\n\nfunction radius(bw, data, f) {\n const v = bw >= 0 ? bw : bandwidthNRD(data, f);\n return Math.round((Math.sqrt(4 * v * v + 1) - 1) / 2);\n}\nfunction number(_) {\n return isFunction(_) ? _ : constant(+_);\n}\n\n// Implementation adapted from d3/d3-contour. Thanks!\nfunction density2D () {\n var x = d => d[0],\n y = d => d[1],\n weight = one,\n bandwidth = [-1, -1],\n dx = 960,\n dy = 500,\n k = 2; // log2(cellSize)\n\n function density(data, counts) {\n const rx = radius(bandwidth[0], data, x) >> k,\n // blur x-radius\n ry = radius(bandwidth[1], data, y) >> k,\n // blur y-radius\n ox = rx ? rx + 2 : 0,\n // x-offset padding for blur\n oy = ry ? ry + 2 : 0,\n // y-offset padding for blur\n n = 2 * ox + (dx >> k),\n // grid width\n m = 2 * oy + (dy >> k),\n // grid height\n values0 = new Float32Array(n * m),\n values1 = new Float32Array(n * m);\n let values = values0;\n data.forEach(d => {\n const xi = ox + (+x(d) >> k),\n yi = oy + (+y(d) >> k);\n if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n values0[xi + yi * n] += +weight(d);\n }\n });\n if (rx > 0 && ry > 0) {\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n } else if (rx > 0) {\n blurX(n, m, values0, values1, rx);\n blurX(n, m, values1, values0, rx);\n blurX(n, m, values0, values1, rx);\n values = values1;\n } else if (ry > 0) {\n blurY(n, m, values0, values1, ry);\n blurY(n, m, values1, values0, ry);\n blurY(n, m, values0, values1, ry);\n values = values1;\n }\n\n // scale density estimates\n // density in points per square pixel or probability density\n const s = counts ? Math.pow(2, -2 * k) : 1 / sum(values);\n for (let i = 0, sz = n * m; i < sz; ++i) values[i] *= s;\n return {\n values: values,\n scale: 1 << k,\n width: n,\n height: m,\n x1: ox,\n y1: oy,\n x2: ox + (dx >> k),\n y2: oy + (dy >> k)\n };\n }\n density.x = function (_) {\n return arguments.length ? (x = number(_), density) : x;\n };\n density.y = function (_) {\n return arguments.length ? (y = number(_), density) : y;\n };\n density.weight = function (_) {\n return arguments.length ? (weight = number(_), density) : weight;\n };\n density.size = function (_) {\n if (!arguments.length) return [dx, dy];\n var _0 = +_[0],\n _1 = +_[1];\n if (!(_0 >= 0 && _1 >= 0)) error('invalid size');\n return dx = _0, dy = _1, density;\n };\n density.cellSize = function (_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) error('invalid cell size');\n k = Math.floor(Math.log(_) / Math.LN2);\n return density;\n };\n density.bandwidth = function (_) {\n if (!arguments.length) return bandwidth;\n _ = array(_);\n if (_.length === 1) _ = [+_[0], +_[0]];\n if (_.length !== 2) error('invalid bandwidth');\n return bandwidth = _, density;\n };\n return density;\n}\nfunction blurX(n, m, source, target, r) {\n const w = (r << 1) + 1;\n for (let j = 0; j < m; ++j) {\n for (let i = 0, sr = 0; i < n + r; ++i) {\n if (i < n) {\n sr += source[i + j * n];\n }\n if (i >= r) {\n if (i >= w) {\n sr -= source[i - w + j * n];\n }\n target[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n }\n }\n }\n}\nfunction blurY(n, m, source, target, r) {\n const w = (r << 1) + 1;\n for (let i = 0; i < n; ++i) {\n for (let j = 0, sr = 0; j < m + r; ++j) {\n if (j < m) {\n sr += source[i + j * n];\n }\n if (j >= r) {\n if (j >= w) {\n sr -= source[i + (j - w) * n];\n }\n target[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n }\n }\n }\n}\n\n/**\n * Perform 2D kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The [width, height] extent (in\n * units of input pixels) over which to perform density estimation.\n * @param {function(object): number} params.x - The x-coordinate accessor.\n * @param {function(object): number} params.y - The y-coordinate accessor.\n * @param {function(object): number} [params.weight] - The weight accessor.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * This parameter determines the level of spatial approximation. For example,\n * the default value of 4 maps to 2x reductions in both x- and y- dimensions.\n * A value of 1 will result in an output raster grid whose dimensions exactly\n * matches the size parameter.\n * @param {Array} [params.bandwidth] - The KDE kernel bandwidths,\n * in pixels. The input can be a two-element array specifying separate\n * x and y bandwidths, or a single-element array specifying both. If the\n * bandwidth is unspecified or less than zero, the bandwidth will be\n * automatically determined.\n * @param {boolean} [params.counts=false] - A boolean flag indicating if the\n * output values should be probability estimates (false, default) or\n * smoothed counts (true).\n * @param {string} [params.as='grid'] - The output field in which to store\n * the generated raster grid (default 'grid').\n */\nfunction KDE2D(params) {\n Transform.call(this, null, params);\n}\nKDE2D.Definition = {\n 'type': 'KDE2D',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'weight',\n 'type': 'field'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'cellSize',\n 'type': 'number'\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'counts',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'grid'\n }]\n};\nconst PARAMS = ['x', 'y', 'weight', 'size', 'cellSize', 'bandwidth'];\nfunction params(obj, _) {\n PARAMS.forEach(param => _[param] != null ? obj[param](_[param]) : 0);\n return obj;\n}\ninherits(KDE2D, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) return pulse.StopPropagation;\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n kde = params(density2D(), _),\n as = _.as || 'grid',\n values = [];\n function set(t, vals) {\n for (let i = 0; i < names.length; ++i) t[names[i]] = vals[i];\n return t;\n }\n\n // generate density raster grids\n values = groups.map(g => ingest(set({\n [as]: kde(g, _.counts)\n }, g.dims)));\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = values;\n return out;\n }\n});\nfunction partition(data, groupby) {\n var groups = [],\n get = f => f(t),\n map,\n i,\n n,\n t,\n k,\n g;\n\n // partition data points into groups\n if (groupby == null) {\n groups.push(data);\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n g.push(t);\n }\n }\n return groups;\n}\n\n/**\n * Generate contours based on kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The dimensions [width, height] over which to compute contours.\n * If the values parameter is provided, this must be the dimensions of the input data.\n * If density estimation is performed, this is the output view dimensions in pixels.\n * @param {Array} [params.values] - An array of numeric values representing an\n * width x height grid of values over which to compute contours. If unspecified, this\n * transform will instead attempt to compute contours for the kernel density estimate\n * using values drawn from data tuples in the input pulse.\n * @param {function(object): number} [params.x] - The pixel x-coordinate accessor for density estimation.\n * @param {function(object): number} [params.y] - The pixel y-coordinate accessor for density estimation.\n * @param {function(object): number} [params.weight] - The data point weight accessor for density estimation.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * @param {number} [params.bandwidth] - Kernel density estimation bandwidth.\n * @param {Array} [params.thresholds] - Contour threshold array. If\n * this parameter is set, the count and nice parameters will be ignored.\n * @param {number} [params.count] - The desired number of contours.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified count.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n */\nfunction Contour(params) {\n Transform.call(this, null, params);\n}\nContour.Definition = {\n 'type': 'Contour',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'values',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'x',\n 'type': 'field'\n }, {\n 'name': 'y',\n 'type': 'field'\n }, {\n 'name': 'weight',\n 'type': 'field'\n }, {\n 'name': 'cellSize',\n 'type': 'number'\n }, {\n 'name': 'bandwidth',\n 'type': 'number'\n }, {\n 'name': 'count',\n 'type': 'number'\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'thresholds',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': true\n }]\n};\ninherits(Contour, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n contour = contours().smooth(_.smooth !== false),\n values = _.values,\n thresh = _.thresholds || quantize(_.count || 10, _.nice, !!values),\n size = _.size,\n grid,\n post;\n if (!values) {\n values = pulse.materialize(pulse.SOURCE).source;\n grid = params(density2D(), _)(values, true);\n post = transform(grid, grid.scale || 1, grid.scale || 1, 0, 0);\n size = [grid.width, grid.height];\n values = grid.values;\n }\n thresh = isArray(thresh) ? thresh : thresh(values);\n values = contour.size(size)(values, thresh);\n if (post) values.forEach(post);\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = (values || []).map(ingest);\n return out;\n }\n});\n\nconst Feature = 'Feature';\nconst FeatureCollection = 'FeatureCollection';\nconst MultiPoint = 'MultiPoint';\n\n/**\n * Consolidate an array of [longitude, latitude] points or GeoJSON features\n * into a combined GeoJSON object. This transform is particularly useful for\n * combining geo data for a Projection's fit argument. The resulting GeoJSON\n * data is available as this transform's value. Input pulses are unchanged.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.fields] - A two-element array\n * of field accessors for the longitude and latitude values.\n * @param {function(object): *} params.geojson - A field accessor for\n * retrieving GeoJSON feature data.\n */\nfunction GeoJSON(params) {\n Transform.call(this, null, params);\n}\nGeoJSON.Definition = {\n 'type': 'GeoJSON',\n 'metadata': {},\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'geojson',\n 'type': 'field'\n }]\n};\ninherits(GeoJSON, Transform, {\n transform(_, pulse) {\n var features = this._features,\n points = this._points,\n fields = _.fields,\n lon = fields && fields[0],\n lat = fields && fields[1],\n geojson = _.geojson || !fields && identity,\n flag = pulse.ADD,\n mod;\n mod = _.modified() || pulse.changed(pulse.REM) || pulse.modified(accessorFields(geojson)) || lon && pulse.modified(accessorFields(lon)) || lat && pulse.modified(accessorFields(lat));\n if (!this.value || mod) {\n flag = pulse.SOURCE;\n this._features = features = [];\n this._points = points = [];\n }\n if (geojson) {\n pulse.visit(flag, t => features.push(geojson(t)));\n }\n if (lon && lat) {\n pulse.visit(flag, t => {\n var x = lon(t),\n y = lat(t);\n if (x != null && y != null && (x = +x) === x && (y = +y) === y) {\n points.push([x, y]);\n }\n });\n features = features.concat({\n type: Feature,\n geometry: {\n type: MultiPoint,\n coordinates: points\n }\n });\n }\n this.value = {\n type: FeatureCollection,\n features: features\n };\n }\n});\n\n/**\n * Map GeoJSON data to an SVG path string.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='path'] - The output field in which to store\n * the generated path data (default 'path').\n */\nfunction GeoPath(params) {\n Transform.call(this, null, params);\n}\nGeoPath.Definition = {\n 'type': 'GeoPath',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection'\n }, {\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'pointRadius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\ninherits(GeoPath, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n path = this.value,\n field = _.field || identity,\n as = _.as || 'path',\n flag = out.SOURCE;\n if (!path || _.modified()) {\n // parameters updated, reset and reflow\n this.value = path = getProjectionPath(_.projection);\n out.materialize().reflow();\n } else {\n flag = field === identity || pulse.modified(field.fields) ? out.ADD_MOD : out.ADD;\n }\n const prev = initPath(path, _.pointRadius);\n out.visit(flag, t => t[as] = path(field(t)));\n path.pointRadius(prev);\n return out.modifies(as);\n }\n});\nfunction initPath(path, pointRadius) {\n const prev = path.pointRadius();\n path.context(null);\n if (pointRadius != null) {\n path.pointRadius(pointRadius);\n }\n return prev;\n}\n\n/**\n * Geo-code a longitude/latitude point to an x/y coordinate.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {Array} params.fields - A two-element array of\n * field accessors for the longitude and latitude values.\n * @param {Array} [params.as] - A two-element array of field names\n * under which to store the result. Defaults to ['x','y'].\n */\nfunction GeoPoint(params) {\n Transform.call(this, null, params);\n}\nGeoPoint.Definition = {\n 'type': 'GeoPoint',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection',\n 'required': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['x', 'y']\n }]\n};\ninherits(GeoPoint, Transform, {\n transform(_, pulse) {\n var proj = _.projection,\n lon = _.fields[0],\n lat = _.fields[1],\n as = _.as || ['x', 'y'],\n x = as[0],\n y = as[1],\n mod;\n function set(t) {\n const xy = proj([lon(t), lat(t)]);\n if (xy) {\n t[x] = xy[0];\n t[y] = xy[1];\n } else {\n t[x] = undefined;\n t[y] = undefined;\n }\n }\n if (_.modified()) {\n // parameters updated, reflow\n pulse = pulse.materialize().reflow(true).visit(pulse.SOURCE, set);\n } else {\n mod = pulse.modified(lon.fields) || pulse.modified(lat.fields);\n pulse.visit(mod ? pulse.ADD_MOD : pulse.ADD, set);\n }\n return pulse.modifies(as);\n }\n});\n\n/**\n * Annotate items with a geopath shape generator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='shape'] - The output field in which to store\n * the generated path data (default 'shape').\n */\nfunction GeoShape(params) {\n Transform.call(this, null, params);\n}\nGeoShape.Definition = {\n 'type': 'GeoShape',\n 'metadata': {\n 'modifies': true,\n 'nomod': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection'\n }, {\n 'name': 'field',\n 'type': 'field',\n 'default': 'datum'\n }, {\n 'name': 'pointRadius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'shape'\n }]\n};\ninherits(GeoShape, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n shape = this.value,\n as = _.as || 'shape',\n flag = out.ADD;\n if (!shape || _.modified()) {\n // parameters updated, reset and reflow\n this.value = shape = shapeGenerator(getProjectionPath(_.projection), _.field || field('datum'), _.pointRadius);\n out.materialize().reflow();\n flag = out.SOURCE;\n }\n out.visit(flag, t => t[as] = shape);\n return out.modifies(as);\n }\n});\nfunction shapeGenerator(path, field, pointRadius) {\n const shape = pointRadius == null ? _ => path(field(_)) : _ => {\n var prev = path.pointRadius(),\n value = path.pointRadius(pointRadius)(field(_));\n path.pointRadius(prev);\n return value;\n };\n shape.context = _ => {\n path.context(_);\n return shape;\n };\n return shape;\n}\n\n/**\n * GeoJSON feature generator for creating graticules.\n * @constructor\n */\nfunction Graticule(params) {\n Transform.call(this, [], params);\n this.generator = geoGraticule();\n}\nGraticule.Definition = {\n 'type': 'Graticule',\n 'metadata': {\n 'changes': true,\n 'generates': true\n },\n 'params': [{\n 'name': 'extent',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'extentMajor',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'extentMinor',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'step',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'stepMajor',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'default': [90, 360]\n }, {\n 'name': 'stepMinor',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'default': [10, 10]\n }, {\n 'name': 'precision',\n 'type': 'number',\n 'default': 2.5\n }]\n};\ninherits(Graticule, Transform, {\n transform(_, pulse) {\n var src = this.value,\n gen = this.generator,\n t;\n if (!src.length || _.modified()) {\n for (const prop in _) {\n if (isFunction(gen[prop])) {\n gen[prop](_[prop]);\n }\n }\n }\n t = gen();\n if (src.length) {\n pulse.mod.push(replace(src[0], t));\n } else {\n pulse.add.push(ingest(t));\n }\n src[0] = t;\n return pulse;\n }\n});\n\n/**\n * Render a heatmap image for input raster grid data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} [params.field] - The field with raster grid\n * data. If unspecified, the tuple itself is interpreted as a raster grid.\n * @param {string} [params.color] - A constant color value or function for\n * individual pixel color. If a function, it will be invoked with an input\n * object that includes $x, $y, $value, and $max fields for the grid.\n * @param {number} [params.opacity] - A constant opacity value or function for\n * individual pixel opacity. If a function, it will be invoked with an input\n * object that includes $x, $y, $value, and $max fields for the grid.\n * @param {string} [params.resolve] - The method for resolving maximum values\n * across multiple input grids. If 'independent' (the default), maximum\n * calculation will be performed separately for each grid. If 'shared',\n * a single global maximum will be used for all input grids.\n * @param {string} [params.as='image'] - The output field in which to store\n * the generated bitmap canvas images (default 'image').\n */\nfunction Heatmap(params) {\n Transform.call(this, null, params);\n}\nHeatmap.Definition = {\n 'type': 'heatmap',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'color',\n 'type': 'string',\n 'expr': true\n }, {\n 'name': 'opacity',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'image'\n }]\n};\ninherits(Heatmap, Transform, {\n transform(_, pulse) {\n if (!pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n var source = pulse.materialize(pulse.SOURCE).source,\n shared = _.resolve === 'shared',\n field = _.field || identity,\n opacity = opacity_(_.opacity, _),\n color = color_(_.color, _),\n as = _.as || 'image',\n obj = {\n $x: 0,\n $y: 0,\n $value: 0,\n $max: shared ? max(source.map(t => max(field(t).values))) : 0\n };\n source.forEach(t => {\n const v = field(t);\n\n // build proxy data object\n const o = extend({}, t, obj);\n // set maximum value if not globally shared\n if (!shared) o.$max = max(v.values || []);\n\n // generate canvas image\n // optimize color/opacity if not pixel-dependent\n t[as] = toCanvas(v, o, color.dep ? color : constant(color(o)), opacity.dep ? opacity : constant(opacity(o)));\n });\n return pulse.reflow(true).modifies(as);\n }\n});\n\n// get image color function\nfunction color_(color, _) {\n let f;\n if (isFunction(color)) {\n f = obj => rgb(color(obj, _));\n f.dep = dependency(color);\n } else {\n // default to mid-grey\n f = constant(rgb(color || '#888'));\n }\n return f;\n}\n\n// get image opacity function\nfunction opacity_(opacity, _) {\n let f;\n if (isFunction(opacity)) {\n f = obj => opacity(obj, _);\n f.dep = dependency(opacity);\n } else if (opacity) {\n f = constant(opacity);\n } else {\n // default to [0, max] opacity gradient\n f = obj => obj.$value / obj.$max || 0;\n f.dep = true;\n }\n return f;\n}\n\n// check if function depends on individual pixel data\nfunction dependency(f) {\n if (!isFunction(f)) return false;\n const set = toSet(accessorFields(f));\n return set.$x || set.$y || set.$value || set.$max;\n}\n\n// render raster grid to canvas\nfunction toCanvas(grid, obj, color, opacity) {\n const n = grid.width,\n m = grid.height,\n x1 = grid.x1 || 0,\n y1 = grid.y1 || 0,\n x2 = grid.x2 || n,\n y2 = grid.y2 || m,\n val = grid.values,\n value = val ? i => val[i] : zero,\n can = canvas(x2 - x1, y2 - y1),\n ctx = can.getContext('2d'),\n img = ctx.getImageData(0, 0, x2 - x1, y2 - y1),\n pix = img.data;\n for (let j = y1, k = 0; j < y2; ++j) {\n obj.$y = j - y1;\n for (let i = x1, r = j * n; i < x2; ++i, k += 4) {\n obj.$x = i - x1;\n obj.$value = value(i + r);\n const v = color(obj);\n pix[k + 0] = v.r;\n pix[k + 1] = v.g;\n pix[k + 2] = v.b;\n pix[k + 3] = ~~(255 * opacity(obj));\n }\n }\n ctx.putImageData(img, 0, 0);\n return can;\n}\n\n/**\n * Maintains a cartographic projection.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Projection(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\n\ninherits(Projection, Transform, {\n transform(_, pulse) {\n let proj = this.value;\n if (!proj || _.modified('type')) {\n this.value = proj = create(_.type);\n projectionProperties.forEach(prop => {\n if (_[prop] != null) set(proj, prop, _[prop]);\n });\n } else {\n projectionProperties.forEach(prop => {\n if (_.modified(prop)) set(proj, prop, _[prop]);\n });\n }\n if (_.pointRadius != null) proj.path.pointRadius(_.pointRadius);\n if (_.fit) fit(proj, _);\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n }\n});\nfunction fit(proj, _) {\n const data = collectGeoJSON(_.fit);\n _.extent ? proj.fitExtent(_.extent, data) : _.size ? proj.fitSize(_.size, data) : 0;\n}\nfunction create(type) {\n const constructor = projection((type || 'mercator').toLowerCase());\n if (!constructor) error('Unrecognized projection type: ' + type);\n return constructor();\n}\nfunction set(proj, key, value) {\n if (isFunction(proj[key])) proj[key](value);\n}\nfunction collectGeoJSON(data) {\n data = array(data);\n return data.length === 1 ? data[0] : {\n type: FeatureCollection,\n features: data.reduce((a, f) => a.concat(featurize(f)), [])\n };\n}\nfunction featurize(f) {\n return f.type === FeatureCollection ? f.features : array(f).filter(d => d != null).map(d => d.type === Feature ? d : {\n type: Feature,\n geometry: d\n });\n}\n\nexport { Contour as contour, GeoJSON as geojson, GeoPath as geopath, GeoPoint as geopoint, GeoShape as geoshape, Graticule as graticule, Heatmap as heatmap, Isocontour as isocontour, KDE2D as kde2d, Projection as projection };\n","export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n random,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n y = target.y + target.vy - source.y - source.vy || jiggle(random);\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import { Transform } from 'vega-dataflow';\nimport { inherits, array, isFunction, accessorFields, hasOwnProperty, error } from 'vega-util';\nimport { forceSimulation, forceCenter, forceCollide, forceManyBody, forceLink, forceX, forceY } from 'd3-force';\n\nconst ForceMap = {\n center: forceCenter,\n collide: forceCollide,\n nbody: forceManyBody,\n link: forceLink,\n x: forceX,\n y: forceY\n};\nconst Forces = 'forces',\n ForceParams = ['alpha', 'alphaMin', 'alphaTarget', 'velocityDecay', 'forces'],\n ForceConfig = ['static', 'iterations'],\n ForceOutput = ['x', 'y', 'vx', 'vy'];\n\n/**\n * Force simulation layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.forces - The forces to apply.\n */\nfunction Force(params) {\n Transform.call(this, null, params);\n}\nForce.Definition = {\n 'type': 'Force',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'static',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'restart',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 300\n }, {\n 'name': 'alpha',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'alphaMin',\n 'type': 'number',\n 'default': 0.001\n }, {\n 'name': 'alphaTarget',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'velocityDecay',\n 'type': 'number',\n 'default': 0.4\n }, {\n 'name': 'forces',\n 'type': 'param',\n 'array': true,\n 'params': [{\n 'key': {\n 'force': 'center'\n },\n 'params': [{\n 'name': 'x',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'y',\n 'type': 'number',\n 'default': 0\n }]\n }, {\n 'key': {\n 'force': 'collide'\n },\n 'params': [{\n 'name': 'radius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.7\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 1\n }]\n }, {\n 'key': {\n 'force': 'nbody'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': -30,\n 'expr': true\n }, {\n 'name': 'theta',\n 'type': 'number',\n 'default': 0.9\n }, {\n 'name': 'distanceMin',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'distanceMax',\n 'type': 'number'\n }]\n }, {\n 'key': {\n 'force': 'link'\n },\n 'params': [{\n 'name': 'links',\n 'type': 'data'\n }, {\n 'name': 'id',\n 'type': 'field'\n }, {\n 'name': 'distance',\n 'type': 'number',\n 'default': 30,\n 'expr': true\n }, {\n 'name': 'strength',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 1\n }]\n }, {\n 'key': {\n 'force': 'x'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.1\n }, {\n 'name': 'x',\n 'type': 'field'\n }]\n }, {\n 'key': {\n 'force': 'y'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.1\n }, {\n 'name': 'y',\n 'type': 'field'\n }]\n }]\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'modify': false,\n 'default': ForceOutput\n }]\n};\ninherits(Force, Transform, {\n transform(_, pulse) {\n var sim = this.value,\n change = pulse.changed(pulse.ADD_REM),\n params = _.modified(ForceParams),\n iters = _.iterations || 300;\n\n // configure simulation\n if (!sim) {\n this.value = sim = simulation(pulse.source, _);\n sim.on('tick', rerun(pulse.dataflow, this));\n if (!_.static) {\n change = true;\n sim.tick(); // ensure we run on init\n }\n\n pulse.modifies('index');\n } else {\n if (change) {\n pulse.modifies('index');\n sim.nodes(pulse.source);\n }\n if (params || pulse.changed(pulse.MOD)) {\n setup(sim, _, 0, pulse);\n }\n }\n\n // run simulation\n if (params || change || _.modified(ForceConfig) || pulse.changed() && _.restart) {\n sim.alpha(Math.max(sim.alpha(), _.alpha || 1)).alphaDecay(1 - Math.pow(sim.alphaMin(), 1 / iters));\n if (_.static) {\n for (sim.stop(); --iters >= 0;) sim.tick();\n } else {\n if (sim.stopped()) sim.restart();\n if (!change) return pulse.StopPropagation; // defer to sim ticks\n }\n }\n\n return this.finish(_, pulse);\n },\n finish(_, pulse) {\n const dataflow = pulse.dataflow;\n\n // inspect dependencies, touch link source data\n for (let args = this._argops, j = 0, m = args.length, arg; j < m; ++j) {\n arg = args[j];\n if (arg.name !== Forces || arg.op._argval.force !== 'link') {\n continue;\n }\n for (var ops = arg.op._argops, i = 0, n = ops.length, op; i < n; ++i) {\n if (ops[i].name === 'links' && (op = ops[i].op.source)) {\n dataflow.pulse(op, dataflow.changeset().reflow());\n break;\n }\n }\n }\n\n // reflow all nodes\n return pulse.reflow(_.modified()).modifies(ForceOutput);\n }\n});\nfunction rerun(df, op) {\n return () => df.touch(op).run();\n}\nfunction simulation(nodes, _) {\n const sim = forceSimulation(nodes),\n stop = sim.stop,\n restart = sim.restart;\n let stopped = false;\n sim.stopped = () => stopped;\n sim.restart = () => (stopped = false, restart());\n sim.stop = () => (stopped = true, stop());\n return setup(sim, _, true).on('end', () => stopped = true);\n}\nfunction setup(sim, _, init, pulse) {\n var f = array(_.forces),\n i,\n n,\n p,\n name;\n for (i = 0, n = ForceParams.length; i < n; ++i) {\n p = ForceParams[i];\n if (p !== Forces && _.modified(p)) sim[p](_[p]);\n }\n for (i = 0, n = f.length; i < n; ++i) {\n name = Forces + i;\n p = init || _.modified(Forces, i) ? getForce(f[i]) : pulse && modified(f[i], pulse) ? sim.force(name) : null;\n if (p) sim.force(name, p);\n }\n for (n = sim.numForces || 0; i < n; ++i) {\n sim.force(Forces + i, null); // remove\n }\n\n sim.numForces = f.length;\n return sim;\n}\nfunction modified(f, pulse) {\n var k, v;\n for (k in f) {\n if (isFunction(v = f[k]) && pulse.modified(accessorFields(v))) return 1;\n }\n return 0;\n}\nfunction getForce(_) {\n var f, p;\n if (!hasOwnProperty(ForceMap, _.force)) {\n error('Unrecognized force: ' + _.force);\n }\n f = ForceMap[_.force]();\n for (p in _) {\n if (isFunction(f[p])) setForceParam(f[p], _[p], _);\n }\n return f;\n}\nfunction setForceParam(f, v, _) {\n f(isFunction(v) ? d => v(d, _) : v);\n}\n\nexport { Force as force };\n","export default function(x, y) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n node,\n random,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(y) {\n var strength = constant(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n };\n\n return force;\n}\n","function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {shuffle} from \"../array.js\";\nimport lcg from \"../lcg.js\";\n\nexport default function(circles) {\n return packEncloseRandom(circles, lcg());\n}\n\nexport function packEncloseRandom(circles, random) {\n var i = 0, n = (circles = shuffle(Array.from(circles), random)).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","import array from \"../array.js\";\nimport lcg from \"../lcg.js\";\nimport {packEncloseRandom} from \"./enclose.js\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packSiblingsRandom(circles, random) {\n if (!(n = (circles = array(circles)).length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = packEncloseRandom(a, random);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packSiblingsRandom(circles, lcg());\n return circles;\n}\n","export default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array, random) {\n let m = array.length,\n t,\n i;\n\n while (m) {\n i = random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","import {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\nimport lcg from \"../lcg.js\";\nimport {packSiblingsRandom} from \"./siblings.js\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n const random = lcg();\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildrenRandom(padding, 0.5, random))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildrenRandom(constantZero, 1, random))\n .eachAfter(packChildrenRandom(padding, root.r / Math.min(dx, dy), random))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildrenRandom(padding, k, random) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packSiblingsRandom(children, random);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","import {optional} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar preroot = {depth: -1},\n ambiguous = {},\n imputed = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nexport default function() {\n var id = defaultId,\n parentId = defaultParentId,\n path;\n\n function stratify(data) {\n var nodes = Array.from(data),\n currentId = id,\n currentParentId = parentId,\n n,\n d,\n i,\n root,\n parent,\n node,\n nodeId,\n nodeKey,\n nodeByKey = new Map;\n\n if (path != null) {\n const I = nodes.map((d, i) => normalize(path(d, i, data)));\n const P = I.map(parentof);\n const S = new Set(I).add(\"\");\n for (const i of P) {\n if (!S.has(i)) {\n S.add(i);\n I.push(i);\n P.push(parentof(i));\n nodes.push(imputed);\n }\n }\n currentId = (_, i) => I[i];\n currentParentId = (_, i) => P[i];\n }\n\n for (i = 0, n = nodes.length; i < n; ++i) {\n d = nodes[i], node = nodes[i] = new Node(d);\n if ((nodeId = currentId(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = node.id = nodeId;\n nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n }\n if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += \"\")) {\n node.parent = nodeId;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (nodeId = node.parent) {\n parent = nodeByKey.get(nodeId);\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n } else {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n\n // When imputing internal nodes, only introduce roots if needed.\n // Then replace the imputed marker data with null.\n if (path != null) {\n while (root.data === imputed && root.children.length === 1) {\n root = root.children[0], --n;\n }\n for (let i = nodes.length - 1; i >= 0; --i) {\n node = nodes[i];\n if (node.data !== imputed) break;\n node.data = null;\n }\n }\n\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = optional(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = optional(x), stratify) : parentId;\n };\n\n stratify.path = function(x) {\n return arguments.length ? (path = optional(x), stratify) : path;\n };\n\n return stratify;\n}\n\n// To normalize a path, we coerce to a string, strip the trailing slash if any\n// (as long as the trailing slash is not immediately preceded by another slash),\n// and add leading slash if missing.\nfunction normalize(path) {\n path = `${path}`;\n let i = path.length;\n if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1);\n return path[0] === \"/\" ? path : `/${path}`;\n}\n\n// Walk backwards to find the first slash that is not the leading slash, e.g.:\n// \"/foo/bar\" ⇥ \"/foo\", \"/foo\" ⇥ \"/\", \"/\" ↦ \"\". (The root is special-cased\n// because the id of the root must be a truthy value.)\nfunction parentof(path) {\n let i = path.length;\n if (i < 2) return \"\";\n while (--i > 1) if (slash(path, i)) break;\n return path.slice(0, i);\n}\n\n// Slashes can be escaped; to determine whether a slash is a path delimiter, we\n// count the number of preceding backslashes escaping the forward slash: an odd\n// number indicates an escaped forward slash.\nfunction slash(path, i) {\n if (path[i] === \"/\") {\n let k = 0;\n while (i > 0 && path[--i] === \"\\\\\") ++k;\n if ((k & 1) === 0) return true;\n }\n return false;\n}\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\nimport {phi, squarifyRatio} from \"./squarify.js\";\n\nexport default (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n","import { Transform, isTuple, ingest, tupleid, stableCompare } from 'vega-dataflow';\nimport { inherits, error, array, one, truthy, hasOwnProperty } from 'vega-util';\nimport { hierarchy, pack, partition, stratify, tree, cluster, treemap, treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, treemapResquarify } from 'd3-hierarchy';\n\n// Build lookup table mapping tuple keys to tree node instances\nfunction lookup (tree, key, filter) {\n const map = {};\n tree.each(node => {\n const t = node.data;\n if (filter(t)) map[key(t)] = node;\n });\n tree.lookup = map;\n return tree;\n}\n\n/**\n * Nest tuples into a tree structure, grouped by key values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.keys - The key fields to nest by, in order.\n * @param {boolean} [params.generate=false] - A boolean flag indicating if\n * non-leaf nodes generated by this transform should be included in the\n * output. The default (false) includes only the input data (leaf nodes)\n * in the data stream.\n */\nfunction Nest(params) {\n Transform.call(this, null, params);\n}\nNest.Definition = {\n 'type': 'Nest',\n 'metadata': {\n 'treesource': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'keys',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'generate',\n 'type': 'boolean'\n }]\n};\nconst children = n => n.values;\ninherits(Nest, Transform, {\n transform(_, pulse) {\n if (!pulse.source) {\n error('Nest transform requires an upstream data source.');\n }\n var gen = _.generate,\n mod = _.modified(),\n out = pulse.clone(),\n tree = this.value;\n if (!tree || mod || pulse.changed()) {\n // collect nodes to remove\n if (tree) {\n tree.each(node => {\n if (node.children && isTuple(node.data)) {\n out.rem.push(node.data);\n }\n });\n }\n\n // generate new tree structure\n this.value = tree = hierarchy({\n values: array(_.keys).reduce((n, k) => {\n n.key(k);\n return n;\n }, nest()).entries(out.source)\n }, children);\n\n // collect nodes to add\n if (gen) {\n tree.each(node => {\n if (node.children) {\n node = ingest(node.data);\n out.add.push(node);\n out.source.push(node);\n }\n });\n }\n\n // build lookup table\n lookup(tree, tupleid, tupleid);\n }\n out.source.root = tree;\n return out;\n }\n});\nfunction nest() {\n const keys = [],\n nest = {\n entries: array => entries(apply(array, 0), 0),\n key: d => (keys.push(d), nest)\n };\n function apply(array, depth) {\n if (depth >= keys.length) {\n return array;\n }\n const n = array.length,\n key = keys[depth++],\n valuesByKey = {},\n result = {};\n let i = -1,\n keyValue,\n value,\n values;\n while (++i < n) {\n keyValue = key(value = array[i]) + '';\n if (values = valuesByKey[keyValue]) {\n values.push(value);\n } else {\n valuesByKey[keyValue] = [value];\n }\n }\n for (keyValue in valuesByKey) {\n result[keyValue] = apply(valuesByKey[keyValue], depth);\n }\n return result;\n }\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n const array = [];\n for (const key in map) {\n array.push({\n key,\n values: entries(map[key], depth)\n });\n }\n return array;\n }\n return nest;\n}\n\n/**\n * Abstract class for tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction HierarchyLayout(params) {\n Transform.call(this, null, params);\n}\nconst defaultSeparation = (a, b) => a.parent === b.parent ? 1 : 2;\ninherits(HierarchyLayout, Transform, {\n transform(_, pulse) {\n if (!pulse.source || !pulse.source.root) {\n error(this.constructor.name + ' transform requires a backing tree data source.');\n }\n const layout = this.layout(_.method),\n fields = this.fields,\n root = pulse.source.root,\n as = _.as || fields;\n if (_.field) root.sum(_.field);else root.count();\n if (_.sort) root.sort(stableCompare(_.sort, d => d.data));\n setParams(layout, this.params, _);\n if (layout.separation) {\n layout.separation(_.separation !== false ? defaultSeparation : one);\n }\n try {\n this.value = layout(root);\n } catch (err) {\n error(err);\n }\n root.each(node => setFields(node, fields, as));\n return pulse.reflow(_.modified()).modifies(as).modifies('leaf');\n }\n});\nfunction setParams(layout, params, _) {\n for (let p, i = 0, n = params.length; i < n; ++i) {\n p = params[i];\n if (p in _) layout[p](_[p]);\n }\n}\nfunction setFields(node, fields, as) {\n const t = node.data,\n n = fields.length - 1;\n for (let i = 0; i < n; ++i) {\n t[as[i]] = node[fields[i]];\n }\n t[as[n]] = node.children ? node.children.length : 0;\n}\n\nconst Output$3 = ['x', 'y', 'r', 'depth', 'children'];\n\n/**\n * Packed circle tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\nfunction Pack(params) {\n HierarchyLayout.call(this, params);\n}\nPack.Definition = {\n 'type': 'Pack',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'radius',\n 'type': 'field',\n 'default': null\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$3.length,\n 'default': Output$3\n }]\n};\ninherits(Pack, HierarchyLayout, {\n layout: pack,\n params: ['radius', 'size', 'padding'],\n fields: Output$3\n});\n\nconst Output$2 = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n\n/**\n * Partition tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\nfunction Partition(params) {\n HierarchyLayout.call(this, params);\n}\nPartition.Definition = {\n 'type': 'Partition',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'round',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$2.length,\n 'default': Output$2\n }]\n};\ninherits(Partition, HierarchyLayout, {\n layout: partition,\n params: ['size', 'round', 'padding'],\n fields: Output$2\n});\n\n/**\n * Stratify a collection of tuples into a tree structure based on\n * id and parent id fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.key - Unique key field for each tuple.\n * @param {function(object): *} params.parentKey - Field with key for parent tuple.\n */\nfunction Stratify(params) {\n Transform.call(this, null, params);\n}\nStratify.Definition = {\n 'type': 'Stratify',\n 'metadata': {\n 'treesource': true\n },\n 'params': [{\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'parentKey',\n 'type': 'field',\n 'required': true\n }]\n};\ninherits(Stratify, Transform, {\n transform(_, pulse) {\n if (!pulse.source) {\n error('Stratify transform requires an upstream data source.');\n }\n let tree = this.value;\n const mod = _.modified(),\n out = pulse.fork(pulse.ALL).materialize(pulse.SOURCE),\n run = !tree || mod || pulse.changed(pulse.ADD_REM) || pulse.modified(_.key.fields) || pulse.modified(_.parentKey.fields);\n\n // prevent upstream source pollution\n out.source = out.source.slice();\n if (run) {\n tree = out.source.length ? lookup(stratify().id(_.key).parentId(_.parentKey)(out.source), _.key, truthy) : lookup(stratify()([{}]), _.key, _.key);\n }\n out.source.root = this.value = tree;\n return out;\n }\n});\n\nconst Layouts = {\n tidy: tree,\n cluster: cluster\n};\nconst Output$1 = ['x', 'y', 'depth', 'children'];\n\n/**\n * Tree layout. Depending on the method parameter, performs either\n * Reingold-Tilford 'tidy' layout or dendrogram 'cluster' layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Tree(params) {\n HierarchyLayout.call(this, params);\n}\nTree.Definition = {\n 'type': 'Tree',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'tidy',\n 'values': ['tidy', 'cluster']\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'nodeSize',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'separation',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$1.length,\n 'default': Output$1\n }]\n};\ninherits(Tree, HierarchyLayout, {\n /**\n * Tree layout generator. Supports both 'tidy' and 'cluster' layouts.\n */\n layout(method) {\n const m = method || 'tidy';\n if (hasOwnProperty(Layouts, m)) return Layouts[m]();else error('Unrecognized Tree layout method: ' + m);\n },\n params: ['size', 'nodeSize'],\n fields: Output$1\n});\n\n/**\n * Generate tuples representing links between tree nodes.\n * The resulting tuples will contain 'source' and 'target' fields,\n * which point to parent and child node tuples, respectively.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction TreeLinks(params) {\n Transform.call(this, [], params);\n}\nTreeLinks.Definition = {\n 'type': 'TreeLinks',\n 'metadata': {\n 'tree': true,\n 'generates': true,\n 'changes': true\n },\n 'params': []\n};\ninherits(TreeLinks, Transform, {\n transform(_, pulse) {\n const links = this.value,\n tree = pulse.source && pulse.source.root,\n out = pulse.fork(pulse.NO_SOURCE),\n lut = {};\n if (!tree) error('TreeLinks transform requires a tree data source.');\n if (pulse.changed(pulse.ADD_REM)) {\n // remove previous links\n out.rem = links;\n\n // build lookup table of valid tuples\n pulse.visit(pulse.SOURCE, t => lut[tupleid(t)] = 1);\n\n // generate links for all edges incident on valid tuples\n tree.each(node => {\n const t = node.data,\n p = node.parent && node.parent.data;\n if (p && lut[tupleid(t)] && lut[tupleid(p)]) {\n out.add.push(ingest({\n source: p,\n target: t\n }));\n }\n });\n this.value = out.add;\n } else if (pulse.changed(pulse.MOD)) {\n // build lookup table of modified tuples\n pulse.visit(pulse.MOD, t => lut[tupleid(t)] = 1);\n\n // gather links incident on modified tuples\n links.forEach(link => {\n if (lut[tupleid(link.source)] || lut[tupleid(link.target)]) {\n out.mod.push(link);\n }\n });\n }\n return out;\n }\n});\n\nconst Tiles = {\n binary: treemapBinary,\n dice: treemapDice,\n slice: treemapSlice,\n slicedice: treemapSliceDice,\n squarify: treemapSquarify,\n resquarify: treemapResquarify\n};\nconst Output = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n\n/**\n * Treemap layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\nfunction Treemap(params) {\n HierarchyLayout.call(this, params);\n}\nTreemap.Definition = {\n 'type': 'Treemap',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'squarify',\n 'values': ['squarify', 'resquarify', 'binary', 'dice', 'slice', 'slicedice']\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingInner',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingOuter',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingTop',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingRight',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingBottom',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingLeft',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'ratio',\n 'type': 'number',\n 'default': 1.618033988749895\n }, {\n 'name': 'round',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output.length,\n 'default': Output\n }]\n};\ninherits(Treemap, HierarchyLayout, {\n /**\n * Treemap layout generator. Adds 'method' and 'ratio' parameters\n * to configure the underlying tile method.\n */\n layout() {\n const x = treemap();\n x.ratio = _ => {\n const t = x.tile();\n if (t.ratio) x.tile(t.ratio(_));\n };\n x.method = _ => {\n if (hasOwnProperty(Tiles, _)) x.tile(Tiles[_]);else error('Unrecognized Treemap layout method: ' + _);\n };\n return x;\n },\n params: ['method', 'ratio', 'size', 'round', 'padding', 'paddingInner', 'paddingOuter', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'],\n fields: Output\n});\n\nexport { Nest as nest, Pack as pack, Partition as partition, Stratify as stratify, Tree as tree, TreeLinks as treelinks, Treemap as treemap };\n","import roundNode from \"./treemap/round.js\";\nimport treemapDice from \"./treemap/dice.js\";\n\nexport default function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n","import dice from \"./dice.js\";\nimport slice from \"./slice.js\";\n\nexport default function(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","import { Marks, textMetrics } from 'vega-scenegraph';\nimport { canvas } from 'vega-canvas';\nimport { rederive, Transform } from 'vega-dataflow';\nimport { inherits, error, array, isFunction } from 'vega-util';\n\n// bit mask for getting first 2 bytes of alpha value\nconst ALPHA_MASK = 0xff000000;\nfunction baseBitmaps($, data) {\n const bitmap = $.bitmap();\n // when there is no base mark but data points are to be avoided\n (data || []).forEach(d => bitmap.set($(d.boundary[0]), $(d.boundary[3])));\n return [bitmap, undefined];\n}\nfunction markBitmaps($, baseMark, avoidMarks, labelInside, isGroupArea) {\n // create canvas\n const width = $.width,\n height = $.height,\n border = labelInside || isGroupArea,\n context = canvas(width, height).getContext('2d'),\n baseMarkContext = canvas(width, height).getContext('2d'),\n strokeContext = border && canvas(width, height).getContext('2d');\n\n // render all marks to be avoided into canvas\n avoidMarks.forEach(items => draw(context, items, false));\n draw(baseMarkContext, baseMark, false);\n if (border) {\n draw(strokeContext, baseMark, true);\n }\n\n // get canvas buffer, create bitmaps\n const buffer = getBuffer(context, width, height),\n baseMarkBuffer = getBuffer(baseMarkContext, width, height),\n strokeBuffer = border && getBuffer(strokeContext, width, height),\n layer1 = $.bitmap(),\n layer2 = border && $.bitmap();\n\n // populate bitmap layers\n let x, y, u, v, index, alpha, strokeAlpha, baseMarkAlpha;\n for (y = 0; y < height; ++y) {\n for (x = 0; x < width; ++x) {\n index = y * width + x;\n alpha = buffer[index] & ALPHA_MASK;\n baseMarkAlpha = baseMarkBuffer[index] & ALPHA_MASK;\n strokeAlpha = border && strokeBuffer[index] & ALPHA_MASK;\n if (alpha || strokeAlpha || baseMarkAlpha) {\n u = $(x);\n v = $(y);\n if (!isGroupArea && (alpha || baseMarkAlpha)) layer1.set(u, v); // update interior bitmap\n if (border && (alpha || strokeAlpha)) layer2.set(u, v); // update border bitmap\n }\n }\n }\n\n return [layer1, layer2];\n}\nfunction getBuffer(context, width, height) {\n return new Uint32Array(context.getImageData(0, 0, width, height).data.buffer);\n}\nfunction draw(context, items, interior) {\n if (!items.length) return;\n const type = items[0].mark.marktype;\n if (type === 'group') {\n items.forEach(group => {\n group.items.forEach(mark => draw(context, mark.items, interior));\n });\n } else {\n Marks[type].draw(context, {\n items: interior ? items.map(prepare) : items\n });\n }\n}\n\n/**\n * Prepare item before drawing into canvas (setting stroke and opacity)\n * @param {object} source item to be prepared\n * @returns prepared item\n */\nfunction prepare(source) {\n const item = rederive(source, {});\n if (item.stroke && item.strokeOpacity !== 0 || item.fill && item.fillOpacity !== 0) {\n return {\n ...item,\n strokeOpacity: 1,\n stroke: '#000',\n fillOpacity: 0\n };\n }\n return item;\n}\n\nconst DIV = 5,\n // bit shift from x, y index to bit vector array index\n MOD = 31,\n // bit mask for index lookup within a bit vector\n SIZE = 32,\n // individual bit vector size\n RIGHT0 = new Uint32Array(SIZE + 1),\n // left-anchored bit vectors, full -> 0\n RIGHT1 = new Uint32Array(SIZE + 1); // right-anchored bit vectors, 0 -> full\n\nRIGHT1[0] = 0;\nRIGHT0[0] = ~RIGHT1[0];\nfor (let i = 1; i <= SIZE; ++i) {\n RIGHT1[i] = RIGHT1[i - 1] << 1 | 1;\n RIGHT0[i] = ~RIGHT1[i];\n}\nfunction Bitmap (w, h) {\n const array = new Uint32Array(~~((w * h + SIZE) / SIZE));\n function _set(index, mask) {\n array[index] |= mask;\n }\n function _clear(index, mask) {\n array[index] &= mask;\n }\n return {\n array: array,\n get: (x, y) => {\n const index = y * w + x;\n return array[index >>> DIV] & 1 << (index & MOD);\n },\n set: (x, y) => {\n const index = y * w + x;\n _set(index >>> DIV, 1 << (index & MOD));\n },\n clear: (x, y) => {\n const index = y * w + x;\n _clear(index >>> DIV, ~(1 << (index & MOD)));\n },\n getRange: (x, y, x2, y2) => {\n let r = y2,\n start,\n end,\n indexStart,\n indexEnd;\n for (; r >= y; --r) {\n start = r * w + x;\n end = r * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n if (array[indexStart] & RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]) {\n return true;\n }\n } else {\n if (array[indexStart] & RIGHT0[start & MOD]) return true;\n if (array[indexEnd] & RIGHT1[(end & MOD) + 1]) return true;\n for (let i = indexStart + 1; i < indexEnd; ++i) {\n if (array[i]) return true;\n }\n }\n }\n return false;\n },\n setRange: (x, y, x2, y2) => {\n let start, end, indexStart, indexEnd, i;\n for (; y <= y2; ++y) {\n start = y * w + x;\n end = y * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n _set(indexStart, RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]);\n } else {\n _set(indexStart, RIGHT0[start & MOD]);\n _set(indexEnd, RIGHT1[(end & MOD) + 1]);\n for (i = indexStart + 1; i < indexEnd; ++i) _set(i, 0xffffffff);\n }\n }\n },\n clearRange: (x, y, x2, y2) => {\n let start, end, indexStart, indexEnd, i;\n for (; y <= y2; ++y) {\n start = y * w + x;\n end = y * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n if (indexStart === indexEnd) {\n _clear(indexStart, RIGHT1[start & MOD] | RIGHT0[(end & MOD) + 1]);\n } else {\n _clear(indexStart, RIGHT1[start & MOD]);\n _clear(indexEnd, RIGHT0[(end & MOD) + 1]);\n for (i = indexStart + 1; i < indexEnd; ++i) _clear(i, 0);\n }\n }\n },\n outOfBounds: (x, y, x2, y2) => x < 0 || y < 0 || y2 >= h || x2 >= w\n };\n}\n\nfunction scaler (width, height, padding) {\n const ratio = Math.max(1, Math.sqrt(width * height / 1e6)),\n w = ~~((width + 2 * padding + ratio) / ratio),\n h = ~~((height + 2 * padding + ratio) / ratio),\n scale = _ => ~~((_ + padding) / ratio);\n scale.invert = _ => _ * ratio - padding;\n scale.bitmap = () => Bitmap(w, h);\n scale.ratio = ratio;\n scale.padding = padding;\n scale.width = width;\n scale.height = height;\n return scale;\n}\n\nfunction placeAreaLabelNaive ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height;\n\n // try to place a label within an input area mark\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text); // label height\n\n let maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n areaWidth;\n\n // for each area sample point\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2;\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n if (areaWidth >= maxAreaWidth) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n }\n }\n x = textWidth / 2;\n y = textHeight / 2;\n x1 = d.x - x;\n x2 = d.x + x;\n y1 = d.y - y;\n y2 = d.y + y;\n d.align = 'center';\n if (x1 < 0 && x2 <= width) {\n d.align = 'left';\n } else if (0 <= x1 && width < x2) {\n d.align = 'right';\n }\n d.baseline = 'middle';\n if (y1 < 0 && y2 <= height) {\n d.baseline = 'top';\n } else if (0 <= y1 && height < y2) {\n d.baseline = 'bottom';\n }\n return true;\n };\n}\n\nfunction outOfBounds(x, y, textWidth, textHeight, width, height) {\n let r = textWidth / 2;\n return x - r < 0 || x + r > width || y - (r = textHeight / 2) < 0 || y + r > height;\n}\nfunction collision($, x, y, textHeight, textWidth, h, bm0, bm1) {\n const w = textWidth * h / (textHeight * 2),\n x1 = $(x - w),\n x2 = $(x + w),\n y1 = $(y - (h = h / 2)),\n y2 = $(y + h);\n return bm0.outOfBounds(x1, y1, x2, y2) || bm0.getRange(x1, y1, x2, y2) || bm1 && bm1.getRange(x1, y1, x2, y2);\n}\n\nfunction placeAreaLabelReducedSearch ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n // where labels have been placed\n bm1 = bitmaps[1]; // area outlines\n\n function tryLabel(_x, _y, maxSize, textWidth, textHeight) {\n const x = $.invert(_x),\n y = $.invert(_y);\n let lo = maxSize,\n hi = height,\n mid;\n if (!outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, lo, bm0, bm1) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n // if the label fits at the current sample point,\n // perform binary search to find the largest font size that fits\n while (hi - lo >= 1) {\n mid = (lo + hi) / 2;\n if (collision($, x, y, textHeight, textWidth, mid, bm0, bm1)) {\n hi = mid;\n } else {\n lo = mid;\n }\n }\n // place label if current lower bound exceeds prior max font size\n if (lo > maxSize) {\n return [x, y, lo, true];\n }\n }\n }\n\n // try to place a label within an input area mark\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text); // label height\n\n let maxSize = avoidBaseMark ? textHeight : 0,\n labelPlaced = false,\n labelPlaced2 = false,\n maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n _x,\n _y,\n _x1,\n _xMid,\n _x2,\n _y1,\n _yMid,\n _y2,\n areaWidth,\n result,\n swapTmp;\n\n // for each area sample point\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n if (x1 > x2) {\n swapTmp = x1;\n x1 = x2;\n x2 = swapTmp;\n }\n if (y1 > y2) {\n swapTmp = y1;\n y1 = y2;\n y2 = swapTmp;\n }\n _x1 = $(x1);\n _x2 = $(x2);\n _xMid = ~~((_x1 + _x2) / 2);\n _y1 = $(y1);\n _y2 = $(y2);\n _yMid = ~~((_y1 + _y2) / 2);\n\n // search along the line from mid point between the 2 border to lower border\n for (_x = _xMid; _x >= _x1; --_x) {\n for (_y = _yMid; _y >= _y1; --_y) {\n result = tryLabel(_x, _y, maxSize, textWidth, textHeight);\n if (result) {\n [d.x, d.y, maxSize, labelPlaced] = result;\n }\n }\n }\n\n // search along the line from mid point between the 2 border to upper border\n for (_x = _xMid; _x <= _x2; ++_x) {\n for (_y = _yMid; _y <= _y2; ++_y) {\n result = tryLabel(_x, _y, maxSize, textWidth, textHeight);\n if (result) {\n [d.x, d.y, maxSize, labelPlaced] = result;\n }\n }\n }\n\n // place label at slice center if not placed through other means\n // and if we're not avoiding overlap with other areas\n if (!labelPlaced && !avoidBaseMark) {\n // one span is zero, hence we can add\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2;\n\n // place label if it fits and improves the max area width\n if (areaWidth >= maxAreaWidth && !outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n labelPlaced2 = true;\n }\n }\n }\n\n // record current label placement information, update label bitmap\n if (labelPlaced || labelPlaced2) {\n x = textWidth / 2;\n y = textHeight / 2;\n bm0.setRange($(d.x - x), $(d.y - y), $(d.x + x), $(d.y + y));\n d.align = 'center';\n d.baseline = 'middle';\n return true;\n } else {\n return false;\n }\n };\n}\n\n// pixel direction offsets for flood fill search\nconst X_DIR = [-1, -1, 1, 1];\nconst Y_DIR = [-1, 1, -1, 1];\nfunction placeAreaLabelFloodFill ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n // where labels have been placed\n bm1 = bitmaps[1],\n // area outlines\n bm2 = $.bitmap(); // flood-fill visitations\n\n // try to place a label within an input area mark\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text),\n // label height\n stack = []; // flood fill stack\n\n let maxSize = avoidBaseMark ? textHeight : 0,\n labelPlaced = false,\n labelPlaced2 = false,\n maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n _x,\n _y,\n lo,\n hi,\n mid,\n areaWidth;\n\n // for each area sample point\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n\n // add scaled center point to stack\n stack.push([$((x1 + x2) / 2), $((y1 + y2) / 2)]);\n\n // perform flood fill, visit points\n while (stack.length) {\n [_x, _y] = stack.pop();\n\n // exit if point already marked\n if (bm0.get(_x, _y) || bm1.get(_x, _y) || bm2.get(_x, _y)) continue;\n\n // mark point in flood fill bitmap\n // add search points for all (in bound) directions\n bm2.set(_x, _y);\n for (let j = 0; j < 4; ++j) {\n x = _x + X_DIR[j];\n y = _y + Y_DIR[j];\n if (!bm2.outOfBounds(x, y, x, y)) stack.push([x, y]);\n }\n\n // unscale point back to x, y space\n x = $.invert(_x);\n y = $.invert(_y);\n lo = maxSize;\n hi = height; // TODO: make this bound smaller\n\n if (!outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, lo, bm0, bm1) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n // if the label fits at the current sample point,\n // perform binary search to find the largest font size that fits\n while (hi - lo >= 1) {\n mid = (lo + hi) / 2;\n if (collision($, x, y, textHeight, textWidth, mid, bm0, bm1)) {\n hi = mid;\n } else {\n lo = mid;\n }\n }\n // place label if current lower bound exceeds prior max font size\n if (lo > maxSize) {\n d.x = x;\n d.y = y;\n maxSize = lo;\n labelPlaced = true;\n }\n }\n }\n\n // place label at slice center if not placed through other means\n // and if we're not avoiding overlap with other areas\n if (!labelPlaced && !avoidBaseMark) {\n // one span is zero, hence we can add\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2;\n\n // place label if it fits and improves the max area width\n if (areaWidth >= maxAreaWidth && !outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n labelPlaced2 = true;\n }\n }\n }\n\n // record current label placement information, update label bitmap\n if (labelPlaced || labelPlaced2) {\n x = textWidth / 2;\n y = textHeight / 2;\n bm0.setRange($(d.x - x), $(d.y - y), $(d.x + x), $(d.y + y));\n d.align = 'center';\n d.baseline = 'middle';\n return true;\n } else {\n return false;\n }\n };\n}\n\nconst Aligns = ['right', 'center', 'left'],\n Baselines = ['bottom', 'middle', 'top'];\nfunction placeMarkLabel ($, bitmaps, anchors, offsets) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n bm1 = bitmaps[1],\n n = offsets.length;\n return function (d) {\n const boundary = d.boundary,\n textHeight = d.datum.fontSize;\n\n // can not be placed if the mark is not visible in the graph bound\n if (boundary[2] < 0 || boundary[5] < 0 || boundary[0] > width || boundary[3] > height) {\n return false;\n }\n let textWidth = d.textWidth ?? 0,\n dx,\n dy,\n isInside,\n sizeFactor,\n insideFactor,\n x1,\n x2,\n y1,\n y2,\n xc,\n yc,\n _x1,\n _x2,\n _y1,\n _y2;\n\n // for each anchor and offset\n for (let i = 0; i < n; ++i) {\n dx = (anchors[i] & 0x3) - 1;\n dy = (anchors[i] >>> 0x2 & 0x3) - 1;\n isInside = dx === 0 && dy === 0 || offsets[i] < 0;\n sizeFactor = dx && dy ? Math.SQRT1_2 : 1;\n insideFactor = offsets[i] < 0 ? -1 : 1;\n x1 = boundary[1 + dx] + offsets[i] * dx * sizeFactor;\n yc = boundary[4 + dy] + insideFactor * textHeight * dy / 2 + offsets[i] * dy * sizeFactor;\n y1 = yc - textHeight / 2;\n y2 = yc + textHeight / 2;\n _x1 = $(x1);\n _y1 = $(y1);\n _y2 = $(y2);\n if (!textWidth) {\n // to avoid finding width of text label,\n if (!test(_x1, _x1, _y1, _y2, bm0, bm1, x1, x1, y1, y2, boundary, isInside)) {\n // skip this anchor/offset option if we fail to place a label with 1px width\n continue;\n } else {\n // Otherwise, find the label width\n textWidth = textMetrics.width(d.datum, d.datum.text);\n }\n }\n xc = x1 + insideFactor * textWidth * dx / 2;\n x1 = xc - textWidth / 2;\n x2 = xc + textWidth / 2;\n _x1 = $(x1);\n _x2 = $(x2);\n if (test(_x1, _x2, _y1, _y2, bm0, bm1, x1, x2, y1, y2, boundary, isInside)) {\n // place label if the position is placeable\n d.x = !dx ? xc : dx * insideFactor < 0 ? x2 : x1;\n d.y = !dy ? yc : dy * insideFactor < 0 ? y2 : y1;\n d.align = Aligns[dx * insideFactor + 1];\n d.baseline = Baselines[dy * insideFactor + 1];\n bm0.setRange(_x1, _y1, _x2, _y2);\n return true;\n }\n }\n return false;\n };\n}\n\n// Test if a label with the given dimensions can be added without overlap\nfunction test(_x1, _x2, _y1, _y2, bm0, bm1, x1, x2, y1, y2, boundary, isInside) {\n return !(bm0.outOfBounds(_x1, _y1, _x2, _y2) || (isInside && bm1 || bm0).getRange(_x1, _y1, _x2, _y2));\n}\n\n// 8-bit representation of anchors\nconst TOP = 0x0,\n MIDDLE = 0x4,\n BOTTOM = 0x8,\n LEFT = 0x0,\n CENTER = 0x1,\n RIGHT = 0x2;\n\n// Mapping from text anchor to number representation\nconst anchorCode = {\n 'top-left': TOP + LEFT,\n 'top': TOP + CENTER,\n 'top-right': TOP + RIGHT,\n 'left': MIDDLE + LEFT,\n 'middle': MIDDLE + CENTER,\n 'right': MIDDLE + RIGHT,\n 'bottom-left': BOTTOM + LEFT,\n 'bottom': BOTTOM + CENTER,\n 'bottom-right': BOTTOM + RIGHT\n};\nconst placeAreaLabel = {\n 'naive': placeAreaLabelNaive,\n 'reduced-search': placeAreaLabelReducedSearch,\n 'floodfill': placeAreaLabelFloodFill\n};\nfunction labelLayout (texts, size, compare, offset, anchor, avoidMarks, avoidBaseMark, lineAnchor, markIndex, padding, method) {\n // early exit for empty data\n if (!texts.length) return texts;\n const positions = Math.max(offset.length, anchor.length),\n offsets = getOffsets(offset, positions),\n anchors = getAnchors(anchor, positions),\n marktype = markType(texts[0].datum),\n grouptype = marktype === 'group' && texts[0].datum.items[markIndex].marktype,\n isGroupArea = grouptype === 'area',\n boundary = markBoundary(marktype, grouptype, lineAnchor, markIndex),\n infPadding = padding === null || padding === Infinity,\n isNaiveGroupArea = isGroupArea && method === 'naive';\n let maxTextWidth = -1,\n maxTextHeight = -1;\n\n // prepare text mark data for placing\n const data = texts.map(d => {\n const textWidth = infPadding ? textMetrics.width(d, d.text) : undefined;\n maxTextWidth = Math.max(maxTextWidth, textWidth);\n maxTextHeight = Math.max(maxTextHeight, d.fontSize);\n return {\n datum: d,\n opacity: 0,\n x: undefined,\n y: undefined,\n align: undefined,\n baseline: undefined,\n boundary: boundary(d),\n textWidth\n };\n });\n padding = padding === null || padding === Infinity ? Math.max(maxTextWidth, maxTextHeight) + Math.max(...offset) : padding;\n const $ = scaler(size[0], size[1], padding);\n let bitmaps;\n if (!isNaiveGroupArea) {\n // sort labels in priority order, if comparator is provided\n if (compare) {\n data.sort((a, b) => compare(a.datum, b.datum));\n }\n\n // flag indicating if label can be placed inside its base mark\n let labelInside = false;\n for (let i = 0; i < anchors.length && !labelInside; ++i) {\n // label inside if anchor is at center\n // label inside if offset to be inside the mark bound\n labelInside = anchors[i] === 0x5 || offsets[i] < 0;\n }\n\n // extract data information from base mark when base mark is to be avoided\n // base mark is implicitly avoided if it is a group area\n const baseMark = (marktype && avoidBaseMark || isGroupArea) && texts.map(d => d.datum);\n\n // generate bitmaps for layout calculation\n bitmaps = avoidMarks.length || baseMark ? markBitmaps($, baseMark || [], avoidMarks, labelInside, isGroupArea) : baseBitmaps($, avoidBaseMark && data);\n }\n\n // generate label placement function\n const place = isGroupArea ? placeAreaLabel[method]($, bitmaps, avoidBaseMark, markIndex) : placeMarkLabel($, bitmaps, anchors, offsets);\n\n // place all labels\n data.forEach(d => d.opacity = +place(d));\n return data;\n}\nfunction getOffsets(_, count) {\n const offsets = new Float64Array(count),\n n = _.length;\n for (let i = 0; i < n; ++i) offsets[i] = _[i] || 0;\n for (let i = n; i < count; ++i) offsets[i] = offsets[n - 1];\n return offsets;\n}\nfunction getAnchors(_, count) {\n const anchors = new Int8Array(count),\n n = _.length;\n for (let i = 0; i < n; ++i) anchors[i] |= anchorCode[_[i]];\n for (let i = n; i < count; ++i) anchors[i] = anchors[n - 1];\n return anchors;\n}\nfunction markType(item) {\n return item && item.mark && item.mark.marktype;\n}\n\n/**\n * Factory function for function for getting base mark boundary, depending\n * on mark and group type. When mark type is undefined, line or area: boundary\n * is the coordinate of each data point. When base mark is grouped line,\n * boundary is either at the start or end of the line depending on the\n * value of lineAnchor. Otherwise, use bounds of base mark.\n */\nfunction markBoundary(marktype, grouptype, lineAnchor, markIndex) {\n const xy = d => [d.x, d.x, d.x, d.y, d.y, d.y];\n if (!marktype) {\n return xy; // no reactive geometry\n } else if (marktype === 'line' || marktype === 'area') {\n return d => xy(d.datum);\n } else if (grouptype === 'line') {\n return d => {\n const items = d.datum.items[markIndex].items;\n return xy(items.length ? items[lineAnchor === 'start' ? 0 : items.length - 1] : {\n x: NaN,\n y: NaN\n });\n };\n } else {\n return d => {\n const b = d.datum.bounds;\n return [b.x1, (b.x1 + b.x2) / 2, b.x2, b.y1, (b.y1 + b.y2) / 2, b.y2];\n };\n }\n}\n\nconst Output = ['x', 'y', 'opacity', 'align', 'baseline'];\nconst Anchors = ['top-left', 'left', 'bottom-left', 'top', 'bottom', 'top-right', 'right', 'bottom-right'];\n\n/**\n * Compute text label layout to annotate marks.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The size of the layout, provided as a [width, height] array.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting label data in priority order.\n * @param {Array} [params.anchor] - Label anchor points relative to the base mark bounding box.\n * The available options are 'top-left', 'left', 'bottom-left', 'top',\n * 'bottom', 'top-right', 'right', 'bottom-right', 'middle'.\n * @param {Array} [params.offset] - Label offsets (in pixels) from the base mark bounding box.\n * This parameter is parallel to the list of anchor points.\n * @param {number | null} [params.padding=0] - The amount (in pixels) that a label may exceed the layout size.\n * If this parameter is null, a label may exceed the layout size without any boundary.\n * @param {string} [params.lineAnchor='end'] - For group line mark labels only, indicates the anchor\n * position for labels. One of 'start' or 'end'.\n * @param {string} [params.markIndex=0] - For group mark labels only, an index indicating\n * which mark within the group should be labeled.\n * @param {Array} [params.avoidMarks] - A list of additional mark names for which the label\n * layout should avoid overlap.\n * @param {boolean} [params.avoidBaseMark=true] - Boolean flag indicating if labels should avoid\n * overlap with the underlying base mark being labeled.\n * @param {string} [params.method='naive'] - For area make labels only, a method for\n * place labels. One of 'naive', 'reduced-search', or 'floodfill'.\n * @param {Array} [params.as] - The output fields written by the transform.\n * The default is ['x', 'y', 'opacity', 'align', 'baseline'].\n */\nfunction Label(params) {\n Transform.call(this, null, params);\n}\nLabel.Definition = {\n type: 'Label',\n metadata: {\n modifies: true\n },\n params: [{\n name: 'size',\n type: 'number',\n array: true,\n length: 2,\n required: true\n }, {\n name: 'sort',\n type: 'compare'\n }, {\n name: 'anchor',\n type: 'string',\n array: true,\n default: Anchors\n }, {\n name: 'offset',\n type: 'number',\n array: true,\n default: [1]\n }, {\n name: 'padding',\n type: 'number',\n default: 0,\n null: true\n }, {\n name: 'lineAnchor',\n type: 'string',\n values: ['start', 'end'],\n default: 'end'\n }, {\n name: 'markIndex',\n type: 'number',\n default: 0\n }, {\n name: 'avoidBaseMark',\n type: 'boolean',\n default: true\n }, {\n name: 'avoidMarks',\n type: 'data',\n array: true\n }, {\n name: 'method',\n type: 'string',\n default: 'naive'\n }, {\n name: 'as',\n type: 'string',\n array: true,\n length: Output.length,\n default: Output\n }]\n};\ninherits(Label, Transform, {\n transform(_, pulse) {\n function modp(param) {\n const p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n const mod = _.modified();\n if (!(mod || pulse.changed(pulse.ADD_REM) || modp('sort'))) return;\n if (!_.size || _.size.length !== 2) {\n error('Size parameter should be specified as a [width, height] array.');\n }\n const as = _.as || Output;\n\n // run label layout\n labelLayout(pulse.materialize(pulse.SOURCE).source || [], _.size, _.sort, array(_.offset == null ? 1 : _.offset), array(_.anchor || Anchors), _.avoidMarks || [], _.avoidBaseMark !== false, _.lineAnchor || 'end', _.markIndex || 0, _.padding === undefined ? 0 : _.padding, _.method || 'naive').forEach(l => {\n // write layout results to data stream\n const t = l.datum;\n t[as[0]] = l.x;\n t[as[1]] = l.y;\n t[as[2]] = l.opacity;\n t[as[3]] = l.align;\n t[as[4]] = l.baseline;\n });\n return pulse.reflow(mod).modifies(as);\n }\n});\n\nexport { Label as label };\n","import { regressionLoess, sampleCurve, regressionConstant, regressionLinear, regressionLog, regressionExp, regressionPow, regressionQuad, regressionPoly } from 'vega-statistics';\nimport { Transform, ingest } from 'vega-dataflow';\nimport { inherits, accessorName, hasOwnProperty, error, extent } from 'vega-util';\n\nfunction partition (data, groupby) {\n var groups = [],\n get = function (f) {\n return f(t);\n },\n map,\n i,\n n,\n t,\n k,\n g;\n\n // partition data points into stack groups\n if (groupby == null) {\n groups.push(data);\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n g.push(t);\n }\n }\n return groups;\n}\n\n/**\n * Compute locally-weighted regression fits for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.x - An accessor for the predictor data field.\n * @param {function(object): *} params.y - An accessor for the predicted data field.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {number} [params.bandwidth=0.3] - The loess bandwidth.\n */\nfunction Loess(params) {\n Transform.call(this, null, params);\n}\nLoess.Definition = {\n 'type': 'Loess',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0.3\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Loess, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n m = names.length,\n as = _.as || [accessorName(_.x), accessorName(_.y)],\n values = [];\n groups.forEach(g => {\n regressionLoess(g, _.x, _.y, _.bandwidth || 0.3).forEach(p => {\n const t = {};\n for (let i = 0; i < m; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = p[0];\n t[as[1]] = p[1];\n values.push(ingest(t));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\n\nconst Methods = {\n constant: regressionConstant,\n linear: regressionLinear,\n log: regressionLog,\n exp: regressionExp,\n pow: regressionPow,\n quad: regressionQuad,\n poly: regressionPoly\n};\nconst degreesOfFreedom = (method, order) => method === 'poly' ? order : method === 'quad' ? 2 : 1;\n\n/**\n * Compute regression fits for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.x - An accessor for the predictor data field.\n * @param {function(object): *} params.y - An accessor for the predicted data field.\n * @param {string} [params.method='linear'] - The regression method to apply.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {Array} [params.extent] - The domain extent over which to plot the regression line.\n * @param {number} [params.order=3] - The polynomial order. Only applies to the 'poly' method.\n */\nfunction Regression(params) {\n Transform.call(this, null, params);\n}\nRegression.Definition = {\n 'type': 'Regression',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'method',\n 'type': 'string',\n 'default': 'linear',\n 'values': Object.keys(Methods)\n }, {\n 'name': 'order',\n 'type': 'number',\n 'default': 3\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'params',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Regression, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n method = _.method || 'linear',\n order = _.order == null ? 3 : _.order,\n dof = degreesOfFreedom(method, order),\n as = _.as || [accessorName(_.x), accessorName(_.y)],\n fit = Methods[method],\n values = [];\n let domain = _.extent;\n if (!hasOwnProperty(Methods, method)) {\n error('Invalid regression method: ' + method);\n }\n if (domain != null) {\n if (method === 'log' && domain[0] <= 0) {\n pulse.dataflow.warn('Ignoring extent with values <= 0 for log regression.');\n domain = null;\n }\n }\n groups.forEach(g => {\n const n = g.length;\n if (n <= dof) {\n pulse.dataflow.warn('Skipping regression with more parameters than data points.');\n return;\n }\n const model = fit(g, _.x, _.y, order);\n if (_.params) {\n // if parameter vectors requested return those\n values.push(ingest({\n keys: g.dims,\n coef: model.coef,\n rSquared: model.rSquared\n }));\n return;\n }\n const dom = domain || extent(g, _.x),\n add = p => {\n const t = {};\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n t[as[0]] = p[0];\n t[as[1]] = p[1];\n values.push(ingest(t));\n };\n if (method === 'linear' || method === 'constant') {\n // for linear or constant regression we only need the end points\n dom.forEach(x => add([x, model.predict(x)]));\n } else {\n // otherwise return trend line sample points\n sampleCurve(model.predict, dom, 25, 200).forEach(add);\n }\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n return out;\n }\n});\n\nexport { Loess as loess, Regression as regression };\n","export const epsilon = 1.1102230246251565e-16;\nexport const splitter = 134217729;\nexport const resulterrbound = (3 + 8 * epsilon) * epsilon;\n\n// fast_expansion_sum_zeroelim routine from oritinal code\nexport function sum(elen, e, flen, f, h) {\n let Q, Qnew, hh, bvirt;\n let enow = e[0];\n let fnow = f[0];\n let eindex = 0;\n let findex = 0;\n if ((fnow > enow) === (fnow > -enow)) {\n Q = enow;\n enow = e[++eindex];\n } else {\n Q = fnow;\n fnow = f[++findex];\n }\n let hindex = 0;\n if (eindex < elen && findex < flen) {\n if ((fnow > enow) === (fnow > -enow)) {\n Qnew = enow + Q;\n hh = Q - (Qnew - enow);\n enow = e[++eindex];\n } else {\n Qnew = fnow + Q;\n hh = Q - (Qnew - fnow);\n fnow = f[++findex];\n }\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n while (eindex < elen && findex < flen) {\n if ((fnow > enow) === (fnow > -enow)) {\n Qnew = Q + enow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (enow - bvirt);\n enow = e[++eindex];\n } else {\n Qnew = Q + fnow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n fnow = f[++findex];\n }\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n }\n while (eindex < elen) {\n Qnew = Q + enow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (enow - bvirt);\n enow = e[++eindex];\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n while (findex < flen) {\n Qnew = Q + fnow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n fnow = f[++findex];\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n if (Q !== 0 || hindex === 0) {\n h[hindex++] = Q;\n }\n return hindex;\n}\n\nexport function sum_three(alen, a, blen, b, clen, c, tmp, out) {\n return sum(sum(alen, a, blen, b, tmp), tmp, clen, c, out);\n}\n\n// scale_expansion_zeroelim routine from oritinal code\nexport function scale(elen, e, b, h) {\n let Q, sum, hh, product1, product0;\n let bvirt, c, ahi, alo, bhi, blo;\n\n c = splitter * b;\n bhi = c - (c - b);\n blo = b - bhi;\n let enow = e[0];\n Q = enow * b;\n c = splitter * enow;\n ahi = c - (c - enow);\n alo = enow - ahi;\n hh = alo * blo - (Q - ahi * bhi - alo * bhi - ahi * blo);\n let hindex = 0;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n for (let i = 1; i < elen; i++) {\n enow = e[i];\n product1 = enow * b;\n c = splitter * enow;\n ahi = c - (c - enow);\n alo = enow - ahi;\n product0 = alo * blo - (product1 - ahi * bhi - alo * bhi - ahi * blo);\n sum = Q + product0;\n bvirt = sum - Q;\n hh = Q - (sum - bvirt) + (product0 - bvirt);\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n Q = product1 + sum;\n hh = sum - (Q - product1);\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n if (Q !== 0 || hindex === 0) {\n h[hindex++] = Q;\n }\n return hindex;\n}\n\nexport function negate(elen, e) {\n for (let i = 0; i < elen; i++) e[i] = -e[i];\n return elen;\n}\n\nexport function estimate(elen, e) {\n let Q = e[0];\n for (let i = 1; i < elen; i++) Q += e[i];\n return Q;\n}\n\nexport function vec(n) {\n return new Float64Array(n);\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum} from './util.js';\n\nconst ccwerrboundA = (3 + 16 * epsilon) * epsilon;\nconst ccwerrboundB = (2 + 12 * epsilon) * epsilon;\nconst ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon;\n\nconst B = vec(4);\nconst C1 = vec(8);\nconst C2 = vec(12);\nconst D = vec(16);\nconst u = vec(4);\n\nfunction orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {\n let acxtail, acytail, bcxtail, bcytail;\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n const acx = ax - cx;\n const bcx = bx - cx;\n const acy = ay - cy;\n const bcy = by - cy;\n\n s1 = acx * bcy;\n c = splitter * acx;\n ahi = c - (c - acx);\n alo = acx - ahi;\n c = splitter * bcy;\n bhi = c - (c - bcy);\n blo = bcy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acy * bcx;\n c = splitter * acy;\n ahi = c - (c - acy);\n alo = acy - ahi;\n c = splitter * bcx;\n bhi = c - (c - bcx);\n blo = bcx - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n B[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n B[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n B[2] = _j - (u3 - bvirt) + (_i - bvirt);\n B[3] = u3;\n\n let det = estimate(4, B);\n let errbound = ccwerrboundB * detsum;\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n bvirt = ax - acx;\n acxtail = ax - (acx + bvirt) + (bvirt - cx);\n bvirt = bx - bcx;\n bcxtail = bx - (bcx + bvirt) + (bvirt - cx);\n bvirt = ay - acy;\n acytail = ay - (acy + bvirt) + (bvirt - cy);\n bvirt = by - bcy;\n bcytail = by - (bcy + bvirt) + (bvirt - cy);\n\n if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {\n return det;\n }\n\n errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);\n det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);\n if (det >= errbound || -det >= errbound) return det;\n\n s1 = acxtail * bcy;\n c = splitter * acxtail;\n ahi = c - (c - acxtail);\n alo = acxtail - ahi;\n c = splitter * bcy;\n bhi = c - (c - bcy);\n blo = bcy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acytail * bcx;\n c = splitter * acytail;\n ahi = c - (c - acytail);\n alo = acytail - ahi;\n c = splitter * bcx;\n bhi = c - (c - bcx);\n blo = bcx - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const C1len = sum(4, B, 4, u, C1);\n\n s1 = acx * bcytail;\n c = splitter * acx;\n ahi = c - (c - acx);\n alo = acx - ahi;\n c = splitter * bcytail;\n bhi = c - (c - bcytail);\n blo = bcytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acy * bcxtail;\n c = splitter * acy;\n ahi = c - (c - acy);\n alo = acy - ahi;\n c = splitter * bcxtail;\n bhi = c - (c - bcxtail);\n blo = bcxtail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const C2len = sum(C1len, C1, 4, u, C2);\n\n s1 = acxtail * bcytail;\n c = splitter * acxtail;\n ahi = c - (c - acxtail);\n alo = acxtail - ahi;\n c = splitter * bcytail;\n bhi = c - (c - bcytail);\n blo = bcytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acytail * bcxtail;\n c = splitter * acytail;\n ahi = c - (c - acytail);\n alo = acytail - ahi;\n c = splitter * bcxtail;\n bhi = c - (c - bcxtail);\n blo = bcxtail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const Dlen = sum(C2len, C2, 4, u, D);\n\n return D[Dlen - 1];\n}\n\nexport function orient2d(ax, ay, bx, by, cx, cy) {\n const detleft = (ay - cy) * (bx - cx);\n const detright = (ax - cx) * (by - cy);\n const det = detleft - detright;\n\n if (detleft === 0 || detright === 0 || (detleft > 0) !== (detright > 0)) return det;\n\n const detsum = Math.abs(detleft + detright);\n if (Math.abs(det) >= ccwerrboundA * detsum) return det;\n\n return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);\n}\n\nexport function orient2dfast(ax, ay, bx, by, cx, cy) {\n return (ay - cy) * (bx - cx) - (ax - cx) * (by - cy);\n}\n","\nconst EPSILON = Math.pow(2, -52);\nconst EDGE_STACK = new Uint32Array(512);\n\nimport {orient2d} from 'robust-predicates';\n\nexport default class Delaunator {\n\n static from(points, getX = defaultGetX, getY = defaultGetY) {\n const n = points.length;\n const coords = new Float64Array(n * 2);\n\n for (let i = 0; i < n; i++) {\n const p = points[i];\n coords[2 * i] = getX(p);\n coords[2 * i + 1] = getY(p);\n }\n\n return new Delaunator(coords);\n }\n\n constructor(coords) {\n const n = coords.length >> 1;\n if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.');\n\n this.coords = coords;\n\n // arrays that will store the triangulation graph\n const maxTriangles = Math.max(2 * n - 5, 0);\n this._triangles = new Uint32Array(maxTriangles * 3);\n this._halfedges = new Int32Array(maxTriangles * 3);\n\n // temporary arrays for tracking the edges of the advancing convex hull\n this._hashSize = Math.ceil(Math.sqrt(n));\n this._hullPrev = new Uint32Array(n); // edge to prev edge\n this._hullNext = new Uint32Array(n); // edge to next edge\n this._hullTri = new Uint32Array(n); // edge to adjacent triangle\n this._hullHash = new Int32Array(this._hashSize).fill(-1); // angular edge hash\n\n // temporary arrays for sorting points\n this._ids = new Uint32Array(n);\n this._dists = new Float64Array(n);\n\n this.update();\n }\n\n update() {\n const {coords, _hullPrev: hullPrev, _hullNext: hullNext, _hullTri: hullTri, _hullHash: hullHash} = this;\n const n = coords.length >> 1;\n\n // populate an array of point indices; calculate input data bbox\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n for (let i = 0; i < n; i++) {\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n this._ids[i] = i;\n }\n const cx = (minX + maxX) / 2;\n const cy = (minY + maxY) / 2;\n\n let minDist = Infinity;\n let i0, i1, i2;\n\n // pick a seed point close to the center\n for (let i = 0; i < n; i++) {\n const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]);\n if (d < minDist) {\n i0 = i;\n minDist = d;\n }\n }\n const i0x = coords[2 * i0];\n const i0y = coords[2 * i0 + 1];\n\n minDist = Infinity;\n\n // find the point closest to the seed\n for (let i = 0; i < n; i++) {\n if (i === i0) continue;\n const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]);\n if (d < minDist && d > 0) {\n i1 = i;\n minDist = d;\n }\n }\n let i1x = coords[2 * i1];\n let i1y = coords[2 * i1 + 1];\n\n let minRadius = Infinity;\n\n // find the third point which forms the smallest circumcircle with the first two\n for (let i = 0; i < n; i++) {\n if (i === i0 || i === i1) continue;\n const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]);\n if (r < minRadius) {\n i2 = i;\n minRadius = r;\n }\n }\n let i2x = coords[2 * i2];\n let i2y = coords[2 * i2 + 1];\n\n if (minRadius === Infinity) {\n // order collinear points by dx (or dy if all x are identical)\n // and return the list as a hull\n for (let i = 0; i < n; i++) {\n this._dists[i] = (coords[2 * i] - coords[0]) || (coords[2 * i + 1] - coords[1]);\n }\n quicksort(this._ids, this._dists, 0, n - 1);\n const hull = new Uint32Array(n);\n let j = 0;\n for (let i = 0, d0 = -Infinity; i < n; i++) {\n const id = this._ids[i];\n if (this._dists[id] > d0) {\n hull[j++] = id;\n d0 = this._dists[id];\n }\n }\n this.hull = hull.subarray(0, j);\n this.triangles = new Uint32Array(0);\n this.halfedges = new Uint32Array(0);\n return;\n }\n\n // swap the order of the seed points for counter-clockwise orientation\n if (orient2d(i0x, i0y, i1x, i1y, i2x, i2y) < 0) {\n const i = i1;\n const x = i1x;\n const y = i1y;\n i1 = i2;\n i1x = i2x;\n i1y = i2y;\n i2 = i;\n i2x = x;\n i2y = y;\n }\n\n const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y);\n this._cx = center.x;\n this._cy = center.y;\n\n for (let i = 0; i < n; i++) {\n this._dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y);\n }\n\n // sort the points by distance from the seed triangle circumcenter\n quicksort(this._ids, this._dists, 0, n - 1);\n\n // set up the seed triangle as the starting hull\n this._hullStart = i0;\n let hullSize = 3;\n\n hullNext[i0] = hullPrev[i2] = i1;\n hullNext[i1] = hullPrev[i0] = i2;\n hullNext[i2] = hullPrev[i1] = i0;\n\n hullTri[i0] = 0;\n hullTri[i1] = 1;\n hullTri[i2] = 2;\n\n hullHash.fill(-1);\n hullHash[this._hashKey(i0x, i0y)] = i0;\n hullHash[this._hashKey(i1x, i1y)] = i1;\n hullHash[this._hashKey(i2x, i2y)] = i2;\n\n this.trianglesLen = 0;\n this._addTriangle(i0, i1, i2, -1, -1, -1);\n\n for (let k = 0, xp, yp; k < this._ids.length; k++) {\n const i = this._ids[k];\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n\n // skip near-duplicate points\n if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue;\n xp = x;\n yp = y;\n\n // skip seed triangle points\n if (i === i0 || i === i1 || i === i2) continue;\n\n // find a visible edge on the convex hull using edge hash\n let start = 0;\n for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) {\n start = hullHash[(key + j) % this._hashSize];\n if (start !== -1 && start !== hullNext[start]) break;\n }\n\n start = hullPrev[start];\n let e = start, q;\n while (q = hullNext[e], orient2d(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1]) >= 0) {\n e = q;\n if (e === start) {\n e = -1;\n break;\n }\n }\n if (e === -1) continue; // likely a near-duplicate point; skip it\n\n // add the first triangle from the point\n let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]);\n\n // recursively flip triangles from the point until they satisfy the Delaunay condition\n hullTri[i] = this._legalize(t + 2);\n hullTri[e] = t; // keep track of boundary triangles on the hull\n hullSize++;\n\n // walk forward through the hull, adding more triangles and flipping recursively\n let n = hullNext[e];\n while (q = hullNext[n], orient2d(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1]) < 0) {\n t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]);\n hullTri[i] = this._legalize(t + 2);\n hullNext[n] = n; // mark as removed\n hullSize--;\n n = q;\n }\n\n // walk backward from the other side, adding more triangles and flipping\n if (e === start) {\n while (q = hullPrev[e], orient2d(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1]) < 0) {\n t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]);\n this._legalize(t + 2);\n hullTri[q] = t;\n hullNext[e] = e; // mark as removed\n hullSize--;\n e = q;\n }\n }\n\n // update the hull indices\n this._hullStart = hullPrev[i] = e;\n hullNext[e] = hullPrev[n] = i;\n hullNext[i] = n;\n\n // save the two new edges in the hash table\n hullHash[this._hashKey(x, y)] = i;\n hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e;\n }\n\n this.hull = new Uint32Array(hullSize);\n for (let i = 0, e = this._hullStart; i < hullSize; i++) {\n this.hull[i] = e;\n e = hullNext[e];\n }\n\n // trim typed triangle mesh arrays\n this.triangles = this._triangles.subarray(0, this.trianglesLen);\n this.halfedges = this._halfedges.subarray(0, this.trianglesLen);\n }\n\n _hashKey(x, y) {\n return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize;\n }\n\n _legalize(a) {\n const {_triangles: triangles, _halfedges: halfedges, coords} = this;\n\n let i = 0;\n let ar = 0;\n\n // recursion eliminated with a fixed-size stack\n while (true) {\n const b = halfedges[a];\n\n /* if the pair of triangles doesn't satisfy the Delaunay condition\n * (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n * then do the same check/flip recursively for the new pair of triangles\n *\n * pl pl\n * /||\\ / \\\n * al/ || \\bl al/ \\a\n * / || \\ / \\\n * / a||b \\ flip /___ar___\\\n * p0\\ || /p1 => p0\\---bl---/p1\n * \\ || / \\ /\n * ar\\ || /br b\\ /br\n * \\||/ \\ /\n * pr pr\n */\n const a0 = a - a % 3;\n ar = a0 + (a + 2) % 3;\n\n if (b === -1) { // convex hull edge\n if (i === 0) break;\n a = EDGE_STACK[--i];\n continue;\n }\n\n const b0 = b - b % 3;\n const al = a0 + (a + 1) % 3;\n const bl = b0 + (b + 2) % 3;\n\n const p0 = triangles[ar];\n const pr = triangles[a];\n const pl = triangles[al];\n const p1 = triangles[bl];\n\n const illegal = inCircle(\n coords[2 * p0], coords[2 * p0 + 1],\n coords[2 * pr], coords[2 * pr + 1],\n coords[2 * pl], coords[2 * pl + 1],\n coords[2 * p1], coords[2 * p1 + 1]);\n\n if (illegal) {\n triangles[a] = p1;\n triangles[b] = p0;\n\n const hbl = halfedges[bl];\n\n // edge swapped on the other side of the hull (rare); fix the halfedge reference\n if (hbl === -1) {\n let e = this._hullStart;\n do {\n if (this._hullTri[e] === bl) {\n this._hullTri[e] = a;\n break;\n }\n e = this._hullPrev[e];\n } while (e !== this._hullStart);\n }\n this._link(a, hbl);\n this._link(b, halfedges[ar]);\n this._link(ar, bl);\n\n const br = b0 + (b + 1) % 3;\n\n // don't worry about hitting the cap: it can only happen on extremely degenerate input\n if (i < EDGE_STACK.length) {\n EDGE_STACK[i++] = br;\n }\n } else {\n if (i === 0) break;\n a = EDGE_STACK[--i];\n }\n }\n\n return ar;\n }\n\n _link(a, b) {\n this._halfedges[a] = b;\n if (b !== -1) this._halfedges[b] = a;\n }\n\n // add a new triangle given vertex indices and adjacent half-edge ids\n _addTriangle(i0, i1, i2, a, b, c) {\n const t = this.trianglesLen;\n\n this._triangles[t] = i0;\n this._triangles[t + 1] = i1;\n this._triangles[t + 2] = i2;\n\n this._link(t, a);\n this._link(t + 1, b);\n this._link(t + 2, c);\n\n this.trianglesLen += 3;\n\n return t;\n }\n}\n\n// monotonically increases with real angle, but doesn't need expensive trigonometry\nfunction pseudoAngle(dx, dy) {\n const p = dx / (Math.abs(dx) + Math.abs(dy));\n return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1]\n}\n\nfunction dist(ax, ay, bx, by) {\n const dx = ax - bx;\n const dy = ay - by;\n return dx * dx + dy * dy;\n}\n\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\n const dx = ax - px;\n const dy = ay - py;\n const ex = bx - px;\n const ey = by - py;\n const fx = cx - px;\n const fy = cy - py;\n\n const ap = dx * dx + dy * dy;\n const bp = ex * ex + ey * ey;\n const cp = fx * fx + fy * fy;\n\n return dx * (ey * cp - bp * fy) -\n dy * (ex * cp - bp * fx) +\n ap * (ex * fy - ey * fx) < 0;\n}\n\nfunction circumradius(ax, ay, bx, by, cx, cy) {\n const dx = bx - ax;\n const dy = by - ay;\n const ex = cx - ax;\n const ey = cy - ay;\n\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const d = 0.5 / (dx * ey - dy * ex);\n\n const x = (ey * bl - dy * cl) * d;\n const y = (dx * cl - ex * bl) * d;\n\n return x * x + y * y;\n}\n\nfunction circumcenter(ax, ay, bx, by, cx, cy) {\n const dx = bx - ax;\n const dy = by - ay;\n const ex = cx - ax;\n const ey = cy - ay;\n\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const d = 0.5 / (dx * ey - dy * ex);\n\n const x = ax + (ey * bl - dy * cl) * d;\n const y = ay + (dx * cl - ex * bl) * d;\n\n return {x, y};\n}\n\nfunction quicksort(ids, dists, left, right) {\n if (right - left <= 20) {\n for (let i = left + 1; i <= right; i++) {\n const temp = ids[i];\n const tempDist = dists[temp];\n let j = i - 1;\n while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--];\n ids[j + 1] = temp;\n }\n } else {\n const median = (left + right) >> 1;\n let i = left + 1;\n let j = right;\n swap(ids, median, i);\n if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right);\n if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right);\n if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i);\n\n const temp = ids[i];\n const tempDist = dists[temp];\n while (true) {\n do i++; while (dists[ids[i]] < tempDist);\n do j--; while (dists[ids[j]] > tempDist);\n if (j < i) break;\n swap(ids, i, j);\n }\n ids[left + 1] = ids[j];\n ids[j] = temp;\n\n if (right - i + 1 >= j - left) {\n quicksort(ids, dists, i, right);\n quicksort(ids, dists, left, j - 1);\n } else {\n quicksort(ids, dists, left, j - 1);\n quicksort(ids, dists, i, right);\n }\n }\n}\n\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction defaultGetX(p) {\n return p[0];\n}\nfunction defaultGetY(p) {\n return p[1];\n}\n","const epsilon = 1e-6;\n\nexport default class Path {\n constructor() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n }\n moveTo(x, y) {\n this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n }\n lineTo(x, y) {\n this._ += `L${this._x1 = +x},${this._y1 = +y}`;\n }\n arc(x, y, r) {\n x = +x, y = +y, r = +r;\n const x0 = x + r;\n const y0 = y;\n if (r < 0) throw new Error(\"negative radius\");\n if (this._x1 === null) this._ += `M${x0},${y0}`;\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) this._ += \"L\" + x0 + \",\" + y0;\n if (!r) return;\n this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`;\n }\n rect(x, y, w, h) {\n this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${+w}v${+h}h${-w}Z`;\n }\n value() {\n return this._ || null;\n }\n}\n","export default class Polygon {\n constructor() {\n this._ = [];\n }\n moveTo(x, y) {\n this._.push([x, y]);\n }\n closePath() {\n this._.push(this._[0].slice());\n }\n lineTo(x, y) {\n this._.push([x, y]);\n }\n value() {\n return this._.length ? this._ : null;\n }\n}\n","import Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\n\nexport default class Voronoi {\n constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) {\n if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error(\"invalid bounds\");\n this.delaunay = delaunay;\n this._circumcenters = new Float64Array(delaunay.points.length * 2);\n this.vectors = new Float64Array(delaunay.points.length * 2);\n this.xmax = xmax, this.xmin = xmin;\n this.ymax = ymax, this.ymin = ymin;\n this._init();\n }\n update() {\n this.delaunay.update();\n this._init();\n return this;\n }\n _init() {\n const {delaunay: {points, hull, triangles}, vectors} = this;\n let bx, by; // lazily computed barycenter of the hull\n\n // Compute circumcenters.\n const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2);\n for (let i = 0, j = 0, n = triangles.length, x, y; i < n; i += 3, j += 2) {\n const t1 = triangles[i] * 2;\n const t2 = triangles[i + 1] * 2;\n const t3 = triangles[i + 2] * 2;\n const x1 = points[t1];\n const y1 = points[t1 + 1];\n const x2 = points[t2];\n const y2 = points[t2 + 1];\n const x3 = points[t3];\n const y3 = points[t3 + 1];\n\n const dx = x2 - x1;\n const dy = y2 - y1;\n const ex = x3 - x1;\n const ey = y3 - y1;\n const ab = (dx * ey - dy * ex) * 2;\n\n if (Math.abs(ab) < 1e-9) {\n // For a degenerate triangle, the circumcenter is at the infinity, in a\n // direction orthogonal to the halfedge and away from the “center” of\n // the diagram , defined as the hull’s barycenter.\n if (bx === undefined) {\n bx = by = 0;\n for (const i of hull) bx += points[i * 2], by += points[i * 2 + 1];\n bx /= hull.length, by /= hull.length;\n }\n const a = 1e9 * Math.sign((bx - x1) * ey - (by - y1) * ex);\n x = (x1 + x3) / 2 - a * ey;\n y = (y1 + y3) / 2 + a * ex;\n } else {\n const d = 1 / ab;\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n x = x1 + (ey * bl - dy * cl) * d;\n y = y1 + (dx * cl - ex * bl) * d;\n }\n circumcenters[j] = x;\n circumcenters[j + 1] = y;\n }\n\n // Compute exterior cell rays.\n let h = hull[hull.length - 1];\n let p0, p1 = h * 4;\n let x0, x1 = points[2 * h];\n let y0, y1 = points[2 * h + 1];\n vectors.fill(0);\n for (let i = 0; i < hull.length; ++i) {\n h = hull[i];\n p0 = p1, x0 = x1, y0 = y1;\n p1 = h * 4, x1 = points[2 * h], y1 = points[2 * h + 1];\n vectors[p0 + 2] = vectors[p1] = y0 - y1;\n vectors[p0 + 3] = vectors[p1 + 1] = x1 - x0;\n }\n }\n render(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {delaunay: {halfedges, inedges, hull}, circumcenters, vectors} = this;\n if (hull.length <= 1) return null;\n for (let i = 0, n = halfedges.length; i < n; ++i) {\n const j = halfedges[i];\n if (j < i) continue;\n const ti = Math.floor(i / 3) * 2;\n const tj = Math.floor(j / 3) * 2;\n const xi = circumcenters[ti];\n const yi = circumcenters[ti + 1];\n const xj = circumcenters[tj];\n const yj = circumcenters[tj + 1];\n this._renderSegment(xi, yi, xj, yj, context);\n }\n let h0, h1 = hull[hull.length - 1];\n for (let i = 0; i < hull.length; ++i) {\n h0 = h1, h1 = hull[i];\n const t = Math.floor(inedges[h1] / 3) * 2;\n const x = circumcenters[t];\n const y = circumcenters[t + 1];\n const v = h0 * 4;\n const p = this._project(x, y, vectors[v + 2], vectors[v + 3]);\n if (p) this._renderSegment(x, y, p[0], p[1], context);\n }\n return buffer && buffer.value();\n }\n renderBounds(context) {\n const buffer = context == null ? context = new Path : undefined;\n context.rect(this.xmin, this.ymin, this.xmax - this.xmin, this.ymax - this.ymin);\n return buffer && buffer.value();\n }\n renderCell(i, context) {\n const buffer = context == null ? context = new Path : undefined;\n const points = this._clip(i);\n if (points === null || !points.length) return;\n context.moveTo(points[0], points[1]);\n let n = points.length;\n while (points[0] === points[n-2] && points[1] === points[n-1] && n > 1) n -= 2;\n for (let i = 2; i < n; i += 2) {\n if (points[i] !== points[i-2] || points[i+1] !== points[i-1])\n context.lineTo(points[i], points[i + 1]);\n }\n context.closePath();\n return buffer && buffer.value();\n }\n *cellPolygons() {\n const {delaunay: {points}} = this;\n for (let i = 0, n = points.length / 2; i < n; ++i) {\n const cell = this.cellPolygon(i);\n if (cell) cell.index = i, yield cell;\n }\n }\n cellPolygon(i) {\n const polygon = new Polygon;\n this.renderCell(i, polygon);\n return polygon.value();\n }\n _renderSegment(x0, y0, x1, y1, context) {\n let S;\n const c0 = this._regioncode(x0, y0);\n const c1 = this._regioncode(x1, y1);\n if (c0 === 0 && c1 === 0) {\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n } else if (S = this._clipSegment(x0, y0, x1, y1, c0, c1)) {\n context.moveTo(S[0], S[1]);\n context.lineTo(S[2], S[3]);\n }\n }\n contains(i, x, y) {\n if ((x = +x, x !== x) || (y = +y, y !== y)) return false;\n return this.delaunay._step(i, x, y) === i;\n }\n *neighbors(i) {\n const ci = this._clip(i);\n if (ci) for (const j of this.delaunay.neighbors(i)) {\n const cj = this._clip(j);\n // find the common edge\n if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) {\n for (let aj = 0, lj = cj.length; aj < lj; aj += 2) {\n if (ci[ai] === cj[aj]\n && ci[ai + 1] === cj[aj + 1]\n && ci[(ai + 2) % li] === cj[(aj + lj - 2) % lj]\n && ci[(ai + 3) % li] === cj[(aj + lj - 1) % lj]) {\n yield j;\n break loop;\n }\n }\n }\n }\n }\n _cell(i) {\n const {circumcenters, delaunay: {inedges, halfedges, triangles}} = this;\n const e0 = inedges[i];\n if (e0 === -1) return null; // coincident point\n const points = [];\n let e = e0;\n do {\n const t = Math.floor(e / 3);\n points.push(circumcenters[t * 2], circumcenters[t * 2 + 1]);\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n e = halfedges[e];\n } while (e !== e0 && e !== -1);\n return points;\n }\n _clip(i) {\n // degenerate case (1 valid point: return the box)\n if (i === 0 && this.delaunay.hull.length === 1) {\n return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n }\n const points = this._cell(i);\n if (points === null) return null;\n const {vectors: V} = this;\n const v = i * 4;\n return this._simplify(V[v] || V[v + 1]\n ? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3])\n : this._clipFinite(i, points));\n }\n _clipFinite(i, points) {\n const n = points.length;\n let P = null;\n let x0, y0, x1 = points[n - 2], y1 = points[n - 1];\n let c0, c1 = this._regioncode(x1, y1);\n let e0, e1 = 0;\n for (let j = 0; j < n; j += 2) {\n x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1];\n c0 = c1, c1 = this._regioncode(x1, y1);\n if (c0 === 0 && c1 === 0) {\n e0 = e1, e1 = 0;\n if (P) P.push(x1, y1);\n else P = [x1, y1];\n } else {\n let S, sx0, sy0, sx1, sy1;\n if (c0 === 0) {\n if ((S = this._clipSegment(x0, y0, x1, y1, c0, c1)) === null) continue;\n [sx0, sy0, sx1, sy1] = S;\n } else {\n if ((S = this._clipSegment(x1, y1, x0, y0, c1, c0)) === null) continue;\n [sx1, sy1, sx0, sy0] = S;\n e0 = e1, e1 = this._edgecode(sx0, sy0);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n if (P) P.push(sx0, sy0);\n else P = [sx0, sy0];\n }\n e0 = e1, e1 = this._edgecode(sx1, sy1);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n if (P) P.push(sx1, sy1);\n else P = [sx1, sy1];\n }\n }\n if (P) {\n e0 = e1, e1 = this._edgecode(P[0], P[1]);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n }\n return P;\n }\n _clipSegment(x0, y0, x1, y1, c0, c1) {\n // for more robustness, always consider the segment in the same order\n const flip = c0 < c1;\n if (flip) [x0, y0, x1, y1, c0, c1] = [x1, y1, x0, y0, c1, c0];\n while (true) {\n if (c0 === 0 && c1 === 0) return flip ? [x1, y1, x0, y0] : [x0, y0, x1, y1];\n if (c0 & c1) return null;\n let x, y, c = c0 || c1;\n if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax;\n else if (c & 0b0100) x = x0 + (x1 - x0) * (this.ymin - y0) / (y1 - y0), y = this.ymin;\n else if (c & 0b0010) y = y0 + (y1 - y0) * (this.xmax - x0) / (x1 - x0), x = this.xmax;\n else y = y0 + (y1 - y0) * (this.xmin - x0) / (x1 - x0), x = this.xmin;\n if (c0) x0 = x, y0 = y, c0 = this._regioncode(x0, y0);\n else x1 = x, y1 = y, c1 = this._regioncode(x1, y1);\n }\n }\n _clipInfinite(i, points, vx0, vy0, vxn, vyn) {\n let P = Array.from(points), p;\n if (p = this._project(P[0], P[1], vx0, vy0)) P.unshift(p[0], p[1]);\n if (p = this._project(P[P.length - 2], P[P.length - 1], vxn, vyn)) P.push(p[0], p[1]);\n if (P = this._clipFinite(i, P)) {\n for (let j = 0, n = P.length, c0, c1 = this._edgecode(P[n - 2], P[n - 1]); j < n; j += 2) {\n c0 = c1, c1 = this._edgecode(P[j], P[j + 1]);\n if (c0 && c1) j = this._edge(i, c0, c1, P, j), n = P.length;\n }\n } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n P = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax];\n }\n return P;\n }\n _edge(i, e0, e1, P, j) {\n while (e0 !== e1) {\n let x, y;\n switch (e0) {\n case 0b0101: e0 = 0b0100; continue; // top-left\n case 0b0100: e0 = 0b0110, x = this.xmax, y = this.ymin; break; // top\n case 0b0110: e0 = 0b0010; continue; // top-right\n case 0b0010: e0 = 0b1010, x = this.xmax, y = this.ymax; break; // right\n case 0b1010: e0 = 0b1000; continue; // bottom-right\n case 0b1000: e0 = 0b1001, x = this.xmin, y = this.ymax; break; // bottom\n case 0b1001: e0 = 0b0001; continue; // bottom-left\n case 0b0001: e0 = 0b0101, x = this.xmin, y = this.ymin; break; // left\n }\n // Note: this implicitly checks for out of bounds: if P[j] or P[j+1] are\n // undefined, the conditional statement will be executed.\n if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) {\n P.splice(j, 0, x, y), j += 2;\n }\n }\n return j;\n }\n _project(x0, y0, vx, vy) {\n let t = Infinity, c, x, y;\n if (vy < 0) { // top\n if (y0 <= this.ymin) return null;\n if ((c = (this.ymin - y0) / vy) < t) y = this.ymin, x = x0 + (t = c) * vx;\n } else if (vy > 0) { // bottom\n if (y0 >= this.ymax) return null;\n if ((c = (this.ymax - y0) / vy) < t) y = this.ymax, x = x0 + (t = c) * vx;\n }\n if (vx > 0) { // right\n if (x0 >= this.xmax) return null;\n if ((c = (this.xmax - x0) / vx) < t) x = this.xmax, y = y0 + (t = c) * vy;\n } else if (vx < 0) { // left\n if (x0 <= this.xmin) return null;\n if ((c = (this.xmin - x0) / vx) < t) x = this.xmin, y = y0 + (t = c) * vy;\n }\n return [x, y];\n }\n _edgecode(x, y) {\n return (x === this.xmin ? 0b0001\n : x === this.xmax ? 0b0010 : 0b0000)\n | (y === this.ymin ? 0b0100\n : y === this.ymax ? 0b1000 : 0b0000);\n }\n _regioncode(x, y) {\n return (x < this.xmin ? 0b0001\n : x > this.xmax ? 0b0010 : 0b0000)\n | (y < this.ymin ? 0b0100\n : y > this.ymax ? 0b1000 : 0b0000);\n }\n _simplify(P) {\n if (P && P.length > 4) {\n for (let i = 0; i < P.length; i+= 2) {\n const j = (i + 2) % P.length, k = (i + 4) % P.length;\n if (P[i] === P[j] && P[j] === P[k] || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1]) {\n P.splice(j, 2), i -= 2;\n }\n }\n if (!P.length) P = null;\n }\n return P;\n }\n}\n","import Delaunator from \"delaunator\";\nimport Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\nimport Voronoi from \"./voronoi.js\";\n\nconst tau = 2 * Math.PI, pow = Math.pow;\n\nfunction pointX(p) {\n return p[0];\n}\n\nfunction pointY(p) {\n return p[1];\n}\n\n// A triangulation is collinear if all its triangles have a non-null area\nfunction collinear(d) {\n const {triangles, coords} = d;\n for (let i = 0; i < triangles.length; i += 3) {\n const a = 2 * triangles[i],\n b = 2 * triangles[i + 1],\n c = 2 * triangles[i + 2],\n cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1])\n - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]);\n if (cross > 1e-10) return false;\n }\n return true;\n}\n\nfunction jitter(x, y, r) {\n return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r];\n}\n\nexport default class Delaunay {\n static from(points, fx = pointX, fy = pointY, that) {\n return new Delaunay(\"length\" in points\n ? flatArray(points, fx, fy, that)\n : Float64Array.from(flatIterable(points, fx, fy, that)));\n }\n constructor(points) {\n this._delaunator = new Delaunator(points);\n this.inedges = new Int32Array(points.length / 2);\n this._hullIndex = new Int32Array(points.length / 2);\n this.points = this._delaunator.coords;\n this._init();\n }\n update() {\n this._delaunator.update();\n this._init();\n return this;\n }\n _init() {\n const d = this._delaunator, points = this.points;\n\n // check for collinear\n if (d.hull && d.hull.length > 2 && collinear(d)) {\n this.collinear = Int32Array.from({length: points.length/2}, (_,i) => i)\n .sort((i, j) => points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1]); // for exact neighbors\n const e = this.collinear[0], f = this.collinear[this.collinear.length - 1],\n bounds = [ points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1] ],\n r = 1e-8 * Math.hypot(bounds[3] - bounds[1], bounds[2] - bounds[0]);\n for (let i = 0, n = points.length / 2; i < n; ++i) {\n const p = jitter(points[2 * i], points[2 * i + 1], r);\n points[2 * i] = p[0];\n points[2 * i + 1] = p[1];\n }\n this._delaunator = new Delaunator(points);\n } else {\n delete this.collinear;\n }\n\n const halfedges = this.halfedges = this._delaunator.halfedges;\n const hull = this.hull = this._delaunator.hull;\n const triangles = this.triangles = this._delaunator.triangles;\n const inedges = this.inedges.fill(-1);\n const hullIndex = this._hullIndex.fill(-1);\n\n // Compute an index from each point to an (arbitrary) incoming halfedge\n // Used to give the first neighbor of each point; for this reason,\n // on the hull we give priority to exterior halfedges\n for (let e = 0, n = halfedges.length; e < n; ++e) {\n const p = triangles[e % 3 === 2 ? e - 2 : e + 1];\n if (halfedges[e] === -1 || inedges[p] === -1) inedges[p] = e;\n }\n for (let i = 0, n = hull.length; i < n; ++i) {\n hullIndex[hull[i]] = i;\n }\n\n // degenerate case: 1 or 2 (distinct) points\n if (hull.length <= 2 && hull.length > 0) {\n this.triangles = new Int32Array(3).fill(-1);\n this.halfedges = new Int32Array(3).fill(-1);\n this.triangles[0] = hull[0];\n inedges[hull[0]] = 1;\n if (hull.length === 2) {\n inedges[hull[1]] = 0;\n this.triangles[1] = hull[1];\n this.triangles[2] = hull[1];\n }\n }\n }\n voronoi(bounds) {\n return new Voronoi(this, bounds);\n }\n *neighbors(i) {\n const {inedges, hull, _hullIndex, halfedges, triangles, collinear} = this;\n\n // degenerate case with several collinear points\n if (collinear) {\n const l = collinear.indexOf(i);\n if (l > 0) yield collinear[l - 1];\n if (l < collinear.length - 1) yield collinear[l + 1];\n return;\n }\n\n const e0 = inedges[i];\n if (e0 === -1) return; // coincident point\n let e = e0, p0 = -1;\n do {\n yield p0 = triangles[e];\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) return; // bad triangulation\n e = halfedges[e];\n if (e === -1) {\n const p = hull[(_hullIndex[i] + 1) % hull.length];\n if (p !== p0) yield p;\n return;\n }\n } while (e !== e0);\n }\n find(x, y, i = 0) {\n if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;\n const i0 = i;\n let c;\n while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) i = c;\n return c;\n }\n _step(i, x, y) {\n const {inedges, hull, _hullIndex, halfedges, triangles, points} = this;\n if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1);\n let c = i;\n let dc = pow(x - points[i * 2], 2) + pow(y - points[i * 2 + 1], 2);\n const e0 = inedges[i];\n let e = e0;\n do {\n let t = triangles[e];\n const dt = pow(x - points[t * 2], 2) + pow(y - points[t * 2 + 1], 2);\n if (dt < dc) dc = dt, c = t;\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n e = halfedges[e];\n if (e === -1) {\n e = hull[(_hullIndex[i] + 1) % hull.length];\n if (e !== t) {\n if (pow(x - points[e * 2], 2) + pow(y - points[e * 2 + 1], 2) < dc) return e;\n }\n break;\n }\n } while (e !== e0);\n return c;\n }\n render(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {points, halfedges, triangles} = this;\n for (let i = 0, n = halfedges.length; i < n; ++i) {\n const j = halfedges[i];\n if (j < i) continue;\n const ti = triangles[i] * 2;\n const tj = triangles[j] * 2;\n context.moveTo(points[ti], points[ti + 1]);\n context.lineTo(points[tj], points[tj + 1]);\n }\n this.renderHull(context);\n return buffer && buffer.value();\n }\n renderPoints(context, r) {\n if (r === undefined && (!context || typeof context.moveTo !== \"function\")) r = context, context = null;\n r = r == undefined ? 2 : +r;\n const buffer = context == null ? context = new Path : undefined;\n const {points} = this;\n for (let i = 0, n = points.length; i < n; i += 2) {\n const x = points[i], y = points[i + 1];\n context.moveTo(x + r, y);\n context.arc(x, y, r, 0, tau);\n }\n return buffer && buffer.value();\n }\n renderHull(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {hull, points} = this;\n const h = hull[0] * 2, n = hull.length;\n context.moveTo(points[h], points[h + 1]);\n for (let i = 1; i < n; ++i) {\n const h = 2 * hull[i];\n context.lineTo(points[h], points[h + 1]);\n }\n context.closePath();\n return buffer && buffer.value();\n }\n hullPolygon() {\n const polygon = new Polygon;\n this.renderHull(polygon);\n return polygon.value();\n }\n renderTriangle(i, context) {\n const buffer = context == null ? context = new Path : undefined;\n const {points, triangles} = this;\n const t0 = triangles[i *= 3] * 2;\n const t1 = triangles[i + 1] * 2;\n const t2 = triangles[i + 2] * 2;\n context.moveTo(points[t0], points[t0 + 1]);\n context.lineTo(points[t1], points[t1 + 1]);\n context.lineTo(points[t2], points[t2 + 1]);\n context.closePath();\n return buffer && buffer.value();\n }\n *trianglePolygons() {\n const {triangles} = this;\n for (let i = 0, n = triangles.length / 3; i < n; ++i) {\n yield this.trianglePolygon(i);\n }\n }\n trianglePolygon(i) {\n const polygon = new Polygon;\n this.renderTriangle(i, polygon);\n return polygon.value();\n }\n}\n\nfunction flatArray(points, fx, fy, that) {\n const n = points.length;\n const array = new Float64Array(n * 2);\n for (let i = 0; i < n; ++i) {\n const p = points[i];\n array[i * 2] = fx.call(that, p, i, points);\n array[i * 2 + 1] = fy.call(that, p, i, points);\n }\n return array;\n}\n\nfunction* flatIterable(points, fx, fy, that) {\n let i = 0;\n for (const p of points) {\n yield fx.call(that, p, i, points);\n yield fy.call(that, p, i, points);\n ++i;\n }\n}\n","import { Transform } from 'vega-dataflow';\nimport { inherits } from 'vega-util';\nimport { Delaunay } from 'd3-delaunay';\n\nfunction Voronoi(params) {\n Transform.call(this, null, params);\n}\nVoronoi.Definition = {\n 'type': 'Voronoi',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'extent',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'default': [[-1e5, -1e5], [1e5, 1e5]],\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\nconst defaultExtent = [-1e5, -1e5, 1e5, 1e5];\ninherits(Voronoi, Transform, {\n transform(_, pulse) {\n const as = _.as || 'path',\n data = pulse.source;\n\n // nothing to do if no data\n if (!data || !data.length) return pulse;\n\n // configure and construct voronoi diagram\n let s = _.size;\n s = s ? [0, 0, s[0], s[1]] : (s = _.extent) ? [s[0][0], s[0][1], s[1][0], s[1][1]] : defaultExtent;\n const voronoi = this.value = Delaunay.from(data, _.x, _.y).voronoi(s);\n\n // map polygons to paths\n for (let i = 0, n = data.length; i < n; ++i) {\n const polygon = voronoi.cellPolygon(i);\n data[i][as] = polygon && !isPoint(polygon) ? toPathString(polygon) : null;\n }\n return pulse.reflow(_.modified()).modifies(as);\n }\n});\n\n// suppress duplicated end point vertices\nfunction toPathString(p) {\n const x = p[0][0],\n y = p[0][1];\n let n = p.length - 1;\n for (; p[n][0] === x && p[n][1] === y; --n);\n return 'M' + p.slice(0, n + 1).join('L') + 'Z';\n}\nfunction isPoint(p) {\n return p.length === 2 && p[0][0] === p[1][0] && p[0][1] === p[1][1];\n}\n\nexport { Voronoi as voronoi };\n","import { canvas } from 'vega-canvas';\nimport { Transform } from 'vega-dataflow';\nimport { inherits, error, isFunction, constant, extent } from 'vega-util';\nimport { scale } from 'vega-scale';\nimport { random } from 'vega-statistics';\n\n/*\nCopyright (c) 2013, Jason Davies.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * The name Jason Davies may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\nOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\nADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/\n// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf\n\nvar cloudRadians = Math.PI / 180,\n cw = 1 << 11 >> 5,\n ch = 1 << 11;\nfunction cloud () {\n var size = [256, 256],\n text,\n font,\n fontSize,\n fontStyle,\n fontWeight,\n rotate,\n padding,\n spiral = archimedeanSpiral,\n words = [],\n random = Math.random,\n cloud = {};\n cloud.layout = function () {\n var contextAndRatio = getContext(canvas()),\n board = zeroArray((size[0] >> 5) * size[1]),\n bounds = null,\n n = words.length,\n i = -1,\n tags = [],\n data = words.map(d => ({\n text: text(d),\n font: font(d),\n style: fontStyle(d),\n weight: fontWeight(d),\n rotate: rotate(d),\n size: ~~(fontSize(d) + 1e-14),\n padding: padding(d),\n xoff: 0,\n yoff: 0,\n x1: 0,\n y1: 0,\n x0: 0,\n y0: 0,\n hasText: false,\n sprite: null,\n datum: d\n })).sort((a, b) => b.size - a.size);\n while (++i < n) {\n var d = data[i];\n d.x = size[0] * (random() + .5) >> 1;\n d.y = size[1] * (random() + .5) >> 1;\n cloudSprite(contextAndRatio, d, data, i);\n if (d.hasText && place(board, d, bounds)) {\n tags.push(d);\n if (bounds) cloudBounds(bounds, d);else bounds = [{\n x: d.x + d.x0,\n y: d.y + d.y0\n }, {\n x: d.x + d.x1,\n y: d.y + d.y1\n }];\n // Temporary hack\n d.x -= size[0] >> 1;\n d.y -= size[1] >> 1;\n }\n }\n return tags;\n };\n function getContext(canvas) {\n canvas.width = canvas.height = 1;\n var ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);\n canvas.width = (cw << 5) / ratio;\n canvas.height = ch / ratio;\n var context = canvas.getContext('2d');\n context.fillStyle = context.strokeStyle = 'red';\n context.textAlign = 'center';\n return {\n context: context,\n ratio: ratio\n };\n }\n function place(board, tag, bounds) {\n var startX = tag.x,\n startY = tag.y,\n maxDelta = Math.hypot(size[0], size[1]),\n s = spiral(size),\n dt = random() < .5 ? 1 : -1,\n t = -dt,\n dxdy,\n dx,\n dy;\n while (dxdy = s(t += dt)) {\n dx = ~~dxdy[0];\n dy = ~~dxdy[1];\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;\n tag.x = startX + dx;\n tag.y = startY + dy;\n if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue;\n // TODO only check for collisions within current bounds.\n if (!bounds || !cloudCollide(tag, board, size[0])) {\n if (!bounds || collideRects(tag, bounds)) {\n var sprite = tag.sprite,\n w = tag.width >> 5,\n sw = size[0] >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n board[x + i] |= last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n x += sw;\n }\n tag.sprite = null;\n return true;\n }\n }\n }\n return false;\n }\n cloud.words = function (_) {\n if (arguments.length) {\n words = _;\n return cloud;\n } else {\n return words;\n }\n };\n cloud.size = function (_) {\n if (arguments.length) {\n size = [+_[0], +_[1]];\n return cloud;\n } else {\n return size;\n }\n };\n cloud.font = function (_) {\n if (arguments.length) {\n font = functor(_);\n return cloud;\n } else {\n return font;\n }\n };\n cloud.fontStyle = function (_) {\n if (arguments.length) {\n fontStyle = functor(_);\n return cloud;\n } else {\n return fontStyle;\n }\n };\n cloud.fontWeight = function (_) {\n if (arguments.length) {\n fontWeight = functor(_);\n return cloud;\n } else {\n return fontWeight;\n }\n };\n cloud.rotate = function (_) {\n if (arguments.length) {\n rotate = functor(_);\n return cloud;\n } else {\n return rotate;\n }\n };\n cloud.text = function (_) {\n if (arguments.length) {\n text = functor(_);\n return cloud;\n } else {\n return text;\n }\n };\n cloud.spiral = function (_) {\n if (arguments.length) {\n spiral = spirals[_] || _;\n return cloud;\n } else {\n return spiral;\n }\n };\n cloud.fontSize = function (_) {\n if (arguments.length) {\n fontSize = functor(_);\n return cloud;\n } else {\n return fontSize;\n }\n };\n cloud.padding = function (_) {\n if (arguments.length) {\n padding = functor(_);\n return cloud;\n } else {\n return padding;\n }\n };\n cloud.random = function (_) {\n if (arguments.length) {\n random = _;\n return cloud;\n } else {\n return random;\n }\n };\n return cloud;\n}\n\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\nfunction cloudSprite(contextAndRatio, d, data, di) {\n if (d.sprite) return;\n var c = contextAndRatio.context,\n ratio = contextAndRatio.ratio;\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n var x = 0,\n y = 0,\n maxh = 0,\n n = data.length,\n w,\n w32,\n h,\n i,\n j;\n --di;\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.style + ' ' + d.weight + ' ' + ~~((d.size + 1) / ratio) + 'px ' + d.font;\n w = c.measureText(d.text + 'm').width * ratio;\n h = d.size << 1;\n if (d.rotate) {\n var sr = Math.sin(d.rotate * cloudRadians),\n cr = Math.cos(d.rotate * cloudRadians),\n wcr = w * cr,\n wsr = w * sr,\n hcr = h * cr,\n hsr = h * sr;\n w = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f >> 5 << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n } else {\n w = w + 0x1f >> 5 << 5;\n }\n if (h > maxh) maxh = h;\n if (x + w >= cw << 5) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n if (y + h >= ch) break;\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.rotate) c.rotate(d.rotate * cloudRadians);\n c.fillText(d.text, 0, 0);\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,\n sprite = [];\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) continue;\n w = d.width;\n w32 = w >> 5;\n h = d.y1 - d.y0;\n // Zero the buffer\n for (i = 0; i < h * w32; i++) sprite[i] = 0;\n x = d.xoff;\n if (x == null) return;\n y = d.yoff;\n var seen = 0,\n seenRow = -1;\n for (j = 0; j < h; j++) {\n for (i = 0; i < w; i++) {\n var k = w32 * j + (i >> 5),\n m = pixels[(y + j) * (cw << 5) + (x + i) << 2] ? 1 << 31 - i % 32 : 0;\n sprite[k] |= m;\n seen |= m;\n }\n if (seen) seenRow = j;else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n}\n\n// Use mask-based collision detection.\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n var sprite = tag.sprite,\n w = tag.width >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n if ((last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i]) return true;\n }\n x += sw;\n }\n return false;\n}\nfunction cloudBounds(bounds, d) {\n var b0 = bounds[0],\n b1 = bounds[1];\n if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\nfunction collideRects(a, b) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\nfunction archimedeanSpiral(size) {\n var e = size[0] / size[1];\n return function (t) {\n return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\n };\n}\nfunction rectangularSpiral(size) {\n var dy = 4,\n dx = dy * size[0] / size[1],\n x = 0,\n y = 0;\n return function (t) {\n var sign = t < 0 ? -1 : 1;\n // See triangular numbers: T_n = n * (n + 1) / 2.\n switch (Math.sqrt(1 + 4 * sign * t) - sign & 3) {\n case 0:\n x += dx;\n break;\n case 1:\n y += dy;\n break;\n case 2:\n x -= dx;\n break;\n default:\n y -= dy;\n break;\n }\n return [x, y];\n };\n}\n\n// TODO reuse arrays?\nfunction zeroArray(n) {\n var a = [],\n i = -1;\n while (++i < n) a[i] = 0;\n return a;\n}\nfunction functor(d) {\n return typeof d === 'function' ? d : function () {\n return d;\n };\n}\nvar spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n\nconst Output = ['x', 'y', 'font', 'fontSize', 'fontStyle', 'fontWeight', 'angle'];\nconst Params = ['text', 'font', 'rotate', 'fontSize', 'fontStyle', 'fontWeight'];\nfunction Wordcloud(params) {\n Transform.call(this, cloud(), params);\n}\nWordcloud.Definition = {\n 'type': 'Wordcloud',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'font',\n 'type': 'string',\n 'expr': true,\n 'default': 'sans-serif'\n }, {\n 'name': 'fontStyle',\n 'type': 'string',\n 'expr': true,\n 'default': 'normal'\n }, {\n 'name': 'fontWeight',\n 'type': 'string',\n 'expr': true,\n 'default': 'normal'\n }, {\n 'name': 'fontSize',\n 'type': 'number',\n 'expr': true,\n 'default': 14\n }, {\n 'name': 'fontSizeRange',\n 'type': 'number',\n 'array': 'nullable',\n 'default': [10, 50]\n }, {\n 'name': 'rotate',\n 'type': 'number',\n 'expr': true,\n 'default': 0\n }, {\n 'name': 'text',\n 'type': 'field'\n }, {\n 'name': 'spiral',\n 'type': 'string',\n 'values': ['archimedean', 'rectangular']\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 7,\n 'default': Output\n }]\n};\ninherits(Wordcloud, Transform, {\n transform(_, pulse) {\n if (_.size && !(_.size[0] && _.size[1])) {\n error('Wordcloud size dimensions must be non-zero.');\n }\n function modp(param) {\n const p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n const mod = _.modified();\n if (!(mod || pulse.changed(pulse.ADD_REM) || Params.some(modp))) return;\n const data = pulse.materialize(pulse.SOURCE).source,\n layout = this.value,\n as = _.as || Output;\n let fontSize = _.fontSize || 14,\n range;\n isFunction(fontSize) ? range = _.fontSizeRange : fontSize = constant(fontSize);\n\n // create font size scaling function as needed\n if (range) {\n const fsize = fontSize,\n sizeScale = scale('sqrt')().domain(extent(data, fsize)).range(range);\n fontSize = x => sizeScale(fsize(x));\n }\n data.forEach(t => {\n t[as[0]] = NaN;\n t[as[1]] = NaN;\n t[as[3]] = 0;\n });\n\n // configure layout\n const words = layout.words(data).text(_.text).size(_.size || [500, 500]).padding(_.padding || 1).spiral(_.spiral || 'archimedean').rotate(_.rotate || 0).font(_.font || 'sans-serif').fontStyle(_.fontStyle || 'normal').fontWeight(_.fontWeight || 'normal').fontSize(fontSize).random(random).layout();\n const size = layout.size(),\n dx = size[0] >> 1,\n dy = size[1] >> 1,\n n = words.length;\n for (let i = 0, w, t; i < n; ++i) {\n w = words[i];\n t = w.datum;\n t[as[0]] = w.x + dx;\n t[as[1]] = w.y + dy;\n t[as[2]] = w.font;\n t[as[3]] = w.size;\n t[as[4]] = w.style;\n t[as[5]] = w.weight;\n t[as[6]] = w.rotate;\n }\n return pulse.reflow(mod).modifies(as);\n }\n});\n\nexport { Wordcloud as wordcloud };\n","import { bisectLeft, bisectRight, permute } from 'd3-array';\nimport { Transform } from 'vega-dataflow';\nimport { inherits } from 'vega-util';\n\nconst array8 = n => new Uint8Array(n);\nconst array16 = n => new Uint16Array(n);\nconst array32 = n => new Uint32Array(n);\n\n/**\n * Maintains CrossFilter state.\n */\nfunction Bitmaps() {\n let width = 8,\n data = [],\n seen = array32(0),\n curr = array(0, width),\n prev = array(0, width);\n return {\n data: () => data,\n seen: () => seen = lengthen(seen, data.length),\n add(array) {\n for (let i = 0, j = data.length, n = array.length, t; i < n; ++i) {\n t = array[i];\n t._index = j++;\n data.push(t);\n }\n },\n remove(num, map) {\n // map: index -> boolean (true => remove)\n const n = data.length,\n copy = Array(n - num),\n reindex = data; // reuse old data array for index map\n let t, i, j;\n\n // seek forward to first removal\n for (i = 0; !map[i] && i < n; ++i) {\n copy[i] = data[i];\n reindex[i] = i;\n }\n\n // condense arrays\n for (j = i; i < n; ++i) {\n t = data[i];\n if (!map[i]) {\n reindex[i] = j;\n curr[j] = curr[i];\n prev[j] = prev[i];\n copy[j] = t;\n t._index = j++;\n } else {\n reindex[i] = -1;\n }\n curr[i] = 0; // clear unused bits\n }\n\n data = copy;\n return reindex;\n },\n size: () => data.length,\n curr: () => curr,\n prev: () => prev,\n reset: k => prev[k] = curr[k],\n all: () => width < 0x101 ? 0xff : width < 0x10001 ? 0xffff : 0xffffffff,\n set(k, one) {\n curr[k] |= one;\n },\n clear(k, one) {\n curr[k] &= ~one;\n },\n resize(n, m) {\n const k = curr.length;\n if (n > k || m > width) {\n width = Math.max(m, width);\n curr = array(n, width, curr);\n prev = array(n, width);\n }\n }\n };\n}\nfunction lengthen(array, length, copy) {\n if (array.length >= length) return array;\n copy = copy || new array.constructor(length);\n copy.set(array);\n return copy;\n}\nfunction array(n, m, array) {\n const copy = (m < 0x101 ? array8 : m < 0x10001 ? array16 : array32)(n);\n if (array) copy.set(array);\n return copy;\n}\n\nfunction Dimension (index, i, query) {\n const bit = 1 << i;\n return {\n one: bit,\n zero: ~bit,\n range: query.slice(),\n bisect: index.bisect,\n index: index.index,\n size: index.size,\n onAdd(added, curr) {\n const dim = this,\n range = dim.bisect(dim.range, added.value),\n idx = added.index,\n lo = range[0],\n hi = range[1],\n n1 = idx.length;\n let i;\n for (i = 0; i < lo; ++i) curr[idx[i]] |= bit;\n for (i = hi; i < n1; ++i) curr[idx[i]] |= bit;\n return dim;\n }\n };\n}\n\n/**\n * Maintains a list of values, sorted by key.\n */\nfunction SortedIndex() {\n let index = array32(0),\n value = [],\n size = 0;\n function insert(key, data, base) {\n if (!data.length) return [];\n const n0 = size,\n n1 = data.length,\n addi = array32(n1);\n let addv = Array(n1),\n oldv,\n oldi,\n i;\n for (i = 0; i < n1; ++i) {\n addv[i] = key(data[i]);\n addi[i] = i;\n }\n addv = sort(addv, addi);\n if (n0) {\n oldv = value;\n oldi = index;\n value = Array(n0 + n1);\n index = array32(n0 + n1);\n merge(base, oldv, oldi, n0, addv, addi, n1, value, index);\n } else {\n if (base > 0) for (i = 0; i < n1; ++i) {\n addi[i] += base;\n }\n value = addv;\n index = addi;\n }\n size = n0 + n1;\n return {\n index: addi,\n value: addv\n };\n }\n function remove(num, map) {\n // map: index -> remove\n const n = size;\n let idx, i, j;\n\n // seek forward to first removal\n for (i = 0; !map[index[i]] && i < n; ++i);\n\n // condense index and value arrays\n for (j = i; i < n; ++i) {\n if (!map[idx = index[i]]) {\n index[j] = idx;\n value[j] = value[i];\n ++j;\n }\n }\n size = n - num;\n }\n function reindex(map) {\n for (let i = 0, n = size; i < n; ++i) {\n index[i] = map[index[i]];\n }\n }\n function bisect(range, array) {\n let n;\n if (array) {\n n = array.length;\n } else {\n array = value;\n n = size;\n }\n return [bisectLeft(array, range[0], 0, n), bisectRight(array, range[1], 0, n)];\n }\n return {\n insert: insert,\n remove: remove,\n bisect: bisect,\n reindex: reindex,\n index: () => index,\n size: () => size\n };\n}\nfunction sort(values, index) {\n values.sort.call(index, (a, b) => {\n const x = values[a],\n y = values[b];\n return x < y ? -1 : x > y ? 1 : 0;\n });\n return permute(values, index);\n}\nfunction merge(base, value0, index0, n0, value1, index1, n1, value, index) {\n let i0 = 0,\n i1 = 0,\n i;\n for (i = 0; i0 < n0 && i1 < n1; ++i) {\n if (value0[i0] < value1[i1]) {\n value[i] = value0[i0];\n index[i] = index0[i0++];\n } else {\n value[i] = value1[i1];\n index[i] = index1[i1++] + base;\n }\n }\n for (; i0 < n0; ++i0, ++i) {\n value[i] = value0[i0];\n index[i] = index0[i0];\n }\n for (; i1 < n1; ++i1, ++i) {\n value[i] = value1[i1];\n index[i] = index1[i1] + base;\n }\n}\n\n/**\n * An indexed multi-dimensional filter.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of dimension accessors to filter.\n * @param {Array} params.query - An array of per-dimension range queries.\n */\nfunction CrossFilter(params) {\n Transform.call(this, Bitmaps(), params);\n this._indices = null;\n this._dims = null;\n}\nCrossFilter.Definition = {\n 'type': 'CrossFilter',\n 'metadata': {},\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'query',\n 'type': 'array',\n 'array': true,\n 'required': true,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }]\n};\ninherits(CrossFilter, Transform, {\n transform(_, pulse) {\n if (!this._dims) {\n return this.init(_, pulse);\n } else {\n var init = _.modified('fields') || _.fields.some(f => pulse.modified(f.fields));\n return init ? this.reinit(_, pulse) : this.eval(_, pulse);\n }\n },\n init(_, pulse) {\n const fields = _.fields,\n query = _.query,\n indices = this._indices = {},\n dims = this._dims = [],\n m = query.length;\n let i = 0,\n key,\n index;\n\n // instantiate indices and dimensions\n for (; i < m; ++i) {\n key = fields[i].fname;\n index = indices[key] || (indices[key] = SortedIndex());\n dims.push(Dimension(index, i, query[i]));\n }\n return this.eval(_, pulse);\n },\n reinit(_, pulse) {\n const output = pulse.materialize().fork(),\n fields = _.fields,\n query = _.query,\n indices = this._indices,\n dims = this._dims,\n bits = this.value,\n curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(),\n out = output.rem = output.add,\n mod = output.mod,\n m = query.length,\n adds = {};\n let add, index, key, mods, remMap, modMap, i, n, f;\n\n // set prev to current state\n prev.set(curr);\n\n // if pulse has remove tuples, process them first\n if (pulse.rem.length) {\n remMap = this.remove(_, pulse, output);\n }\n\n // if pulse has added tuples, add them to state\n if (pulse.add.length) {\n bits.add(pulse.add);\n }\n\n // if pulse has modified tuples, create an index map\n if (pulse.mod.length) {\n modMap = {};\n for (mods = pulse.mod, i = 0, n = mods.length; i < n; ++i) {\n modMap[mods[i]._index] = 1;\n }\n }\n\n // re-initialize indices as needed, update curr bitmap\n for (i = 0; i < m; ++i) {\n f = fields[i];\n if (!dims[i] || _.modified('fields', i) || pulse.modified(f.fields)) {\n key = f.fname;\n if (!(add = adds[key])) {\n indices[key] = index = SortedIndex();\n adds[key] = add = index.insert(f, pulse.source, 0);\n }\n dims[i] = Dimension(index, i, query[i]).onAdd(add, curr);\n }\n }\n\n // visit each tuple\n // if filter state changed, push index to add/rem\n // else if in mod and passes a filter, push index to mod\n for (i = 0, n = bits.data().length; i < n; ++i) {\n if (remMap[i]) {\n // skip if removed tuple\n continue;\n } else if (prev[i] !== curr[i]) {\n // add if state changed\n out.push(i);\n } else if (modMap[i] && curr[i] !== all) {\n // otherwise, pass mods through\n mod.push(i);\n }\n }\n bits.mask = (1 << m) - 1;\n return output;\n },\n eval(_, pulse) {\n const output = pulse.materialize().fork(),\n m = this._dims.length;\n let mask = 0;\n if (pulse.rem.length) {\n this.remove(_, pulse, output);\n mask |= (1 << m) - 1;\n }\n if (_.modified('query') && !_.modified('fields')) {\n mask |= this.update(_, pulse, output);\n }\n if (pulse.add.length) {\n this.insert(_, pulse, output);\n mask |= (1 << m) - 1;\n }\n if (pulse.mod.length) {\n this.modify(pulse, output);\n mask |= (1 << m) - 1;\n }\n this.value.mask = mask;\n return output;\n },\n insert(_, pulse, output) {\n const tuples = pulse.add,\n bits = this.value,\n dims = this._dims,\n indices = this._indices,\n fields = _.fields,\n adds = {},\n out = output.add,\n n = bits.size() + tuples.length,\n m = dims.length;\n let k = bits.size(),\n j,\n key,\n add;\n\n // resize bitmaps and add tuples as needed\n bits.resize(n, m);\n bits.add(tuples);\n const curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all();\n\n // add to dimensional indices\n for (j = 0; j < m; ++j) {\n key = fields[j].fname;\n add = adds[key] || (adds[key] = indices[key].insert(fields[j], tuples, k));\n dims[j].onAdd(add, curr);\n }\n\n // set previous filters, output if passes at least one filter\n for (; k < n; ++k) {\n prev[k] = all;\n if (curr[k] !== all) out.push(k);\n }\n },\n modify(pulse, output) {\n const out = output.mod,\n bits = this.value,\n curr = bits.curr(),\n all = bits.all(),\n tuples = pulse.mod;\n let i, n, k;\n for (i = 0, n = tuples.length; i < n; ++i) {\n k = tuples[i]._index;\n if (curr[k] !== all) out.push(k);\n }\n },\n remove(_, pulse, output) {\n const indices = this._indices,\n bits = this.value,\n curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(),\n map = {},\n out = output.rem,\n tuples = pulse.rem;\n let i, n, k, f;\n\n // process tuples, output if passes at least one filter\n for (i = 0, n = tuples.length; i < n; ++i) {\n k = tuples[i]._index;\n map[k] = 1; // build index map\n prev[k] = f = curr[k];\n curr[k] = all;\n if (f !== all) out.push(k);\n }\n\n // remove from dimensional indices\n for (k in indices) {\n indices[k].remove(n, map);\n }\n this.reindex(pulse, n, map);\n return map;\n },\n // reindex filters and indices after propagation completes\n reindex(pulse, num, map) {\n const indices = this._indices,\n bits = this.value;\n pulse.runAfter(() => {\n const indexMap = bits.remove(num, map);\n for (const key in indices) indices[key].reindex(indexMap);\n });\n },\n update(_, pulse, output) {\n const dims = this._dims,\n query = _.query,\n stamp = pulse.stamp,\n m = dims.length;\n let mask = 0,\n i,\n q;\n\n // survey how many queries have changed\n output.filters = 0;\n for (q = 0; q < m; ++q) {\n if (_.modified('query', q)) {\n i = q;\n ++mask;\n }\n }\n if (mask === 1) {\n // only one query changed, use more efficient update\n mask = dims[i].one;\n this.incrementOne(dims[i], query[i], output.add, output.rem);\n } else {\n // multiple queries changed, perform full record keeping\n for (q = 0, mask = 0; q < m; ++q) {\n if (!_.modified('query', q)) continue;\n mask |= dims[q].one;\n this.incrementAll(dims[q], query[q], stamp, output.add);\n output.rem = output.add; // duplicate add/rem for downstream resolve\n }\n }\n\n return mask;\n },\n incrementAll(dim, query, stamp, out) {\n const bits = this.value,\n seen = bits.seen(),\n curr = bits.curr(),\n prev = bits.prev(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one;\n let i, j, k;\n\n // Fast incremental update based on previous lo index.\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n }\n\n // Fast incremental update based on previous hi index.\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n }\n dim.range = query.slice();\n },\n incrementOne(dim, query, add, rem) {\n const bits = this.value,\n curr = bits.curr(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one;\n let i, j, k;\n\n // Fast incremental update based on previous lo index.\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n\n // Fast incremental update based on previous hi index.\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n dim.range = query.slice();\n }\n});\n\n/**\n * Selectively filters tuples by resolving against a filter bitmap.\n * Useful for processing the output of a cross-filter transform.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.ignore - A bit mask indicating which filters to ignore.\n * @param {object} params.filter - The per-tuple filter bitmaps. Typically this\n * parameter value is a reference to a {@link CrossFilter} transform.\n */\nfunction ResolveFilter(params) {\n Transform.call(this, null, params);\n}\nResolveFilter.Definition = {\n 'type': 'ResolveFilter',\n 'metadata': {},\n 'params': [{\n 'name': 'ignore',\n 'type': 'number',\n 'required': true,\n 'description': 'A bit mask indicating which filters to ignore.'\n }, {\n 'name': 'filter',\n 'type': 'object',\n 'required': true,\n 'description': 'Per-tuple filter bitmaps from a CrossFilter transform.'\n }]\n};\ninherits(ResolveFilter, Transform, {\n transform(_, pulse) {\n const ignore = ~(_.ignore || 0),\n // bit mask where zeros -> dims to ignore\n bitmap = _.filter,\n mask = bitmap.mask;\n\n // exit early if no relevant filter changes\n if ((mask & ignore) === 0) return pulse.StopPropagation;\n const output = pulse.fork(pulse.ALL),\n data = bitmap.data(),\n curr = bitmap.curr(),\n prev = bitmap.prev(),\n pass = k => !(curr[k] & ignore) ? data[k] : null;\n\n // propagate all mod tuples that pass the filter\n output.filter(output.MOD, pass);\n\n // determine add & rem tuples via filter functions\n // for efficiency, we do *not* populate new arrays,\n // instead we add filter functions applied downstream\n\n if (!(mask & mask - 1)) {\n // only one filter changed\n output.filter(output.ADD, pass);\n output.filter(output.REM, k => (curr[k] & ignore) === mask ? data[k] : null);\n } else {\n // multiple filters changed\n output.filter(output.ADD, k => {\n const c = curr[k] & ignore,\n f = !c && c ^ prev[k] & ignore;\n return f ? data[k] : null;\n });\n output.filter(output.REM, k => {\n const c = curr[k] & ignore,\n f = c && !(c ^ (c ^ prev[k] & ignore));\n return f ? data[k] : null;\n });\n }\n\n // add filter to source data in case of reflow...\n return output.filter(output.SOURCE, t => pass(t._index));\n }\n});\n\nexport { CrossFilter as crossfilter, ResolveFilter as resolvefilter };\n","export default function permute(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n","import { error, toSet, isFunction, isString, hasOwnProperty } from 'vega-util';\n\nconst RawCode = 'RawCode';\nconst Literal = 'Literal';\nconst Property = 'Property';\nconst Identifier = 'Identifier';\nconst ArrayExpression = 'ArrayExpression';\nconst BinaryExpression = 'BinaryExpression';\nconst CallExpression = 'CallExpression';\nconst ConditionalExpression = 'ConditionalExpression';\nconst LogicalExpression = 'LogicalExpression';\nconst MemberExpression = 'MemberExpression';\nconst ObjectExpression = 'ObjectExpression';\nconst UnaryExpression = 'UnaryExpression';\nfunction ASTNode(type) {\n this.type = type;\n}\nASTNode.prototype.visit = function (visitor) {\n let c, i, n;\n if (visitor(this)) return 1;\n for (c = children(this), i = 0, n = c.length; i < n; ++i) {\n if (c[i].visit(visitor)) return 1;\n }\n};\nfunction children(node) {\n switch (node.type) {\n case ArrayExpression:\n return node.elements;\n case BinaryExpression:\n case LogicalExpression:\n return [node.left, node.right];\n case CallExpression:\n return [node.callee].concat(node.arguments);\n case ConditionalExpression:\n return [node.test, node.consequent, node.alternate];\n case MemberExpression:\n return [node.object, node.property];\n case ObjectExpression:\n return node.properties;\n case Property:\n return [node.key, node.value];\n case UnaryExpression:\n return [node.argument];\n case Identifier:\n case Literal:\n case RawCode:\n default:\n return [];\n }\n}\n\n/*\n The following expression parser is based on Esprima (http://esprima.org/).\n Original header comment and license for Esprima is included here:\n\n Copyright (C) 2013 Ariya Hidayat \n Copyright (C) 2013 Thaddee Tyl \n Copyright (C) 2013 Mathias Bynens \n Copyright (C) 2012 Ariya Hidayat \n Copyright (C) 2012 Mathias Bynens \n Copyright (C) 2012 Joost-Wim Boekesteijn \n Copyright (C) 2012 Kris Kowal \n Copyright (C) 2012 Yusuke Suzuki \n Copyright (C) 2012 Arpad Borsos \n Copyright (C) 2011 Ariya Hidayat \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nvar TokenName, source, index, length, lookahead;\nvar TokenBooleanLiteral = 1,\n TokenEOF = 2,\n TokenIdentifier = 3,\n TokenKeyword = 4,\n TokenNullLiteral = 5,\n TokenNumericLiteral = 6,\n TokenPunctuator = 7,\n TokenStringLiteral = 8,\n TokenRegularExpression = 9;\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\nvar SyntaxArrayExpression = 'ArrayExpression',\n SyntaxBinaryExpression = 'BinaryExpression',\n SyntaxCallExpression = 'CallExpression',\n SyntaxConditionalExpression = 'ConditionalExpression',\n SyntaxIdentifier = 'Identifier',\n SyntaxLiteral = 'Literal',\n SyntaxLogicalExpression = 'LogicalExpression',\n SyntaxMemberExpression = 'MemberExpression',\n SyntaxObjectExpression = 'ObjectExpression',\n SyntaxProperty = 'Property',\n SyntaxUnaryExpression = 'UnaryExpression';\n\n// Error messages should be identical to V8.\nvar MessageUnexpectedToken = 'Unexpected token %0',\n MessageUnexpectedNumber = 'Unexpected number',\n MessageUnexpectedString = 'Unexpected string',\n MessageUnexpectedIdentifier = 'Unexpected identifier',\n MessageUnexpectedReserved = 'Unexpected reserved word',\n MessageUnexpectedEOS = 'Unexpected end of input',\n MessageInvalidRegExp = 'Invalid regular expression',\n MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\nvar ILLEGAL = 'ILLEGAL',\n DISABLED = 'Disabled.';\n\n// See also tools/generate-unicode-regex.py.\nvar RegexNonAsciiIdentifierStart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'),\n // eslint-disable-next-line no-misleading-character-class\n RegexNonAsciiIdentifierPart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]');\n\n// Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n /* istanbul ignore next */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n}\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 && ch <= 0x39; // 0..9\n}\n\nfunction isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\nfunction isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n}\n\n// 7.2 White Space\n\nfunction isWhiteSpace(ch) {\n return ch === 0x20 || ch === 0x09 || ch === 0x0B || ch === 0x0C || ch === 0xA0 || ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0;\n}\n\n// 7.3 Line Terminators\n\nfunction isLineTerminator(ch) {\n return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029;\n}\n\n// 7.6 Identifier Names and Identifiers\n\nfunction isIdentifierStart(ch) {\n return ch === 0x24 || ch === 0x5F ||\n // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A ||\n // A..Z\n ch >= 0x61 && ch <= 0x7A ||\n // a..z\n ch === 0x5C ||\n // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch));\n}\nfunction isIdentifierPart(ch) {\n return ch === 0x24 || ch === 0x5F ||\n // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A ||\n // A..Z\n ch >= 0x61 && ch <= 0x7A ||\n // a..z\n ch >= 0x30 && ch <= 0x39 ||\n // 0..9\n ch === 0x5C ||\n // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch));\n}\n\n// 7.6.1.1 Keywords\n\nconst keywords = {\n 'if': 1,\n 'in': 1,\n 'do': 1,\n 'var': 1,\n 'for': 1,\n 'new': 1,\n 'try': 1,\n 'let': 1,\n 'this': 1,\n 'else': 1,\n 'case': 1,\n 'void': 1,\n 'with': 1,\n 'enum': 1,\n 'while': 1,\n 'break': 1,\n 'catch': 1,\n 'throw': 1,\n 'const': 1,\n 'yield': 1,\n 'class': 1,\n 'super': 1,\n 'return': 1,\n 'typeof': 1,\n 'delete': 1,\n 'switch': 1,\n 'export': 1,\n 'import': 1,\n 'public': 1,\n 'static': 1,\n 'default': 1,\n 'finally': 1,\n 'extends': 1,\n 'package': 1,\n 'private': 1,\n 'function': 1,\n 'continue': 1,\n 'debugger': 1,\n 'interface': 1,\n 'protected': 1,\n 'instanceof': 1,\n 'implements': 1\n};\nfunction skipComment() {\n while (index < length) {\n const ch = source.charCodeAt(index);\n if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n ++index;\n } else {\n break;\n }\n }\n}\nfunction scanHexEscape(prefix) {\n var i,\n len,\n ch,\n code = 0;\n len = prefix === 'u' ? 4 : 2;\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n return String.fromCharCode(code);\n}\nfunction scanUnicodeCodePointEscape() {\n var ch, code, cu1, cu2;\n ch = source[index];\n code = 0;\n\n // At least, one hex digit is required.\n if (ch === '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n while (index < length) {\n ch = source[index++];\n if (!isHexDigit(ch)) {\n break;\n }\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n if (code > 0x10FFFF || ch !== '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n // UTF-16 Encoding\n if (code <= 0xFFFF) {\n return String.fromCharCode(code);\n }\n cu1 = (code - 0x10000 >> 10) + 0xD800;\n cu2 = (code - 0x10000 & 1023) + 0xDC00;\n return String.fromCharCode(cu1, cu2);\n}\nfunction getEscapedIdentifier() {\n var ch, id;\n ch = source.charCodeAt(index++);\n id = String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id = ch;\n }\n while (index < length) {\n ch = source.charCodeAt(index);\n if (!isIdentifierPart(ch)) {\n break;\n }\n ++index;\n id += String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n id = id.substr(0, id.length - 1);\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id += ch;\n }\n }\n return id;\n}\nfunction getIdentifier() {\n var start, ch;\n start = index++;\n while (index < length) {\n ch = source.charCodeAt(index);\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getEscapedIdentifier();\n }\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n return source.slice(start, index);\n}\nfunction scanIdentifier() {\n var start, id, type;\n start = index;\n\n // Backslash (U+005C) starts an escaped character.\n id = source.charCodeAt(index) === 0x5C ? getEscapedIdentifier() : getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n if (id.length === 1) {\n type = TokenIdentifier;\n } else if (keywords.hasOwnProperty(id)) {\n // eslint-disable-line no-prototype-builtins\n type = TokenKeyword;\n } else if (id === 'null') {\n type = TokenNullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = TokenBooleanLiteral;\n } else {\n type = TokenIdentifier;\n }\n return {\n type: type,\n value: id,\n start: start,\n end: index\n };\n}\n\n// 7.7 Punctuators\n\nfunction scanPunctuator() {\n var start = index,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2,\n ch3,\n ch4;\n switch (code) {\n // Check for most common single-character punctuators.\n case 0x2E: // . dot\n case 0x28: // ( open bracket\n case 0x29: // ) close bracket\n case 0x3B: // ; semicolon\n case 0x2C: // , comma\n case 0x7B: // { open curly brace\n case 0x7D: // } close curly brace\n case 0x5B: // [\n case 0x5D: // ]\n case 0x3A: // :\n case 0x3F: // ?\n case 0x7E:\n // ~\n ++index;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code),\n start: start,\n end: index\n };\n default:\n code2 = source.charCodeAt(index + 1);\n\n // '=' (U+003D) marks an assignment or comparison operator.\n if (code2 === 0x3D) {\n switch (code) {\n case 0x2B: // +\n case 0x2D: // -\n case 0x2F: // /\n case 0x3C: // <\n case 0x3E: // >\n case 0x5E: // ^\n case 0x7C: // |\n case 0x25: // %\n case 0x26: // &\n case 0x2A:\n // *\n index += 2;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n start: start,\n end: index\n };\n case 0x21: // !\n case 0x3D:\n // =\n index += 2;\n\n // !== and ===\n if (source.charCodeAt(index) === 0x3D) {\n ++index;\n }\n return {\n type: TokenPunctuator,\n value: source.slice(start, index),\n start: start,\n end: index\n };\n }\n }\n }\n\n // 4-character punctuator: >>>=\n\n ch4 = source.substr(index, 4);\n if (ch4 === '>>>=') {\n index += 4;\n return {\n type: TokenPunctuator,\n value: ch4,\n start: start,\n end: index\n };\n }\n\n // 3-character punctuators: === !== >>> <<= >>=\n\n ch3 = ch4.substr(0, 3);\n if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n index += 3;\n return {\n type: TokenPunctuator,\n value: ch3,\n start: start,\n end: index\n };\n }\n\n // Other 2-character punctuators: ++ -- << >> && ||\n ch2 = ch3.substr(0, 2);\n if (ch1 === ch2[1] && '+-<>&|'.indexOf(ch1) >= 0 || ch2 === '=>') {\n index += 2;\n return {\n type: TokenPunctuator,\n value: ch2,\n start: start,\n end: index\n };\n }\n if (ch2 === '//') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n // 1-character punctuators: < > = ! + - * % & | ^ /\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;\n return {\n type: TokenPunctuator,\n value: ch1,\n start: start,\n end: index\n };\n }\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n}\n\n// 7.8.3 Numeric Literals\n\nfunction scanHexLiteral(start) {\n let number = '';\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n if (number.length === 0) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenNumericLiteral,\n value: parseInt('0x' + number, 16),\n start: start,\n end: index\n };\n}\nfunction scanOctalLiteral(start) {\n let number = '0' + source[index++];\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenNumericLiteral,\n value: parseInt(number, 8),\n octal: true,\n start: start,\n end: index\n };\n}\nfunction scanNumericLiteral() {\n var number, start, ch;\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || ch === '.', 'Numeric literal must start with a decimal digit or a decimal point');\n start = index;\n number = '';\n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex number starts with '0x'.\n // Octal number starts with '0'.\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n if (isOctalDigit(ch)) {\n return scanOctalLiteral(start);\n }\n\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenNumericLiteral,\n value: parseFloat(number),\n start: start,\n end: index\n };\n}\n\n// 7.8.4 String Literals\n\nfunction scanStringLiteral() {\n var str = '',\n quote,\n start,\n ch,\n code,\n octal = false;\n quote = source[index];\n assert(quote === '\\'' || quote === '\"', 'String literal must starts with a quote');\n start = index;\n ++index;\n while (index < length) {\n ch = source[index++];\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n str += scanHexEscape(ch);\n }\n break;\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n default:\n if (isOctalDigit(ch)) {\n code = '01234567'.indexOf(ch);\n\n // \\0 is not octal escape sequence\n if (code !== 0) {\n octal = true;\n }\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]);\n\n // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n if ('0123'.indexOf(ch) >= 0 && index < length && isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n str += String.fromCharCode(code);\n } else {\n str += ch;\n }\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n if (quote !== '') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n return {\n type: TokenStringLiteral,\n value: str,\n octal: octal,\n start: start,\n end: index\n };\n}\nfunction testRegExp(pattern, flags) {\n let tmp = pattern;\n if (flags.indexOf('u') >= 0) {\n // Replace each astral symbol and every Unicode code point\n // escape sequence with a single ASCII symbol to avoid throwing on\n // regular expressions that are only valid in combination with the\n // `/u` flag.\n // Note: replacing with the ASCII symbol `x` might cause false\n // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n // perfectly valid pattern that is equivalent to `[a-b]`, but it\n // would be replaced by `[x-b]` which throws an error.\n tmp = tmp.replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, ($0, $1) => {\n if (parseInt($1, 16) <= 0x10FFFF) {\n return 'x';\n }\n throwError({}, MessageInvalidRegExp);\n }).replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n }\n\n // First, detect invalid regular expressions.\n try {\n new RegExp(tmp);\n } catch (e) {\n throwError({}, MessageInvalidRegExp);\n }\n\n // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n}\nfunction scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n classMarker = false;\n terminated = false;\n while (index < length) {\n ch = source[index++];\n str += ch;\n if (ch === '\\\\') {\n ch = source[index++];\n // ECMA-262 7.8.5\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n }\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n if (!terminated) {\n throwError({}, MessageUnterminatedRegExp);\n }\n\n // Exclude leading and trailing slash.\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n}\nfunction scanRegExpFlags() {\n var ch, str, flags;\n str = '';\n flags = '';\n while (index < length) {\n ch = source[index];\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n ++index;\n if (ch === '\\\\' && index < length) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } else {\n flags += ch;\n str += ch;\n }\n }\n if (flags.search(/[^gimuy]/g) >= 0) {\n throwError({}, MessageInvalidRegExp, flags);\n }\n return {\n value: flags,\n literal: str\n };\n}\nfunction scanRegExp() {\n var start, body, flags, value;\n lookahead = null;\n skipComment();\n start = index;\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n}\nfunction isIdentifierName(token) {\n return token.type === TokenIdentifier || token.type === TokenKeyword || token.type === TokenBooleanLiteral || token.type === TokenNullLiteral;\n}\nfunction advance() {\n skipComment();\n if (index >= length) {\n return {\n type: TokenEOF,\n start: index,\n end: index\n };\n }\n const ch = source.charCodeAt(index);\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n }\n\n // Very common: ( and ) and ;\n if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (U+0027) or double quote (U+0022).\n if (ch === 0x27 || ch === 0x22) {\n return scanStringLiteral();\n }\n\n // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n if (ch === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n}\nfunction lex() {\n const token = lookahead;\n index = token.end;\n lookahead = advance();\n index = token.end;\n return token;\n}\nfunction peek() {\n const pos = index;\n lookahead = advance();\n index = pos;\n}\nfunction finishArrayExpression(elements) {\n const node = new ASTNode(SyntaxArrayExpression);\n node.elements = elements;\n return node;\n}\nfunction finishBinaryExpression(operator, left, right) {\n const node = new ASTNode(operator === '||' || operator === '&&' ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n node.operator = operator;\n node.left = left;\n node.right = right;\n return node;\n}\nfunction finishCallExpression(callee, args) {\n const node = new ASTNode(SyntaxCallExpression);\n node.callee = callee;\n node.arguments = args;\n return node;\n}\nfunction finishConditionalExpression(test, consequent, alternate) {\n const node = new ASTNode(SyntaxConditionalExpression);\n node.test = test;\n node.consequent = consequent;\n node.alternate = alternate;\n return node;\n}\nfunction finishIdentifier(name) {\n const node = new ASTNode(SyntaxIdentifier);\n node.name = name;\n return node;\n}\nfunction finishLiteral(token) {\n const node = new ASTNode(SyntaxLiteral);\n node.value = token.value;\n node.raw = source.slice(token.start, token.end);\n if (token.regex) {\n if (node.raw === '//') {\n node.raw = '/(?:)/';\n }\n node.regex = token.regex;\n }\n return node;\n}\nfunction finishMemberExpression(accessor, object, property) {\n const node = new ASTNode(SyntaxMemberExpression);\n node.computed = accessor === '[';\n node.object = object;\n node.property = property;\n if (!node.computed) property.member = true;\n return node;\n}\nfunction finishObjectExpression(properties) {\n const node = new ASTNode(SyntaxObjectExpression);\n node.properties = properties;\n return node;\n}\nfunction finishProperty(kind, key, value) {\n const node = new ASTNode(SyntaxProperty);\n node.key = key;\n node.value = value;\n node.kind = kind;\n return node;\n}\nfunction finishUnaryExpression(operator, argument) {\n const node = new ASTNode(SyntaxUnaryExpression);\n node.operator = operator;\n node.argument = argument;\n node.prefix = true;\n return node;\n}\n\n// Throw an exception\n\nfunction throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(/%(\\d)/g, (whole, index) => {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n });\n error = new Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n}\n\n// Throw an exception because of the token.\n\nfunction throwUnexpected(token) {\n if (token.type === TokenEOF) {\n throwError(token, MessageUnexpectedEOS);\n }\n if (token.type === TokenNumericLiteral) {\n throwError(token, MessageUnexpectedNumber);\n }\n if (token.type === TokenStringLiteral) {\n throwError(token, MessageUnexpectedString);\n }\n if (token.type === TokenIdentifier) {\n throwError(token, MessageUnexpectedIdentifier);\n }\n if (token.type === TokenKeyword) {\n throwError(token, MessageUnexpectedReserved);\n }\n\n // BooleanLiteral, NullLiteral, or Punctuator.\n throwError(token, MessageUnexpectedToken, token.value);\n}\n\n// Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\nfunction expect(value) {\n const token = lex();\n if (token.type !== TokenPunctuator || token.value !== value) {\n throwUnexpected(token);\n }\n}\n\n// Return true if the next token matches the specified punctuator.\n\nfunction match(value) {\n return lookahead.type === TokenPunctuator && lookahead.value === value;\n}\n\n// Return true if the next token matches the specified keyword\n\nfunction matchKeyword(keyword) {\n return lookahead.type === TokenKeyword && lookahead.value === keyword;\n}\n\n// 11.1.4 Array Initialiser\n\nfunction parseArrayInitialiser() {\n const elements = [];\n index = lookahead.start;\n expect('[');\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseConditionalExpression());\n if (!match(']')) {\n expect(',');\n }\n }\n }\n lex();\n return finishArrayExpression(elements);\n}\n\n// 11.1.5 Object Initialiser\n\nfunction parseObjectPropertyKey() {\n index = lookahead.start;\n const token = lex();\n\n // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n if (token.octal) {\n throwError(token, MessageStrictOctalLiteral);\n }\n return finishLiteral(token);\n }\n return finishIdentifier(token.value);\n}\nfunction parseObjectProperty() {\n var token, key, id, value;\n index = lookahead.start;\n token = lookahead;\n if (token.type === TokenIdentifier) {\n id = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', id, value);\n }\n if (token.type === TokenEOF || token.type === TokenPunctuator) {\n throwUnexpected(token);\n } else {\n key = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', key, value);\n }\n}\nfunction parseObjectInitialiser() {\n var properties = [],\n property,\n name,\n key,\n map = {},\n toString = String;\n index = lookahead.start;\n expect('{');\n while (!match('}')) {\n property = parseObjectProperty();\n if (property.key.type === SyntaxIdentifier) {\n name = property.key.name;\n } else {\n name = toString(property.key.value);\n }\n key = '$' + name;\n if (Object.prototype.hasOwnProperty.call(map, key)) {\n throwError({}, MessageStrictDuplicateProperty);\n } else {\n map[key] = true;\n }\n properties.push(property);\n if (!match('}')) {\n expect(',');\n }\n }\n expect('}');\n return finishObjectExpression(properties);\n}\n\n// 11.1.6 The Grouping Operator\n\nfunction parseGroupExpression() {\n expect('(');\n const expr = parseExpression();\n expect(')');\n return expr;\n}\n\n// 11.1 Primary Expressions\n\nconst legalKeywords = {\n 'if': 1\n};\nfunction parsePrimaryExpression() {\n var type, token, expr;\n if (match('(')) {\n return parseGroupExpression();\n }\n if (match('[')) {\n return parseArrayInitialiser();\n }\n if (match('{')) {\n return parseObjectInitialiser();\n }\n type = lookahead.type;\n index = lookahead.start;\n if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n expr = finishIdentifier(lex().value);\n } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n if (lookahead.octal) {\n throwError(lookahead, MessageStrictOctalLiteral);\n }\n expr = finishLiteral(lex());\n } else if (type === TokenKeyword) {\n throw new Error(DISABLED);\n } else if (type === TokenBooleanLiteral) {\n token = lex();\n token.value = token.value === 'true';\n expr = finishLiteral(token);\n } else if (type === TokenNullLiteral) {\n token = lex();\n token.value = null;\n expr = finishLiteral(token);\n } else if (match('/') || match('/=')) {\n expr = finishLiteral(scanRegExp());\n peek();\n } else {\n throwUnexpected(lex());\n }\n return expr;\n}\n\n// 11.2 Left-Hand-Side Expressions\n\nfunction parseArguments() {\n const args = [];\n expect('(');\n if (!match(')')) {\n while (index < length) {\n args.push(parseConditionalExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n expect(')');\n return args;\n}\nfunction parseNonComputedProperty() {\n index = lookahead.start;\n const token = lex();\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n return finishIdentifier(token.value);\n}\nfunction parseNonComputedMember() {\n expect('.');\n return parseNonComputedProperty();\n}\nfunction parseComputedMember() {\n expect('[');\n const expr = parseExpression();\n expect(']');\n return expr;\n}\nfunction parseLeftHandSideExpressionAllowCall() {\n var expr, args, property;\n expr = parsePrimaryExpression();\n for (;;) {\n if (match('.')) {\n property = parseNonComputedMember();\n expr = finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = finishCallExpression(expr, args);\n } else if (match('[')) {\n property = parseComputedMember();\n expr = finishMemberExpression('[', expr, property);\n } else {\n break;\n }\n }\n return expr;\n}\n\n// 11.3 Postfix Expressions\n\nfunction parsePostfixExpression() {\n const expr = parseLeftHandSideExpressionAllowCall();\n if (lookahead.type === TokenPunctuator) {\n if (match('++') || match('--')) {\n throw new Error(DISABLED);\n }\n }\n return expr;\n}\n\n// 11.4 Unary Operators\n\nfunction parseUnaryExpression() {\n var token, expr;\n if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n throw new Error(DISABLED);\n } else if (match('+') || match('-') || match('~') || match('!')) {\n token = lex();\n expr = parseUnaryExpression();\n expr = finishUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw new Error(DISABLED);\n } else {\n expr = parsePostfixExpression();\n }\n return expr;\n}\nfunction binaryPrecedence(token) {\n let prec = 0;\n if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n return 0;\n }\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n case '&&':\n prec = 2;\n break;\n case '|':\n prec = 3;\n break;\n case '^':\n prec = 4;\n break;\n case '&':\n prec = 5;\n break;\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n case 'in':\n prec = 7;\n break;\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n case '+':\n case '-':\n prec = 9;\n break;\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n }\n return prec;\n}\n\n// 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\nfunction parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n marker = lookahead;\n left = parseUnaryExpression();\n token = lookahead;\n prec = binaryPrecedence(token);\n if (prec === 0) {\n return left;\n }\n token.prec = prec;\n lex();\n markers = [marker, lookahead];\n right = parseUnaryExpression();\n stack = [left, token, right];\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n // Reduce: make a binary expression from the three topmost entries.\n while (stack.length > 2 && prec <= stack[stack.length - 2].prec) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = finishBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = parseUnaryExpression();\n stack.push(expr);\n }\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n while (i > 1) {\n markers.pop();\n expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n return expr;\n}\n\n// 11.12 Conditional Operator\n\nfunction parseConditionalExpression() {\n var expr, consequent, alternate;\n expr = parseBinaryExpression();\n if (match('?')) {\n lex();\n consequent = parseConditionalExpression();\n expect(':');\n alternate = parseConditionalExpression();\n expr = finishConditionalExpression(expr, consequent, alternate);\n }\n return expr;\n}\n\n// 11.14 Comma Operator\n\nfunction parseExpression() {\n const expr = parseConditionalExpression();\n if (match(',')) {\n throw new Error(DISABLED); // no sequence expressions\n }\n\n return expr;\n}\nfunction parser (code) {\n source = code;\n index = 0;\n length = source.length;\n lookahead = null;\n peek();\n const expr = parseExpression();\n if (lookahead.type !== TokenEOF) {\n throw new Error('Unexpect token after expression.');\n }\n return expr;\n}\n\nvar Constants = {\n NaN: 'NaN',\n E: 'Math.E',\n LN2: 'Math.LN2',\n LN10: 'Math.LN10',\n LOG2E: 'Math.LOG2E',\n LOG10E: 'Math.LOG10E',\n PI: 'Math.PI',\n SQRT1_2: 'Math.SQRT1_2',\n SQRT2: 'Math.SQRT2',\n MIN_VALUE: 'Number.MIN_VALUE',\n MAX_VALUE: 'Number.MAX_VALUE'\n};\n\nfunction Functions (codegen) {\n function fncall(name, args, cast, type) {\n let obj = codegen(args[0]);\n if (cast) {\n obj = cast + '(' + obj + ')';\n if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n }\n return obj + '.' + name + (type < 0 ? '' : type === 0 ? '()' : '(' + args.slice(1).map(codegen).join(',') + ')');\n }\n function fn(name, cast, type) {\n return args => fncall(name, args, cast, type);\n }\n const DATE = 'new Date',\n STRING = 'String',\n REGEXP = 'RegExp';\n return {\n // MATH functions\n isNaN: 'Number.isNaN',\n isFinite: 'Number.isFinite',\n abs: 'Math.abs',\n acos: 'Math.acos',\n asin: 'Math.asin',\n atan: 'Math.atan',\n atan2: 'Math.atan2',\n ceil: 'Math.ceil',\n cos: 'Math.cos',\n exp: 'Math.exp',\n floor: 'Math.floor',\n hypot: 'Math.hypot',\n log: 'Math.log',\n max: 'Math.max',\n min: 'Math.min',\n pow: 'Math.pow',\n random: 'Math.random',\n round: 'Math.round',\n sin: 'Math.sin',\n sqrt: 'Math.sqrt',\n tan: 'Math.tan',\n clamp: function (args) {\n if (args.length < 3) error('Missing arguments to clamp function.');\n if (args.length > 3) error('Too many arguments to clamp function.');\n const a = args.map(codegen);\n return 'Math.max(' + a[1] + ', Math.min(' + a[2] + ',' + a[0] + '))';\n },\n // DATE functions\n now: 'Date.now',\n utc: 'Date.UTC',\n datetime: DATE,\n date: fn('getDate', DATE, 0),\n day: fn('getDay', DATE, 0),\n year: fn('getFullYear', DATE, 0),\n month: fn('getMonth', DATE, 0),\n hours: fn('getHours', DATE, 0),\n minutes: fn('getMinutes', DATE, 0),\n seconds: fn('getSeconds', DATE, 0),\n milliseconds: fn('getMilliseconds', DATE, 0),\n time: fn('getTime', DATE, 0),\n timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n utcdate: fn('getUTCDate', DATE, 0),\n utcday: fn('getUTCDay', DATE, 0),\n utcyear: fn('getUTCFullYear', DATE, 0),\n utcmonth: fn('getUTCMonth', DATE, 0),\n utchours: fn('getUTCHours', DATE, 0),\n utcminutes: fn('getUTCMinutes', DATE, 0),\n utcseconds: fn('getUTCSeconds', DATE, 0),\n utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n // sequence functions\n length: fn('length', null, -1),\n // STRING functions\n parseFloat: 'parseFloat',\n parseInt: 'parseInt',\n upper: fn('toUpperCase', STRING, 0),\n lower: fn('toLowerCase', STRING, 0),\n substring: fn('substring', STRING),\n split: fn('split', STRING),\n trim: fn('trim', STRING, 0),\n // REGEXP functions\n regexp: REGEXP,\n test: fn('test', REGEXP),\n // Control Flow functions\n if: function (args) {\n if (args.length < 3) error('Missing arguments to if function.');\n if (args.length > 3) error('Too many arguments to if function.');\n const a = args.map(codegen);\n return '(' + a[0] + '?' + a[1] + ':' + a[2] + ')';\n }\n };\n}\n\nfunction stripQuotes(s) {\n const n = s && s.length - 1;\n return n && (s[0] === '\"' && s[n] === '\"' || s[0] === '\\'' && s[n] === '\\'') ? s.slice(1, -1) : s;\n}\nfunction codegen (opt) {\n opt = opt || {};\n const allowed = opt.allowed ? toSet(opt.allowed) : {},\n forbidden = opt.forbidden ? toSet(opt.forbidden) : {},\n constants = opt.constants || Constants,\n functions = (opt.functions || Functions)(visit),\n globalvar = opt.globalvar,\n fieldvar = opt.fieldvar,\n outputGlobal = isFunction(globalvar) ? globalvar : id => `${globalvar}[\"${id}\"]`;\n let globals = {},\n fields = {},\n memberDepth = 0;\n function visit(ast) {\n if (isString(ast)) return ast;\n const generator = Generators[ast.type];\n if (generator == null) error('Unsupported type: ' + ast.type);\n return generator(ast);\n }\n const Generators = {\n Literal: n => n.raw,\n Identifier: n => {\n const id = n.name;\n if (memberDepth > 0) {\n return id;\n } else if (hasOwnProperty(forbidden, id)) {\n return error('Illegal identifier: ' + id);\n } else if (hasOwnProperty(constants, id)) {\n return constants[id];\n } else if (hasOwnProperty(allowed, id)) {\n return id;\n } else {\n globals[id] = 1;\n return outputGlobal(id);\n }\n },\n MemberExpression: n => {\n const d = !n.computed,\n o = visit(n.object);\n if (d) memberDepth += 1;\n const p = visit(n.property);\n if (o === fieldvar) {\n // strip quotes to sanitize field name (#1653)\n fields[stripQuotes(p)] = 1;\n }\n if (d) memberDepth -= 1;\n return o + (d ? '.' + p : '[' + p + ']');\n },\n CallExpression: n => {\n if (n.callee.type !== 'Identifier') {\n error('Illegal callee type: ' + n.callee.type);\n }\n const callee = n.callee.name,\n args = n.arguments,\n fn = hasOwnProperty(functions, callee) && functions[callee];\n if (!fn) error('Unrecognized function: ' + callee);\n return isFunction(fn) ? fn(args) : fn + '(' + args.map(visit).join(',') + ')';\n },\n ArrayExpression: n => '[' + n.elements.map(visit).join(',') + ']',\n BinaryExpression: n => '(' + visit(n.left) + ' ' + n.operator + ' ' + visit(n.right) + ')',\n UnaryExpression: n => '(' + n.operator + visit(n.argument) + ')',\n ConditionalExpression: n => '(' + visit(n.test) + '?' + visit(n.consequent) + ':' + visit(n.alternate) + ')',\n LogicalExpression: n => '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n ObjectExpression: n => '{' + n.properties.map(visit).join(',') + '}',\n Property: n => {\n memberDepth += 1;\n const k = visit(n.key);\n memberDepth -= 1;\n return k + ':' + visit(n.value);\n }\n };\n function codegen(ast) {\n const result = {\n code: visit(ast),\n globals: Object.keys(globals),\n fields: Object.keys(fields)\n };\n globals = {};\n fields = {};\n return result;\n }\n codegen.functions = functions;\n codegen.constants = constants;\n return codegen;\n}\n\nexport { ASTNode, ArrayExpression, BinaryExpression, CallExpression, ConditionalExpression, Identifier, Literal, LogicalExpression, MemberExpression, ObjectExpression, Property, RawCode, UnaryExpression, codegen as codegenExpression, Constants as constants, Functions as functions, parser as parseExpression };\n","import { bisector, union, intersection } from 'd3-array';\nimport { field, isDate, toNumber, isArray, inrange, extend, array, error, peek, hasOwnProperty } from 'vega-util';\nimport { Literal } from 'vega-expression';\n\n// Registers vega-util field accessors to protect against XSS attacks\nconst SELECTION_GETTER = Symbol('vega_selection_getter');\nfunction getter(f) {\n if (!f.getter || !f.getter[SELECTION_GETTER]) {\n f.getter = field(f.field);\n f.getter[SELECTION_GETTER] = true;\n }\n return f.getter;\n}\nconst Intersect = 'intersect';\nconst Union = 'union';\nconst VlMulti = 'vlMulti';\nconst VlPoint = 'vlPoint';\nconst Or = 'or';\nconst And = 'and';\nconst SelectionId = '_vgsid_';\nconst $selectionId = field(SelectionId);\n\nconst TYPE_ENUM = 'E',\n TYPE_RANGE_INC = 'R',\n TYPE_RANGE_EXC = 'R-E',\n TYPE_RANGE_LE = 'R-LE',\n TYPE_RANGE_RE = 'R-RE',\n UNIT_INDEX = 'index:unit';\n\n// TODO: revisit date coercion?\nfunction testPoint(datum, entry) {\n var fields = entry.fields,\n values = entry.values,\n n = fields.length,\n i = 0,\n dval,\n f;\n for (; i < n; ++i) {\n f = fields[i];\n dval = getter(f)(datum);\n if (isDate(dval)) dval = toNumber(dval);\n if (isDate(values[i])) values[i] = toNumber(values[i]);\n if (isArray(values[i]) && isDate(values[i][0])) values[i] = values[i].map(toNumber);\n if (f.type === TYPE_ENUM) {\n // Enumerated fields can either specify individual values (single/multi selections)\n // or an array of values (interval selections).\n if (isArray(values[i]) ? values[i].indexOf(dval) < 0 : dval !== values[i]) {\n return false;\n }\n } else {\n if (f.type === TYPE_RANGE_INC) {\n if (!inrange(dval, values[i])) return false;\n } else if (f.type === TYPE_RANGE_RE) {\n // Discrete selection of bins test within the range [bin_start, bin_end).\n if (!inrange(dval, values[i], true, false)) return false;\n } else if (f.type === TYPE_RANGE_EXC) {\n // 'R-E'/'R-LE' included for completeness.\n if (!inrange(dval, values[i], false, false)) return false;\n } else if (f.type === TYPE_RANGE_LE) {\n if (!inrange(dval, values[i], false, true)) return false;\n }\n }\n }\n return true;\n}\n\n/**\n * Tests if a tuple is contained within an interactive selection.\n * @param {string} name - The name of the data set representing the selection.\n * Tuples in the dataset are of the form\n * {unit: string, fields: array, values: array<*>}.\n * Fielddef is of the form\n * {field: string, channel: string, type: 'E' | 'R'} where\n * 'type' identifies whether tuples in the dataset enumerate\n * values for the field, or specify a continuous range.\n * @param {object} datum - The tuple to test for inclusion.\n * @param {string} op - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @return {boolean} - True if the datum is in the selection, false otherwise.\n */\nfunction selectionTest(name, datum, op) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === Intersect,\n n = entries.length,\n i = 0,\n entry,\n miss,\n count,\n unit,\n b;\n for (; i < n; ++i) {\n entry = entries[i];\n if (unitIdx && intersect) {\n // multi selections union within the same unit and intersect across units.\n miss = miss || {};\n count = miss[unit = entry.unit] || 0;\n\n // if we've already matched this unit, skip.\n if (count === -1) continue;\n b = testPoint(datum, entry);\n miss[unit] = b ? -1 : ++count;\n\n // if we match and there are no other units return true\n // if we've missed against all tuples in this unit return false\n if (b && unitIdx.size === 1) return true;\n if (!b && count === unitIdx.get(unit).count) return false;\n } else {\n b = testPoint(datum, entry);\n\n // if we find a miss and we do require intersection return false\n // if we find a match and we don't require intersection return true\n if (intersect ^ b) return b;\n }\n }\n\n // if intersecting and we made it here, then we saw no misses\n // if not intersecting, then we saw no matches\n // if no active selections, return false\n return n && intersect;\n}\nconst bisect = bisector($selectionId),\n bisectLeft = bisect.left,\n bisectRight = bisect.right;\nfunction selectionIdTest(name, datum, op) {\n const data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === Intersect,\n value = $selectionId(datum),\n index = bisectLeft(entries, value);\n if (index === entries.length) return false;\n if ($selectionId(entries[index]) !== value) return false;\n if (unitIdx && intersect) {\n if (unitIdx.size === 1) return true;\n if (bisectRight(entries, value) - index < unitIdx.size) return false;\n }\n return true;\n}\n\n/**\n * Maps an array of scene graph items to an array of selection tuples.\n * @param {string} name - The name of the dataset representing the selection.\n * @param {string} base - The base object that generated tuples extend.\n *\n * @returns {array} An array of selection entries for the given unit.\n */\nfunction selectionTuples(array, base) {\n return array.map(x => extend(base.fields ? {\n values: base.fields.map(f => getter(f)(x.datum))\n } : {\n [SelectionId]: $selectionId(x.datum)\n }, base));\n}\n\n/**\n * Resolves selection for use as a scale domain or reads via the API.\n * @param {string} name - The name of the dataset representing the selection\n * @param {string} [op='union'] - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @param {boolean} isMulti - Identifies a \"multi\" selection to perform more\n * expensive resolution computation.\n * @param {boolean} vl5 - With Vega-Lite v5, \"multi\" selections are now called \"point\"\n * selections, and thus the resolved tuple should reflect this name.\n * This parameter allows us to reflect this change without triggering\n * a major version bump for Vega.\n * @returns {object} An object of selected fields and values.\n */\nfunction selectionResolve(name, op, isMulti, vl5) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n resolved = {},\n multiRes = {},\n types = {},\n entry,\n fields,\n values,\n unit,\n field,\n value,\n res,\n resUnit,\n type,\n union,\n n = entries.length,\n i = 0,\n j,\n m;\n\n // First union all entries within the same unit.\n for (; i < n; ++i) {\n entry = entries[i];\n unit = entry.unit;\n fields = entry.fields;\n values = entry.values;\n if (fields && values) {\n // Intentional selection stores\n for (j = 0, m = fields.length; j < m; ++j) {\n field = fields[j];\n res = resolved[field.field] || (resolved[field.field] = {});\n resUnit = res[unit] || (res[unit] = []);\n types[field.field] = type = field.type.charAt(0);\n union = ops[`${type}_union`];\n res[unit] = union(resUnit, array(values[j]));\n }\n\n // If the same multi-selection is repeated over views and projected over\n // an encoding, it may operate over different fields making it especially\n // tricky to reliably resolve it. At best, we can de-dupe identical entries\n // but doing so may be more computationally expensive than it is worth.\n // Instead, for now, we simply transform our store representation into\n // a more human-friendly one.\n if (isMulti) {\n resUnit = multiRes[unit] || (multiRes[unit] = []);\n resUnit.push(array(values).reduce((obj, curr, j) => (obj[fields[j].field] = curr, obj), {}));\n }\n } else {\n // Short circuit extensional selectionId stores which hold sorted IDs unique to each unit.\n field = SelectionId;\n value = $selectionId(entry);\n res = resolved[field] || (resolved[field] = {});\n resUnit = res[unit] || (res[unit] = []);\n resUnit.push(value);\n if (isMulti) {\n resUnit = multiRes[unit] || (multiRes[unit] = []);\n resUnit.push({\n [SelectionId]: value\n });\n }\n }\n }\n\n // Then resolve fields across units as per the op.\n op = op || Union;\n if (resolved[SelectionId]) {\n resolved[SelectionId] = ops[`${SelectionId}_${op}`](...Object.values(resolved[SelectionId]));\n } else {\n Object.keys(resolved).forEach(field => {\n resolved[field] = Object.keys(resolved[field]).map(unit => resolved[field][unit]).reduce((acc, curr) => acc === undefined ? curr : ops[`${types[field]}_${op}`](acc, curr));\n });\n }\n entries = Object.keys(multiRes);\n if (isMulti && entries.length) {\n const key = vl5 ? VlPoint : VlMulti;\n resolved[key] = op === Union ? {\n [Or]: entries.reduce((acc, k) => (acc.push(...multiRes[k]), acc), [])\n } : {\n [And]: entries.map(k => ({\n [Or]: multiRes[k]\n }))\n };\n }\n return resolved;\n}\nvar ops = {\n [`${SelectionId}_union`]: union,\n [`${SelectionId}_intersect`]: intersection,\n E_union: function (base, value) {\n if (!base.length) return value;\n var i = 0,\n n = value.length;\n for (; i < n; ++i) if (base.indexOf(value[i]) < 0) base.push(value[i]);\n return base;\n },\n E_intersect: function (base, value) {\n return !base.length ? value : base.filter(v => value.indexOf(v) >= 0);\n },\n R_union: function (base, value) {\n var lo = toNumber(value[0]),\n hi = toNumber(value[1]);\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n if (!base.length) return [lo, hi];\n if (base[0] > lo) base[0] = lo;\n if (base[1] < hi) base[1] = hi;\n return base;\n },\n R_intersect: function (base, value) {\n var lo = toNumber(value[0]),\n hi = toNumber(value[1]);\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n if (!base.length) return [lo, hi];\n if (hi < base[0] || base[1] < lo) {\n return [];\n } else {\n if (base[0] < lo) base[0] = lo;\n if (base[1] > hi) base[1] = hi;\n }\n return base;\n }\n};\n\nconst DataPrefix = ':',\n IndexPrefix = '@';\nfunction selectionVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to selection functions must be a string literal.');\n const data = args[0].value,\n op = args.length >= 2 && peek(args).value,\n field = 'unit',\n indexName = IndexPrefix + field,\n dataName = DataPrefix + data;\n\n // eslint-disable-next-line no-prototype-builtins\n if (op === Intersect && !hasOwnProperty(params, indexName)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n\n // eslint-disable-next-line no-prototype-builtins\n if (!hasOwnProperty(params, dataName)) {\n params[dataName] = scope.getData(data).tuplesRef();\n }\n}\n\nexport { selectionIdTest, selectionResolve, selectionTest, selectionTuples, selectionVisitor };\n","import {InternSet} from \"internmap\";\n\nexport default function union(...others) {\n const set = new InternSet();\n for (const other of others) {\n for (const o of other) {\n set.add(o);\n }\n }\n return set;\n}\n","import { truthy, error, hasOwnProperty, isFunction, isString, stringValue, extend, isArray, isObject, field, peek, identity, array as array$1, isBoolean, isDate, isNumber, isRegExp, toBoolean, toDate, toNumber, toString, flush, lerp, pad, span, inrange, truncate, quarter, utcquarter, extent, clampRange, panLinear, panLog, panPow, panSymlog, zoomLinear, zoomLog, zoomPow, zoomSymlog } from 'vega-util';\nimport { Literal, codegenExpression, constants, functions, parseExpression, CallExpression } from 'vega-expression';\nimport { isRegisteredScale, bandSpace, scale as scale$1, scaleFraction } from 'vega-scale';\nimport { geoArea as geoArea$1, geoBounds as geoBounds$1, geoCentroid as geoCentroid$1 } from 'd3-geo';\nimport { rgb, lab, hcl, hsl } from 'd3-color';\nimport { isTuple } from 'vega-dataflow';\nimport { Gradient, pathRender, pathParse, Bounds, intersect as intersect$1 } from 'vega-scenegraph';\nimport { selectionVisitor, selectionTest, selectionIdTest, selectionResolve, selectionTuples } from 'vega-selections';\nimport { random, cumulativeNormal, cumulativeLogNormal, cumulativeUniform, densityNormal, densityLogNormal, densityUniform, quantileNormal, quantileLogNormal, quantileUniform, sampleNormal, sampleLogNormal, sampleUniform } from 'vega-statistics';\nimport { utcOffset, utcSequence, timeOffset, timeSequence, timeUnitSpecifier, week, utcweek, dayofyear, utcdayofyear } from 'vega-time';\nimport { range as range$1 } from 'd3-array';\n\nfunction data(name) {\n const data = this.context.data[name];\n return data ? data.values.value : [];\n}\nfunction indata(name, field, value) {\n const index = this.context.data[name]['index:' + field],\n entry = index ? index.value.get(value) : undefined;\n return entry ? entry.count : entry;\n}\nfunction setdata(name, tuples) {\n const df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input;\n df.pulse(input, df.changeset().remove(truthy).insert(tuples));\n return 1;\n}\n\nfunction encode (item, name, retval) {\n if (item) {\n const df = this.context.dataflow,\n target = item.mark.source;\n df.pulse(target, df.changeset().encode(item, name));\n }\n return retval !== undefined ? retval : item;\n}\n\nconst wrap = method => function (value, spec) {\n const locale = this.context.dataflow.locale();\n return locale[method](spec)(value);\n};\nconst format = wrap('format');\nconst timeFormat = wrap('timeFormat');\nconst utcFormat = wrap('utcFormat');\nconst timeParse = wrap('timeParse');\nconst utcParse = wrap('utcParse');\nconst dateObj = new Date(2000, 0, 1);\nfunction time(month, day, specifier) {\n if (!Number.isInteger(month) || !Number.isInteger(day)) return '';\n dateObj.setYear(2000);\n dateObj.setMonth(month);\n dateObj.setDate(day);\n return timeFormat.call(this, dateObj, specifier);\n}\nfunction monthFormat(month) {\n return time.call(this, month, 1, '%B');\n}\nfunction monthAbbrevFormat(month) {\n return time.call(this, month, 1, '%b');\n}\nfunction dayFormat(day) {\n return time.call(this, 0, 2 + day, '%A');\n}\nfunction dayAbbrevFormat(day) {\n return time.call(this, 0, 2 + day, '%a');\n}\n\nconst DataPrefix = ':';\nconst IndexPrefix = '@';\nconst ScalePrefix = '%';\nconst SignalPrefix = '$';\n\nfunction dataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) {\n error('First argument to data functions must be a string literal.');\n }\n const data = args[0].value,\n dataName = DataPrefix + data;\n if (!hasOwnProperty(dataName, params)) {\n try {\n params[dataName] = scope.getData(data).tuplesRef();\n } catch (err) {\n // if data set does not exist, there's nothing to track\n }\n }\n}\nfunction indataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to indata must be a string literal.');\n if (args[1].type !== Literal) error('Second argument to indata must be a string literal.');\n const data = args[0].value,\n field = args[1].value,\n indexName = IndexPrefix + field;\n if (!hasOwnProperty(indexName, params)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n}\nfunction scaleVisitor(name, args, scope, params) {\n if (args[0].type === Literal) {\n // add scale dependency\n addScaleDependency(scope, params, args[0].value);\n } else {\n // indirect scale lookup; add all scales as parameters\n for (name in scope.scales) {\n addScaleDependency(scope, params, name);\n }\n }\n}\nfunction addScaleDependency(scope, params, name) {\n const scaleName = ScalePrefix + name;\n if (!hasOwnProperty(params, scaleName)) {\n try {\n params[scaleName] = scope.scaleRef(name);\n } catch (err) {\n // TODO: error handling? warning?\n }\n }\n}\n\nfunction getScale(nameOrFunction, ctx) {\n if (isFunction(nameOrFunction)) {\n return nameOrFunction;\n }\n if (isString(nameOrFunction)) {\n const maybeScale = ctx.scales[nameOrFunction];\n return maybeScale && isRegisteredScale(maybeScale.value) ? maybeScale.value : undefined;\n }\n return undefined;\n}\nfunction internalScaleFunctions(codegen, fnctx, visitors) {\n // add helper method to the 'this' expression function context\n fnctx.__bandwidth = s => s && s.bandwidth ? s.bandwidth() : 0;\n\n // register AST visitors for internal scale functions\n visitors._bandwidth = scaleVisitor;\n visitors._range = scaleVisitor;\n visitors._scale = scaleVisitor;\n\n // resolve scale reference directly to the signal hash argument\n const ref = arg => '_[' + (arg.type === Literal ? stringValue(ScalePrefix + arg.value) : stringValue(ScalePrefix) + '+' + codegen(arg)) + ']';\n\n // define and return internal scale function code generators\n // these internal functions are called by mark encoders\n return {\n _bandwidth: args => `this.__bandwidth(${ref(args[0])})`,\n _range: args => `${ref(args[0])}.range()`,\n _scale: args => `${ref(args[0])}(${codegen(args[1])})`\n };\n}\n\nfunction geoMethod(methodName, globalMethod) {\n return function (projection, geojson, group) {\n if (projection) {\n // projection defined, use it\n const p = getScale(projection, (group || this).context);\n return p && p.path[methodName](geojson);\n } else {\n // projection undefined, use global method\n return globalMethod(geojson);\n }\n };\n}\nconst geoArea = geoMethod('area', geoArea$1);\nconst geoBounds = geoMethod('bounds', geoBounds$1);\nconst geoCentroid = geoMethod('centroid', geoCentroid$1);\nfunction geoScale(projection, group) {\n const p = getScale(projection, (group || this).context);\n return p && p.scale();\n}\n\nfunction inScope (item) {\n const group = this.context.group;\n let value = false;\n if (group) while (item) {\n if (item === group) {\n value = true;\n break;\n }\n item = item.mark.group;\n }\n return value;\n}\n\nfunction log(df, method, args) {\n try {\n df[method].apply(df, ['EXPRESSION'].concat([].slice.call(args)));\n } catch (err) {\n df.warn(err);\n }\n return args[args.length - 1];\n}\nfunction warn() {\n return log(this.context.dataflow, 'warn', arguments);\n}\nfunction info() {\n return log(this.context.dataflow, 'info', arguments);\n}\nfunction debug() {\n return log(this.context.dataflow, 'debug', arguments);\n}\n\n// https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\nfunction channel_luminance_value(channelValue) {\n const val = channelValue / 255;\n if (val <= 0.03928) {\n return val / 12.92;\n }\n return Math.pow((val + 0.055) / 1.055, 2.4);\n}\nfunction luminance(color) {\n const c = rgb(color),\n r = channel_luminance_value(c.r),\n g = channel_luminance_value(c.g),\n b = channel_luminance_value(c.b);\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n\n// https://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\nfunction contrast(color1, color2) {\n const lum1 = luminance(color1),\n lum2 = luminance(color2),\n lumL = Math.max(lum1, lum2),\n lumD = Math.min(lum1, lum2);\n return (lumL + 0.05) / (lumD + 0.05);\n}\n\nfunction merge () {\n const args = [].slice.call(arguments);\n args.unshift({});\n return extend(...args);\n}\n\nfunction equal(a, b) {\n return a === b || a !== a && b !== b ? true : isArray(a) ? isArray(b) && a.length === b.length ? equalArray(a, b) : false : isObject(a) && isObject(b) ? equalObject(a, b) : false;\n}\nfunction equalArray(a, b) {\n for (let i = 0, n = a.length; i < n; ++i) {\n if (!equal(a[i], b[i])) return false;\n }\n return true;\n}\nfunction equalObject(a, b) {\n for (const key in a) {\n if (!equal(a[key], b[key])) return false;\n }\n return true;\n}\nfunction removePredicate(props) {\n return _ => equalObject(props, _);\n}\nfunction modify (name, insert, remove, toggle, modify, values) {\n const df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input,\n stamp = df.stamp();\n let changes = data.changes,\n predicate,\n key;\n if (df._trigger === false || !(input.value.length || insert || toggle)) {\n // nothing to do!\n return 0;\n }\n if (!changes || changes.stamp < stamp) {\n data.changes = changes = df.changeset();\n changes.stamp = stamp;\n df.runAfter(() => {\n data.modified = true;\n df.pulse(input, changes).run();\n }, true, 1);\n }\n if (remove) {\n predicate = remove === true ? truthy : isArray(remove) || isTuple(remove) ? remove : removePredicate(remove);\n changes.remove(predicate);\n }\n if (insert) {\n changes.insert(insert);\n }\n if (toggle) {\n predicate = removePredicate(toggle);\n if (input.value.some(predicate)) {\n changes.remove(predicate);\n } else {\n changes.insert(toggle);\n }\n }\n if (modify) {\n for (key in values) {\n changes.modify(modify, key, values[key]);\n }\n }\n return 1;\n}\n\nfunction pinchDistance(event) {\n const t = event.touches,\n dx = t[0].clientX - t[1].clientX,\n dy = t[0].clientY - t[1].clientY;\n return Math.hypot(dx, dy);\n}\nfunction pinchAngle(event) {\n const t = event.touches;\n return Math.atan2(t[0].clientY - t[1].clientY, t[0].clientX - t[1].clientX);\n}\n\n// memoize accessor functions\nconst accessors = {};\nfunction pluck (data, name) {\n const accessor = accessors[name] || (accessors[name] = field(name));\n return isArray(data) ? data.map(accessor) : accessor(data);\n}\n\nfunction array(seq) {\n return isArray(seq) || ArrayBuffer.isView(seq) ? seq : null;\n}\nfunction sequence(seq) {\n return array(seq) || (isString(seq) ? seq : null);\n}\nfunction join(seq) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return array(seq).join(...args);\n}\nfunction indexof(seq) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n return sequence(seq).indexOf(...args);\n}\nfunction lastindexof(seq) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return sequence(seq).lastIndexOf(...args);\n}\nfunction slice(seq) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n return sequence(seq).slice(...args);\n}\nfunction replace(str, pattern, repl) {\n if (isFunction(repl)) error('Function argument passed to replace.');\n return String(str).replace(pattern, repl);\n}\nfunction reverse(seq) {\n return array(seq).slice().reverse();\n}\n\nfunction bandspace(count, paddingInner, paddingOuter) {\n return bandSpace(count || 0, paddingInner || 0, paddingOuter || 0);\n}\nfunction bandwidth(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.bandwidth ? s.bandwidth() : 0;\n}\nfunction copy(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.copy() : undefined;\n}\nfunction domain(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.domain() : [];\n}\nfunction invert(name, range, group) {\n const s = getScale(name, (group || this).context);\n return !s ? undefined : isArray(range) ? (s.invertRange || s.invert)(range) : (s.invert || s.invertExtent)(range);\n}\nfunction range(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.range ? s.range() : [];\n}\nfunction scale(name, value, group) {\n const s = getScale(name, (group || this).context);\n return s ? s(value) : undefined;\n}\n\nfunction scaleGradient (scale, p0, p1, count, group) {\n scale = getScale(scale, (group || this).context);\n const gradient = Gradient(p0, p1);\n let stops = scale.domain(),\n min = stops[0],\n max = peek(stops),\n fraction = identity;\n if (!(max - min)) {\n // expand scale if domain has zero span, fix #1479\n scale = (scale.interpolator ? scale$1('sequential')().interpolator(scale.interpolator()) : scale$1('linear')().interpolate(scale.interpolate()).range(scale.range())).domain([min = 0, max = 1]);\n } else {\n fraction = scaleFraction(scale, min, max);\n }\n if (scale.ticks) {\n stops = scale.ticks(+count || 15);\n if (min !== stops[0]) stops.unshift(min);\n if (max !== peek(stops)) stops.push(max);\n }\n stops.forEach(_ => gradient.stop(fraction(_), scale(_)));\n return gradient;\n}\n\nfunction geoShape(projection, geojson, group) {\n const p = getScale(projection, (group || this).context);\n return function (context) {\n return p ? p.path.context(context)(geojson) : '';\n };\n}\nfunction pathShape(path) {\n let p = null;\n return function (context) {\n return context ? pathRender(context, p = p || pathParse(path)) : path;\n };\n}\n\nconst datum = d => d.data;\nfunction treeNodes(name, context) {\n const tree = data.call(context, name);\n return tree.root && tree.root.lookup || {};\n}\nfunction treePath(name, source, target) {\n const nodes = treeNodes(name, this),\n s = nodes[source],\n t = nodes[target];\n return s && t ? s.path(t).map(datum) : undefined;\n}\nfunction treeAncestors(name, node) {\n const n = treeNodes(name, this)[node];\n return n ? n.ancestors().map(datum) : undefined;\n}\n\nconst _window = () => typeof window !== 'undefined' && window || null;\nfunction screen() {\n const w = _window();\n return w ? w.screen : {};\n}\nfunction windowSize() {\n const w = _window();\n return w ? [w.innerWidth, w.innerHeight] : [undefined, undefined];\n}\nfunction containerSize() {\n const view = this.context.dataflow,\n el = view.container && view.container();\n return el ? [el.clientWidth, el.clientHeight] : [undefined, undefined];\n}\n\nfunction intersect (b, opt, group) {\n if (!b) return [];\n const [u, v] = b,\n box = new Bounds().set(u[0], u[1], v[0], v[1]),\n scene = group || this.context.dataflow.scenegraph().root;\n return intersect$1(scene, box, filter(opt));\n}\nfunction filter(opt) {\n let p = null;\n if (opt) {\n const types = array$1(opt.marktype),\n names = array$1(opt.markname);\n p = _ => (!types.length || types.some(t => _.marktype === t)) && (!names.length || names.some(s => _.name === s));\n }\n return p;\n}\n\n/**\n * Appends a new point to the lasso\n *\n * @param {*} lasso the lasso in pixel space\n * @param {*} x the x coordinate in pixel space\n * @param {*} y the y coordinate in pixel space\n * @param {*} minDist the minimum distance, in pixels, that thenew point needs to be apart from the last point\n * @returns a new array containing the lasso with the new point\n */\nfunction lassoAppend(lasso, x, y) {\n let minDist = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 5;\n lasso = array$1(lasso);\n const last = lasso[lasso.length - 1];\n\n // Add point to lasso if its the first point or distance to last point exceed minDist\n return last === undefined || Math.hypot(last[0] - x, last[1] - y) > minDist ? [...lasso, [x, y]] : lasso;\n}\n\n/**\n * Generates a svg path command which draws a lasso\n *\n * @param {*} lasso the lasso in pixel space in the form [[x,y], [x,y], ...]\n * @returns the svg path command that draws the lasso\n */\nfunction lassoPath(lasso) {\n return array$1(lasso).reduce((svg, _ref, i) => {\n let [x, y] = _ref;\n return svg += i == 0 ? `M ${x},${y} ` : i === lasso.length - 1 ? ' Z' : `L ${x},${y} `;\n }, '');\n}\n\n/**\n * Inverts the lasso from pixel space to an array of vega scenegraph tuples\n *\n * @param {*} data the dataset\n * @param {*} pixelLasso the lasso in pixel space, [[x,y], [x,y], ...]\n * @param {*} unit the unit where the lasso is defined\n *\n * @returns an array of vega scenegraph tuples\n */\nfunction intersectLasso(markname, pixelLasso, unit) {\n const {\n x,\n y,\n mark\n } = unit;\n const bb = new Bounds().set(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER, Number.MIN_SAFE_INTEGER);\n\n // Get bounding box around lasso\n for (const [px, py] of pixelLasso) {\n if (px < bb.x1) bb.x1 = px;\n if (px > bb.x2) bb.x2 = px;\n if (py < bb.y1) bb.y1 = py;\n if (py > bb.y2) bb.y2 = py;\n }\n\n // Translate bb against unit coordinates\n bb.translate(x, y);\n const intersection = intersect([[bb.x1, bb.y1], [bb.x2, bb.y2]], markname, mark);\n\n // Check every point against the lasso\n return intersection.filter(tuple => pointInPolygon(tuple.x, tuple.y, pixelLasso));\n}\n\n/**\n * Performs a test if a point is inside a polygon based on the idea from\n * https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html\n *\n * This method will not need the same start/end point since it wraps around the edges of the array\n *\n * @param {*} test a point to test against\n * @param {*} polygon a polygon in the form [[x,y], [x,y], ...]\n * @returns true if the point lies inside the polygon, false otherwise\n */\nfunction pointInPolygon(testx, testy, polygon) {\n let intersections = 0;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const [prevX, prevY] = polygon[j];\n const [x, y] = polygon[i];\n\n // count intersections\n if (y > testy != prevY > testy && testx < (prevX - x) * (testy - y) / (prevY - y) + x) {\n intersections++;\n }\n }\n\n // point is in polygon if intersection count is odd\n return intersections & 1;\n}\n\n// Expression function context object\nconst functionContext = {\n random() {\n return random();\n },\n // override default\n cumulativeNormal,\n cumulativeLogNormal,\n cumulativeUniform,\n densityNormal,\n densityLogNormal,\n densityUniform,\n quantileNormal,\n quantileLogNormal,\n quantileUniform,\n sampleNormal,\n sampleLogNormal,\n sampleUniform,\n isArray,\n isBoolean,\n isDate,\n isDefined(_) {\n return _ !== undefined;\n },\n isNumber,\n isObject,\n isRegExp,\n isString,\n isTuple,\n isValid(_) {\n return _ != null && _ === _;\n },\n toBoolean,\n toDate(_) {\n return toDate(_);\n },\n // suppress extra arguments\n toNumber,\n toString,\n indexof,\n join,\n lastindexof,\n replace,\n reverse,\n slice,\n flush,\n lerp,\n merge,\n pad,\n peek,\n pluck,\n span,\n inrange,\n truncate,\n rgb,\n lab,\n hcl,\n hsl,\n luminance,\n contrast,\n sequence: range$1,\n format,\n utcFormat,\n utcParse,\n utcOffset,\n utcSequence,\n timeFormat,\n timeParse,\n timeOffset,\n timeSequence,\n timeUnitSpecifier,\n monthFormat,\n monthAbbrevFormat,\n dayFormat,\n dayAbbrevFormat,\n quarter,\n utcquarter,\n week,\n utcweek,\n dayofyear,\n utcdayofyear,\n warn,\n info,\n debug,\n extent(_) {\n return extent(_);\n },\n // suppress extra arguments\n inScope,\n intersect,\n clampRange,\n pinchDistance,\n pinchAngle,\n screen,\n containerSize,\n windowSize,\n bandspace,\n setdata,\n pathShape,\n panLinear,\n panLog,\n panPow,\n panSymlog,\n zoomLinear,\n zoomLog,\n zoomPow,\n zoomSymlog,\n encode,\n modify,\n lassoAppend,\n lassoPath,\n intersectLasso\n};\nconst eventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'],\n // event functions\n eventPrefix = 'event.vega.',\n // event function prefix\n thisPrefix = 'this.',\n // function context prefix\n astVisitors = {}; // AST visitors for dependency analysis\n\n// export code generator parameters\nconst codegenParams = {\n forbidden: ['_'],\n allowed: ['datum', 'event', 'item'],\n fieldvar: 'datum',\n globalvar: id => `_[${stringValue(SignalPrefix + id)}]`,\n functions: buildFunctions,\n constants: constants,\n visitors: astVisitors\n};\n\n// export code generator\nconst codeGenerator = codegenExpression(codegenParams);\n\n// Build expression function registry\nfunction buildFunctions(codegen) {\n const fn = functions(codegen);\n eventFunctions.forEach(name => fn[name] = eventPrefix + name);\n for (const name in functionContext) {\n fn[name] = thisPrefix + name;\n }\n extend(fn, internalScaleFunctions(codegen, functionContext, astVisitors));\n return fn;\n}\n\n// Register an expression function\nfunction expressionFunction(name, fn, visitor) {\n if (arguments.length === 1) {\n return functionContext[name];\n }\n\n // register with the functionContext\n functionContext[name] = fn;\n\n // if there is an astVisitor register that, too\n if (visitor) astVisitors[name] = visitor;\n\n // if the code generator has already been initialized,\n // we need to also register the function with it\n if (codeGenerator) codeGenerator.functions[name] = thisPrefix + name;\n return this;\n}\n\n// register expression functions with ast visitors\nexpressionFunction('bandwidth', bandwidth, scaleVisitor);\nexpressionFunction('copy', copy, scaleVisitor);\nexpressionFunction('domain', domain, scaleVisitor);\nexpressionFunction('range', range, scaleVisitor);\nexpressionFunction('invert', invert, scaleVisitor);\nexpressionFunction('scale', scale, scaleVisitor);\nexpressionFunction('gradient', scaleGradient, scaleVisitor);\nexpressionFunction('geoArea', geoArea, scaleVisitor);\nexpressionFunction('geoBounds', geoBounds, scaleVisitor);\nexpressionFunction('geoCentroid', geoCentroid, scaleVisitor);\nexpressionFunction('geoShape', geoShape, scaleVisitor);\nexpressionFunction('geoScale', geoScale, scaleVisitor);\nexpressionFunction('indata', indata, indataVisitor);\nexpressionFunction('data', data, dataVisitor);\nexpressionFunction('treePath', treePath, dataVisitor);\nexpressionFunction('treeAncestors', treeAncestors, dataVisitor);\n\n// register Vega-Lite selection functions\nexpressionFunction('vlSelectionTest', selectionTest, selectionVisitor);\nexpressionFunction('vlSelectionIdTest', selectionIdTest, selectionVisitor);\nexpressionFunction('vlSelectionResolve', selectionResolve, selectionVisitor);\nexpressionFunction('vlSelectionTuples', selectionTuples);\n\nfunction parser (expr, scope) {\n const params = {};\n\n // parse the expression to an abstract syntax tree (ast)\n let ast;\n try {\n expr = isString(expr) ? expr : stringValue(expr) + '';\n ast = parseExpression(expr);\n } catch (err) {\n error('Expression parse error: ' + expr);\n }\n\n // analyze ast function calls for dependencies\n ast.visit(node => {\n if (node.type !== CallExpression) return;\n const name = node.callee.name,\n visit = codegenParams.visitors[name];\n if (visit) visit(name, node.arguments, scope, params);\n });\n\n // perform code generation\n const gen = codeGenerator(ast);\n\n // collect signal dependencies\n gen.globals.forEach(name => {\n const signalName = SignalPrefix + name;\n if (!hasOwnProperty(params, signalName) && scope.getSignal(name)) {\n params[signalName] = scope.signalRef(name);\n }\n });\n\n // return generated expression code and dependencies\n return {\n $expr: extend({\n code: gen.code\n }, scope.options.ast ? {\n ast\n } : null),\n $fields: gen.fields,\n $params: params\n };\n}\n\nexport { DataPrefix, IndexPrefix, ScalePrefix, SignalPrefix, bandspace, bandwidth, codeGenerator, codegenParams, containerSize, contrast, copy, data, dataVisitor, dayAbbrevFormat, dayFormat, debug, domain, encode, expressionFunction, format, functionContext, geoArea, geoBounds, geoCentroid, geoScale, geoShape, inScope, indata, indataVisitor, indexof, info, invert, join, lastindexof, luminance, merge, modify, monthAbbrevFormat, monthFormat, parser as parseExpression, pathShape, pinchAngle, pinchDistance, pluck, range, replace, reverse, scale, scaleGradient, scaleVisitor, screen, setdata, slice, timeFormat, timeParse, treeAncestors, treePath, utcFormat, utcParse, warn, windowSize };\n","import { toSet, stringValue, error, isArray, isObject, hasOwnProperty, accessor, key, field, array, compare, truthy } from 'vega-util';\nimport { tupleid } from 'vega-dataflow';\n\n/**\n * Parse a serialized dataflow specification.\n */\nfunction parse (spec) {\n const ctx = this,\n operators = spec.operators || [];\n\n // parse background\n if (spec.background) {\n ctx.background = spec.background;\n }\n\n // parse event configuration\n if (spec.eventConfig) {\n ctx.eventConfig = spec.eventConfig;\n }\n\n // parse locale configuration\n if (spec.locale) {\n ctx.locale = spec.locale;\n }\n\n // parse operators\n operators.forEach(entry => ctx.parseOperator(entry));\n\n // parse operator parameters\n operators.forEach(entry => ctx.parseOperatorParameters(entry));\n\n // parse streams\n (spec.streams || []).forEach(entry => ctx.parseStream(entry));\n\n // parse updates\n (spec.updates || []).forEach(entry => ctx.parseUpdate(entry));\n return ctx.resolve();\n}\n\nconst Skip = toSet(['rule']),\n Swap = toSet(['group', 'image', 'rect']);\nfunction adjustSpatial(encode, marktype) {\n let code = '';\n if (Skip[marktype]) return code;\n if (encode.x2) {\n if (encode.x) {\n if (Swap[marktype]) {\n code += 'if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;';\n }\n code += 'o.width=o.x2-o.x;';\n } else {\n code += 'o.x=o.x2-(o.width||0);';\n }\n }\n if (encode.xc) {\n code += 'o.x=o.xc-(o.width||0)/2;';\n }\n if (encode.y2) {\n if (encode.y) {\n if (Swap[marktype]) {\n code += 'if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;';\n }\n code += 'o.height=o.y2-o.y;';\n } else {\n code += 'o.y=o.y2-(o.height||0);';\n }\n }\n if (encode.yc) {\n code += 'o.y=o.yc-(o.height||0)/2;';\n }\n return code;\n}\nfunction canonicalType(type) {\n return (type + '').toLowerCase();\n}\nfunction isOperator(type) {\n return canonicalType(type) === 'operator';\n}\nfunction isCollect(type) {\n return canonicalType(type) === 'collect';\n}\n\nfunction expression(ctx, args, code) {\n // wrap code in return statement if expression does not terminate\n if (!code.endsWith(';')) {\n code = 'return(' + code + ');';\n }\n const fn = Function(...args.concat(code));\n return ctx && ctx.functions ? fn.bind(ctx.functions) : fn;\n}\n\n// generate code for comparing a single field\nfunction _compare(u, v, lt, gt) {\n return `((u = ${u}) < (v = ${v}) || u == null) && v != null ? ${lt}\n : (u > v || v == null) && u != null ? ${gt}\n : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? ${lt}\n : v !== v && u === u ? ${gt} : `;\n}\nvar expressionCodegen = {\n /**\n * Parse an expression used to update an operator value.\n */\n operator: (ctx, expr) => expression(ctx, ['_'], expr.code),\n /**\n * Parse an expression provided as an operator parameter value.\n */\n parameter: (ctx, expr) => expression(ctx, ['datum', '_'], expr.code),\n /**\n * Parse an expression applied to an event stream.\n */\n event: (ctx, expr) => expression(ctx, ['event'], expr.code),\n /**\n * Parse an expression used to handle an event-driven operator update.\n */\n handler: (ctx, expr) => {\n const code = `var datum=event.item&&event.item.datum;return ${expr.code};`;\n return expression(ctx, ['_', 'event'], code);\n },\n /**\n * Parse an expression that performs visual encoding.\n */\n encode: (ctx, encode) => {\n const {\n marktype,\n channels\n } = encode;\n let code = 'var o=item,datum=o.datum,m=0,$;';\n for (const name in channels) {\n const o = 'o[' + stringValue(name) + ']';\n code += `$=${channels[name].code};if(${o}!==$)${o}=$,m=1;`;\n }\n code += adjustSpatial(channels, marktype);\n code += 'return m;';\n return expression(ctx, ['item', '_'], code);\n },\n /**\n * Optimized code generators for access and comparison.\n */\n codegen: {\n get(path) {\n const ref = `[${path.map(stringValue).join('][')}]`;\n const get = Function('_', `return _${ref};`);\n get.path = ref;\n return get;\n },\n comparator(fields, orders) {\n let t;\n const map = (f, i) => {\n const o = orders[i];\n let u, v;\n if (f.path) {\n u = `a${f.path}`;\n v = `b${f.path}`;\n } else {\n (t = t || {})['f' + i] = f;\n u = `this.f${i}(a)`;\n v = `this.f${i}(b)`;\n }\n return _compare(u, v, -o, o);\n };\n const fn = Function('a', 'b', 'var u, v; return ' + fields.map(map).join('') + '0;');\n return t ? fn.bind(t) : fn;\n }\n }\n};\n\n/**\n * Parse a dataflow operator.\n */\nfunction parseOperator(spec) {\n const ctx = this;\n if (isOperator(spec.type) || !spec.type) {\n ctx.operator(spec, spec.update ? ctx.operatorExpression(spec.update) : null);\n } else {\n ctx.transform(spec, spec.type);\n }\n}\n\n/**\n * Parse and assign operator parameters.\n */\nfunction parseOperatorParameters(spec) {\n const ctx = this;\n if (spec.params) {\n const op = ctx.get(spec.id);\n if (!op) error('Invalid operator id: ' + spec.id);\n ctx.dataflow.connect(op, op.parameters(ctx.parseParameters(spec.params), spec.react, spec.initonly));\n }\n}\n\n/**\n * Parse a set of operator parameters.\n */\nfunction parseParameters(spec, params) {\n params = params || {};\n const ctx = this;\n for (const key in spec) {\n const value = spec[key];\n params[key] = isArray(value) ? value.map(v => parseParameter(v, ctx, params)) : parseParameter(value, ctx, params);\n }\n return params;\n}\n\n/**\n * Parse a single parameter.\n */\nfunction parseParameter(spec, ctx, params) {\n if (!spec || !isObject(spec)) return spec;\n for (let i = 0, n = PARSERS.length, p; i < n; ++i) {\n p = PARSERS[i];\n if (hasOwnProperty(spec, p.key)) {\n return p.parse(spec, ctx, params);\n }\n }\n return spec;\n}\n\n/** Reference parsers. */\nvar PARSERS = [{\n key: '$ref',\n parse: getOperator\n}, {\n key: '$key',\n parse: getKey\n}, {\n key: '$expr',\n parse: getExpression\n}, {\n key: '$field',\n parse: getField\n}, {\n key: '$encode',\n parse: getEncode\n}, {\n key: '$compare',\n parse: getCompare\n}, {\n key: '$context',\n parse: getContext\n}, {\n key: '$subflow',\n parse: getSubflow\n}, {\n key: '$tupleid',\n parse: getTupleId\n}];\n\n/**\n * Resolve an operator reference.\n */\nfunction getOperator(_, ctx) {\n return ctx.get(_.$ref) || error('Operator not defined: ' + _.$ref);\n}\n\n/**\n * Resolve an expression reference.\n */\nfunction getExpression(_, ctx, params) {\n if (_.$params) {\n // parse expression parameters\n ctx.parseParameters(_.$params, params);\n }\n const k = 'e:' + _.$expr.code;\n return ctx.fn[k] || (ctx.fn[k] = accessor(ctx.parameterExpression(_.$expr), _.$fields));\n}\n\n/**\n * Resolve a key accessor reference.\n */\nfunction getKey(_, ctx) {\n const k = 'k:' + _.$key + '_' + !!_.$flat;\n return ctx.fn[k] || (ctx.fn[k] = key(_.$key, _.$flat, ctx.expr.codegen));\n}\n\n/**\n * Resolve a field accessor reference.\n */\nfunction getField(_, ctx) {\n if (!_.$field) return null;\n const k = 'f:' + _.$field + '_' + _.$name;\n return ctx.fn[k] || (ctx.fn[k] = field(_.$field, _.$name, ctx.expr.codegen));\n}\n\n/**\n * Resolve a comparator function reference.\n */\nfunction getCompare(_, ctx) {\n // As of Vega 5.5.3, $tupleid sort is no longer used.\n // Keep here for now for backwards compatibility.\n const k = 'c:' + _.$compare + '_' + _.$order,\n c = array(_.$compare).map(_ => _ && _.$tupleid ? tupleid : _);\n return ctx.fn[k] || (ctx.fn[k] = compare(c, _.$order, ctx.expr.codegen));\n}\n\n/**\n * Resolve an encode operator reference.\n */\nfunction getEncode(_, ctx) {\n const spec = _.$encode,\n encode = {};\n for (const name in spec) {\n const enc = spec[name];\n encode[name] = accessor(ctx.encodeExpression(enc.$expr), enc.$fields);\n encode[name].output = enc.$output;\n }\n return encode;\n}\n\n/**\n * Resolve a context reference.\n */\nfunction getContext(_, ctx) {\n return ctx;\n}\n\n/**\n * Resolve a recursive subflow specification.\n */\nfunction getSubflow(_, ctx) {\n const spec = _.$subflow;\n return function (dataflow, key, parent) {\n const subctx = ctx.fork().parse(spec),\n op = subctx.get(spec.operators[0].id),\n p = subctx.signals.parent;\n if (p) p.set(parent);\n op.detachSubflow = () => ctx.detach(subctx);\n return op;\n };\n}\n\n/**\n * Resolve a tuple id reference.\n */\nfunction getTupleId() {\n return tupleid;\n}\n\n/**\n * Parse an event stream specification.\n */\nfunction parseStream (spec) {\n var ctx = this,\n filter = spec.filter != null ? ctx.eventExpression(spec.filter) : undefined,\n stream = spec.stream != null ? ctx.get(spec.stream) : undefined,\n args;\n if (spec.source) {\n stream = ctx.events(spec.source, spec.type, filter);\n } else if (spec.merge) {\n args = spec.merge.map(_ => ctx.get(_));\n stream = args[0].merge.apply(args[0], args.slice(1));\n }\n if (spec.between) {\n args = spec.between.map(_ => ctx.get(_));\n stream = stream.between(args[0], args[1]);\n }\n if (spec.filter) {\n stream = stream.filter(filter);\n }\n if (spec.throttle != null) {\n stream = stream.throttle(+spec.throttle);\n }\n if (spec.debounce != null) {\n stream = stream.debounce(+spec.debounce);\n }\n if (stream == null) {\n error('Invalid stream definition: ' + JSON.stringify(spec));\n }\n if (spec.consume) stream.consume(true);\n ctx.stream(spec, stream);\n}\n\n/**\n * Parse an event-driven operator update.\n */\nfunction parseUpdate (spec) {\n var ctx = this,\n srcid = isObject(srcid = spec.source) ? srcid.$ref : srcid,\n source = ctx.get(srcid),\n target = null,\n update = spec.update,\n params = undefined;\n if (!source) error('Source not defined: ' + spec.source);\n target = spec.target && spec.target.$expr ? ctx.eventExpression(spec.target.$expr) : ctx.get(spec.target);\n if (update && update.$expr) {\n if (update.$params) {\n params = ctx.parseParameters(update.$params);\n }\n update = ctx.handlerExpression(update.$expr);\n }\n ctx.update(spec, source, target, update, params);\n}\n\nconst SKIP = {\n skip: true\n};\nfunction getState(options) {\n var ctx = this,\n state = {};\n if (options.signals) {\n var signals = state.signals = {};\n Object.keys(ctx.signals).forEach(key => {\n const op = ctx.signals[key];\n if (options.signals(key, op)) {\n signals[key] = op.value;\n }\n });\n }\n if (options.data) {\n var data = state.data = {};\n Object.keys(ctx.data).forEach(key => {\n const dataset = ctx.data[key];\n if (options.data(key, dataset)) {\n data[key] = dataset.input.value;\n }\n });\n }\n if (ctx.subcontext && options.recurse !== false) {\n state.subcontext = ctx.subcontext.map(ctx => ctx.getState(options));\n }\n return state;\n}\nfunction setState(state) {\n var ctx = this,\n df = ctx.dataflow,\n data = state.data,\n signals = state.signals;\n Object.keys(signals || {}).forEach(key => {\n df.update(ctx.signals[key], signals[key], SKIP);\n });\n Object.keys(data || {}).forEach(key => {\n df.pulse(ctx.data[key].input, df.changeset().remove(truthy).insert(data[key]));\n });\n (state.subcontext || []).forEach((substate, i) => {\n const subctx = ctx.subcontext[i];\n if (subctx) subctx.setState(substate);\n });\n}\n\n/**\n * Context objects store the current parse state.\n * Enables lookup of parsed operators, event streams, accessors, etc.\n * Provides a 'fork' method for creating child contexts for subflows.\n */\nfunction context (df, transforms, functions, expr) {\n return new Context(df, transforms, functions, expr);\n}\nfunction Context(df, transforms, functions, expr) {\n this.dataflow = df;\n this.transforms = transforms;\n this.events = df.events.bind(df);\n this.expr = expr || expressionCodegen, this.signals = {};\n this.scales = {};\n this.nodes = {};\n this.data = {};\n this.fn = {};\n if (functions) {\n this.functions = Object.create(functions);\n this.functions.context = this;\n }\n}\nfunction Subcontext(ctx) {\n this.dataflow = ctx.dataflow;\n this.transforms = ctx.transforms;\n this.events = ctx.events;\n this.expr = ctx.expr;\n this.signals = Object.create(ctx.signals);\n this.scales = Object.create(ctx.scales);\n this.nodes = Object.create(ctx.nodes);\n this.data = Object.create(ctx.data);\n this.fn = Object.create(ctx.fn);\n if (ctx.functions) {\n this.functions = Object.create(ctx.functions);\n this.functions.context = this;\n }\n}\nContext.prototype = Subcontext.prototype = {\n fork() {\n const ctx = new Subcontext(this);\n (this.subcontext || (this.subcontext = [])).push(ctx);\n return ctx;\n },\n detach(ctx) {\n this.subcontext = this.subcontext.filter(c => c !== ctx);\n\n // disconnect all nodes in the subcontext\n // wipe out targets first for better efficiency\n const keys = Object.keys(ctx.nodes);\n for (const key of keys) ctx.nodes[key]._targets = null;\n for (const key of keys) ctx.nodes[key].detach();\n ctx.nodes = null;\n },\n get(id) {\n return this.nodes[id];\n },\n set(id, node) {\n return this.nodes[id] = node;\n },\n add(spec, op) {\n const ctx = this,\n df = ctx.dataflow,\n data = spec.value;\n ctx.set(spec.id, op);\n if (isCollect(spec.type) && data) {\n if (data.$ingest) {\n df.ingest(op, data.$ingest, data.$format);\n } else if (data.$request) {\n df.preload(op, data.$request, data.$format);\n } else {\n df.pulse(op, df.changeset().insert(data));\n }\n }\n if (spec.root) {\n ctx.root = op;\n }\n if (spec.parent) {\n let p = ctx.get(spec.parent.$ref);\n if (p) {\n df.connect(p, [op]);\n op.targets().add(p);\n } else {\n (ctx.unresolved = ctx.unresolved || []).push(() => {\n p = ctx.get(spec.parent.$ref);\n df.connect(p, [op]);\n op.targets().add(p);\n });\n }\n }\n if (spec.signal) {\n ctx.signals[spec.signal] = op;\n }\n if (spec.scale) {\n ctx.scales[spec.scale] = op;\n }\n if (spec.data) {\n for (const name in spec.data) {\n const data = ctx.data[name] || (ctx.data[name] = {});\n spec.data[name].forEach(role => data[role] = op);\n }\n }\n },\n resolve() {\n (this.unresolved || []).forEach(fn => fn());\n delete this.unresolved;\n return this;\n },\n operator(spec, update) {\n this.add(spec, this.dataflow.add(spec.value, update));\n },\n transform(spec, type) {\n this.add(spec, this.dataflow.add(this.transforms[canonicalType(type)]));\n },\n stream(spec, stream) {\n this.set(spec.id, stream);\n },\n update(spec, stream, target, update, params) {\n this.dataflow.on(stream, target, update, params, spec.options);\n },\n // expression parsing\n operatorExpression(expr) {\n return this.expr.operator(this, expr);\n },\n parameterExpression(expr) {\n return this.expr.parameter(this, expr);\n },\n eventExpression(expr) {\n return this.expr.event(this, expr);\n },\n handlerExpression(expr) {\n return this.expr.handler(this, expr);\n },\n encodeExpression(encode) {\n return this.expr.encode(this, encode);\n },\n // parse methods\n parse,\n parseOperator,\n parseOperatorParameters,\n parseParameters,\n parseStream,\n parseUpdate,\n // state methods\n getState,\n setState\n};\n\nexport { context };\n","import { isString, hasOwnProperty, error, truthy, constant, extend, array, isObject, isArray, toSet, debounce, isDate, inherits, stringValue } from 'vega-util';\nimport { changeset, isChangeSet, EventStream, transforms, Dataflow, asyncCallback } from 'vega-dataflow';\nimport { point, renderModule, CanvasHandler, RenderType, Scenegraph } from 'vega-scenegraph';\nimport { tickStep } from 'd3-array';\nimport { functionContext } from 'vega-functions';\nimport { context } from 'vega-runtime';\nimport { interval } from 'd3-timer';\nimport { locale } from 'vega-format';\n\n// initialize aria role and label attributes\nfunction initializeAria(view) {\n const el = view.container();\n if (el) {\n el.setAttribute('role', 'graphics-document');\n el.setAttribute('aria-roleDescription', 'visualization');\n ariaLabel(el, view.description());\n }\n}\n\n// update aria-label if we have a DOM container element\nfunction ariaLabel(el, desc) {\n if (el) desc == null ? el.removeAttribute('aria-label') : el.setAttribute('aria-label', desc);\n}\n\nfunction background (view) {\n // respond to background signal\n view.add(null, _ => {\n view._background = _.bg;\n view._resize = 1;\n return _.bg;\n }, {\n bg: view._signals.background\n });\n}\n\nconst Default = 'default';\nfunction cursor (view) {\n // get cursor signal, add to dataflow if needed\n const cursor = view._signals.cursor || (view._signals.cursor = view.add({\n user: Default,\n item: null\n }));\n\n // evaluate cursor on each pointermove event\n view.on(view.events('view', 'pointermove'), cursor, (_, event) => {\n const value = cursor.value,\n user = value ? isString(value) ? value : value.user : Default,\n item = event.item && event.item.cursor || null;\n return value && user === value.user && item == value.item ? value : {\n user: user,\n item: item\n };\n });\n\n // when cursor signal updates, set visible cursor\n view.add(null, function (_) {\n let user = _.cursor,\n item = this.value;\n if (!isString(user)) {\n item = user.item;\n user = user.user;\n }\n setCursor(view, user && user !== Default ? user : item || user);\n return item;\n }, {\n cursor: cursor\n });\n}\nfunction setCursor(view, cursor) {\n const el = view.globalCursor() ? typeof document !== 'undefined' && document.body : view.container();\n if (el) {\n return cursor == null ? el.style.removeProperty('cursor') : el.style.cursor = cursor;\n }\n}\n\nfunction dataref(view, name) {\n var data = view._runtime.data;\n if (!hasOwnProperty(data, name)) {\n error('Unrecognized data set: ' + name);\n }\n return data[name];\n}\nfunction data(name, values) {\n return arguments.length < 2 ? dataref(this, name).values.value : change.call(this, name, changeset().remove(truthy).insert(values));\n}\nfunction change(name, changes) {\n if (!isChangeSet(changes)) {\n error('Second argument to changes must be a changeset.');\n }\n const dataset = dataref(this, name);\n dataset.modified = true;\n return this.pulse(dataset.input, changes);\n}\nfunction insert(name, _) {\n return change.call(this, name, changeset().insert(_));\n}\nfunction remove(name, _) {\n return change.call(this, name, changeset().remove(_));\n}\n\nfunction width(view) {\n var padding = view.padding();\n return Math.max(0, view._viewWidth + padding.left + padding.right);\n}\nfunction height(view) {\n var padding = view.padding();\n return Math.max(0, view._viewHeight + padding.top + padding.bottom);\n}\nfunction offset(view) {\n var padding = view.padding(),\n origin = view._origin;\n return [padding.left + origin[0], padding.top + origin[1]];\n}\nfunction resizeRenderer(view) {\n var origin = offset(view),\n w = width(view),\n h = height(view);\n view._renderer.background(view.background());\n view._renderer.resize(w, h, origin);\n view._handler.origin(origin);\n view._resizeListeners.forEach(handler => {\n try {\n handler(w, h);\n } catch (error) {\n view.error(error);\n }\n });\n}\n\n/**\n * Extend an event with additional view-specific methods.\n * Adds a new property ('vega') to an event that provides a number\n * of methods for querying information about the current interaction.\n * The vega object provides the following methods:\n * view - Returns the backing View instance.\n * item - Returns the currently active scenegraph item (if any).\n * group - Returns the currently active scenegraph group (if any).\n * This method accepts a single string-typed argument indicating the name\n * of the desired parent group. The scenegraph will be traversed from\n * the item up towards the root to search for a matching group. If no\n * argument is provided the enclosing group for the active item is\n * returned, unless the item it itself a group, in which case it is\n * returned directly.\n * xy - Returns a two-element array containing the x and y coordinates for\n * mouse or touch events. For touch events, this is based on the first\n * elements in the changedTouches array. This method accepts a single\n * argument: either an item instance or mark name that should serve as\n * the reference coordinate system. If no argument is provided the\n * top-level view coordinate system is assumed.\n * x - Returns the current x-coordinate, accepts the same arguments as xy.\n * y - Returns the current y-coordinate, accepts the same arguments as xy.\n * @param {Event} event - The input event to extend.\n * @param {Item} item - The currently active scenegraph item (if any).\n * @return {Event} - The extended input event.\n */\nfunction eventExtend (view, event, item) {\n var r = view._renderer,\n el = r && r.canvas(),\n p,\n e,\n translate;\n if (el) {\n translate = offset(view);\n e = event.changedTouches ? event.changedTouches[0] : event;\n p = point(e, el);\n p[0] -= translate[0];\n p[1] -= translate[1];\n }\n event.dataflow = view;\n event.item = item;\n event.vega = extension(view, item, p);\n return event;\n}\nfunction extension(view, item, point) {\n const itemGroup = item ? item.mark.marktype === 'group' ? item : item.mark.group : null;\n function group(name) {\n var g = itemGroup,\n i;\n if (name) for (i = item; i; i = i.mark.group) {\n if (i.mark.name === name) {\n g = i;\n break;\n }\n }\n return g && g.mark && g.mark.interactive ? g : {};\n }\n function xy(item) {\n if (!item) return point;\n if (isString(item)) item = group(item);\n const p = point.slice();\n while (item) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n item = item.mark && item.mark.group;\n }\n return p;\n }\n return {\n view: constant(view),\n item: constant(item || {}),\n group: group,\n xy: xy,\n x: item => xy(item)[0],\n y: item => xy(item)[1]\n };\n}\n\nconst VIEW = 'view',\n TIMER = 'timer',\n WINDOW = 'window',\n NO_TRAP = {\n trap: false\n };\n\n/**\n * Initialize event handling configuration.\n * @param {object} config - The configuration settings.\n * @return {object}\n */\nfunction initializeEventConfig(config) {\n const events = extend({\n defaults: {}\n }, config);\n const unpack = (obj, keys) => {\n keys.forEach(k => {\n if (isArray(obj[k])) obj[k] = toSet(obj[k]);\n });\n };\n unpack(events.defaults, ['prevent', 'allow']);\n unpack(events, ['view', 'window', 'selector']);\n return events;\n}\nfunction trackEventListener(view, sources, type, handler) {\n view._eventListeners.push({\n type: type,\n sources: array(sources),\n handler: handler\n });\n}\nfunction prevent(view, type) {\n var def = view._eventConfig.defaults,\n prevent = def.prevent,\n allow = def.allow;\n return prevent === false || allow === true ? false : prevent === true || allow === false ? true : prevent ? prevent[type] : allow ? !allow[type] : view.preventDefault();\n}\nfunction permit(view, key, type) {\n const rule = view._eventConfig && view._eventConfig[key];\n if (rule === false || isObject(rule) && !rule[type]) {\n view.warn(`Blocked ${key} ${type} event listener.`);\n return false;\n }\n return true;\n}\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @return {EventStream}\n */\nfunction events(source, type, filter) {\n var view = this,\n s = new EventStream(filter),\n send = function (e, item) {\n view.runAsync(null, () => {\n if (source === VIEW && prevent(view, type)) {\n e.preventDefault();\n }\n s.receive(eventExtend(view, e, item));\n });\n },\n sources;\n if (source === TIMER) {\n if (permit(view, 'timer', type)) {\n view.timer(send, type);\n }\n } else if (source === VIEW) {\n if (permit(view, 'view', type)) {\n // send traps errors, so use {trap: false} option\n view.addEventListener(type, send, NO_TRAP);\n }\n } else {\n if (source === WINDOW) {\n if (permit(view, 'window', type) && typeof window !== 'undefined') {\n sources = [window];\n }\n } else if (typeof document !== 'undefined') {\n if (permit(view, 'selector', type)) {\n sources = Array.from(document.querySelectorAll(source));\n }\n }\n if (!sources) {\n view.warn('Can not resolve event source: ' + source);\n } else {\n for (var i = 0, n = sources.length; i < n; ++i) {\n sources[i].addEventListener(type, send);\n }\n trackEventListener(view, sources, type, send);\n }\n }\n return s;\n}\n\nfunction itemFilter(event) {\n return event.item;\n}\nfunction markTarget(event) {\n // grab upstream collector feeding the mark operator\n return event.item.mark.source;\n}\nfunction invoke(name) {\n return function (_, event) {\n return event.vega.view().changeset().encode(event.item, name);\n };\n}\nfunction hover (hoverSet, leaveSet) {\n hoverSet = [hoverSet || 'hover'];\n leaveSet = [leaveSet || 'update', hoverSet[0]];\n\n // invoke hover set upon pointerover\n this.on(this.events('view', 'pointerover', itemFilter), markTarget, invoke(hoverSet));\n\n // invoke leave set upon pointerout\n this.on(this.events('view', 'pointerout', itemFilter), markTarget, invoke(leaveSet));\n return this;\n}\n\n/**\n * Finalize a View instance that is being removed.\n * Cancel any running timers.\n * Remove all external event listeners.\n * Remove any currently displayed tooltip.\n */\nfunction finalize () {\n var tooltip = this._tooltip,\n timers = this._timers,\n listeners = this._eventListeners,\n n,\n m,\n e;\n n = timers.length;\n while (--n >= 0) {\n timers[n].stop();\n }\n n = listeners.length;\n while (--n >= 0) {\n e = listeners[n];\n m = e.sources.length;\n while (--m >= 0) {\n e.sources[m].removeEventListener(e.type, e.handler);\n }\n }\n if (tooltip) {\n tooltip.call(this, this._handler, null, null, null);\n }\n return this;\n}\n\nfunction element (tag, attr, text) {\n const el = document.createElement(tag);\n for (const key in attr) el.setAttribute(key, attr[key]);\n if (text != null) el.textContent = text;\n return el;\n}\n\nconst BindClass = 'vega-bind',\n NameClass = 'vega-bind-name',\n RadioClass = 'vega-bind-radio';\n\n/**\n * Bind a signal to an external HTML input element. The resulting two-way\n * binding will propagate input changes to signals, and propagate signal\n * changes to the input element state. If this view instance has no parent\n * element, we assume the view is headless and no bindings are created.\n * @param {Element|string} el - The parent DOM element to which the input\n * element should be appended as a child. If string-valued, this argument\n * will be treated as a CSS selector. If null or undefined, the parent\n * element of this view will be used as the element.\n * @param {object} param - The binding parameters which specify the signal\n * to bind to, the input element type, and type-specific configuration.\n * @return {View} - This view instance.\n */\nfunction bind (view, el, binding) {\n if (!el) return;\n const param = binding.param;\n let bind = binding.state;\n if (!bind) {\n bind = binding.state = {\n elements: null,\n active: false,\n set: null,\n update: value => {\n if (value != view.signal(param.signal)) {\n view.runAsync(null, () => {\n bind.source = true;\n view.signal(param.signal, value);\n });\n }\n }\n };\n if (param.debounce) {\n bind.update = debounce(param.debounce, bind.update);\n }\n }\n const create = param.input == null && param.element ? target : generate;\n create(bind, el, param, view);\n if (!bind.active) {\n view.on(view._signals[param.signal], null, () => {\n bind.source ? bind.source = false : bind.set(view.signal(param.signal));\n });\n bind.active = true;\n }\n return bind;\n}\n\n/**\n * Bind the signal to an external EventTarget.\n */\nfunction target(bind, node, param, view) {\n const type = param.event || 'input';\n const handler = () => bind.update(node.value);\n\n // initialize signal value to external input value\n view.signal(param.signal, node.value);\n\n // listen for changes on the element\n node.addEventListener(type, handler);\n\n // register with view, so we can remove it upon finalization\n trackEventListener(view, node, type, handler);\n\n // propagate change to element\n bind.set = value => {\n node.value = value;\n node.dispatchEvent(event(type));\n };\n}\nfunction event(type) {\n return typeof Event !== 'undefined' ? new Event(type) : {\n type\n };\n}\n\n/**\n * Generate an HTML input form element and bind it to a signal.\n */\nfunction generate(bind, el, param, view) {\n const value = view.signal(param.signal);\n const div = element('div', {\n 'class': BindClass\n });\n const wrapper = param.input === 'radio' ? div : div.appendChild(element('label'));\n wrapper.appendChild(element('span', {\n 'class': NameClass\n }, param.name || param.signal));\n el.appendChild(div);\n let input = form;\n switch (param.input) {\n case 'checkbox':\n input = checkbox;\n break;\n case 'select':\n input = select;\n break;\n case 'radio':\n input = radio;\n break;\n case 'range':\n input = range;\n break;\n }\n input(bind, wrapper, param, value);\n}\n\n/**\n * Generates an arbitrary input form element.\n * The input type is controlled via user-provided parameters.\n */\nfunction form(bind, el, param, value) {\n const node = element('input');\n for (const key in param) {\n if (key !== 'signal' && key !== 'element') {\n node.setAttribute(key === 'input' ? 'type' : key, param[key]);\n }\n }\n node.setAttribute('name', param.signal);\n node.value = value;\n el.appendChild(node);\n node.addEventListener('input', () => bind.update(node.value));\n bind.elements = [node];\n bind.set = value => node.value = value;\n}\n\n/**\n * Generates a checkbox input element.\n */\nfunction checkbox(bind, el, param, value) {\n const attr = {\n type: 'checkbox',\n name: param.signal\n };\n if (value) attr.checked = true;\n const node = element('input', attr);\n el.appendChild(node);\n node.addEventListener('change', () => bind.update(node.checked));\n bind.elements = [node];\n bind.set = value => node.checked = !!value || null;\n}\n\n/**\n * Generates a selection list input element.\n */\nfunction select(bind, el, param, value) {\n const node = element('select', {\n name: param.signal\n }),\n labels = param.labels || [];\n param.options.forEach((option, i) => {\n const attr = {\n value: option\n };\n if (valuesEqual(option, value)) attr.selected = true;\n node.appendChild(element('option', attr, (labels[i] || option) + ''));\n });\n el.appendChild(node);\n node.addEventListener('change', () => {\n bind.update(param.options[node.selectedIndex]);\n });\n bind.elements = [node];\n bind.set = value => {\n for (let i = 0, n = param.options.length; i < n; ++i) {\n if (valuesEqual(param.options[i], value)) {\n node.selectedIndex = i;\n return;\n }\n }\n };\n}\n\n/**\n * Generates a radio button group.\n */\nfunction radio(bind, el, param, value) {\n const group = element('span', {\n 'class': RadioClass\n }),\n labels = param.labels || [];\n el.appendChild(group);\n bind.elements = param.options.map((option, i) => {\n const attr = {\n type: 'radio',\n name: param.signal,\n value: option\n };\n if (valuesEqual(option, value)) attr.checked = true;\n const input = element('input', attr);\n input.addEventListener('change', () => bind.update(option));\n const label = element('label', {}, (labels[i] || option) + '');\n label.prepend(input);\n group.appendChild(label);\n return input;\n });\n bind.set = value => {\n const nodes = bind.elements,\n n = nodes.length;\n for (let i = 0; i < n; ++i) {\n if (valuesEqual(nodes[i].value, value)) nodes[i].checked = true;\n }\n };\n}\n\n/**\n * Generates a slider input element.\n */\nfunction range(bind, el, param, value) {\n value = value !== undefined ? value : (+param.max + +param.min) / 2;\n const max = param.max != null ? param.max : Math.max(100, +value) || 100,\n min = param.min || Math.min(0, max, +value) || 0,\n step = param.step || tickStep(min, max, 100);\n const node = element('input', {\n type: 'range',\n name: param.signal,\n min: min,\n max: max,\n step: step\n });\n node.value = value;\n const span = element('span', {}, +value);\n el.appendChild(node);\n el.appendChild(span);\n const update = () => {\n span.textContent = node.value;\n bind.update(+node.value);\n };\n\n // subscribe to both input and change\n node.addEventListener('input', update);\n node.addEventListener('change', update);\n bind.elements = [node];\n bind.set = value => {\n node.value = value;\n span.textContent = value;\n };\n}\nfunction valuesEqual(a, b) {\n return a === b || a + '' === b + '';\n}\n\nfunction initializeRenderer (view, r, el, constructor, scaleFactor, opt) {\n r = r || new constructor(view.loader());\n return r.initialize(el, width(view), height(view), offset(view), scaleFactor, opt).background(view.background());\n}\n\nfunction trap (view, fn) {\n return !fn ? null : function () {\n try {\n fn.apply(this, arguments);\n } catch (error) {\n view.error(error);\n }\n };\n}\n\nfunction initializeHandler (view, prevHandler, el, constructor) {\n // instantiate scenegraph handler\n const handler = new constructor(view.loader(), trap(view, view.tooltip())).scene(view.scenegraph().root).initialize(el, offset(view), view);\n\n // transfer event handlers\n if (prevHandler) {\n prevHandler.handlers().forEach(h => {\n handler.on(h.type, h.handler);\n });\n }\n return handler;\n}\n\nfunction initialize (el, elBind) {\n const view = this,\n type = view._renderType,\n config = view._eventConfig.bind,\n module = renderModule(type);\n\n // containing dom element\n el = view._el = el ? lookup(view, el, true) : null;\n\n // initialize aria attributes\n initializeAria(view);\n\n // select appropriate renderer & handler\n if (!module) view.error('Unrecognized renderer type: ' + type);\n const Handler = module.handler || CanvasHandler,\n Renderer = el ? module.renderer : module.headless;\n\n // initialize renderer and input handler\n view._renderer = !Renderer ? null : initializeRenderer(view, view._renderer, el, Renderer);\n view._handler = initializeHandler(view, view._handler, el, Handler);\n view._redraw = true;\n\n // initialize signal bindings\n if (el && config !== 'none') {\n elBind = elBind ? view._elBind = lookup(view, elBind, true) : el.appendChild(element('form', {\n 'class': 'vega-bindings'\n }));\n view._bind.forEach(_ => {\n if (_.param.element && config !== 'container') {\n _.element = lookup(view, _.param.element, !!_.param.input);\n }\n });\n view._bind.forEach(_ => {\n bind(view, _.element || elBind, _);\n });\n }\n return view;\n}\nfunction lookup(view, el, clear) {\n if (typeof el === 'string') {\n if (typeof document !== 'undefined') {\n el = document.querySelector(el);\n if (!el) {\n view.error('Signal bind element not found: ' + el);\n return null;\n }\n } else {\n view.error('DOM document instance not found.');\n return null;\n }\n }\n if (el && clear) {\n try {\n el.textContent = '';\n } catch (e) {\n el = null;\n view.error(e);\n }\n }\n return el;\n}\n\nconst number = _ => +_ || 0;\nconst paddingObject = _ => ({\n top: _,\n bottom: _,\n left: _,\n right: _\n});\nfunction padding (_) {\n return isObject(_) ? {\n top: number(_.top),\n bottom: number(_.bottom),\n left: number(_.left),\n right: number(_.right)\n } : paddingObject(number(_));\n}\n\n/**\n * Render the current scene in a headless fashion.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A Promise that resolves to a renderer.\n */\nasync function renderHeadless (view, type, scaleFactor, opt) {\n const module = renderModule(type),\n ctr = module && module.headless;\n if (!ctr) error('Unrecognized renderer type: ' + type);\n await view.runAsync();\n return initializeRenderer(view, null, null, ctr, scaleFactor, opt).renderAsync(view._scenegraph.root);\n}\n\n/**\n * Produce an image URL for the visualization. Depending on the type\n * parameter, the generated URL contains data for either a PNG or SVG image.\n * The URL can be used (for example) to download images of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @param {string} type - The image type. One of 'svg', 'png' or 'canvas'.\n * The 'canvas' and 'png' types are synonyms for a PNG image.\n * @return {Promise} - A promise that resolves to an image URL.\n */\nasync function renderToImageURL (type, scaleFactor) {\n if (type !== RenderType.Canvas && type !== RenderType.SVG && type !== RenderType.PNG) {\n error('Unrecognized image type: ' + type);\n }\n const r = await renderHeadless(this, type, scaleFactor);\n return type === RenderType.SVG ? toBlobURL(r.svg(), 'image/svg+xml') : r.canvas().toDataURL('image/png');\n}\nfunction toBlobURL(data, mime) {\n const blob = new Blob([data], {\n type: mime\n });\n return window.URL.createObjectURL(blob);\n}\n\n/**\n * Produce a Canvas instance containing a rendered visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to a Canvas instance.\n */\nasync function renderToCanvas (scaleFactor, opt) {\n const r = await renderHeadless(this, RenderType.Canvas, scaleFactor, opt);\n return r.canvas();\n}\n\n/**\n * Produce a rendered SVG string of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to an SVG string.\n */\nasync function renderToSVG (scaleFactor) {\n const r = await renderHeadless(this, RenderType.SVG, scaleFactor);\n return r.svg();\n}\n\nfunction runtime (view, spec, expr) {\n return context(view, transforms, functionContext, expr).parse(spec);\n}\n\nfunction scale(name) {\n var scales = this._runtime.scales;\n if (!hasOwnProperty(scales, name)) {\n error('Unrecognized scale or projection: ' + name);\n }\n return scales[name].value;\n}\n\nvar Width = 'width',\n Height = 'height',\n Padding = 'padding',\n Skip = {\n skip: true\n };\nfunction viewWidth(view, width) {\n var a = view.autosize(),\n p = view.padding();\n return width - (a && a.contains === Padding ? p.left + p.right : 0);\n}\nfunction viewHeight(view, height) {\n var a = view.autosize(),\n p = view.padding();\n return height - (a && a.contains === Padding ? p.top + p.bottom : 0);\n}\nfunction initializeResize(view) {\n var s = view._signals,\n w = s[Width],\n h = s[Height],\n p = s[Padding];\n function resetSize() {\n view._autosize = view._resize = 1;\n }\n\n // respond to width signal\n view._resizeWidth = view.add(null, _ => {\n view._width = _.size;\n view._viewWidth = viewWidth(view, _.size);\n resetSize();\n }, {\n size: w\n });\n\n // respond to height signal\n view._resizeHeight = view.add(null, _ => {\n view._height = _.size;\n view._viewHeight = viewHeight(view, _.size);\n resetSize();\n }, {\n size: h\n });\n\n // respond to padding signal\n const resizePadding = view.add(null, resetSize, {\n pad: p\n });\n\n // set rank to run immediately after source signal\n view._resizeWidth.rank = w.rank + 1;\n view._resizeHeight.rank = h.rank + 1;\n resizePadding.rank = p.rank + 1;\n}\nfunction resizeView(viewWidth, viewHeight, width, height, origin, auto) {\n this.runAfter(view => {\n let rerun = 0;\n\n // reset autosize flag\n view._autosize = 0;\n\n // width value changed: update signal, skip resize op\n if (view.width() !== width) {\n rerun = 1;\n view.signal(Width, width, Skip); // set width, skip update calc\n view._resizeWidth.skip(true); // skip width resize handler\n }\n\n // height value changed: update signal, skip resize op\n if (view.height() !== height) {\n rerun = 1;\n view.signal(Height, height, Skip); // set height, skip update calc\n view._resizeHeight.skip(true); // skip height resize handler\n }\n\n // view width changed: update view property, set resize flag\n if (view._viewWidth !== viewWidth) {\n view._resize = 1;\n view._viewWidth = viewWidth;\n }\n\n // view height changed: update view property, set resize flag\n if (view._viewHeight !== viewHeight) {\n view._resize = 1;\n view._viewHeight = viewHeight;\n }\n\n // origin changed: update view property, set resize flag\n if (view._origin[0] !== origin[0] || view._origin[1] !== origin[1]) {\n view._resize = 1;\n view._origin = origin;\n }\n\n // run dataflow on width/height signal change\n if (rerun) view.run('enter');\n if (auto) view.runAfter(v => v.resize());\n }, false, 1);\n}\n\n/**\n * Get the current view state, consisting of signal values and/or data sets.\n * @param {object} [options] - Options flags indicating which state to export.\n * If unspecified, all signals and data sets will be exported.\n * @param {function(string, Operator):boolean} [options.signals] - Optional\n * predicate function for testing if a signal should be included in the\n * exported state. If unspecified, all signals will be included, except for\n * those named 'parent' or those which refer to a Transform value.\n * @param {function(string, object):boolean} [options.data] - Optional\n * predicate function for testing if a data set's input should be included\n * in the exported state. If unspecified, all data sets that have been\n * explicitly modified will be included.\n * @param {boolean} [options.recurse=true] - Flag indicating if the exported\n * state should recursively include state from group mark sub-contexts.\n * @return {object} - An object containing the exported state values.\n */\nfunction getState(options) {\n return this._runtime.getState(options || {\n data: dataTest,\n signals: signalTest,\n recurse: true\n });\n}\nfunction dataTest(name, data) {\n return data.modified && isArray(data.input.value) && name.indexOf('_:vega:_');\n}\nfunction signalTest(name, op) {\n return !(name === 'parent' || op instanceof transforms.proxy);\n}\n\n/**\n * Sets the current view state and updates the view by invoking run.\n * @param {object} state - A state object containing signal and/or\n * data set values, following the format used by the getState method.\n * @return {View} - This view instance.\n */\nfunction setState(state) {\n this.runAsync(null, v => {\n v._trigger = false;\n v._runtime.setState(state);\n }, v => {\n v._trigger = true;\n });\n return this;\n}\n\nfunction timer (callback, delay) {\n function tick(elapsed) {\n callback({\n timestamp: Date.now(),\n elapsed: elapsed\n });\n }\n this._timers.push(interval(tick, delay));\n}\n\nfunction defaultTooltip (handler, event, item, value) {\n const el = handler.element();\n if (el) el.setAttribute('title', formatTooltip(value));\n}\nfunction formatTooltip(value) {\n return value == null ? '' : isArray(value) ? formatArray(value) : isObject(value) && !isDate(value) ? formatObject(value) : value + '';\n}\nfunction formatObject(obj) {\n return Object.keys(obj).map(key => {\n const v = obj[key];\n return key + ': ' + (isArray(v) ? formatArray(v) : formatValue(v));\n }).join('\\n');\n}\nfunction formatArray(value) {\n return '[' + value.map(formatValue).join(', ') + ']';\n}\nfunction formatValue(value) {\n return isArray(value) ? '[\\u2026]' : isObject(value) && !isDate(value) ? '{\\u2026}' : value;\n}\n\n/**\n * Create a new View instance from a Vega dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be performed upon dataflow runs.\n * @constructor\n * @param {object} spec - The Vega dataflow runtime specification.\n */\nfunction View(spec, options) {\n const view = this;\n options = options || {};\n Dataflow.call(view);\n if (options.loader) view.loader(options.loader);\n if (options.logger) view.logger(options.logger);\n if (options.logLevel != null) view.logLevel(options.logLevel);\n if (options.locale || spec.locale) {\n const loc = extend({}, spec.locale, options.locale);\n view.locale(locale(loc.number, loc.time));\n }\n view._el = null;\n view._elBind = null;\n view._renderType = options.renderer || RenderType.Canvas;\n view._scenegraph = new Scenegraph();\n const root = view._scenegraph.root;\n\n // initialize renderer, handler and event management\n view._renderer = null;\n view._tooltip = options.tooltip || defaultTooltip, view._redraw = true;\n view._handler = new CanvasHandler().scene(root);\n view._globalCursor = false;\n view._preventDefault = false;\n view._timers = [];\n view._eventListeners = [];\n view._resizeListeners = [];\n\n // initialize event configuration\n view._eventConfig = initializeEventConfig(spec.eventConfig);\n view.globalCursor(view._eventConfig.globalCursor);\n\n // initialize dataflow graph\n const ctx = runtime(view, spec, options.expr);\n view._runtime = ctx;\n view._signals = ctx.signals;\n view._bind = (spec.bindings || []).map(_ => ({\n state: null,\n param: extend({}, _)\n }));\n\n // initialize scenegraph\n if (ctx.root) ctx.root.set(root);\n root.source = ctx.data.root.input;\n view.pulse(ctx.data.root.input, view.changeset().insert(root.items));\n\n // initialize view size\n view._width = view.width();\n view._height = view.height();\n view._viewWidth = viewWidth(view, view._width);\n view._viewHeight = viewHeight(view, view._height);\n view._origin = [0, 0];\n view._resize = 0;\n view._autosize = 1;\n initializeResize(view);\n\n // initialize background color\n background(view);\n\n // initialize cursor\n cursor(view);\n\n // initialize view description\n view.description(spec.description);\n\n // initialize hover proessing, if requested\n if (options.hover) view.hover();\n\n // initialize DOM container(s) and renderer\n if (options.container) view.initialize(options.container, options.bind);\n}\nfunction lookupSignal(view, name) {\n return hasOwnProperty(view._signals, name) ? view._signals[name] : error('Unrecognized signal name: ' + stringValue(name));\n}\nfunction findOperatorHandler(op, handler) {\n const h = (op._targets || []).filter(op => op._update && op._update.handler === handler);\n return h.length ? h[0] : null;\n}\nfunction addOperatorListener(view, name, op, handler) {\n let h = findOperatorHandler(op, handler);\n if (!h) {\n h = trap(view, () => handler(name, op.value));\n h.handler = handler;\n view.on(op, null, h);\n }\n return view;\n}\nfunction removeOperatorListener(view, op, handler) {\n const h = findOperatorHandler(op, handler);\n if (h) op._targets.remove(h);\n return view;\n}\ninherits(View, Dataflow, {\n // -- DATAFLOW / RENDERING ----\n\n async evaluate(encode, prerun, postrun) {\n // evaluate dataflow and prerun\n await Dataflow.prototype.evaluate.call(this, encode, prerun);\n\n // render as needed\n if (this._redraw || this._resize) {\n try {\n if (this._renderer) {\n if (this._resize) {\n this._resize = 0;\n resizeRenderer(this);\n }\n await this._renderer.renderAsync(this._scenegraph.root);\n }\n this._redraw = false;\n } catch (e) {\n this.error(e);\n }\n }\n\n // evaluate postrun\n if (postrun) asyncCallback(this, postrun);\n return this;\n },\n dirty(item) {\n this._redraw = true;\n this._renderer && this._renderer.dirty(item);\n },\n // -- GET / SET ----\n\n description(text) {\n if (arguments.length) {\n const desc = text != null ? text + '' : null;\n if (desc !== this._desc) ariaLabel(this._el, this._desc = desc);\n return this;\n }\n return this._desc;\n },\n container() {\n return this._el;\n },\n scenegraph() {\n return this._scenegraph;\n },\n origin() {\n return this._origin.slice();\n },\n signal(name, value, options) {\n const op = lookupSignal(this, name);\n return arguments.length === 1 ? op.value : this.update(op, value, options);\n },\n width(_) {\n return arguments.length ? this.signal('width', _) : this.signal('width');\n },\n height(_) {\n return arguments.length ? this.signal('height', _) : this.signal('height');\n },\n padding(_) {\n return arguments.length ? this.signal('padding', padding(_)) : padding(this.signal('padding'));\n },\n autosize(_) {\n return arguments.length ? this.signal('autosize', _) : this.signal('autosize');\n },\n background(_) {\n return arguments.length ? this.signal('background', _) : this.signal('background');\n },\n renderer(type) {\n if (!arguments.length) return this._renderType;\n if (!renderModule(type)) error('Unrecognized renderer type: ' + type);\n if (type !== this._renderType) {\n this._renderType = type;\n this._resetRenderer();\n }\n return this;\n },\n tooltip(handler) {\n if (!arguments.length) return this._tooltip;\n if (handler !== this._tooltip) {\n this._tooltip = handler;\n this._resetRenderer();\n }\n return this;\n },\n loader(loader) {\n if (!arguments.length) return this._loader;\n if (loader !== this._loader) {\n Dataflow.prototype.loader.call(this, loader);\n this._resetRenderer();\n }\n return this;\n },\n resize() {\n // set flag to perform autosize\n this._autosize = 1;\n // touch autosize signal to ensure top-level ViewLayout runs\n return this.touch(lookupSignal(this, 'autosize'));\n },\n _resetRenderer() {\n if (this._renderer) {\n this._renderer = null;\n this.initialize(this._el, this._elBind);\n }\n },\n // -- SIZING ----\n _resizeView: resizeView,\n // -- EVENT HANDLING ----\n\n addEventListener(type, handler, options) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n // wrap callback in error handler\n callback = trap(this, handler);\n callback.raw = handler;\n }\n this._handler.on(type, callback);\n return this;\n },\n removeEventListener(type, handler) {\n var handlers = this._handler.handlers(type),\n i = handlers.length,\n h,\n t;\n\n // search registered handlers, remove if match found\n while (--i >= 0) {\n t = handlers[i].type;\n h = handlers[i].handler;\n if (type === t && (handler === h || handler === h.raw)) {\n this._handler.off(t, h);\n break;\n }\n }\n return this;\n },\n addResizeListener(handler) {\n const l = this._resizeListeners;\n if (l.indexOf(handler) < 0) {\n // add handler if it isn't already registered\n // note: error trapping handled elsewhere, so\n // no need to wrap handlers here\n l.push(handler);\n }\n return this;\n },\n removeResizeListener(handler) {\n var l = this._resizeListeners,\n i = l.indexOf(handler);\n if (i >= 0) {\n l.splice(i, 1);\n }\n return this;\n },\n addSignalListener(name, handler) {\n return addOperatorListener(this, name, lookupSignal(this, name), handler);\n },\n removeSignalListener(name, handler) {\n return removeOperatorListener(this, lookupSignal(this, name), handler);\n },\n addDataListener(name, handler) {\n return addOperatorListener(this, name, dataref(this, name).values, handler);\n },\n removeDataListener(name, handler) {\n return removeOperatorListener(this, dataref(this, name).values, handler);\n },\n globalCursor(_) {\n if (arguments.length) {\n if (this._globalCursor !== !!_) {\n const prev = setCursor(this, null); // clear previous cursor\n this._globalCursor = !!_;\n if (prev) setCursor(this, prev); // swap cursor\n }\n\n return this;\n } else {\n return this._globalCursor;\n }\n },\n preventDefault(_) {\n if (arguments.length) {\n this._preventDefault = _;\n return this;\n } else {\n return this._preventDefault;\n }\n },\n timer,\n events,\n finalize,\n hover,\n // -- DATA ----\n data,\n change,\n insert,\n remove,\n // -- SCALES --\n scale,\n // -- INITIALIZATION ----\n initialize,\n // -- HEADLESS RENDERING ----\n toImageURL: renderToImageURL,\n toCanvas: renderToCanvas,\n toSVG: renderToSVG,\n // -- SAVE / RESTORE STATE ----\n getState,\n setState\n});\n\nexport { View };\n","import {Timer, now} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer, total = delay;\n if (delay == null) return t.restart(callback, delay, time), t;\n t._restart = t.restart;\n t.restart = function(callback, delay, time) {\n delay = +delay, time = time == null ? now() : +time;\n t._restart(function tick(elapsed) {\n elapsed += total;\n t._restart(tick, total += delay, time);\n callback(elapsed);\n }, delay, time);\n }\n t.restart(callback, delay, time);\n return t;\n}\n","const VIEW = 'view',\n LBRACK = '[',\n RBRACK = ']',\n LBRACE = '{',\n RBRACE = '}',\n COLON = ':',\n COMMA = ',',\n NAME = '@',\n GT = '>',\n ILLEGAL = /[[\\]{}]/,\n DEFAULT_MARKS = {\n '*': 1,\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n };\nlet DEFAULT_SOURCE, MARKS;\n\n/**\n * Parse an event selector string.\n * Returns an array of event stream definitions.\n */\nfunction eventSelector (selector, source, marks) {\n DEFAULT_SOURCE = source || VIEW;\n MARKS = marks || DEFAULT_MARKS;\n return parseMerge(selector.trim()).map(parseSelector);\n}\nfunction isMarkType(type) {\n return MARKS[type];\n}\nfunction find(s, i, endChar, pushChar, popChar) {\n const n = s.length;\n let count = 0,\n c;\n for (; i < n; ++i) {\n c = s[i];\n if (!count && c === endChar) return i;else if (popChar && popChar.indexOf(c) >= 0) --count;else if (pushChar && pushChar.indexOf(c) >= 0) ++count;\n }\n return i;\n}\nfunction parseMerge(s) {\n const output = [],\n n = s.length;\n let start = 0,\n i = 0;\n while (i < n) {\n i = find(s, i, COMMA, LBRACK + LBRACE, RBRACK + RBRACE);\n output.push(s.substring(start, i).trim());\n start = ++i;\n }\n if (output.length === 0) {\n throw 'Empty event selector: ' + s;\n }\n return output;\n}\nfunction parseSelector(s) {\n return s[0] === '[' ? parseBetween(s) : parseStream(s);\n}\nfunction parseBetween(s) {\n const n = s.length;\n let i = 1,\n b;\n i = find(s, i, RBRACK, LBRACK, RBRACK);\n if (i === n) {\n throw 'Empty between selector: ' + s;\n }\n b = parseMerge(s.substring(1, i));\n if (b.length !== 2) {\n throw 'Between selector must have two elements: ' + s;\n }\n s = s.slice(i + 1).trim();\n if (s[0] !== GT) {\n throw 'Expected \\'>\\' after between selector: ' + s;\n }\n b = b.map(parseSelector);\n const stream = parseSelector(s.slice(1).trim());\n if (stream.between) {\n return {\n between: b,\n stream: stream\n };\n } else {\n stream.between = b;\n }\n return stream;\n}\nfunction parseStream(s) {\n const stream = {\n source: DEFAULT_SOURCE\n },\n source = [];\n let throttle = [0, 0],\n markname = 0,\n start = 0,\n n = s.length,\n i = 0,\n j,\n filter;\n\n // extract throttle from end\n if (s[n - 1] === RBRACE) {\n i = s.lastIndexOf(LBRACE);\n if (i >= 0) {\n try {\n throttle = parseThrottle(s.substring(i + 1, n - 1));\n } catch (e) {\n throw 'Invalid throttle specification: ' + s;\n }\n s = s.slice(0, i).trim();\n n = s.length;\n } else throw 'Unmatched right brace: ' + s;\n i = 0;\n }\n if (!n) throw s;\n\n // set name flag based on first char\n if (s[0] === NAME) markname = ++i;\n\n // extract first part of multi-part stream selector\n j = find(s, i, COLON);\n if (j < n) {\n source.push(s.substring(start, j).trim());\n start = i = ++j;\n }\n\n // extract remaining part of stream selector\n i = find(s, i, LBRACK);\n if (i === n) {\n source.push(s.substring(start, n).trim());\n } else {\n source.push(s.substring(start, i).trim());\n filter = [];\n start = ++i;\n if (start === n) throw 'Unmatched left bracket: ' + s;\n }\n\n // extract filters\n while (i < n) {\n i = find(s, i, RBRACK);\n if (i === n) throw 'Unmatched left bracket: ' + s;\n filter.push(s.substring(start, i).trim());\n if (i < n - 1 && s[++i] !== LBRACK) throw 'Expected left bracket: ' + s;\n start = ++i;\n }\n\n // marshall event stream specification\n if (!(n = source.length) || ILLEGAL.test(source[n - 1])) {\n throw 'Invalid event selector: ' + s;\n }\n if (n > 1) {\n stream.type = source[1];\n if (markname) {\n stream.markname = source[0].slice(1);\n } else if (isMarkType(source[0])) {\n stream.marktype = source[0];\n } else {\n stream.source = source[0];\n }\n } else {\n stream.type = source[0];\n }\n if (stream.type.slice(-1) === '!') {\n stream.consume = true;\n stream.type = stream.type.slice(0, -1);\n }\n if (filter != null) stream.filter = filter;\n if (throttle[0]) stream.throttle = throttle[0];\n if (throttle[1]) stream.debounce = throttle[1];\n return stream;\n}\nfunction parseThrottle(s) {\n const a = s.split(COMMA);\n if (!s.length || a.length > 2) throw s;\n return a.map(_ => {\n const x = +_;\n if (x !== x) throw s;\n return x;\n });\n}\n\nexport { eventSelector as parseSelector };\n","import { isObject, isArray, extend, hasOwnProperty, array, stringValue, peek, error, isString, splitAccessPath, mergeConfig } from 'vega-util';\nimport { parseExpression } from 'vega-functions';\nimport { parseSelector } from 'vega-event-selector';\nimport { isValidScaleType, isDiscrete, isQuantile, isContinuous, isDiscretizing } from 'vega-scale';\nimport { definition as definition$1 } from 'vega-dataflow';\n\nfunction parseAutosize (spec) {\n return isObject(spec) ? spec : {\n type: spec || 'pad'\n };\n}\n\nconst number = _ => +_ || 0;\nconst paddingObject = _ => ({\n top: _,\n bottom: _,\n left: _,\n right: _\n});\nfunction parsePadding (spec) {\n return !isObject(spec) ? paddingObject(number(spec)) : spec.signal ? spec : {\n top: number(spec.top),\n bottom: number(spec.bottom),\n left: number(spec.left),\n right: number(spec.right)\n };\n}\n\nconst encoder = _ => isObject(_) && !isArray(_) ? extend({}, _) : {\n value: _\n};\nfunction addEncode(object, name, value, set) {\n if (value != null) {\n const isEncoder = isObject(value) && !isArray(value) || isArray(value) && value.length && isObject(value[0]);\n\n // Always assign signal to update, even if the signal is from the enter block\n if (isEncoder) {\n object.update[name] = value;\n } else {\n object[set || 'enter'][name] = {\n value: value\n };\n }\n return 1;\n } else {\n return 0;\n }\n}\nfunction addEncoders(object, enter, update) {\n for (const name in enter) {\n addEncode(object, name, enter[name]);\n }\n for (const name in update) {\n addEncode(object, name, update[name], 'update');\n }\n}\nfunction extendEncode(encode, extra, skip) {\n for (const name in extra) {\n if (skip && hasOwnProperty(skip, name)) continue;\n encode[name] = extend(encode[name] || {}, extra[name]);\n }\n return encode;\n}\nfunction has(key, encode) {\n return encode && (encode.enter && encode.enter[key] || encode.update && encode.update[key]);\n}\n\nconst MarkRole = 'mark';\nconst FrameRole = 'frame';\nconst ScopeRole = 'scope';\nconst AxisRole = 'axis';\nconst AxisDomainRole = 'axis-domain';\nconst AxisGridRole = 'axis-grid';\nconst AxisLabelRole = 'axis-label';\nconst AxisTickRole = 'axis-tick';\nconst AxisTitleRole = 'axis-title';\nconst LegendRole = 'legend';\nconst LegendBandRole = 'legend-band';\nconst LegendEntryRole = 'legend-entry';\nconst LegendGradientRole = 'legend-gradient';\nconst LegendLabelRole = 'legend-label';\nconst LegendSymbolRole = 'legend-symbol';\nconst LegendTitleRole = 'legend-title';\nconst TitleRole = 'title';\nconst TitleTextRole = 'title-text';\nconst TitleSubtitleRole = 'title-subtitle';\n\nfunction applyDefaults (encode, type, role, style, config) {\n const defaults = {},\n enter = {};\n let update, key, skip, props;\n\n // if text mark, apply global lineBreak settings (#2370)\n key = 'lineBreak';\n if (type === 'text' && config[key] != null && !has(key, encode)) {\n applyDefault(defaults, key, config[key]);\n }\n\n // ignore legend and axis roles\n if (role == 'legend' || String(role).startsWith('axis')) {\n role = null;\n }\n\n // resolve mark config\n props = role === FrameRole ? config.group : role === MarkRole ? extend({}, config.mark, config[type]) : null;\n for (key in props) {\n // do not apply defaults if relevant fields are defined\n skip = has(key, encode) || (key === 'fill' || key === 'stroke') && (has('fill', encode) || has('stroke', encode));\n if (!skip) applyDefault(defaults, key, props[key]);\n }\n\n // resolve styles, apply with increasing precedence\n array(style).forEach(name => {\n const props = config.style && config.style[name];\n for (const key in props) {\n if (!has(key, encode)) {\n applyDefault(defaults, key, props[key]);\n }\n }\n });\n encode = extend({}, encode); // defensive copy\n for (key in defaults) {\n props = defaults[key];\n if (props.signal) {\n (update = update || {})[key] = props;\n } else {\n enter[key] = props;\n }\n }\n encode.enter = extend(enter, encode.enter);\n if (update) encode.update = extend(update, encode.update);\n return encode;\n}\nfunction applyDefault(defaults, key, value) {\n defaults[key] = value && value.signal ? {\n signal: value.signal\n } : {\n value: value\n };\n}\n\nconst scaleRef = scale => isString(scale) ? stringValue(scale) : scale.signal ? `(${scale.signal})` : field(scale);\nfunction entry$1(enc) {\n if (enc.gradient != null) {\n return gradient(enc);\n }\n let value = enc.signal ? `(${enc.signal})` : enc.color ? color(enc.color) : enc.field != null ? field(enc.field) : enc.value !== undefined ? stringValue(enc.value) : undefined;\n if (enc.scale != null) {\n value = scale(enc, value);\n }\n if (value === undefined) {\n value = null;\n }\n if (enc.exponent != null) {\n value = `pow(${value},${property(enc.exponent)})`;\n }\n if (enc.mult != null) {\n value += `*${property(enc.mult)}`;\n }\n if (enc.offset != null) {\n value += `+${property(enc.offset)}`;\n }\n if (enc.round) {\n value = `round(${value})`;\n }\n return value;\n}\nconst _color = (type, x, y, z) => `(${type}(${[x, y, z].map(entry$1).join(',')})+'')`;\nfunction color(enc) {\n return enc.c ? _color('hcl', enc.h, enc.c, enc.l) : enc.h || enc.s ? _color('hsl', enc.h, enc.s, enc.l) : enc.l || enc.a ? _color('lab', enc.l, enc.a, enc.b) : enc.r || enc.g || enc.b ? _color('rgb', enc.r, enc.g, enc.b) : null;\n}\nfunction gradient(enc) {\n // map undefined to null; expression lang does not allow undefined\n const args = [enc.start, enc.stop, enc.count].map(_ => _ == null ? null : stringValue(_));\n\n // trim null inputs from the end\n while (args.length && peek(args) == null) args.pop();\n args.unshift(scaleRef(enc.gradient));\n return `gradient(${args.join(',')})`;\n}\nfunction property(property) {\n return isObject(property) ? '(' + entry$1(property) + ')' : property;\n}\nfunction field(ref) {\n return resolveField(isObject(ref) ? ref : {\n datum: ref\n });\n}\nfunction resolveField(ref) {\n let object, level, field;\n if (ref.signal) {\n object = 'datum';\n field = ref.signal;\n } else if (ref.group || ref.parent) {\n level = Math.max(1, ref.level || 1);\n object = 'item';\n while (level-- > 0) {\n object += '.mark.group';\n }\n if (ref.parent) {\n field = ref.parent;\n object += '.datum';\n } else {\n field = ref.group;\n }\n } else if (ref.datum) {\n object = 'datum';\n field = ref.datum;\n } else {\n error('Invalid field reference: ' + stringValue(ref));\n }\n if (!ref.signal) {\n field = isString(field) ? splitAccessPath(field).map(stringValue).join('][') : resolveField(field);\n }\n return object + '[' + field + ']';\n}\nfunction scale(enc, value) {\n const scale = scaleRef(enc.scale);\n if (enc.range != null) {\n // pull value from scale range\n value = `lerp(_range(${scale}), ${+enc.range})`;\n } else {\n // run value through scale and/or pull scale bandwidth\n if (value !== undefined) value = `_scale(${scale}, ${value})`;\n if (enc.band) {\n value = (value ? value + '+' : '') + `_bandwidth(${scale})` + (+enc.band === 1 ? '' : '*' + property(enc.band));\n if (enc.extra) {\n // include logic to handle extraneous elements\n value = `(datum.extra ? _scale(${scale}, datum.extra.value) : ${value})`;\n }\n }\n if (value == null) value = '0';\n }\n return value;\n}\n\nfunction rule (enc) {\n let code = '';\n enc.forEach(rule => {\n const value = entry$1(rule);\n code += rule.test ? `(${rule.test})?${value}:` : value;\n });\n\n // if no else clause, terminate with null (#1366)\n if (peek(code) === ':') {\n code += 'null';\n }\n return code;\n}\n\nfunction parseEncode (encode, type, role, style, scope, params) {\n const enc = {};\n params = params || {};\n params.encoders = {\n $encode: enc\n };\n encode = applyDefaults(encode, type, role, style, scope.config);\n for (const key in encode) {\n enc[key] = parseBlock(encode[key], type, params, scope);\n }\n return params;\n}\nfunction parseBlock(block, marktype, params, scope) {\n const channels = {},\n fields = {};\n for (const name in block) {\n if (block[name] != null) {\n // skip any null entries\n channels[name] = parse$1(expr(block[name]), scope, params, fields);\n }\n }\n return {\n $expr: {\n marktype,\n channels\n },\n $fields: Object.keys(fields),\n $output: Object.keys(block)\n };\n}\nfunction expr(enc) {\n return isArray(enc) ? rule(enc) : entry$1(enc);\n}\nfunction parse$1(code, scope, params, fields) {\n const expr = parseExpression(code, scope);\n expr.$fields.forEach(name => fields[name] = 1);\n extend(params, expr.$params);\n return expr.$expr;\n}\n\nconst OUTER = 'outer',\n OUTER_INVALID = ['value', 'update', 'init', 'react', 'bind'];\nfunction outerError(prefix, name) {\n error(prefix + ' for \"outer\" push: ' + stringValue(name));\n}\nfunction parseSignal (signal, scope) {\n const name = signal.name;\n if (signal.push === OUTER) {\n // signal must already be defined, raise error if not\n if (!scope.signals[name]) outerError('No prior signal definition', name);\n // signal push must not use properties reserved for standard definition\n OUTER_INVALID.forEach(prop => {\n if (signal[prop] !== undefined) outerError('Invalid property ', prop);\n });\n } else {\n // define a new signal in the current scope\n const op = scope.addSignal(name, signal.value);\n if (signal.react === false) op.react = false;\n if (signal.bind) scope.addBinding(name, signal.bind);\n }\n}\n\nfunction Entry(type, value, params, parent) {\n this.id = -1;\n this.type = type;\n this.value = value;\n this.params = params;\n if (parent) this.parent = parent;\n}\nfunction entry(type, value, params, parent) {\n return new Entry(type, value, params, parent);\n}\nfunction operator(value, params) {\n return entry('operator', value, params);\n}\n\n// -----\n\nfunction ref(op) {\n const ref = {\n $ref: op.id\n };\n // if operator not yet registered, cache ref to resolve later\n if (op.id < 0) (op.refs = op.refs || []).push(ref);\n return ref;\n}\nfunction fieldRef$1(field, name) {\n return name ? {\n $field: field,\n $name: name\n } : {\n $field: field\n };\n}\nconst keyFieldRef = fieldRef$1('key');\nfunction compareRef(fields, orders) {\n return {\n $compare: fields,\n $order: orders\n };\n}\nfunction keyRef(fields, flat) {\n const ref = {\n $key: fields\n };\n if (flat) ref.$flat = true;\n return ref;\n}\n\n// -----\n\nconst Ascending = 'ascending';\nconst Descending = 'descending';\nfunction sortKey(sort) {\n return !isObject(sort) ? '' : (sort.order === Descending ? '-' : '+') + aggrField(sort.op, sort.field);\n}\nfunction aggrField(op, field) {\n return (op && op.signal ? '$' + op.signal : op || '') + (op && field ? '_' : '') + (field && field.signal ? '$' + field.signal : field || '');\n}\n\n// -----\n\nconst Scope$1 = 'scope';\nconst View = 'view';\nfunction isSignal(_) {\n return _ && _.signal;\n}\nfunction isExpr$1(_) {\n return _ && _.expr;\n}\nfunction hasSignal(_) {\n if (isSignal(_)) return true;\n if (isObject(_)) for (const key in _) {\n if (hasSignal(_[key])) return true;\n }\n return false;\n}\nfunction value(specValue, defaultValue) {\n return specValue != null ? specValue : defaultValue;\n}\nfunction deref(v) {\n return v && v.signal || v;\n}\n\nconst Timer = 'timer';\nfunction parseStream(stream, scope) {\n const method = stream.merge ? mergeStream : stream.stream ? nestedStream : stream.type ? eventStream : error('Invalid stream specification: ' + stringValue(stream));\n return method(stream, scope);\n}\nfunction eventSource(source) {\n return source === Scope$1 ? View : source || View;\n}\nfunction mergeStream(stream, scope) {\n const list = stream.merge.map(s => parseStream(s, scope)),\n entry = streamParameters({\n merge: list\n }, stream, scope);\n return scope.addStream(entry).id;\n}\nfunction nestedStream(stream, scope) {\n const id = parseStream(stream.stream, scope),\n entry = streamParameters({\n stream: id\n }, stream, scope);\n return scope.addStream(entry).id;\n}\nfunction eventStream(stream, scope) {\n let id;\n if (stream.type === Timer) {\n id = scope.event(Timer, stream.throttle);\n stream = {\n between: stream.between,\n filter: stream.filter\n };\n } else {\n id = scope.event(eventSource(stream.source), stream.type);\n }\n const entry = streamParameters({\n stream: id\n }, stream, scope);\n return Object.keys(entry).length === 1 ? id : scope.addStream(entry).id;\n}\nfunction streamParameters(entry, stream, scope) {\n let param = stream.between;\n if (param) {\n if (param.length !== 2) {\n error('Stream \"between\" parameter must have 2 entries: ' + stringValue(stream));\n }\n entry.between = [parseStream(param[0], scope), parseStream(param[1], scope)];\n }\n param = stream.filter ? [].concat(stream.filter) : [];\n if (stream.marktype || stream.markname || stream.markrole) {\n // add filter for mark type, name and/or role\n param.push(filterMark(stream.marktype, stream.markname, stream.markrole));\n }\n if (stream.source === Scope$1) {\n // add filter to limit events from sub-scope only\n param.push('inScope(event.item)');\n }\n if (param.length) {\n entry.filter = parseExpression('(' + param.join(')&&(') + ')', scope).$expr;\n }\n if ((param = stream.throttle) != null) {\n entry.throttle = +param;\n }\n if ((param = stream.debounce) != null) {\n entry.debounce = +param;\n }\n if (stream.consume) {\n entry.consume = true;\n }\n return entry;\n}\nfunction filterMark(type, name, role) {\n const item = 'event.item';\n return item + (type && type !== '*' ? '&&' + item + '.mark.marktype===\\'' + type + '\\'' : '') + (role ? '&&' + item + '.mark.role===\\'' + role + '\\'' : '') + (name ? '&&' + item + '.mark.name===\\'' + name + '\\'' : '');\n}\n\n// bypass expression parser for internal operator references\nconst OP_VALUE_EXPR = {\n code: '_.$value',\n ast: {\n type: 'Identifier',\n value: 'value'\n }\n};\nfunction parseUpdate (spec, scope, target) {\n const encode = spec.encode,\n entry = {\n target: target\n };\n let events = spec.events,\n update = spec.update,\n sources = [];\n if (!events) {\n error('Signal update missing events specification.');\n }\n\n // interpret as an event selector string\n if (isString(events)) {\n events = parseSelector(events, scope.isSubscope() ? Scope$1 : View);\n }\n\n // separate event streams from signal updates\n events = array(events).filter(s => s.signal || s.scale ? (sources.push(s), 0) : 1);\n\n // merge internal operator listeners\n if (sources.length > 1) {\n sources = [mergeSources(sources)];\n }\n\n // merge event streams, include as source\n if (events.length) {\n sources.push(events.length > 1 ? {\n merge: events\n } : events[0]);\n }\n if (encode != null) {\n if (update) error('Signal encode and update are mutually exclusive.');\n update = 'encode(item(),' + stringValue(encode) + ')';\n }\n\n // resolve update value\n entry.update = isString(update) ? parseExpression(update, scope) : update.expr != null ? parseExpression(update.expr, scope) : update.value != null ? update.value : update.signal != null ? {\n $expr: OP_VALUE_EXPR,\n $params: {\n $value: scope.signalRef(update.signal)\n }\n } : error('Invalid signal update specification.');\n if (spec.force) {\n entry.options = {\n force: true\n };\n }\n sources.forEach(source => scope.addUpdate(extend(streamSource(source, scope), entry)));\n}\nfunction streamSource(stream, scope) {\n return {\n source: stream.signal ? scope.signalRef(stream.signal) : stream.scale ? scope.scaleRef(stream.scale) : parseStream(stream, scope)\n };\n}\nfunction mergeSources(sources) {\n return {\n signal: '[' + sources.map(s => s.scale ? 'scale(\"' + s.scale + '\")' : s.signal) + ']'\n };\n}\n\nfunction parseSignalUpdates (signal, scope) {\n const op = scope.getSignal(signal.name);\n let expr = signal.update;\n if (signal.init) {\n if (expr) {\n error('Signals can not include both init and update expressions.');\n } else {\n expr = signal.init;\n op.initonly = true;\n }\n }\n if (expr) {\n expr = parseExpression(expr, scope);\n op.update = expr.$expr;\n op.params = expr.$params;\n }\n if (signal.on) {\n signal.on.forEach(_ => parseUpdate(_, scope, op.id));\n }\n}\n\nconst transform = name => (params, value, parent) => entry(name, value, params || undefined, parent);\nconst Aggregate = transform('aggregate');\nconst AxisTicks = transform('axisticks');\nconst Bound = transform('bound');\nconst Collect = transform('collect');\nconst Compare = transform('compare');\nconst DataJoin = transform('datajoin');\nconst Encode = transform('encode');\nconst Expression = transform('expression');\nconst Facet = transform('facet');\nconst Field = transform('field');\nconst Key = transform('key');\nconst LegendEntries = transform('legendentries');\nconst Load = transform('load');\nconst Mark = transform('mark');\nconst MultiExtent = transform('multiextent');\nconst MultiValues = transform('multivalues');\nconst Overlap = transform('overlap');\nconst Params = transform('params');\nconst PreFacet = transform('prefacet');\nconst Projection = transform('projection');\nconst Proxy = transform('proxy');\nconst Relay = transform('relay');\nconst Render = transform('render');\nconst Scale = transform('scale');\nconst Sieve = transform('sieve');\nconst SortItems = transform('sortitems');\nconst ViewLayout = transform('viewlayout');\nconst Values = transform('values');\n\nlet FIELD_REF_ID = 0;\nconst MULTIDOMAIN_SORT_OPS = {\n min: 'min',\n max: 'max',\n count: 'sum'\n};\nfunction initScale(spec, scope) {\n const type = spec.type || 'linear';\n if (!isValidScaleType(type)) {\n error('Unrecognized scale type: ' + stringValue(type));\n }\n scope.addScale(spec.name, {\n type,\n domain: undefined\n });\n}\nfunction parseScale(spec, scope) {\n const params = scope.getScale(spec.name).params;\n let key;\n params.domain = parseScaleDomain(spec.domain, spec, scope);\n if (spec.range != null) {\n params.range = parseScaleRange(spec, scope, params);\n }\n if (spec.interpolate != null) {\n parseScaleInterpolate(spec.interpolate, params);\n }\n if (spec.nice != null) {\n params.nice = parseScaleNice(spec.nice);\n }\n if (spec.bins != null) {\n params.bins = parseScaleBins(spec.bins, scope);\n }\n for (key in spec) {\n if (hasOwnProperty(params, key) || key === 'name') continue;\n params[key] = parseLiteral(spec[key], scope);\n }\n}\nfunction parseLiteral(v, scope) {\n return !isObject(v) ? v : v.signal ? scope.signalRef(v.signal) : error('Unsupported object: ' + stringValue(v));\n}\nfunction parseArray(v, scope) {\n return v.signal ? scope.signalRef(v.signal) : v.map(v => parseLiteral(v, scope));\n}\nfunction dataLookupError(name) {\n error('Can not find data set: ' + stringValue(name));\n}\n\n// -- SCALE DOMAIN ----\n\nfunction parseScaleDomain(domain, spec, scope) {\n if (!domain) {\n if (spec.domainMin != null || spec.domainMax != null) {\n error('No scale domain defined for domainMin/domainMax to override.');\n }\n return; // default domain\n }\n\n return domain.signal ? scope.signalRef(domain.signal) : (isArray(domain) ? explicitDomain : domain.fields ? multipleDomain : singularDomain)(domain, spec, scope);\n}\nfunction explicitDomain(domain, spec, scope) {\n return domain.map(v => parseLiteral(v, scope));\n}\nfunction singularDomain(domain, spec, scope) {\n const data = scope.getData(domain.data);\n if (!data) dataLookupError(domain.data);\n return isDiscrete(spec.type) ? data.valuesRef(scope, domain.field, parseSort(domain.sort, false)) : isQuantile(spec.type) ? data.domainRef(scope, domain.field) : data.extentRef(scope, domain.field);\n}\nfunction multipleDomain(domain, spec, scope) {\n const data = domain.data,\n fields = domain.fields.reduce((dom, d) => {\n d = isString(d) ? {\n data: data,\n field: d\n } : isArray(d) || d.signal ? fieldRef(d, scope) : d;\n dom.push(d);\n return dom;\n }, []);\n return (isDiscrete(spec.type) ? ordinalMultipleDomain : isQuantile(spec.type) ? quantileMultipleDomain : numericMultipleDomain)(domain, scope, fields);\n}\nfunction fieldRef(data, scope) {\n const name = '_:vega:_' + FIELD_REF_ID++,\n coll = Collect({});\n if (isArray(data)) {\n coll.value = {\n $ingest: data\n };\n } else if (data.signal) {\n const code = 'setdata(' + stringValue(name) + ',' + data.signal + ')';\n coll.params.input = scope.signalRef(code);\n }\n scope.addDataPipeline(name, [coll, Sieve({})]);\n return {\n data: name,\n field: 'data'\n };\n}\nfunction ordinalMultipleDomain(domain, scope, fields) {\n const sort = parseSort(domain.sort, true);\n let a, v;\n\n // get value counts for each domain field\n const counts = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.countsRef(scope, f.field, sort);\n });\n\n // aggregate the results from each domain field\n const p = {\n groupby: keyFieldRef,\n pulse: counts\n };\n if (sort) {\n a = sort.op || 'count';\n v = sort.field ? aggrField(a, sort.field) : 'count';\n p.ops = [MULTIDOMAIN_SORT_OPS[a]];\n p.fields = [scope.fieldRef(v)];\n p.as = [v];\n }\n a = scope.add(Aggregate(p));\n\n // collect aggregate output\n const c = scope.add(Collect({\n pulse: ref(a)\n }));\n\n // extract values for combined domain\n v = scope.add(Values({\n field: keyFieldRef,\n sort: scope.sortRef(sort),\n pulse: ref(c)\n }));\n return ref(v);\n}\nfunction parseSort(sort, multidomain) {\n if (sort) {\n if (!sort.field && !sort.op) {\n if (isObject(sort)) sort.field = 'key';else sort = {\n field: 'key'\n };\n } else if (!sort.field && sort.op !== 'count') {\n error('No field provided for sort aggregate op: ' + sort.op);\n } else if (multidomain && sort.field) {\n if (sort.op && !MULTIDOMAIN_SORT_OPS[sort.op]) {\n error('Multiple domain scales can not be sorted using ' + sort.op);\n }\n }\n }\n return sort;\n}\nfunction quantileMultipleDomain(domain, scope, fields) {\n // get value arrays for each domain field\n const values = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.domainRef(scope, f.field);\n });\n\n // combine value arrays\n return ref(scope.add(MultiValues({\n values: values\n })));\n}\nfunction numericMultipleDomain(domain, scope, fields) {\n // get extents for each domain field\n const extents = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.extentRef(scope, f.field);\n });\n\n // combine extents\n return ref(scope.add(MultiExtent({\n extents: extents\n })));\n}\n\n// -- SCALE BINS -----\n\nfunction parseScaleBins(v, scope) {\n return v.signal || isArray(v) ? parseArray(v, scope) : scope.objectProperty(v);\n}\n\n// -- SCALE NICE -----\n\nfunction parseScaleNice(nice) {\n return isObject(nice) ? {\n interval: parseLiteral(nice.interval),\n step: parseLiteral(nice.step)\n } : parseLiteral(nice);\n}\n\n// -- SCALE INTERPOLATION -----\n\nfunction parseScaleInterpolate(interpolate, params) {\n params.interpolate = parseLiteral(interpolate.type || interpolate);\n if (interpolate.gamma != null) {\n params.interpolateGamma = parseLiteral(interpolate.gamma);\n }\n}\n\n// -- SCALE RANGE -----\n\nfunction parseScaleRange(spec, scope, params) {\n const config = scope.config.range;\n let range = spec.range;\n if (range.signal) {\n return scope.signalRef(range.signal);\n } else if (isString(range)) {\n if (config && hasOwnProperty(config, range)) {\n spec = extend({}, spec, {\n range: config[range]\n });\n return parseScaleRange(spec, scope, params);\n } else if (range === 'width') {\n range = [0, {\n signal: 'width'\n }];\n } else if (range === 'height') {\n range = isDiscrete(spec.type) ? [0, {\n signal: 'height'\n }] : [{\n signal: 'height'\n }, 0];\n } else {\n error('Unrecognized scale range value: ' + stringValue(range));\n }\n } else if (range.scheme) {\n params.scheme = isArray(range.scheme) ? parseArray(range.scheme, scope) : parseLiteral(range.scheme, scope);\n if (range.extent) params.schemeExtent = parseArray(range.extent, scope);\n if (range.count) params.schemeCount = parseLiteral(range.count, scope);\n return;\n } else if (range.step) {\n params.rangeStep = parseLiteral(range.step, scope);\n return;\n } else if (isDiscrete(spec.type) && !isArray(range)) {\n return parseScaleDomain(range, spec, scope);\n } else if (!isArray(range)) {\n error('Unsupported range type: ' + stringValue(range));\n }\n return range.map(v => (isArray(v) ? parseArray : parseLiteral)(v, scope));\n}\n\nfunction parseProjection (proj, scope) {\n const config = scope.config.projection || {},\n params = {};\n for (const name in proj) {\n if (name === 'name') continue;\n params[name] = parseParameter$1(proj[name], name, scope);\n }\n\n // apply projection defaults from config\n for (const name in config) {\n if (params[name] == null) {\n params[name] = parseParameter$1(config[name], name, scope);\n }\n }\n scope.addProjection(proj.name, params);\n}\nfunction parseParameter$1(_, name, scope) {\n return isArray(_) ? _.map(_ => parseParameter$1(_, name, scope)) : !isObject(_) ? _ : _.signal ? scope.signalRef(_.signal) : name === 'fit' ? _ : error('Unsupported parameter object: ' + stringValue(_));\n}\n\nconst Top = 'top';\nconst Left = 'left';\nconst Right = 'right';\nconst Bottom = 'bottom';\nconst Center = 'center';\nconst Vertical = 'vertical';\nconst Start = 'start';\nconst Middle = 'middle';\nconst End = 'end';\nconst Index = 'index';\nconst Label = 'label';\nconst Offset = 'offset';\nconst Perc = 'perc';\nconst Perc2 = 'perc2';\nconst Value = 'value';\nconst GuideLabelStyle = 'guide-label';\nconst GuideTitleStyle = 'guide-title';\nconst GroupTitleStyle = 'group-title';\nconst GroupSubtitleStyle = 'group-subtitle';\nconst Symbols = 'symbol';\nconst Gradient = 'gradient';\nconst Discrete = 'discrete';\nconst Size = 'size';\nconst Shape = 'shape';\nconst Fill = 'fill';\nconst Stroke = 'stroke';\nconst StrokeWidth = 'strokeWidth';\nconst StrokeDash = 'strokeDash';\nconst Opacity = 'opacity';\n\n// Encoding channels supported by legends\n// In priority order of 'canonical' scale\nconst LegendScales = [Size, Shape, Fill, Stroke, StrokeWidth, StrokeDash, Opacity];\nconst Skip = {\n name: 1,\n style: 1,\n interactive: 1\n};\nconst zero = {\n value: 0\n};\nconst one = {\n value: 1\n};\n\nconst GroupMark = 'group';\nconst RectMark = 'rect';\nconst RuleMark = 'rule';\nconst SymbolMark = 'symbol';\nconst TextMark = 'text';\n\nfunction guideGroup (mark) {\n mark.type = GroupMark;\n mark.interactive = mark.interactive || false;\n return mark;\n}\n\nfunction lookup(spec, config) {\n const _ = (name, dflt) => value(spec[name], value(config[name], dflt));\n _.isVertical = s => Vertical === value(spec.direction, config.direction || (s ? config.symbolDirection : config.gradientDirection));\n _.gradientLength = () => value(spec.gradientLength, config.gradientLength || config.gradientWidth);\n _.gradientThickness = () => value(spec.gradientThickness, config.gradientThickness || config.gradientHeight);\n _.entryColumns = () => value(spec.columns, value(config.columns, +_.isVertical(true)));\n return _;\n}\nfunction getEncoding(name, encode) {\n const v = encode && (encode.update && encode.update[name] || encode.enter && encode.enter[name]);\n return v && v.signal ? v : v ? v.value : null;\n}\nfunction getStyle(name, scope, style) {\n const s = scope.config.style[style];\n return s && s[name];\n}\nfunction anchorExpr(s, e, m) {\n return `item.anchor === '${Start}' ? ${s} : item.anchor === '${End}' ? ${e} : ${m}`;\n}\nconst alignExpr$1 = anchorExpr(stringValue(Left), stringValue(Right), stringValue(Center));\nfunction tickBand(_) {\n const v = _('tickBand');\n let offset = _('tickOffset'),\n band,\n extra;\n if (!v) {\n // if no tick band entry, fall back on other properties\n band = _('bandPosition');\n extra = _('tickExtra');\n } else if (v.signal) {\n // if signal, augment code to interpret values\n band = {\n signal: `(${v.signal}) === 'extent' ? 1 : 0.5`\n };\n extra = {\n signal: `(${v.signal}) === 'extent'`\n };\n if (!isObject(offset)) {\n offset = {\n signal: `(${v.signal}) === 'extent' ? 0 : ${offset}`\n };\n }\n } else if (v === 'extent') {\n // if constant, simply set values\n band = 1;\n extra = true;\n offset = 0;\n } else {\n band = 0.5;\n extra = false;\n }\n return {\n extra,\n band,\n offset\n };\n}\nfunction extendOffset(value, offset) {\n return !offset ? value : !value ? offset : !isObject(value) ? {\n value,\n offset\n } : Object.assign({}, value, {\n offset: extendOffset(value.offset, offset)\n });\n}\n\nfunction guideMark (mark, extras) {\n if (extras) {\n mark.name = extras.name;\n mark.style = extras.style || mark.style;\n mark.interactive = !!extras.interactive;\n mark.encode = extendEncode(mark.encode, extras, Skip);\n } else {\n mark.interactive = false;\n }\n return mark;\n}\n\nfunction legendGradient (spec, scale, config, userEncode) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = _.gradientThickness(),\n length = _.gradientLength();\n let enter, start, stop, width, height;\n if (vertical) {\n start = [0, 1];\n stop = [0, 0];\n width = thickness;\n height = length;\n } else {\n start = [0, 0];\n stop = [1, 0];\n width = length;\n height = thickness;\n }\n const encode = {\n enter: enter = {\n opacity: zero,\n x: zero,\n y: zero,\n width: encoder(width),\n height: encoder(height)\n },\n update: extend({}, enter, {\n opacity: one,\n fill: {\n gradient: scale,\n start: start,\n stop: stop\n }\n }),\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gradientStrokeColor'),\n strokeWidth: _('gradientStrokeWidth')\n }, {\n // update\n opacity: _('gradientOpacity')\n });\n return guideMark({\n type: RectMark,\n role: LegendGradientRole,\n encode\n }, userEncode);\n}\n\nfunction legendGradientDiscrete (spec, scale, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = _.gradientThickness(),\n length = _.gradientLength();\n let u,\n v,\n uu,\n vv,\n adjust = '';\n vertical ? (u = 'y', uu = 'y2', v = 'x', vv = 'width', adjust = '1-') : (u = 'x', uu = 'x2', v = 'y', vv = 'height');\n const enter = {\n opacity: zero,\n fill: {\n scale: scale,\n field: Value\n }\n };\n enter[u] = {\n signal: adjust + 'datum.' + Perc,\n mult: length\n };\n enter[v] = zero;\n enter[uu] = {\n signal: adjust + 'datum.' + Perc2,\n mult: length\n };\n enter[vv] = encoder(thickness);\n const encode = {\n enter: enter,\n update: extend({}, enter, {\n opacity: one\n }),\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gradientStrokeColor'),\n strokeWidth: _('gradientStrokeWidth')\n }, {\n // update\n opacity: _('gradientOpacity')\n });\n return guideMark({\n type: RectMark,\n role: LegendBandRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nconst alignExpr = `datum.${Perc}<=0?\"${Left}\":datum.${Perc}>=1?\"${Right}\":\"${Center}\"`,\n baselineExpr = `datum.${Perc}<=0?\"${Bottom}\":datum.${Perc}>=1?\"${Top}\":\"${Middle}\"`;\nfunction legendGradientLabels (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = encoder(_.gradientThickness()),\n length = _.gradientLength();\n let overlap = _('labelOverlap'),\n enter,\n update,\n u,\n v,\n adjust = '';\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one,\n text: {\n field: Label\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontStyle: _('labelFontStyle'),\n fontWeight: _('labelFontWeight'),\n limit: value(spec.labelLimit, config.gradientLabelLimit)\n });\n if (vertical) {\n enter.align = {\n value: 'left'\n };\n enter.baseline = update.baseline = {\n signal: baselineExpr\n };\n u = 'y';\n v = 'x';\n adjust = '1-';\n } else {\n enter.align = update.align = {\n signal: alignExpr\n };\n enter.baseline = {\n value: 'top'\n };\n u = 'x';\n v = 'y';\n }\n enter[u] = update[u] = {\n signal: adjust + 'datum.' + Perc,\n mult: length\n };\n enter[v] = update[v] = thickness;\n thickness.offset = value(spec.labelOffset, config.gradientLabelOffset) || 0;\n overlap = overlap ? {\n separation: _('labelSeparation'),\n method: overlap,\n order: 'datum.' + Index\n } : undefined;\n\n // type, role, style, key, dataRef, encode, extras\n return guideMark({\n type: TextMark,\n role: LegendLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: dataRef,\n encode,\n overlap\n }, userEncode);\n}\n\n// userEncode is top-level, includes entries, symbols, labels\nfunction legendSymbolGroups (spec, config, userEncode, dataRef, columns) {\n const _ = lookup(spec, config),\n entries = userEncode.entries,\n interactive = !!(entries && entries.interactive),\n name = entries ? entries.name : undefined,\n height = _('clipHeight'),\n symbolOffset = _('symbolOffset'),\n valueRef = {\n data: 'value'\n },\n xSignal = `(${columns}) ? datum.${Offset} : datum.${Size}`,\n yEncode = height ? encoder(height) : {\n field: Size\n },\n index = `datum.${Index}`,\n ncols = `max(1, ${columns})`;\n let encode, enter, update, nrows, sort;\n yEncode.mult = 0.5;\n\n // -- LEGEND SYMBOLS --\n encode = {\n enter: enter = {\n opacity: zero,\n x: {\n signal: xSignal,\n mult: 0.5,\n offset: symbolOffset\n },\n y: yEncode\n },\n update: update = {\n opacity: one,\n x: enter.x,\n y: enter.y\n },\n exit: {\n opacity: zero\n }\n };\n let baseFill = null,\n baseStroke = null;\n if (!spec.fill) {\n baseFill = config.symbolBaseFillColor;\n baseStroke = config.symbolBaseStrokeColor;\n }\n addEncoders(encode, {\n fill: _('symbolFillColor', baseFill),\n shape: _('symbolType'),\n size: _('symbolSize'),\n stroke: _('symbolStrokeColor', baseStroke),\n strokeDash: _('symbolDash'),\n strokeDashOffset: _('symbolDashOffset'),\n strokeWidth: _('symbolStrokeWidth')\n }, {\n // update\n opacity: _('symbolOpacity')\n });\n LegendScales.forEach(scale => {\n if (spec[scale]) {\n update[scale] = enter[scale] = {\n scale: spec[scale],\n field: Value\n };\n }\n });\n const symbols = guideMark({\n type: SymbolMark,\n role: LegendSymbolRole,\n key: Value,\n from: valueRef,\n clip: height ? true : undefined,\n encode\n }, userEncode.symbols);\n\n // -- LEGEND LABELS --\n const labelOffset = encoder(symbolOffset);\n labelOffset.offset = _('labelOffset');\n encode = {\n enter: enter = {\n opacity: zero,\n x: {\n signal: xSignal,\n offset: labelOffset\n },\n y: yEncode\n },\n update: update = {\n opacity: one,\n text: {\n field: Label\n },\n x: enter.x,\n y: enter.y\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n align: _('labelAlign'),\n baseline: _('labelBaseline'),\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontStyle: _('labelFontStyle'),\n fontWeight: _('labelFontWeight'),\n limit: _('labelLimit')\n });\n const labels = guideMark({\n type: TextMark,\n role: LegendLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: valueRef,\n encode\n }, userEncode.labels);\n\n // -- LEGEND ENTRY GROUPS --\n encode = {\n enter: {\n noBound: {\n value: !height\n },\n // ignore width/height in bounds calc\n width: zero,\n height: height ? encoder(height) : zero,\n opacity: zero\n },\n exit: {\n opacity: zero\n },\n update: update = {\n opacity: one,\n row: {\n signal: null\n },\n column: {\n signal: null\n }\n }\n };\n\n // annotate and sort groups to ensure correct ordering\n if (_.isVertical(true)) {\n nrows = `ceil(item.mark.items.length / ${ncols})`;\n update.row.signal = `${index}%${nrows}`;\n update.column.signal = `floor(${index} / ${nrows})`;\n sort = {\n field: ['row', index]\n };\n } else {\n update.row.signal = `floor(${index} / ${ncols})`;\n update.column.signal = `${index} % ${ncols}`;\n sort = {\n field: index\n };\n }\n // handle zero column case (implies infinite columns)\n update.column.signal = `(${columns})?${update.column.signal}:${index}`;\n\n // facet legend entries into sub-groups\n dataRef = {\n facet: {\n data: dataRef,\n name: 'value',\n groupby: Index\n }\n };\n return guideGroup({\n role: ScopeRole,\n from: dataRef,\n encode: extendEncode(encode, entries, Skip),\n marks: [symbols, labels],\n name,\n interactive,\n sort\n });\n}\nfunction legendSymbolLayout(spec, config) {\n const _ = lookup(spec, config);\n\n // layout parameters for legend entries\n return {\n align: _('gridAlign'),\n columns: _.entryColumns(),\n center: {\n row: true,\n column: false\n },\n padding: {\n row: _('rowPadding'),\n column: _('columnPadding')\n }\n };\n}\n\n// expression logic for align, anchor, angle, and baseline calculation\nconst isL = 'item.orient === \"left\"',\n isR = 'item.orient === \"right\"',\n isLR = `(${isL} || ${isR})`,\n isVG = `datum.vgrad && ${isLR}`,\n baseline = anchorExpr('\"top\"', '\"bottom\"', '\"middle\"'),\n alignFlip = anchorExpr('\"right\"', '\"left\"', '\"center\"'),\n exprAlign = `datum.vgrad && ${isR} ? (${alignFlip}) : (${isLR} && !(datum.vgrad && ${isL})) ? \"left\" : ${alignExpr$1}`,\n exprAnchor = `item._anchor || (${isLR} ? \"middle\" : \"start\")`,\n exprAngle = `${isVG} ? (${isL} ? -90 : 90) : 0`,\n exprBaseline = `${isLR} ? (datum.vgrad ? (${isR} ? \"bottom\" : \"top\") : ${baseline}) : \"top\"`;\nfunction legendTitle (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config);\n const encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: one,\n x: {\n field: {\n group: 'padding'\n }\n },\n y: {\n field: {\n group: 'padding'\n }\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n orient: _('titleOrient'),\n _anchor: _('titleAnchor'),\n anchor: {\n signal: exprAnchor\n },\n angle: {\n signal: exprAngle\n },\n align: {\n signal: exprAlign\n },\n baseline: {\n signal: exprBaseline\n },\n text: spec.title,\n fill: _('titleColor'),\n fillOpacity: _('titleOpacity'),\n font: _('titleFont'),\n fontSize: _('titleFontSize'),\n fontStyle: _('titleFontStyle'),\n fontWeight: _('titleFontWeight'),\n limit: _('titleLimit'),\n lineHeight: _('titleLineHeight')\n }, {\n // require update\n align: _('titleAlign'),\n baseline: _('titleBaseline')\n });\n return guideMark({\n type: TextMark,\n role: LegendTitleRole,\n style: GuideTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction clip (clip, scope) {\n let expr;\n if (isObject(clip)) {\n if (clip.signal) {\n expr = clip.signal;\n } else if (clip.path) {\n expr = 'pathShape(' + param(clip.path) + ')';\n } else if (clip.sphere) {\n expr = 'geoShape(' + param(clip.sphere) + ', {type: \"Sphere\"})';\n }\n }\n return expr ? scope.signalRef(expr) : !!clip;\n}\nfunction param(value) {\n return isObject(value) && value.signal ? value.signal : stringValue(value);\n}\n\nfunction getRole (spec) {\n const role = spec.role || '';\n return !role.indexOf('axis') || !role.indexOf('legend') || !role.indexOf('title') ? role : spec.type === GroupMark ? ScopeRole : role || MarkRole;\n}\n\nfunction definition (spec) {\n return {\n marktype: spec.type,\n name: spec.name || undefined,\n role: spec.role || getRole(spec),\n zindex: +spec.zindex || undefined,\n aria: spec.aria,\n description: spec.description\n };\n}\n\nfunction interactive (spec, scope) {\n return spec && spec.signal ? scope.signalRef(spec.signal) : spec === false ? false : true;\n}\n\n/**\n * Parse a data transform specification.\n */\nfunction parseTransform (spec, scope) {\n const def = definition$1(spec.type);\n if (!def) error('Unrecognized transform type: ' + stringValue(spec.type));\n const t = entry(def.type.toLowerCase(), null, parseParameters(def, spec, scope));\n if (spec.signal) scope.addSignal(spec.signal, scope.proxy(t));\n t.metadata = def.metadata || {};\n return t;\n}\n\n/**\n * Parse all parameters of a data transform.\n */\nfunction parseParameters(def, spec, scope) {\n const params = {},\n n = def.params.length;\n for (let i = 0; i < n; ++i) {\n const pdef = def.params[i];\n params[pdef.name] = parseParameter(pdef, spec, scope);\n }\n return params;\n}\n\n/**\n * Parse a data transform parameter.\n */\nfunction parseParameter(def, spec, scope) {\n const type = def.type,\n value = spec[def.name];\n if (type === 'index') {\n return parseIndexParameter(def, spec, scope);\n } else if (value === undefined) {\n if (def.required) {\n error('Missing required ' + stringValue(spec.type) + ' parameter: ' + stringValue(def.name));\n }\n return;\n } else if (type === 'param') {\n return parseSubParameters(def, spec, scope);\n } else if (type === 'projection') {\n return scope.projectionRef(spec[def.name]);\n }\n return def.array && !isSignal(value) ? value.map(v => parameterValue(def, v, scope)) : parameterValue(def, value, scope);\n}\n\n/**\n * Parse a single parameter value.\n */\nfunction parameterValue(def, value, scope) {\n const type = def.type;\n if (isSignal(value)) {\n return isExpr(type) ? error('Expression references can not be signals.') : isField(type) ? scope.fieldRef(value) : isCompare(type) ? scope.compareRef(value) : scope.signalRef(value.signal);\n } else {\n const expr = def.expr || isField(type);\n return expr && outerExpr(value) ? scope.exprRef(value.expr, value.as) : expr && outerField(value) ? fieldRef$1(value.field, value.as) : isExpr(type) ? parseExpression(value, scope) : isData(type) ? ref(scope.getData(value).values) : isField(type) ? fieldRef$1(value) : isCompare(type) ? scope.compareRef(value) : value;\n }\n}\n\n/**\n * Parse parameter for accessing an index of another data set.\n */\nfunction parseIndexParameter(def, spec, scope) {\n if (!isString(spec.from)) {\n error('Lookup \"from\" parameter must be a string literal.');\n }\n return scope.getData(spec.from).lookupRef(scope, spec.key);\n}\n\n/**\n * Parse a parameter that contains one or more sub-parameter objects.\n */\nfunction parseSubParameters(def, spec, scope) {\n const value = spec[def.name];\n if (def.array) {\n if (!isArray(value)) {\n // signals not allowed!\n error('Expected an array of sub-parameters. Instead: ' + stringValue(value));\n }\n return value.map(v => parseSubParameter(def, v, scope));\n } else {\n return parseSubParameter(def, value, scope);\n }\n}\n\n/**\n * Parse a sub-parameter object.\n */\nfunction parseSubParameter(def, value, scope) {\n const n = def.params.length;\n let pdef;\n\n // loop over defs to find matching key\n for (let i = 0; i < n; ++i) {\n pdef = def.params[i];\n for (const k in pdef.key) {\n if (pdef.key[k] !== value[k]) {\n pdef = null;\n break;\n }\n }\n if (pdef) break;\n }\n // raise error if matching key not found\n if (!pdef) error('Unsupported parameter: ' + stringValue(value));\n\n // parse params, create Params transform, return ref\n const params = extend(parseParameters(pdef, value, scope), pdef.key);\n return ref(scope.add(Params(params)));\n}\n\n// -- Utilities -----\n\nconst outerExpr = _ => _ && _.expr;\nconst outerField = _ => _ && _.field;\nconst isData = _ => _ === 'data';\nconst isExpr = _ => _ === 'expr';\nconst isField = _ => _ === 'field';\nconst isCompare = _ => _ === 'compare';\n\nfunction parseData$1 (from, group, scope) {\n let facet, key, op, dataRef, parent;\n\n // if no source data, generate singleton datum\n if (!from) {\n dataRef = ref(scope.add(Collect(null, [{}])));\n }\n\n // if faceted, process facet specification\n else if (facet = from.facet) {\n if (!group) error('Only group marks can be faceted.');\n\n // use pre-faceted source data, if available\n if (facet.field != null) {\n dataRef = parent = getDataRef(facet, scope);\n } else {\n // generate facet aggregates if no direct data specification\n if (!from.data) {\n op = parseTransform(extend({\n type: 'aggregate',\n groupby: array(facet.groupby)\n }, facet.aggregate), scope);\n op.params.key = scope.keyRef(facet.groupby);\n op.params.pulse = getDataRef(facet, scope);\n dataRef = parent = ref(scope.add(op));\n } else {\n parent = ref(scope.getData(from.data).aggregate);\n }\n key = scope.keyRef(facet.groupby, true);\n }\n }\n\n // if not yet defined, get source data reference\n if (!dataRef) {\n dataRef = getDataRef(from, scope);\n }\n return {\n key: key,\n pulse: dataRef,\n parent: parent\n };\n}\nfunction getDataRef(from, scope) {\n return from.$ref ? from : from.data && from.data.$ref ? from.data : ref(scope.getData(from.data).output);\n}\n\nfunction DataScope(scope, input, output, values, aggr) {\n this.scope = scope; // parent scope object\n this.input = input; // first operator in pipeline (tuple input)\n this.output = output; // last operator in pipeline (tuple output)\n this.values = values; // operator for accessing tuples (but not tuple flow)\n\n // last aggregate in transform pipeline\n this.aggregate = aggr;\n\n // lookup table of field indices\n this.index = {};\n}\nDataScope.fromEntries = function (scope, entries) {\n const n = entries.length,\n values = entries[n - 1],\n output = entries[n - 2];\n let input = entries[0],\n aggr = null,\n i = 1;\n if (input && input.type === 'load') {\n input = entries[1];\n }\n\n // add operator entries to this scope, wire up pulse chain\n scope.add(entries[0]);\n for (; i < n; ++i) {\n entries[i].params.pulse = ref(entries[i - 1]);\n scope.add(entries[i]);\n if (entries[i].type === 'aggregate') aggr = entries[i];\n }\n return new DataScope(scope, input, output, values, aggr);\n};\nfunction fieldKey(field) {\n return isString(field) ? field : null;\n}\nfunction addSortField(scope, p, sort) {\n const as = aggrField(sort.op, sort.field);\n let s;\n if (p.ops) {\n for (let i = 0, n = p.as.length; i < n; ++i) {\n if (p.as[i] === as) return;\n }\n } else {\n p.ops = ['count'];\n p.fields = [null];\n p.as = ['count'];\n }\n if (sort.op) {\n p.ops.push((s = sort.op.signal) ? scope.signalRef(s) : sort.op);\n p.fields.push(scope.fieldRef(sort.field));\n p.as.push(as);\n }\n}\nfunction cache(scope, ds, name, optype, field, counts, index) {\n const cache = ds[name] || (ds[name] = {}),\n sort = sortKey(counts);\n let k = fieldKey(field),\n v,\n op;\n if (k != null) {\n scope = ds.scope;\n k = k + (sort ? '|' + sort : '');\n v = cache[k];\n }\n if (!v) {\n const params = counts ? {\n field: keyFieldRef,\n pulse: ds.countsRef(scope, field, counts)\n } : {\n field: scope.fieldRef(field),\n pulse: ref(ds.output)\n };\n if (sort) params.sort = scope.sortRef(counts);\n op = scope.add(entry(optype, undefined, params));\n if (index) ds.index[field] = op;\n v = ref(op);\n if (k != null) cache[k] = v;\n }\n return v;\n}\nDataScope.prototype = {\n countsRef(scope, field, sort) {\n const ds = this,\n cache = ds.counts || (ds.counts = {}),\n k = fieldKey(field);\n let v, a, p;\n if (k != null) {\n scope = ds.scope;\n v = cache[k];\n }\n if (!v) {\n p = {\n groupby: scope.fieldRef(field, 'key'),\n pulse: ref(ds.output)\n };\n if (sort && sort.field) addSortField(scope, p, sort);\n a = scope.add(Aggregate(p));\n v = scope.add(Collect({\n pulse: ref(a)\n }));\n v = {\n agg: a,\n ref: ref(v)\n };\n if (k != null) cache[k] = v;\n } else if (sort && sort.field) {\n addSortField(scope, v.agg.params, sort);\n }\n return v.ref;\n },\n tuplesRef() {\n return ref(this.values);\n },\n extentRef(scope, field) {\n return cache(scope, this, 'extent', 'extent', field, false);\n },\n domainRef(scope, field) {\n return cache(scope, this, 'domain', 'values', field, false);\n },\n valuesRef(scope, field, sort) {\n return cache(scope, this, 'vals', 'values', field, sort || true);\n },\n lookupRef(scope, field) {\n return cache(scope, this, 'lookup', 'tupleindex', field, false);\n },\n indataRef(scope, field) {\n return cache(scope, this, 'indata', 'tupleindex', field, true, true);\n }\n};\n\nfunction parseFacet (spec, scope, group) {\n const facet = spec.from.facet,\n name = facet.name,\n data = getDataRef(facet, scope);\n let op;\n if (!facet.name) {\n error('Facet must have a name: ' + stringValue(facet));\n }\n if (!facet.data) {\n error('Facet must reference a data set: ' + stringValue(facet));\n }\n if (facet.field) {\n op = scope.add(PreFacet({\n field: scope.fieldRef(facet.field),\n pulse: data\n }));\n } else if (facet.groupby) {\n op = scope.add(Facet({\n key: scope.keyRef(facet.groupby),\n group: ref(scope.proxy(group.parent)),\n pulse: data\n }));\n } else {\n error('Facet must specify groupby or field: ' + stringValue(facet));\n }\n\n // initialize facet subscope\n const subscope = scope.fork(),\n source = subscope.add(Collect()),\n values = subscope.add(Sieve({\n pulse: ref(source)\n }));\n subscope.addData(name, new DataScope(subscope, source, source, values));\n subscope.addSignal('parent', null);\n\n // parse faceted subflow\n op.params.subflow = {\n $subflow: subscope.parse(spec).toRuntime()\n };\n}\n\nfunction parseSubflow (spec, scope, input) {\n const op = scope.add(PreFacet({\n pulse: input.pulse\n })),\n subscope = scope.fork();\n subscope.add(Sieve());\n subscope.addSignal('parent', null);\n\n // parse group mark subflow\n op.params.subflow = {\n $subflow: subscope.parse(spec).toRuntime()\n };\n}\n\nfunction parseTrigger (spec, scope, name) {\n const remove = spec.remove,\n insert = spec.insert,\n toggle = spec.toggle,\n modify = spec.modify,\n values = spec.values,\n op = scope.add(operator());\n const update = 'if(' + spec.trigger + ',modify(\"' + name + '\",' + [insert, remove, toggle, modify, values].map(_ => _ == null ? 'null' : _).join(',') + '),0)';\n const expr = parseExpression(update, scope);\n op.update = expr.$expr;\n op.params = expr.$params;\n}\n\nfunction parseMark (spec, scope) {\n const role = getRole(spec),\n group = spec.type === GroupMark,\n facet = spec.from && spec.from.facet,\n overlap = spec.overlap;\n let layout = spec.layout || role === ScopeRole || role === FrameRole,\n ops,\n op,\n store,\n enc,\n name,\n layoutRef,\n boundRef;\n const nested = role === MarkRole || layout || facet;\n\n // resolve input data\n const input = parseData$1(spec.from, group, scope);\n\n // data join to map tuples to visual items\n op = scope.add(DataJoin({\n key: input.key || (spec.key ? fieldRef$1(spec.key) : undefined),\n pulse: input.pulse,\n clean: !group\n }));\n const joinRef = ref(op);\n\n // collect visual items\n op = store = scope.add(Collect({\n pulse: joinRef\n }));\n\n // connect visual items to scenegraph\n op = scope.add(Mark({\n markdef: definition(spec),\n interactive: interactive(spec.interactive, scope),\n clip: clip(spec.clip, scope),\n context: {\n $context: true\n },\n groups: scope.lookup(),\n parent: scope.signals.parent ? scope.signalRef('parent') : null,\n index: scope.markpath(),\n pulse: ref(op)\n }));\n const markRef = ref(op);\n\n // add visual encoders\n op = enc = scope.add(Encode(parseEncode(spec.encode, spec.type, role, spec.style, scope, {\n mod: false,\n pulse: markRef\n })));\n\n // monitor parent marks to propagate changes\n op.params.parent = scope.encode();\n\n // add post-encoding transforms, if defined\n if (spec.transform) {\n spec.transform.forEach(_ => {\n const tx = parseTransform(_, scope),\n md = tx.metadata;\n if (md.generates || md.changes) {\n error('Mark transforms should not generate new data.');\n }\n if (!md.nomod) enc.params.mod = true; // update encode mod handling\n tx.params.pulse = ref(op);\n scope.add(op = tx);\n });\n }\n\n // if item sort specified, perform post-encoding\n if (spec.sort) {\n op = scope.add(SortItems({\n sort: scope.compareRef(spec.sort),\n pulse: ref(op)\n }));\n }\n const encodeRef = ref(op);\n\n // add view layout operator if needed\n if (facet || layout) {\n layout = scope.add(ViewLayout({\n layout: scope.objectProperty(spec.layout),\n legends: scope.legends,\n mark: markRef,\n pulse: encodeRef\n }));\n layoutRef = ref(layout);\n }\n\n // compute bounding boxes\n const bound = scope.add(Bound({\n mark: markRef,\n pulse: layoutRef || encodeRef\n }));\n boundRef = ref(bound);\n\n // if group mark, recurse to parse nested content\n if (group) {\n // juggle layout & bounds to ensure they run *after* any faceting transforms\n if (nested) {\n ops = scope.operators;\n ops.pop();\n if (layout) ops.pop();\n }\n scope.pushState(encodeRef, layoutRef || boundRef, joinRef);\n facet ? parseFacet(spec, scope, input) // explicit facet\n : nested ? parseSubflow(spec, scope, input) // standard mark group\n : scope.parse(spec); // guide group, we can avoid nested scopes\n scope.popState();\n if (nested) {\n if (layout) ops.push(layout);\n ops.push(bound);\n }\n }\n\n // if requested, add overlap removal transform\n if (overlap) {\n boundRef = parseOverlap(overlap, boundRef, scope);\n }\n\n // render / sieve items\n const render = scope.add(Render({\n pulse: boundRef\n })),\n sieve = scope.add(Sieve({\n pulse: ref(render)\n }, undefined, scope.parent()));\n\n // if mark is named, make accessible as reactive geometry\n // add trigger updates if defined\n if (spec.name != null) {\n name = spec.name;\n scope.addData(name, new DataScope(scope, store, render, sieve));\n if (spec.on) spec.on.forEach(on => {\n if (on.insert || on.remove || on.toggle) {\n error('Marks only support modify triggers.');\n }\n parseTrigger(on, scope, name);\n });\n }\n}\nfunction parseOverlap(overlap, source, scope) {\n const method = overlap.method,\n bound = overlap.bound,\n sep = overlap.separation;\n const params = {\n separation: isSignal(sep) ? scope.signalRef(sep.signal) : sep,\n method: isSignal(method) ? scope.signalRef(method.signal) : method,\n pulse: source\n };\n if (overlap.order) {\n params.sort = scope.compareRef({\n field: overlap.order\n });\n }\n if (bound) {\n const tol = bound.tolerance;\n params.boundTolerance = isSignal(tol) ? scope.signalRef(tol.signal) : +tol;\n params.boundScale = scope.scaleRef(bound.scale);\n params.boundOrient = bound.orient;\n }\n return ref(scope.add(Overlap(params)));\n}\n\nfunction parseLegend (spec, scope) {\n const config = scope.config.legend,\n encode = spec.encode || {},\n _ = lookup(spec, config),\n legendEncode = encode.legend || {},\n name = legendEncode.name || undefined,\n interactive = legendEncode.interactive,\n style = legendEncode.style,\n scales = {};\n let scale = 0,\n entryLayout,\n params,\n children;\n\n // resolve scales and 'canonical' scale name\n LegendScales.forEach(s => spec[s] ? (scales[s] = spec[s], scale = scale || spec[s]) : 0);\n if (!scale) error('Missing valid scale for legend.');\n\n // resolve legend type (symbol, gradient, or discrete gradient)\n const type = legendType(spec, scope.scaleType(scale));\n\n // single-element data source for legend group\n const datum = {\n title: spec.title != null,\n scales: scales,\n type: type,\n vgrad: type !== 'symbol' && _.isVertical()\n };\n const dataRef = ref(scope.add(Collect(null, [datum])));\n\n // encoding properties for legend entry sub-group\n const entryEncode = {\n enter: {\n x: {\n value: 0\n },\n y: {\n value: 0\n }\n }\n };\n\n // data source for legend values\n const entryRef = ref(scope.add(LegendEntries(params = {\n type: type,\n scale: scope.scaleRef(scale),\n count: scope.objectProperty(_('tickCount')),\n limit: scope.property(_('symbolLimit')),\n values: scope.objectProperty(spec.values),\n minstep: scope.property(spec.tickMinStep),\n formatType: scope.property(spec.formatType),\n formatSpecifier: scope.property(spec.format)\n })));\n\n // continuous gradient legend\n if (type === Gradient) {\n children = [legendGradient(spec, scale, config, encode.gradient), legendGradientLabels(spec, config, encode.labels, entryRef)];\n // adjust default tick count based on the gradient length\n params.count = params.count || scope.signalRef(`max(2,2*floor((${deref(_.gradientLength())})/100))`);\n }\n\n // discrete gradient legend\n else if (type === Discrete) {\n children = [legendGradientDiscrete(spec, scale, config, encode.gradient, entryRef), legendGradientLabels(spec, config, encode.labels, entryRef)];\n }\n\n // symbol legend\n else {\n // determine legend symbol group layout\n entryLayout = legendSymbolLayout(spec, config);\n children = [legendSymbolGroups(spec, config, encode, entryRef, deref(entryLayout.columns))];\n // pass symbol size information to legend entry generator\n params.size = sizeExpression(spec, scope, children[0].marks);\n }\n\n // generate legend marks\n children = [guideGroup({\n role: LegendEntryRole,\n from: dataRef,\n encode: entryEncode,\n marks: children,\n layout: entryLayout,\n interactive\n })];\n\n // include legend title if defined\n if (datum.title) {\n children.push(legendTitle(spec, config, encode.title, dataRef));\n }\n\n // parse legend specification\n return parseMark(guideGroup({\n role: LegendRole,\n from: dataRef,\n encode: extendEncode(buildLegendEncode(_, spec, config), legendEncode, Skip),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\nfunction legendType(spec, scaleType) {\n let type = spec.type || Symbols;\n if (!spec.type && scaleCount(spec) === 1 && (spec.fill || spec.stroke)) {\n type = isContinuous(scaleType) ? Gradient : isDiscretizing(scaleType) ? Discrete : Symbols;\n }\n return type !== Gradient ? type : isDiscretizing(scaleType) ? Discrete : Gradient;\n}\nfunction scaleCount(spec) {\n return LegendScales.reduce((count, type) => count + (spec[type] ? 1 : 0), 0);\n}\nfunction buildLegendEncode(_, spec, config) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n offset: _('offset'),\n padding: _('padding'),\n titlePadding: _('titlePadding'),\n cornerRadius: _('cornerRadius'),\n fill: _('fillColor'),\n stroke: _('strokeColor'),\n strokeWidth: config.strokeWidth,\n strokeDash: config.strokeDash,\n x: _('legendX'),\n y: _('legendY'),\n // accessibility support\n format: spec.format,\n formatType: spec.formatType\n });\n return encode;\n}\nfunction sizeExpression(spec, scope, marks) {\n const size = deref(getChannel('size', spec, marks)),\n strokeWidth = deref(getChannel('strokeWidth', spec, marks)),\n fontSize = deref(getFontSize(marks[1].encode, scope, GuideLabelStyle));\n return parseExpression(`max(ceil(sqrt(${size})+${strokeWidth}),${fontSize})`, scope);\n}\nfunction getChannel(name, spec, marks) {\n return spec[name] ? `scale(\"${spec[name]}\",datum)` : getEncoding(name, marks[0].encode);\n}\nfunction getFontSize(encode, scope, style) {\n return getEncoding('fontSize', encode) || getStyle('fontSize', scope, style);\n}\n\nconst angleExpr = `item.orient===\"${Left}\"?-90:item.orient===\"${Right}\"?90:0`;\nfunction parseTitle (spec, scope) {\n spec = isString(spec) ? {\n text: spec\n } : spec;\n const _ = lookup(spec, scope.config.title),\n encode = spec.encode || {},\n userEncode = encode.group || {},\n name = userEncode.name || undefined,\n interactive = userEncode.interactive,\n style = userEncode.style,\n children = [];\n\n // single-element data source for group title\n const datum = {},\n dataRef = ref(scope.add(Collect(null, [datum])));\n\n // include title text\n children.push(buildTitle(spec, _, titleEncode(spec), dataRef));\n\n // include subtitle text\n if (spec.subtitle) {\n children.push(buildSubTitle(spec, _, encode.subtitle, dataRef));\n }\n\n // parse title specification\n return parseMark(guideGroup({\n role: TitleRole,\n from: dataRef,\n encode: groupEncode(_, userEncode),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\n\n// provide backwards-compatibility for title custom encode;\n// the top-level encode block has been *deprecated*.\nfunction titleEncode(spec) {\n const encode = spec.encode;\n return encode && encode.title || extend({\n name: spec.name,\n interactive: spec.interactive,\n style: spec.style\n }, encode);\n}\nfunction groupEncode(_, userEncode) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n anchor: _('anchor'),\n align: {\n signal: alignExpr$1\n },\n angle: {\n signal: angleExpr\n },\n limit: _('limit'),\n frame: _('frame'),\n offset: _('offset') || 0,\n padding: _('subtitlePadding')\n });\n return extendEncode(encode, userEncode, Skip);\n}\nfunction buildTitle(spec, _, userEncode, dataRef) {\n const zero = {\n value: 0\n },\n text = spec.text,\n encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: {\n value: 1\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n text: text,\n align: {\n signal: 'item.mark.group.align'\n },\n angle: {\n signal: 'item.mark.group.angle'\n },\n limit: {\n signal: 'item.mark.group.limit'\n },\n baseline: 'top',\n dx: _('dx'),\n dy: _('dy'),\n fill: _('color'),\n font: _('font'),\n fontSize: _('fontSize'),\n fontStyle: _('fontStyle'),\n fontWeight: _('fontWeight'),\n lineHeight: _('lineHeight')\n }, {\n // update\n align: _('align'),\n angle: _('angle'),\n baseline: _('baseline')\n });\n return guideMark({\n type: TextMark,\n role: TitleTextRole,\n style: GroupTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction buildSubTitle(spec, _, userEncode, dataRef) {\n const zero = {\n value: 0\n },\n text = spec.subtitle,\n encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: {\n value: 1\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n text: text,\n align: {\n signal: 'item.mark.group.align'\n },\n angle: {\n signal: 'item.mark.group.angle'\n },\n limit: {\n signal: 'item.mark.group.limit'\n },\n baseline: 'top',\n dx: _('dx'),\n dy: _('dy'),\n fill: _('subtitleColor'),\n font: _('subtitleFont'),\n fontSize: _('subtitleFontSize'),\n fontStyle: _('subtitleFontStyle'),\n fontWeight: _('subtitleFontWeight'),\n lineHeight: _('subtitleLineHeight')\n }, {\n // update\n align: _('align'),\n angle: _('angle'),\n baseline: _('baseline')\n });\n return guideMark({\n type: TextMark,\n role: TitleSubtitleRole,\n style: GroupSubtitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction parseData(data, scope) {\n const transforms = [];\n if (data.transform) {\n data.transform.forEach(tx => {\n transforms.push(parseTransform(tx, scope));\n });\n }\n if (data.on) {\n data.on.forEach(on => {\n parseTrigger(on, scope, data.name);\n });\n }\n scope.addDataPipeline(data.name, analyze(data, scope, transforms));\n}\n\n/**\n * Analyze a data pipeline, add needed operators.\n */\nfunction analyze(data, scope, ops) {\n const output = [];\n let source = null,\n modify = false,\n generate = false,\n upstream,\n i,\n n,\n t,\n m;\n if (data.values) {\n // hard-wired input data set\n if (isSignal(data.values) || hasSignal(data.format)) {\n // if either values is signal or format has signal, use dynamic loader\n output.push(load(scope, data));\n output.push(source = collect());\n } else {\n // otherwise, ingest upon dataflow init\n output.push(source = collect({\n $ingest: data.values,\n $format: data.format\n }));\n }\n } else if (data.url) {\n // load data from external source\n if (hasSignal(data.url) || hasSignal(data.format)) {\n // if either url or format has signal, use dynamic loader\n output.push(load(scope, data));\n output.push(source = collect());\n } else {\n // otherwise, request load upon dataflow init\n output.push(source = collect({\n $request: data.url,\n $format: data.format\n }));\n }\n } else if (data.source) {\n // derives from one or more other data sets\n source = upstream = array(data.source).map(d => ref(scope.getData(d).output));\n output.push(null); // populate later\n }\n\n // scan data transforms, add collectors as needed\n for (i = 0, n = ops.length; i < n; ++i) {\n t = ops[i];\n m = t.metadata;\n if (!source && !m.source) {\n output.push(source = collect());\n }\n output.push(t);\n if (m.generates) generate = true;\n if (m.modifies && !generate) modify = true;\n if (m.source) source = t;else if (m.changes) source = null;\n }\n if (upstream) {\n n = upstream.length - 1;\n output[0] = Relay({\n derive: modify,\n pulse: n ? upstream : upstream[0]\n });\n if (modify || n) {\n // collect derived and multi-pulse tuples\n output.splice(1, 0, collect());\n }\n }\n if (!source) output.push(collect());\n output.push(Sieve({}));\n return output;\n}\nfunction collect(values) {\n const s = Collect({}, values);\n s.metadata = {\n source: true\n };\n return s;\n}\nfunction load(scope, data) {\n return Load({\n url: data.url ? scope.property(data.url) : undefined,\n async: data.async ? scope.property(data.async) : undefined,\n values: data.values ? scope.property(data.values) : undefined,\n format: scope.objectProperty(data.format)\n });\n}\n\nconst isX = orient => orient === Bottom || orient === Top;\n\n// get sign coefficient based on axis orient\nconst getSign = (orient, a, b) => isSignal(orient) ? ifLeftTopExpr(orient.signal, a, b) : orient === Left || orient === Top ? a : b;\n\n// condition on axis x-direction\nconst ifX = (orient, a, b) => isSignal(orient) ? ifXEnc(orient.signal, a, b) : isX(orient) ? a : b;\n\n// condition on axis y-direction\nconst ifY = (orient, a, b) => isSignal(orient) ? ifYEnc(orient.signal, a, b) : isX(orient) ? b : a;\nconst ifTop = (orient, a, b) => isSignal(orient) ? ifTopExpr(orient.signal, a, b) : orient === Top ? {\n value: a\n} : {\n value: b\n};\nconst ifRight = (orient, a, b) => isSignal(orient) ? ifRightExpr(orient.signal, a, b) : orient === Right ? {\n value: a\n} : {\n value: b\n};\nconst ifXEnc = ($orient, a, b) => ifEnc(`${$orient} === '${Top}' || ${$orient} === '${Bottom}'`, a, b);\nconst ifYEnc = ($orient, a, b) => ifEnc(`${$orient} !== '${Top}' && ${$orient} !== '${Bottom}'`, a, b);\nconst ifLeftTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Left}' || ${$orient} === '${Top}'`, a, b);\nconst ifTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Top}'`, a, b);\nconst ifRightExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Right}'`, a, b);\nconst ifEnc = (test, a, b) => {\n // ensure inputs are encoder objects (or null)\n a = a != null ? encoder(a) : a;\n b = b != null ? encoder(b) : b;\n if (isSimple(a) && isSimple(b)) {\n // if possible generate simple signal expression\n a = a ? a.signal || stringValue(a.value) : null;\n b = b ? b.signal || stringValue(b.value) : null;\n return {\n signal: `${test} ? (${a}) : (${b})`\n };\n } else {\n // otherwise generate rule set\n return [extend({\n test\n }, a)].concat(b || []);\n }\n};\nconst isSimple = enc => enc == null || Object.keys(enc).length === 1;\nconst ifExpr = (test, a, b) => ({\n signal: `${test} ? (${toExpr(a)}) : (${toExpr(b)})`\n});\nconst ifOrient = ($orient, t, b, l, r) => ({\n signal: (l != null ? `${$orient} === '${Left}' ? (${toExpr(l)}) : ` : '') + (b != null ? `${$orient} === '${Bottom}' ? (${toExpr(b)}) : ` : '') + (r != null ? `${$orient} === '${Right}' ? (${toExpr(r)}) : ` : '') + (t != null ? `${$orient} === '${Top}' ? (${toExpr(t)}) : ` : '') + '(null)'\n});\nconst toExpr = v => isSignal(v) ? v.signal : v == null ? null : stringValue(v);\nconst mult = (sign, value) => value === 0 ? 0 : isSignal(sign) ? {\n signal: `(${sign.signal}) * ${value}`\n} : {\n value: sign * value\n};\nconst patch = (value, base) => {\n const s = value.signal;\n return s && s.endsWith('(null)') ? {\n signal: s.slice(0, -6) + base.signal\n } : value;\n};\n\nfunction fallback(prop, config, axisConfig, style) {\n let styleProp;\n if (config && hasOwnProperty(config, prop)) {\n return config[prop];\n } else if (hasOwnProperty(axisConfig, prop)) {\n return axisConfig[prop];\n } else if (prop.startsWith('title')) {\n switch (prop) {\n case 'titleColor':\n styleProp = 'fill';\n break;\n case 'titleFont':\n case 'titleFontSize':\n case 'titleFontWeight':\n styleProp = prop[5].toLowerCase() + prop.slice(6);\n }\n return style[GuideTitleStyle][styleProp];\n } else if (prop.startsWith('label')) {\n switch (prop) {\n case 'labelColor':\n styleProp = 'fill';\n break;\n case 'labelFont':\n case 'labelFontSize':\n styleProp = prop[5].toLowerCase() + prop.slice(6);\n }\n return style[GuideLabelStyle][styleProp];\n }\n return null;\n}\nfunction keys(objects) {\n const map = {};\n for (const obj of objects) {\n if (!obj) continue;\n for (const key in obj) map[key] = 1;\n }\n return Object.keys(map);\n}\nfunction axisConfig (spec, scope) {\n var config = scope.config,\n style = config.style,\n axis = config.axis,\n band = scope.scaleType(spec.scale) === 'band' && config.axisBand,\n orient = spec.orient,\n xy,\n or,\n key;\n if (isSignal(orient)) {\n const xyKeys = keys([config.axisX, config.axisY]),\n orientKeys = keys([config.axisTop, config.axisBottom, config.axisLeft, config.axisRight]);\n xy = {};\n for (key of xyKeys) {\n xy[key] = ifX(orient, fallback(key, config.axisX, axis, style), fallback(key, config.axisY, axis, style));\n }\n or = {};\n for (key of orientKeys) {\n or[key] = ifOrient(orient.signal, fallback(key, config.axisTop, axis, style), fallback(key, config.axisBottom, axis, style), fallback(key, config.axisLeft, axis, style), fallback(key, config.axisRight, axis, style));\n }\n } else {\n xy = orient === Top || orient === Bottom ? config.axisX : config.axisY;\n or = config['axis' + orient[0].toUpperCase() + orient.slice(1)];\n }\n const result = xy || or || band ? extend({}, axis, xy, or, band) : axis;\n return result;\n}\n\nfunction axisDomain (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n orient = spec.orient;\n let enter, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('domainColor'),\n strokeCap: _('domainCap'),\n strokeDash: _('domainDash'),\n strokeDashOffset: _('domainDashOffset'),\n strokeWidth: _('domainWidth'),\n strokeOpacity: _('domainOpacity')\n });\n const pos0 = position(spec, 0);\n const pos1 = position(spec, 1);\n enter.x = update.x = ifX(orient, pos0, zero);\n enter.x2 = update.x2 = ifX(orient, pos1);\n enter.y = update.y = ifY(orient, pos0, zero);\n enter.y2 = update.y2 = ifY(orient, pos1);\n return guideMark({\n type: RuleMark,\n role: AxisDomainRole,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction position(spec, pos) {\n return {\n scale: spec.scale,\n range: pos\n };\n}\n\nfunction axisGrid (spec, config, userEncode, dataRef, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n vscale = spec.gridScale,\n sign = getSign(orient, 1, -1),\n offset = offsetValue(spec.offset, sign);\n let enter, exit, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: exit = {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gridColor'),\n strokeCap: _('gridCap'),\n strokeDash: _('gridDash'),\n strokeDashOffset: _('gridDashOffset'),\n strokeOpacity: _('gridOpacity'),\n strokeWidth: _('gridWidth')\n });\n const tickPos = {\n scale: spec.scale,\n field: Value,\n band: band.band,\n extra: band.extra,\n offset: band.offset,\n round: _('tickRound')\n };\n const sz = ifX(orient, {\n signal: 'height'\n }, {\n signal: 'width'\n });\n const gridStart = vscale ? {\n scale: vscale,\n range: 0,\n mult: sign,\n offset: offset\n } : {\n value: 0,\n offset: offset\n };\n const gridEnd = vscale ? {\n scale: vscale,\n range: 1,\n mult: sign,\n offset: offset\n } : extend(sz, {\n mult: sign,\n offset: offset\n });\n enter.x = update.x = ifX(orient, tickPos, gridStart);\n enter.y = update.y = ifY(orient, tickPos, gridStart);\n enter.x2 = update.x2 = ifY(orient, gridEnd);\n enter.y2 = update.y2 = ifX(orient, gridEnd);\n exit.x = ifX(orient, tickPos);\n exit.y = ifY(orient, tickPos);\n return guideMark({\n type: RuleMark,\n role: AxisGridRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction offsetValue(offset, sign) {\n if (sign === 1) ; else if (!isObject(offset)) {\n offset = isSignal(sign) ? {\n signal: `(${sign.signal}) * (${offset || 0})`\n } : sign * (offset || 0);\n } else {\n let entry = offset = extend({}, offset);\n while (entry.mult != null) {\n if (!isObject(entry.mult)) {\n entry.mult = isSignal(sign) // no offset if sign === 1\n ? {\n signal: `(${entry.mult}) * (${sign.signal})`\n } : entry.mult * sign;\n return offset;\n } else {\n entry = entry.mult = extend({}, entry.mult);\n }\n }\n entry.mult = sign;\n }\n return offset;\n}\n\nfunction axisTicks (spec, config, userEncode, dataRef, size, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n sign = getSign(orient, -1, 1);\n let enter, exit, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: exit = {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('tickColor'),\n strokeCap: _('tickCap'),\n strokeDash: _('tickDash'),\n strokeDashOffset: _('tickDashOffset'),\n strokeOpacity: _('tickOpacity'),\n strokeWidth: _('tickWidth')\n });\n const tickSize = encoder(size);\n tickSize.mult = sign;\n const tickPos = {\n scale: spec.scale,\n field: Value,\n band: band.band,\n extra: band.extra,\n offset: band.offset,\n round: _('tickRound')\n };\n update.y = enter.y = ifX(orient, zero, tickPos);\n update.y2 = enter.y2 = ifX(orient, tickSize);\n exit.x = ifX(orient, tickPos);\n update.x = enter.x = ifY(orient, zero, tickPos);\n update.x2 = enter.x2 = ifY(orient, tickSize);\n exit.y = ifY(orient, tickPos);\n return guideMark({\n type: RuleMark,\n role: AxisTickRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction flushExpr(scale, threshold, a, b, c) {\n return {\n signal: 'flush(range(\"' + scale + '\"), ' + 'scale(\"' + scale + '\", datum.value), ' + threshold + ',' + a + ',' + b + ',' + c + ')'\n };\n}\nfunction axisLabels (spec, config, userEncode, dataRef, size, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n scale = spec.scale,\n sign = getSign(orient, -1, 1),\n flush = deref(_('labelFlush')),\n flushOffset = deref(_('labelFlushOffset')),\n labelAlign = _('labelAlign'),\n labelBaseline = _('labelBaseline');\n let flushOn = flush === 0 || !!flush,\n update;\n const tickSize = encoder(size);\n tickSize.mult = sign;\n tickSize.offset = encoder(_('labelPadding') || 0);\n tickSize.offset.mult = sign;\n const tickPos = {\n scale: scale,\n field: Value,\n band: 0.5,\n offset: extendOffset(band.offset, _('labelOffset'))\n };\n const align = ifX(orient, flushOn ? flushExpr(scale, flush, '\"left\"', '\"right\"', '\"center\"') : {\n value: 'center'\n }, ifRight(orient, 'left', 'right'));\n const baseline = ifX(orient, ifTop(orient, 'bottom', 'top'), flushOn ? flushExpr(scale, flush, '\"top\"', '\"bottom\"', '\"middle\"') : {\n value: 'middle'\n });\n const offsetExpr = flushExpr(scale, flush, `-(${flushOffset})`, flushOffset, 0);\n flushOn = flushOn && flushOffset;\n const enter = {\n opacity: zero,\n x: ifX(orient, tickPos, tickSize),\n y: ifY(orient, tickPos, tickSize)\n };\n const encode = {\n enter: enter,\n update: update = {\n opacity: one,\n text: {\n field: Label\n },\n x: enter.x,\n y: enter.y,\n align,\n baseline\n },\n exit: {\n opacity: zero,\n x: enter.x,\n y: enter.y\n }\n };\n addEncoders(encode, {\n dx: !labelAlign && flushOn ? ifX(orient, offsetExpr) : null,\n dy: !labelBaseline && flushOn ? ifY(orient, offsetExpr) : null\n });\n addEncoders(encode, {\n angle: _('labelAngle'),\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontWeight: _('labelFontWeight'),\n fontStyle: _('labelFontStyle'),\n limit: _('labelLimit'),\n lineHeight: _('labelLineHeight')\n }, {\n align: labelAlign,\n baseline: labelBaseline\n });\n const bound = _('labelBound');\n let overlap = _('labelOverlap');\n\n // if overlap method or bound defined, request label overlap removal\n overlap = overlap || bound ? {\n separation: _('labelSeparation'),\n method: overlap,\n order: 'datum.index',\n bound: bound ? {\n scale,\n orient,\n tolerance: bound\n } : null\n } : undefined;\n if (update.align !== align) {\n update.align = patch(update.align, align);\n }\n if (update.baseline !== baseline) {\n update.baseline = patch(update.baseline, baseline);\n }\n return guideMark({\n type: TextMark,\n role: AxisLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: dataRef,\n encode,\n overlap\n }, userEncode);\n}\n\nfunction axisTitle (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n sign = getSign(orient, -1, 1);\n let enter, update;\n const encode = {\n enter: enter = {\n opacity: zero,\n anchor: encoder(_('titleAnchor', null)),\n align: {\n signal: alignExpr$1\n }\n },\n update: update = extend({}, enter, {\n opacity: one,\n text: encoder(spec.title)\n }),\n exit: {\n opacity: zero\n }\n };\n const titlePos = {\n signal: `lerp(range(\"${spec.scale}\"), ${anchorExpr(0, 1, 0.5)})`\n };\n update.x = ifX(orient, titlePos);\n update.y = ifY(orient, titlePos);\n enter.angle = ifX(orient, zero, mult(sign, 90));\n enter.baseline = ifX(orient, ifTop(orient, Bottom, Top), {\n value: Bottom\n });\n update.angle = enter.angle;\n update.baseline = enter.baseline;\n addEncoders(encode, {\n fill: _('titleColor'),\n fillOpacity: _('titleOpacity'),\n font: _('titleFont'),\n fontSize: _('titleFontSize'),\n fontStyle: _('titleFontStyle'),\n fontWeight: _('titleFontWeight'),\n limit: _('titleLimit'),\n lineHeight: _('titleLineHeight')\n }, {\n // require update\n align: _('titleAlign'),\n angle: _('titleAngle'),\n baseline: _('titleBaseline')\n });\n autoLayout(_, orient, encode, userEncode);\n encode.update.align = patch(encode.update.align, enter.align);\n encode.update.angle = patch(encode.update.angle, enter.angle);\n encode.update.baseline = patch(encode.update.baseline, enter.baseline);\n return guideMark({\n type: TextMark,\n role: AxisTitleRole,\n style: GuideTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\nfunction autoLayout(_, orient, encode, userEncode) {\n const auto = (value, dim) => value != null ? (encode.update[dim] = patch(encoder(value), encode.update[dim]), false) : !has(dim, userEncode) ? true : false;\n const autoY = auto(_('titleX'), 'x'),\n autoX = auto(_('titleY'), 'y');\n encode.enter.auto = autoX === autoY ? encoder(autoX) : ifX(orient, encoder(autoX), encoder(autoY));\n}\n\nfunction parseAxis (spec, scope) {\n const config = axisConfig(spec, scope),\n encode = spec.encode || {},\n axisEncode = encode.axis || {},\n name = axisEncode.name || undefined,\n interactive = axisEncode.interactive,\n style = axisEncode.style,\n _ = lookup(spec, config),\n band = tickBand(_);\n\n // single-element data source for axis group\n const datum = {\n scale: spec.scale,\n ticks: !!_('ticks'),\n labels: !!_('labels'),\n grid: !!_('grid'),\n domain: !!_('domain'),\n title: spec.title != null\n };\n const dataRef = ref(scope.add(Collect({}, [datum])));\n\n // data source for axis ticks\n const ticksRef = ref(scope.add(AxisTicks({\n scale: scope.scaleRef(spec.scale),\n extra: scope.property(band.extra),\n count: scope.objectProperty(spec.tickCount),\n values: scope.objectProperty(spec.values),\n minstep: scope.property(spec.tickMinStep),\n formatType: scope.property(spec.formatType),\n formatSpecifier: scope.property(spec.format)\n })));\n\n // generate axis marks\n const children = [];\n let size;\n\n // include axis gridlines if requested\n if (datum.grid) {\n children.push(axisGrid(spec, config, encode.grid, ticksRef, band));\n }\n\n // include axis ticks if requested\n if (datum.ticks) {\n size = _('tickSize');\n children.push(axisTicks(spec, config, encode.ticks, ticksRef, size, band));\n }\n\n // include axis labels if requested\n if (datum.labels) {\n size = datum.ticks ? size : 0;\n children.push(axisLabels(spec, config, encode.labels, ticksRef, size, band));\n }\n\n // include axis domain path if requested\n if (datum.domain) {\n children.push(axisDomain(spec, config, encode.domain, dataRef));\n }\n\n // include axis title if defined\n if (datum.title) {\n children.push(axisTitle(spec, config, encode.title, dataRef));\n }\n\n // parse axis specification\n return parseMark(guideGroup({\n role: AxisRole,\n from: dataRef,\n encode: extendEncode(buildAxisEncode(_, spec), axisEncode, Skip),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\nfunction buildAxisEncode(_, spec) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n offset: _('offset') || 0,\n position: value(spec.position, 0),\n titlePadding: _('titlePadding'),\n minExtent: _('minExtent'),\n maxExtent: _('maxExtent'),\n range: {\n signal: `abs(span(range(\"${spec.scale}\")))`\n },\n translate: _('translate'),\n // accessibility support\n format: spec.format,\n formatType: spec.formatType\n });\n return encode;\n}\n\nfunction parseScope (spec, scope, preprocessed) {\n const signals = array(spec.signals),\n scales = array(spec.scales);\n\n // parse signal definitions, if not already preprocessed\n if (!preprocessed) signals.forEach(_ => parseSignal(_, scope));\n\n // parse cartographic projection definitions\n array(spec.projections).forEach(_ => parseProjection(_, scope));\n\n // initialize scale references\n scales.forEach(_ => initScale(_, scope));\n\n // parse data sources\n array(spec.data).forEach(_ => parseData(_, scope));\n\n // parse scale definitions\n scales.forEach(_ => parseScale(_, scope));\n\n // parse signal updates\n (preprocessed || signals).forEach(_ => parseSignalUpdates(_, scope));\n\n // parse axis definitions\n array(spec.axes).forEach(_ => parseAxis(_, scope));\n\n // parse mark definitions\n array(spec.marks).forEach(_ => parseMark(_, scope));\n\n // parse legend definitions\n array(spec.legends).forEach(_ => parseLegend(_, scope));\n\n // parse title, if defined\n if (spec.title) parseTitle(spec.title, scope);\n\n // parse collected lambda (anonymous) expressions\n scope.parseLambdas();\n return scope;\n}\n\nconst rootEncode = spec => extendEncode({\n enter: {\n x: {\n value: 0\n },\n y: {\n value: 0\n }\n },\n update: {\n width: {\n signal: 'width'\n },\n height: {\n signal: 'height'\n }\n }\n}, spec);\nfunction parseView(spec, scope) {\n const config = scope.config;\n\n // add scenegraph root\n const root = ref(scope.root = scope.add(operator()));\n\n // parse top-level signal definitions\n const signals = collectSignals(spec, config);\n signals.forEach(_ => parseSignal(_, scope));\n\n // assign description, event, legend, and locale configuration\n scope.description = spec.description || config.description;\n scope.eventConfig = config.events;\n scope.legends = scope.objectProperty(config.legend && config.legend.layout);\n scope.locale = config.locale;\n\n // store root group item\n const input = scope.add(Collect());\n\n // encode root group item\n const encode = scope.add(Encode(parseEncode(rootEncode(spec.encode), GroupMark, FrameRole, spec.style, scope, {\n pulse: ref(input)\n })));\n\n // perform view layout\n const parent = scope.add(ViewLayout({\n layout: scope.objectProperty(spec.layout),\n legends: scope.legends,\n autosize: scope.signalRef('autosize'),\n mark: root,\n pulse: ref(encode)\n }));\n scope.operators.pop();\n\n // parse remainder of specification\n scope.pushState(ref(encode), ref(parent), null);\n parseScope(spec, scope, signals);\n scope.operators.push(parent);\n\n // bound / render / sieve root item\n let op = scope.add(Bound({\n mark: root,\n pulse: ref(parent)\n }));\n op = scope.add(Render({\n pulse: ref(op)\n }));\n op = scope.add(Sieve({\n pulse: ref(op)\n }));\n\n // track metadata for root item\n scope.addData('root', new DataScope(scope, input, input, op));\n return scope;\n}\nfunction signalObject(name, value) {\n return value && value.signal ? {\n name,\n update: value.signal\n } : {\n name,\n value\n };\n}\n\n/**\n * Collect top-level signals, merging values as needed. Signals\n * defined in the config signals arrays are added only if that\n * signal is not explicitly defined in the specification.\n * Built-in signals (autosize, background, padding, width, height)\n * receive special treatment. They are initialized using the\n * top-level spec property, or, if undefined in the spec, using\n * the corresponding top-level config property. If this property\n * is a signal reference object, the signal expression maps to the\n * signal 'update' property. If the spec's top-level signal array\n * contains an entry that matches a built-in signal, that entry\n * will be merged with the built-in specification, potentially\n * overwriting existing 'value' or 'update' properties.\n */\nfunction collectSignals(spec, config) {\n const _ = name => value(spec[name], config[name]),\n signals = [signalObject('background', _('background')), signalObject('autosize', parseAutosize(_('autosize'))), signalObject('padding', parsePadding(_('padding'))), signalObject('width', _('width') || 0), signalObject('height', _('height') || 0)],\n pre = signals.reduce((p, s) => (p[s.name] = s, p), {}),\n map = {};\n\n // add spec signal array\n array(spec.signals).forEach(s => {\n if (hasOwnProperty(pre, s.name)) {\n // merge if built-in signal\n s = extend(pre[s.name], s);\n } else {\n // otherwise add to signal list\n signals.push(s);\n }\n map[s.name] = s;\n });\n\n // add config signal array\n array(config.signals).forEach(s => {\n if (!hasOwnProperty(map, s.name) && !hasOwnProperty(pre, s.name)) {\n // add to signal list if not already defined\n signals.push(s);\n }\n });\n return signals;\n}\n\nfunction Scope(config, options) {\n this.config = config || {};\n this.options = options || {};\n this.bindings = [];\n this.field = {};\n this.signals = {};\n this.lambdas = {};\n this.scales = {};\n this.events = {};\n this.data = {};\n this.streams = [];\n this.updates = [];\n this.operators = [];\n this.eventConfig = null;\n this.locale = null;\n this._id = 0;\n this._subid = 0;\n this._nextsub = [0];\n this._parent = [];\n this._encode = [];\n this._lookup = [];\n this._markpath = [];\n}\nfunction Subscope(scope) {\n this.config = scope.config;\n this.options = scope.options;\n this.legends = scope.legends;\n this.field = Object.create(scope.field);\n this.signals = Object.create(scope.signals);\n this.lambdas = Object.create(scope.lambdas);\n this.scales = Object.create(scope.scales);\n this.events = Object.create(scope.events);\n this.data = Object.create(scope.data);\n this.streams = [];\n this.updates = [];\n this.operators = [];\n this._id = 0;\n this._subid = ++scope._nextsub[0];\n this._nextsub = scope._nextsub;\n this._parent = scope._parent.slice();\n this._encode = scope._encode.slice();\n this._lookup = scope._lookup.slice();\n this._markpath = scope._markpath;\n}\nScope.prototype = Subscope.prototype = {\n parse(spec) {\n return parseScope(spec, this);\n },\n fork() {\n return new Subscope(this);\n },\n isSubscope() {\n return this._subid > 0;\n },\n toRuntime() {\n this.finish();\n return {\n description: this.description,\n operators: this.operators,\n streams: this.streams,\n updates: this.updates,\n bindings: this.bindings,\n eventConfig: this.eventConfig,\n locale: this.locale\n };\n },\n id() {\n return (this._subid ? this._subid + ':' : 0) + this._id++;\n },\n add(op) {\n this.operators.push(op);\n op.id = this.id();\n // if pre-registration references exist, resolve them now\n if (op.refs) {\n op.refs.forEach(ref => {\n ref.$ref = op.id;\n });\n op.refs = null;\n }\n return op;\n },\n proxy(op) {\n const vref = op instanceof Entry ? ref(op) : op;\n return this.add(Proxy({\n value: vref\n }));\n },\n addStream(stream) {\n this.streams.push(stream);\n stream.id = this.id();\n return stream;\n },\n addUpdate(update) {\n this.updates.push(update);\n return update;\n },\n // Apply metadata\n finish() {\n let name, ds;\n\n // annotate root\n if (this.root) this.root.root = true;\n\n // annotate signals\n for (name in this.signals) {\n this.signals[name].signal = name;\n }\n\n // annotate scales\n for (name in this.scales) {\n this.scales[name].scale = name;\n }\n\n // annotate data sets\n function annotate(op, name, type) {\n let data, list;\n if (op) {\n data = op.data || (op.data = {});\n list = data[name] || (data[name] = []);\n list.push(type);\n }\n }\n for (name in this.data) {\n ds = this.data[name];\n annotate(ds.input, name, 'input');\n annotate(ds.output, name, 'output');\n annotate(ds.values, name, 'values');\n for (const field in ds.index) {\n annotate(ds.index[field], name, 'index:' + field);\n }\n }\n return this;\n },\n // ----\n\n pushState(encode, parent, lookup) {\n this._encode.push(ref(this.add(Sieve({\n pulse: encode\n }))));\n this._parent.push(parent);\n this._lookup.push(lookup ? ref(this.proxy(lookup)) : null);\n this._markpath.push(-1);\n },\n popState() {\n this._encode.pop();\n this._parent.pop();\n this._lookup.pop();\n this._markpath.pop();\n },\n parent() {\n return peek(this._parent);\n },\n encode() {\n return peek(this._encode);\n },\n lookup() {\n return peek(this._lookup);\n },\n markpath() {\n const p = this._markpath;\n return ++p[p.length - 1];\n },\n // ----\n\n fieldRef(field, name) {\n if (isString(field)) return fieldRef$1(field, name);\n if (!field.signal) {\n error('Unsupported field reference: ' + stringValue(field));\n }\n const s = field.signal;\n let f = this.field[s];\n if (!f) {\n const params = {\n name: this.signalRef(s)\n };\n if (name) params.as = name;\n this.field[s] = f = ref(this.add(Field(params)));\n }\n return f;\n },\n compareRef(cmp) {\n let signal = false;\n const check = _ => isSignal(_) ? (signal = true, this.signalRef(_.signal)) : isExpr$1(_) ? (signal = true, this.exprRef(_.expr)) : _;\n const fields = array(cmp.field).map(check),\n orders = array(cmp.order).map(check);\n return signal ? ref(this.add(Compare({\n fields: fields,\n orders: orders\n }))) : compareRef(fields, orders);\n },\n keyRef(fields, flat) {\n let signal = false;\n const check = _ => isSignal(_) ? (signal = true, ref(sig[_.signal])) : _;\n const sig = this.signals;\n fields = array(fields).map(check);\n return signal ? ref(this.add(Key({\n fields: fields,\n flat: flat\n }))) : keyRef(fields, flat);\n },\n sortRef(sort) {\n if (!sort) return sort;\n\n // including id ensures stable sorting\n const a = aggrField(sort.op, sort.field),\n o = sort.order || Ascending;\n return o.signal ? ref(this.add(Compare({\n fields: a,\n orders: this.signalRef(o.signal)\n }))) : compareRef(a, o);\n },\n // ----\n\n event(source, type) {\n const key = source + ':' + type;\n if (!this.events[key]) {\n const id = this.id();\n this.streams.push({\n id: id,\n source: source,\n type: type\n });\n this.events[key] = id;\n }\n return this.events[key];\n },\n // ----\n\n hasOwnSignal(name) {\n return hasOwnProperty(this.signals, name);\n },\n addSignal(name, value) {\n if (this.hasOwnSignal(name)) {\n error('Duplicate signal name: ' + stringValue(name));\n }\n const op = value instanceof Entry ? value : this.add(operator(value));\n return this.signals[name] = op;\n },\n getSignal(name) {\n if (!this.signals[name]) {\n error('Unrecognized signal name: ' + stringValue(name));\n }\n return this.signals[name];\n },\n signalRef(s) {\n if (this.signals[s]) {\n return ref(this.signals[s]);\n } else if (!hasOwnProperty(this.lambdas, s)) {\n this.lambdas[s] = this.add(operator(null));\n }\n return ref(this.lambdas[s]);\n },\n parseLambdas() {\n const code = Object.keys(this.lambdas);\n for (let i = 0, n = code.length; i < n; ++i) {\n const s = code[i],\n e = parseExpression(s, this),\n op = this.lambdas[s];\n op.params = e.$params;\n op.update = e.$expr;\n }\n },\n property(spec) {\n return spec && spec.signal ? this.signalRef(spec.signal) : spec;\n },\n objectProperty(spec) {\n return !spec || !isObject(spec) ? spec : this.signalRef(spec.signal || propertyLambda(spec));\n },\n exprRef(code, name) {\n const params = {\n expr: parseExpression(code, this)\n };\n if (name) params.expr.$name = name;\n return ref(this.add(Expression(params)));\n },\n addBinding(name, bind) {\n if (!this.bindings) {\n error('Nested signals do not support binding: ' + stringValue(name));\n }\n this.bindings.push(extend({\n signal: name\n }, bind));\n },\n // ----\n\n addScaleProj(name, transform) {\n if (hasOwnProperty(this.scales, name)) {\n error('Duplicate scale or projection name: ' + stringValue(name));\n }\n this.scales[name] = this.add(transform);\n },\n addScale(name, params) {\n this.addScaleProj(name, Scale(params));\n },\n addProjection(name, params) {\n this.addScaleProj(name, Projection(params));\n },\n getScale(name) {\n if (!this.scales[name]) {\n error('Unrecognized scale name: ' + stringValue(name));\n }\n return this.scales[name];\n },\n scaleRef(name) {\n return ref(this.getScale(name));\n },\n scaleType(name) {\n return this.getScale(name).params.type;\n },\n projectionRef(name) {\n return this.scaleRef(name);\n },\n projectionType(name) {\n return this.scaleType(name);\n },\n // ----\n\n addData(name, dataScope) {\n if (hasOwnProperty(this.data, name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n return this.data[name] = dataScope;\n },\n getData(name) {\n if (!this.data[name]) {\n error('Undefined data set name: ' + stringValue(name));\n }\n return this.data[name];\n },\n addDataPipeline(name, entries) {\n if (hasOwnProperty(this.data, name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n return this.addData(name, DataScope.fromEntries(this, entries));\n }\n};\nfunction propertyLambda(spec) {\n return (isArray(spec) ? arrayLambda : objectLambda)(spec);\n}\nfunction arrayLambda(array) {\n const n = array.length;\n let code = '[';\n for (let i = 0; i < n; ++i) {\n const value = array[i];\n code += (i > 0 ? ',' : '') + (isObject(value) ? value.signal || propertyLambda(value) : stringValue(value));\n }\n return code + ']';\n}\nfunction objectLambda(obj) {\n let code = '{',\n i = 0,\n key,\n value;\n for (key in obj) {\n value = obj[key];\n code += (++i > 1 ? ',' : '') + stringValue(key) + ':' + (isObject(value) ? value.signal || propertyLambda(value) : stringValue(value));\n }\n return code + '}';\n}\n\n/**\n * Standard configuration defaults for Vega specification parsing.\n * Users can provide their own (sub-)set of these default values\n * by passing in a config object to the top-level parse method.\n */\nfunction defaults () {\n const defaultFont = 'sans-serif',\n defaultSymbolSize = 30,\n defaultStrokeWidth = 2,\n defaultColor = '#4c78a8',\n black = '#000',\n gray = '#888',\n lightGray = '#ddd';\n return {\n // default visualization description\n description: 'Vega visualization',\n // default padding around visualization\n padding: 0,\n // default for automatic sizing; options: 'none', 'pad', 'fit'\n // or provide an object (e.g., {'type': 'pad', 'resize': true})\n autosize: 'pad',\n // default view background color\n // covers the entire view component\n background: null,\n // default event handling configuration\n // preventDefault for view-sourced event types except 'wheel'\n events: {\n defaults: {\n allow: ['wheel']\n }\n },\n // defaults for top-level group marks\n // accepts mark properties (fill, stroke, etc)\n // covers the data rectangle within group width/height\n group: null,\n // defaults for basic mark types\n // each subset accepts mark properties (fill, stroke, etc)\n mark: null,\n arc: {\n fill: defaultColor\n },\n area: {\n fill: defaultColor\n },\n image: null,\n line: {\n stroke: defaultColor,\n strokeWidth: defaultStrokeWidth\n },\n path: {\n stroke: defaultColor\n },\n rect: {\n fill: defaultColor\n },\n rule: {\n stroke: black\n },\n shape: {\n stroke: defaultColor\n },\n symbol: {\n fill: defaultColor,\n size: 64\n },\n text: {\n fill: black,\n font: defaultFont,\n fontSize: 11\n },\n trail: {\n fill: defaultColor,\n size: defaultStrokeWidth\n },\n // style definitions\n style: {\n // axis & legend labels\n 'guide-label': {\n fill: black,\n font: defaultFont,\n fontSize: 10\n },\n // axis & legend titles\n 'guide-title': {\n fill: black,\n font: defaultFont,\n fontSize: 11,\n fontWeight: 'bold'\n },\n // headers, including chart title\n 'group-title': {\n fill: black,\n font: defaultFont,\n fontSize: 13,\n fontWeight: 'bold'\n },\n // chart subtitle\n 'group-subtitle': {\n fill: black,\n font: defaultFont,\n fontSize: 12\n },\n // defaults for styled point marks in Vega-Lite\n point: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'circle'\n },\n circle: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth\n },\n square: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'square'\n },\n // defaults for styled group marks in Vega-Lite\n cell: {\n fill: 'transparent',\n stroke: lightGray\n },\n view: {\n fill: 'transparent'\n }\n },\n // defaults for title\n title: {\n orient: 'top',\n anchor: 'middle',\n offset: 4,\n subtitlePadding: 3\n },\n // defaults for axes\n axis: {\n minExtent: 0,\n maxExtent: 200,\n bandPosition: 0.5,\n domain: true,\n domainWidth: 1,\n domainColor: gray,\n grid: false,\n gridWidth: 1,\n gridColor: lightGray,\n labels: true,\n labelAngle: 0,\n labelLimit: 180,\n labelOffset: 0,\n labelPadding: 2,\n ticks: true,\n tickColor: gray,\n tickOffset: 0,\n tickRound: true,\n tickSize: 5,\n tickWidth: 1,\n titlePadding: 4\n },\n // correction for centering bias\n axisBand: {\n tickOffset: -0.5\n },\n // defaults for cartographic projection\n projection: {\n type: 'mercator'\n },\n // defaults for legends\n legend: {\n orient: 'right',\n padding: 0,\n gridAlign: 'each',\n columnPadding: 10,\n rowPadding: 2,\n symbolDirection: 'vertical',\n gradientDirection: 'vertical',\n gradientLength: 200,\n gradientThickness: 16,\n gradientStrokeColor: lightGray,\n gradientStrokeWidth: 0,\n gradientLabelOffset: 2,\n labelAlign: 'left',\n labelBaseline: 'middle',\n labelLimit: 160,\n labelOffset: 4,\n labelOverlap: true,\n symbolLimit: 30,\n symbolType: 'circle',\n symbolSize: 100,\n symbolOffset: 0,\n symbolStrokeWidth: 1.5,\n symbolBaseFillColor: 'transparent',\n symbolBaseStrokeColor: gray,\n titleLimit: 180,\n titleOrient: 'top',\n titlePadding: 5,\n layout: {\n offset: 18,\n direction: 'horizontal',\n left: {\n direction: 'vertical'\n },\n right: {\n direction: 'vertical'\n }\n }\n },\n // defaults for scale ranges\n range: {\n category: {\n scheme: 'tableau10'\n },\n ordinal: {\n scheme: 'blues'\n },\n heatmap: {\n scheme: 'yellowgreenblue'\n },\n ramp: {\n scheme: 'blues'\n },\n diverging: {\n scheme: 'blueorange',\n extent: [1, 0]\n },\n symbol: ['circle', 'square', 'triangle-up', 'cross', 'diamond', 'triangle-right', 'triangle-down', 'triangle-left']\n }\n };\n}\n\nfunction parse (spec, config, options) {\n if (!isObject(spec)) {\n error('Input Vega specification must be an object.');\n }\n config = mergeConfig(defaults(), config, spec.config);\n return parseView(spec, new Scope(config, options)).toRuntime();\n}\n\nexport { AxisDomainRole, AxisGridRole, AxisLabelRole, AxisRole, AxisTickRole, AxisTitleRole, DataScope, FrameRole, LegendEntryRole, LegendLabelRole, LegendRole, LegendSymbolRole, LegendTitleRole, MarkRole, Scope, ScopeRole, defaults as config, parse, parseSignal as signal, parseSignalUpdates as signalUpdates, parseStream as stream };\n","// -- Transforms -----\n\nimport {extend} from 'vega-util';\nimport {transforms} from 'vega-dataflow';\nimport * as tx from 'vega-transforms';\nimport * as vtx from 'vega-view-transforms';\nimport * as encode from 'vega-encode';\nimport * as geo from 'vega-geo';\nimport * as force from 'vega-force';\nimport * as tree from 'vega-hierarchy';\nimport * as label from 'vega-label';\nimport * as reg from 'vega-regression';\nimport * as voronoi from 'vega-voronoi';\nimport * as wordcloud from 'vega-wordcloud';\nimport * as xf from 'vega-crossfilter';\nextend(\n transforms,\n tx, vtx, encode, geo, force, label, tree, reg, voronoi, wordcloud, xf\n);\n\n\n// -- Exports -----\n\nexport {version} from './package.json';\n\nexport * from 'vega-statistics';\n\nexport * from 'vega-time';\n\nexport * from 'vega-util';\n\nexport * from 'vega-loader';\n\nexport * from 'vega-scenegraph';\n\nexport {\n Dataflow,\n EventStream,\n Parameters,\n Pulse,\n MultiPulse,\n Operator,\n Transform,\n changeset,\n ingest,\n isTuple,\n definition,\n transform,\n transforms,\n tupleid\n} from 'vega-dataflow';\n\nexport {\n scale,\n scheme,\n interpolate,\n interpolateColors,\n interpolateRange,\n quantizeInterpolator\n} from 'vega-scale';\n\nexport {\n projection\n} from 'vega-projection';\n\nexport {\n View\n} from 'vega-view';\n\nexport {\n numberFormatDefaultLocale as formatLocale,\n timeFormatDefaultLocale as timeFormatLocale,\n locale,\n defaultLocale,\n resetDefaultLocale\n} from 'vega-format';\n\nexport {\n expressionFunction\n} from 'vega-functions';\n\nexport {\n parse\n} from 'vega-parser';\n\nexport {\n context as runtimeContext\n} from 'vega-runtime';\n\nexport {\n codegenExpression,\n parseExpression\n} from 'vega-expression';\n\nexport {\n parseSelector\n} from 'vega-event-selector';\n"],"names":["accessor","fn","fields","name","fname","accessorName","accessorFields","getter","path","length","get1","getN","field","obj","len","i","error","message","Error","splitAccessPath","p","n","j","c","q","b","s","push","substring","opt","get","id","identity","_","zero","one","truthy","falsy","log$1","method","level","input","args","concat","slice","call","console","apply","None","Error$1","Warn","Info","Debug","logger","handler","arguments","undefined","this","warn","info","debug","isArray","Array","isObject","Object","isLegalKey","key","mergeConfig","_len","configs","_key","reduce","out","source","signals","mergeNamed","r","layout","writeConfig","output","value","recurse","k","o","a","map","add","forEach","peek","array","toNumber","exp","sign","x","Math","log","symlog","log1p","abs","symexp","expm1","pow","exponent","pan","domain","delta","lift","ground","d0","d1","dd","panLinear","panLog","panPow","panSymlog","constant","zoom","anchor","scale","da","zoomLinear","zoomLog","zoomPow","zoomSymlog","quarter","date","Date","getMonth","utcquarter","getUTCMonth","clampRange","range","min","max","span","lo","hi","isFunction","DESCENDING","compare","orders","ord","fmap","gen","comparator","f","keys","ascending","u","v","compare1","compareN","order","debounce","delay","tid","e","clearTimeout","setTimeout","extend","extent","extentIndex","hop","prototype","hasOwnProperty","has","object","property","NULL","fastmap","test","has$1","size","empty","set","delete","clear","clean","next","flush","threshold","left","right","center","t","l","inherits","child","parent","members","proto","create","defineProperty","writable","enumerable","configurable","inrange","r0","r1","isBoolean","isDate","toString","isIterable","Symbol","iterator","isNumber","isRegExp","isString","flat","replace","lerp","frac","lruCache","maxsize","curr","prev","update","merge","array0","array1","n0","n1","merged","constructor","i0","i1","repeat","str","reps","pad","padchar","align","ceil","$","JSON","stringify","toBoolean","defaultParser","parse","toDate","parser","toSet","truncate","ellipsis","visitArray","filter","visitor","EOL","EOF","QUOTE","NEWLINE","RETURN","objectConverter","columns","Function","join","inferColumns","rows","columnSet","row","column","width","formatDate","year","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","isNaN","getUTCFullYear","getUTCDate","dsvFormat","delimiter","reFormat","RegExp","DELIMITER","charCodeAt","parseRows","text","N","I","eof","eol","token","preformatBody","formatValue","formatRow","convert","customConverter","format","formatBody","formatRows","identity$5","feature","topology","objects","type","features","geometries","bbox","properties","geometry","transformPoint","transform","x0","y0","kx","ky","dx","translate","dy","arcs","arc","points","pop","reverse","point","line","ring","polygon","coordinates","stitch","stitchedArcs","fragmentByStart","fragmentByEnd","fragments","emptyIndex","start","end","g","p1","p0","dp","ends","fg","unshift","gf","mesh","meshArcs","geom","geomsByArc","extract0","extract1","extract2","extract3","geoms","extractArcs","NaN","descending","bisector","compare2","mid","d","number","ascendingBisect","bisectRight","bisectLeft","bisect$1","Adder","_partials","Float64Array","_n","y","valueOf","InternMap","Map","entries","keyof","super","defineProperties","_intern","intern_get","intern_set","intern_delete","InternSet","Set","values","_ref","_ref2","_ref3","ascendingDefined","e10","sqrt","e5","e2","tickSpec","stop","count","step","power","floor","log10","factor","i2","inc","round","ticks","tickIncrement","tickStep","valueof","index","quickselect","Infinity","TypeError","compareDefined","m","z","sd","swap","quantile","from","numbers","value0","subarray","quantileSorted","median","arrays","flatten","sum","formatDecimalParts","toExponential","indexOf","coefficient","prefixExponent","re","formatSpecifier","specifier","match","exec","FormatSpecifier","fill","symbol","comma","precision","trim","formatRounded","formatTypes","%","toFixed","toLocaleString","toPrecision","X","toUpperCase","identity$4","locale","formatPrefix","prefixes","formatLocale$1","grouping","thousands","group","Number","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","String","percent","minus","nan","newFormat","prefix","toLowerCase","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","formatTrim","padding","precisionFixed","precisionPrefix","precisionRound","definition","formatLocale","defaultLocale","t0","t1","timeInterval","floori","offseti","interval","offset","previous","setTime","every","isFinite","millisecond","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","durationYear","second","getMilliseconds","timeMinute","getSeconds","getMinutes","utcMinute","setUTCSeconds","timeHour","getHours","utcHour","setUTCMinutes","timeDay","setHours","setDate","getDate","getTimezoneOffset","utcDay","setUTCHours","setUTCDate","unixDay","timeWeekday","getDay","timeSunday","timeMonday","timeTuesday","timeWednesday","timeThursday","timeFriday","timeSaturday","utcWeekday","getUTCDay","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","timeMonth","setMonth","getFullYear","utcMonth","setUTCMonth","timeYear","setFullYear","utcYear","setUTCFullYear","ticker","month","week","day","hour","minute","tickIntervals","tickInterval","target","utcTicks","utcTickInterval","timeTicks","timeTickInterval","YEAR","QUARTER","MONTH","WEEK","DATE","DAY","DAYOFYEAR","HOURS","MINUTES","SECONDS","MILLISECONDS","TIME_UNITS","UNITS","timeUnits","units","unit","sort","defaultSpecifiers","timeUnitSpecifier","specifiers","fmt","localYear","dayofyear","localDayOfYear","localWeekNum","timeWeek","localFirst","localDate","H","M","S","L","utcdayofyear","utcDayOfYear","utcweek","utcWeekNum","UTC","utcWeek","utcFirst","utcDate","inv","newDate","phase","getUnit","weekday","firstDay","localGet","localInv","w","timeFloor","utcGet","utcInv","utcFloor","timeIntervals","timeSecond","timeMillisecond","utcIntervals","utcSecond","utcMillisecond","utcInterval","ival","timeOffset","utcOffset","sequence","timeSequence","utcSequence","Milli","Seconds","Minutes","Hours","Day","Month","Year","intervals","bin","ext","maxbins","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","formatRe","periodLookup","formatLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","A","B","formatDayOfMonth","formatMicroseconds","formatYearISO","G","formatFullYearISO","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","Q","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","U","formatWeekNumberSunday","V","formatWeekNumberISO","formatWeekdayNumberSunday","W","formatWeekNumberMonday","formatYear","Y","formatFullYear","Z","formatZone","formatLiteralPercent","utcFormats","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCYearISO","formatUTCFullYearISO","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parses","string","parseSpecifier","parseDayOfMonth","parseMicroseconds","parseYear","parseFullYear","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parseQuarter","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseZone","parseLiteralPercent","pads","charAt","newParse","utcFormat","utcParse","timeFormat","timeParse","numberRe","percentRe","requoteRe","requote","names","dISO","dow","UTCdISO","memoize","cache","spec","numberLocale","formatFloat","numberFormat","decimalChar","dec","idx","lastIndexOf","rightmostDigit","formatSpan","defaultNumberLocale","defaultTimeLocale","resetNumberFormatDefaultLocale","numberFormatLocale","numberFormatDefaultLocale","timeMultiFormat","timeLocale","resetTimeFormatDefaultLocale","timeFormatLocale","timeFormatLocale$1","timeFormatDefaultLocale","createLocale","numberSpec","timeSpec","protocol_re","allowed_re","whitespace_re","fileProtocol","async","load","uri","options","sanitize","url","href","localFile","file","http","fileAccess","result","isFile","loadFile","base","isAllowed","stringValue","hasProtocol","baseURL","startsWith","endsWith","mode","defaultProtocol","rel","context","crossOrigin","fileLoader","fs","filename","Promise","accept","reject","readFile","data","fileReject","httpLoader","fetch","response","ok","status","statusText","httpReject","isValid","typeParsers","boolean","integer","unknown","typeTests","isInteger","typeList","inferType","inferTypes","types","delimitedFormat","delim","dsv","responseType","header","json","prop","Buffer","isBuffer","copy","parseJSON","filters","interior","exterior","topojson","csv","tsv","reader","read","schema","timeParser","utcParser","datum","parsers","parts","pattern","split","loader","loaderFactory","UniqueList","idFunc","list","ids","remove","splice","asyncCallback","df","callback","err","TUPLE_ID_KEY","TUPLE_ID","isTuple","tupleid","setid","ingest$1","derive","rederive","stableCompare","cmp","isChangeSet","changeset","rem","mod","remp","modp","reflow","insert","modify","tuple","encode","pulse","tuples","cur","modifies","CACHE","Parameters","force","modified","OP_ID","NO_PARAMS","Operator","init","params","react","stamp","rank","qrank","flags","_update","parameters","flag","bit","state","targets","_targets","skip","initonly","argval","_argval","argops","_argops","deps","op","marshall","item","detach","evaluate","StopPropagation","run","rv","STREAM_ID","EventStream","receive","_filter","_apply","stream","consume","_consume","evt","val","trg","preventDefault","stopPropagation","throttle","pause","now","dataflow","between","active","SKIP","onStream","func","touch","onOperator","updater","connect","Pulse","materialize","visit","addFilter","MultiPulse","pulses","hash","changed","ADD","REM","MOD","changes","reentrant","ADD_REM","ADD_MOD","ALL","REFLOW","SOURCE","NO_SOURCE","NO_FIELDS","fork","clone","addAll","src","addF","remF","modF","srcF","cleans","runAfter","nomod","some","NO_OPT","Heap","nodes","siftdown","last","ridx","cidx","siftup","pidx","Dataflow","logLevel","_clock","_rank","_locale","_loader","_touched","_input","_pulse","_heap","_postrun","logMethod","_log","Transform","cleanThreshold","shift","sources","targetRank","rerank","queue","_enqueue","ingest","preload","pending","_pending","requests","done","loadPending","res","request","send","document","querySelectorAll","addEventListener","on","prerun","postrun","_getPulse","then","pr","priority","all","cb","runAsync","_running","enqueue","singlePulse","transforms","Definition","quantiles","quartiles","estimateBandwidth","mean","variance","deviation","h","maxb","logb","div","divide","minstep","steps","eps","nice","bootstrapCI","samples","alpha","mu","random","dotbin","smooth","thresh","smoothing","exports","SQRT2PI","PI","SQRT2","nextSample","sampleNormal","stdev","rds","densityNormal","cumulativeNormal","cd","quantileNormal","erfinv","gaussian","sigma","dist","sample","pdf","cdf","icdf","kde","support","bandwidth","kernel","sampleLogNormal","densityLogNormal","cumulativeLogNormal","quantileLogNormal","lognormal","mixture","dists","weights","normalize","distributions","sampleUniform","densityUniform","cumulativeUniform","quantileUniform","uniform","coef","predict","rSquared","ols","uX","uY","uXY","uX2","slope","xv","yv","ux","uy","visitPoints","SSE","SST","sse","sst","linear","XY","X2","ly","xy","YL","XYL","X2Y","c0","c1","YS","lx","quad","x2","X3","X4","X2X2","poly","lhs","rhs","matrix","gaussianElimination","uncenter","loess","bw","yhat","residuals","robustWeights","iter","edge","denom","xk","yk","tricube","xkw","updateInterval","medianResidual","arg","cnt","MIN_RADIANS","sampleCurve","minSteps","maxSteps","minX","maxX","sx","sy","ymin","ymax","scaleY","pm","angleDelta","a0","atan2","a1","groupkey","measureName","as","noop","base_op","AggregateOps","cell","store","num","__count__","missing","valid","product","mean_d","average","req","dev","variancep","stdevp","stderr","distinct","ci0","ci1","q2","q1","q3","argmin","argmax","exponential","exp_r","exponentialb","ValidAggregateOps","createMeasure","param","compareIndex","_ops","aggregate_param","_out","compileMeasures","agg","ops","getreqs","resolve","ctr","TupleStore","reset","measure","prototype$1","Aggregate","_adds","_mods","_alen","_mlen","_drop","_cross","_dims","_dnames","_measures","_countOnly","_counts","_prev","_inputs","_outputs","_add","_rem","_ext","_get","_q","quartile","ci","_ci","Aggregate$1","metadata","generates","null","default","aggr","drop","cross","dims","vals","collect","cells","generate","inputs","outputs","inputMap","inputVisit","groupby","dname","cellkey","aggregate_params","mname","outname","newcell","newtuple","measures","celltuple","counts","adds","mods","Bin","SortedList","resort","Collect","Compare","update$5","CountPattern","Cross","required","band","bins","_bins","b0","b1","Collect$1","root","process","tokens","tcase","tokenize","case","_parameterCheck","_match","_stop","_finish","stopwords","_tuples","Distributions","randomKDE","randomMixture","normal","randomNormal","randomLogNormal","randomUniform","FUNCTION","def","Density","function","fieldNames","partition$1","groups","distribution","minsteps","maxsteps","DotBin","Expression","update$4","expr","Extent","Subflow","Facet","_keys","Field","update$3","Filter","Flatten","Fold","Formula","Generate","autostep","detachSubflow","activate","flow","subflow","flows","sf","_group","detached","initTargets","act","rekey","k0","k1","isMod","revisit","maxlen","fnames","generator","Methods","Empty","Impute","JoinAggregate","KDE","Key","update$2","Load","Lookup","MultiExtent","update$1","extents","MultiValues","Params","Pivot","PreFacet","Project","Proxy","Quantile","gVals","kVal","impute","getValue","getField","fName","kName","gNames","keyvals","gKey","kMap","gMap","partition","_impute","cumulative","density","defaultValue","_transform","limit","pivotKeys","bind","aggregateParams","project","lut","dt","Quantile$1","Relay","Sample","Sequence","Sieve","TimeUnit","probs","cap","OUTPUT","TupleIndex","Values","utc","timezone","_floor","u0","u1","timeBin","tunits","WindowOps","row_number","dense_rank","drank","percent_rank","cume_dist","cume","ntile","lag","lead","first_value","last_value","nth_value","nth","prev_value","next_value","find","ValidWindowOps","WindowState","windows","countOnly","visitInputs","WindowOp","Window","processPartition","ignorePeers","frame","setWindow","adjustRange","bisect","wind","constant$3","cos","sin","epsilon","pi","halfPi","tau","asin","tauEpsilon","append","strings","Path$1","digits","_x0","_y0","_x1","_y1","_append","appendRound","moveTo","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","y2","arcTo","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","tan","acos","t01","t21","ccw","cw","rect","Path","withPath","shape","RangeError","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","cornerTangents","rc","ox","oy","x11","y11","x10","y10","x00","y00","d2","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","array$4","Linear","_context","curveLinear","line$2$1","defined","curve","buffer","defined0","lineStart","lineEnd","pointX","pointY","area$2$1","area","x0z","y0z","areaStart","areaEnd","arealine","lineX0","lineY0","lineY1","lineX1","Linear$1","_line","_point","circle","draw","noop$3","that","Basis","BasisClosed","BasisOpen","Bundle","beta","_basis","_beta","_x2","_x3","_x4","_y2","_y3","_y4","_x","_y","curveBundle","custom","bundle","_k","Cardinal","tension","curveCardinal","cardinal","CardinalClosed","_x5","_y5","curveCardinalClosed","CardinalOpen","curveCardinalOpen","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","_alpha","x23","y23","curveCatmullRom","catmullRom","CatmullRomClosed","curveCatmullRomClosed","CatmullRomOpen","curveCatmullRomOpen","LinearClosed","slope3","h0","h1","s0","s1","slope2","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","Step","_t","domCanvas","createElement","getContext","height","_t0","px","py","domImage","Image","initRange","initInterpolator","interpolator","implicit","ordinal","define","factory","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","parseInt","rgbn","Rgb","rgba","hsla","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","clampa","clampi","Hsl","hslConvert","hsl","clamph","clampt","hsl2rgb","m1","m2","channels","assign","displayable","formatHex8","formatHsl","clamp","radians","degrees","Xn","Yn","Zn","t2","t3","labConvert","Lab","Hcl","hcl2lab","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hcl","hclConvert","C","E","ED","EB","BC_DA","cubehelix","Cubehelix","bl","cubehelixConvert","basis","v0","v1","v2","v3","basis$1","basisClosed","cosh","sinh","constant$2","hue","gamma","nogamma","rgbGamma","colorRgb","rgbSpline","spline","colors","rgbBasis","rgbBasisClosed","numberArray","isNumberArray","ArrayBuffer","isView","DataView","genericArray","nb","na","date$1","interpolateNumber","reA","reB","am","bm","bs","bi","lastIndex","interpolate$1","interpolateRound","svgNode","translateX","translateY","rotate","skewX","scaleX","decompose","atan","interpolateTransform","pxComma","pxParen","degParen","xa","ya","xb","yb","interpolateTransformCss","DOMMatrix","WebKitCSSMatrix","isIdentity","interpolateTransformSvg","createElementNS","setAttribute","baseVal","consolidate","zoomRho","rho","rho2","rho4","ux0","uy0","w0","ux1","uy1","w1","coshr0","tanh","duration","_1","_2","colorHsl","hsl$1","hslLong","colorHcl","hcl$1","hclLong","cubehelixGamma","colorCubehelix","cubehelix$1","cubehelixLong","piecewise","interpolate","colorLab","bimap","polymap","transformer","untransform","interpolateValue","rescale","clamper","invert","rangeRound","continuous","tickFormat","linearish","prestep","maxIter","transformLog","transformExp","transformLogn","transformExpn","pow10","reflect","loggish","logs","pows","log2","logp","powp","transformSymlog","transformSymexp","symlogish","transformPow","transformSqrt","transformSquare","powish","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","k10","sequential","sequentialPow","k21","r2","divergingPow","bandSpace","paddingInner","paddingOuter","space","Log","Pow","Sqrt","Symlog","Time","Sequential","Diverging","Quantize","Threshold","Ordinal","Point","Band","BinOrdinal","Continuous","Discrete","Discretizing","Interpolating","Temporal","scaleOrdinal","ordinalRange","range$1","invertRange","pointish","scales","VEGA_SCALE","registerScale","invertExtent","invertRangeExtent","isValidScaleType","hasType","isContinuous","isDiscrete","isDiscretizing","isLogarithmic","isInterpolating","isQuantile","scale$4","sequentialLog","sequentialSymlog","diverging","divergingLog","divergingSymlog","thresholds","quantize","scaleBinOrdinal","tickFormat$1","scaleProps","interpolateRange","interpolateColors","$$1","quantizeInterpolator","scaleFraction","scale$1","interp","palette","scheme","schemes","category10","category20","category20b","category20c","tableau10","tableau20","accent","dark2","paired","pastel1","pastel2","set1","set2","set3","blues","greens","greys","oranges","purples","reds","blueGreen","bluePurple","greenBlue","orangeRed","purpleBlue","purpleBlueGreen","purpleRed","redPurple","yellowGreen","yellowOrangeBrown","yellowOrangeRed","blueOrange","brownBlueGreen","purpleGreen","purpleOrange","redBlue","redGrey","yellowGreenBlue","redYellowBlue","redYellowGreen","pinkYellowGreen","spectral","viridis","magma","inferno","plasma","cividis","rainbow","sinebow","turbo","browns","tealBlues","teals","warmGreys","goldGreen","goldOrange","goldRed","lightGreyRed","lightGreyTeal","lightMulti","lightOrange","lightTealBlue","darkBlue","darkGold","darkGreen","darkMulti","darkRed","SymbolLegend","DiscreteLegend","defaultFormatter","tickCount","minStep","validTicks","endpoints","tickValues","noSkip","varfmt","tickLog","symbols","labelValues","binValues","thresholdValues","isDiscreteRange","labelFormat","thresholdFormat","formatRange","formatDiscrete","formatPoint","dflt","isTemporal","domainCaption","gradient_id","patternPrefix","isGradient","gradient","gradientRef","defs","Gradient","stops","lookup","monotone","horizontal","vertical","natural","curves","orientation","entry","paramCounts","commandPattern","numberPattern","spacePattern","flagPattern","commands","cmd","paramCount","segment","ws","parseParams","DegToRad","HalfPi","Tau","HalfSqrt3","segmentCache","bezierCache","bezier","th0","th1","rx","ry","sin_th","cos_th","a00","a01","a10","a11","cos_th0","sin_th0","cos_th1","sin_th1","th_half","sin_th_h2","x3","y3","temp","current","sX","sY","pathRender","tempX","tempY","tempControlX","tempControlY","controlX","controlY","anchorX","anchorY","beginPath","drawArc","coords","seg","large","sweep","rotateX","th","pl","sfactor_sq","sfactor","xc","yc","th_arc","segs","th2","th3","segments","bez","Tan30","builtins","diamond","square","arrow","wedge","triangle","stroke","parsed","customSymbol","rectangleX","rectangleY","rectangleWidth","rectangleHeight","vg_rect","crTL","crTR","crBL","crBR","rectangle","tl","tr","br","path$3","cornerRadius","vg_trail","ready","w2","ud","hypot","trail","value$1","arcShape","padRadius","da0","da1","ap","rp","rc0","rc1","oc","x32","y32","intersect","ax","ay","bx","by","kc","lc","centroid","arc$2","areavShape","area$2","areahShape","lineShape","line$2","rectShape","cornerRadiusTopLeft","cornerRadiusTopRight","cornerRadiusBottomRight","cornerRadiusBottomLeft","symbolShape","symbol$2","trailShape","hasCornerRadius","clip_id","resetSVGClipId","clip$1","renderer","clip","_defs","clipping","Bounds","union","Item","mark","bounds","GroupItem","items","ResourceLoader","customLoader","increment","decrement","boundStroke","miter","strokeOpacity","sw","strokeWidth","expand","strokeJoin","miterAdjustment","MAX_VALUE","equals","angle","rotatedPoints","encloses","alignsWith","intersects","contains","sanitizeURL","catch","loadImage","image$1","img","cors","onload","onerror","complete","poll","circleThreshold","rot","ma","mb","mc","md","addL","addX","addY","addp","addpL","boundContext","deg","context$1","px1","py1","px2","py2","quadExtrema","px3","py3","cubicExtrema","sa","ea","cubic","s2","canvas","intersectPath","brush","isPointInPath","intersectPoint","box","intersectRect","intersectRule","intersectBoxLine","blend","globalCompositeOperation","addStops","addColorStop","createRadialGradient","image","ictx","fillStyle","createLinearGradient","fillRect","createPattern","fillOpacity","globalAlpha","lw","strokeStyle","lineWidth","lineCap","strokeCap","lineJoin","miterLimit","strokeMiterLimit","setLineDash","strokeDash","lineDashOffset","strokeDashOffset","zindex","zorder","scene","zdirty","zitems","pickVisit","hit","drawAll","drawPath","drawOne","pick$1","gx","gy","pixelRatio","hitPath","filled","isPointInStroke","pickPath","translateItem","markItemPath","isect","tag","nested","attr","emit","rotateItem","bound","pick","markMultiItemPath","tip","orient","clipGroup","offset$1","strokeOffset","emitRectangle","off","rectanglePath","hitBackground","hitForeground","hitCorner","noBound","markTypes","fore","strokeForeground","save","marktype","includes","restore","dw","dh","ix","interactive","pickMark","content","background","foreground","xmlns","version","getImage","imageWidth","aspect","imageHeight","imageXOffset","imageYOffset","baseline","toDataURL","ar0","ar1","imageSmoothingEnabled","drawImage","xOffset","yOffset","path$1","pathCache","path$2","transformItem","draw$2","rule","widthCache","textMetrics","fontSize","measureWidth","estimateWidth","useCanvas","use","_estimateWidth","textValue","currentFontHeight","_measureWidth","font","currentFont","measureText","lineHeight","textLines","lineBreak","multiLineOffset","widthGetter","rtl","dir","fontFamily","quote","fontStyle","fontVariant","fontWeight","textAlign","tempBounds","anchorPoint","radius","theta","lh","fillText","strokeText","Marks","boundItem","DUMMY","boundMark","hasItems","sceneToJSON","indent","sceneFromJSON","initialize","Scenegraph","createMark","role","aria","description","domCreate","doc","ns","domFind","el","childNodes","tagName","domChild","ownerDocument","insertBefore","domClear","removeChild","cssClass","event","getBoundingClientRect","clientX","clientLeft","clientY","top","clientTop","Handler","customTooltip","_active","_handlers","_tooltip","defaultTooltip","element","Renderer","_el","_bgcolor","toJSON","markdef","origin","_obj","firstChild","_origin","_scene","_handlerIndex","handlers","eventName","handleHref","MouseEvent","dispatchEvent","handleTooltip","show","tooltip","mdef","resolveItem","getItemBoundingClientRect","bottom","scaleFactor","resize","bgcolor","_width","_height","_scale","dirty","render","_call","_render","renderAsync","_ready","_load","redraw","DragEnterEvent","DragLeaveEvent","DragOverEvent","PointerDownEvent","PointerMoveEvent","PointerOutEvent","PointerOverEvent","ClickEvent","MouseWheelEvent","TouchStartEvent","TouchMoveEvent","TouchEndEvent","TooltipShowEvent","TooltipHideEvent","HrefEvent","CanvasHandler","_down","_touch","_first","_events","eventListenerCheck","eventBundle","fire","move","moveEvent","overEvent","outEvent","pickEvent","exit","inactive","_canvas","events","DOMMouseScroll","pointermove","dragover","pointerout","dragleave","pointerdown","click","touchstart","changedTouches","touchmove","touchend","vegaType","window","devicePixelRatio","CanvasRenderer","_options","_redraw","_dirty","_tempb","base$2","SVGHandler","_hrefHandler","listener","_tooltipHandler","externalContext","appendChild","inDOM","HTMLElement","parentNode","ratio","style","setTransform","ctx","db","vb","viewBounds","clipToBounds","clearRect","__data__","svg","_svg","removeEventListener","ARIA_HIDDEN","ARIA_LABEL","ARIA_ROLE","ARIA_ROLEDESCRIPTION","GRAPHICS_OBJECT","GRAPHICS_SYMBOL","roledesc","label","AriaIgnore","AriaGuides","axis","desc","caption","title","extractTitle","legend","props","channelCaption","titleCaption","AriaEncode","ariaRole","ariaRoleDescription","ariaItemAttributes","hide","ariaMarkAttributes","ariaGuide","ariaMark","innerText","markup","buf","outer","inner","stack","open","attrs","close","serializeXML","node","_serialize","hasAttributes","attributes","hasChildNodes","children","nodeType","nodeValue","stylesAttr","stylesCss","rootAttributes","svgns","SVGRenderer","_dirtyID","_root","base$1","dirtyParents","updateGradient","grad","pt","setAttributes","viewBox","preserveAspectRatio","fx","fy","fr","updateClipping","mask","sibling","__values__","bg","cg","ownerSVGElement","previousSibling","siblingCheck","nextSibling","_clearDefs","setAttributeNS","RootIndex","setProperty","removeAttribute","_dirtyCheck","_dirtyAll","isDirty","markType","isGroup","lastChild","extra","mark_extras","setStyle","ts","textContent","removeAttributeNS","removeProperty","loc","location","SVGStringRenderer","_text","class","attrList","_hrefs","prefixed","styleList","display","OPTS","svgMarkTypes","svgOnTop","HybridRenderer","_svgRenderer","_canvasRenderer","HybridHandler","_root_el","bottomEl","topEl","position","_svgEl","_canvasEl","pointerEvents","canvasMarkTypes","Canvas","Hybrid","RenderType","PNG","SVG","modules","renderModule","hits","intersectMark","intersectGroup","visitMark","intersectItem","marks","headless","clipBounds","boundClip","TOLERANCE","sceneEqual","pathEqual","ka","kb","objectEqual","Top","Left","Right","Bottom","TopLeft","TopRight","BottomLeft","BottomRight","Start","Middle","End","Group","AxisRole","TitleRole","FrameRole","ScopeRole","LegendRole","RowHeader","RowFooter","RowTitle","ColHeader","ColFooter","ColTitle","Padding","Symbols","Fit","FitX","FitY","Pad","All","Each","Flush","Column","Row","Bound","view","rebound","markBounds","COUNTER_NAME","Identifier","Mark","Overlap","Identifier$1","counter","_signals","scenegraph","lookup$1","Init","methods","parity","greedy","sep","hasOverlap","hasBounds","Render","separation","boundScale","boundTolerance","boundTest","tolerance","boundOrient","isYAxis","axisLayout","indices","grid","labels","axisIndices","minExtent","maxExtent","titlePadding","dl","axisTitleLayout","auto","bboxFlush","bboxFull","offsetValue","gridLayout","nodirty","alignCol","alignRow","padCol","padRow","ncols","nrows","xExtent","xMax","yExtent","yMax","boxes","trellisLayout","views","rowheaders","rowfooters","colheaders","colfooters","rowtitle","coltitle","gridLayoutGroups","boundFlush","boundFull","headerBand","layoutHeaders","footerBand","titleAnchor","titleBand","layoutTitle","headers","isX","bf","stride","back","legendParams","config","legends","offsets","mult","legendLayout","_bounds","ex","ey","tpad","tx","ty","legendTitleOffset","legendGroupLayout","legendBounds","widths","legendEntryLayout","lr","noBar","vgrad","ViewLayout","xBounds","yBounds","autosize","pos","subtitle","titleLayout","_autosize","viewWidth","viewHeight","_resizeView","viewSizeLayout","layoutGroup","shouldReflow","AxisTicks","DataJoin","defaultItemCreate","Encode","LegendEntries","newMap","fmod","encoders","reenter","enter","fraction","lskip","perc","adjust","labelFraction","perc2","sourceX","sourceY","targetX","targetY","LinkPath","Paths","rr","iy","lineR","sr","ta","arcR","curveR","orthoX","orthoY","orthoR","sc","ss","tc","diagonalX","diagonalY","diagonalR","mr","Pie","DEFAULT_COUNT","includePad","Scale","domainCheck","adjustScheme","flip","SortItems","isContinuousColor","rawDomain","domainMid","scaleKey","rangeStep","configureRangeStep","scheme$1","schemeExtent","interpolateGamma","schemeCount","configureScheme","configureRange","domainRaw","configureBins","raw","includeZero","padDomain","domainMin","domainMax","domainImplicit","scaleImplicit","configureDomain","Zero","Center","Normalize","DefOutput","Stack","stackCenter","stackNormalize","stackZero","lastPos","lastNeg","epsilon2","quarterPi","streamGeometry","streamGeometryType","streamObjectType","Feature","FeatureCollection","Sphere","sphere","MultiPoint","LineString","streamLine","MultiLineString","Polygon","streamPolygon","MultiPolygon","GeometryCollection","closed","coordinate","polygonStart","polygonEnd","geoStream","lambda00","phi00","lambda0","cosPhi0","sinPhi0","phi0","lambda1","phi1","lambda2","deltaSum","ranges","areaRingSum","areaSum","areaStream","areaRingStart","areaRingEnd","areaRing","areaPointFirst","areaPoint","lambda","phi","dLambda","sdLambda","adLambda","cosPhi","sinPhi","spherical","cartesian","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","W0","W1","X0","Y0","Z0","X1","Y1","Z1","Y2","Z2","z0","boundsStream","boundsPoint","boundsLineStart","boundsLineEnd","boundsRingPoint","boundsRingStart","boundsRingEnd","linePoint","inflection","phii","lambdai","antimeridian","rangeCompare","rangeContains","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointCartesian","centroidLinePointFirst","centroidLinePoint","centroidRingPointFirst","centroidRingPoint","cz","compose","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","circleRadius","cosRadius","clipBuffer","lines","rejoin","pointEqual","Intersection","other","clipRejoin","compareIntersection","startInside","subject","link","isSubject","longitude","pointVisible","clipLine","sink","ringBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","winding","point0","sinPhi1","cosPhi1","point1","absDelta","intersection","phiArc","polygonContains","pointLine","ringSegments","validSegment","sign0","sign1","sinLambda0Lambda1","clipAntimeridianIntersect","to","direction","clipCircle","cr","smallRadius","notHemisphere","visible","two","n2","n2n2","n1n2","determinant","c2","n1xn2","uu","polar","code","v00","point2","sinRadius","circleStream","clipMax","clipMin","clipRectangle","corner","comparePoint","ca","x__","y__","v__","x_","y_","v_","first","activeStream","bufferStream","clipStream","polygonInside","cleanInside","graticuleX","graticuleY","pathArea","boundsStream$1","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","pathCentroid","PathContext","_radius","pointRadius","lengthRing","lengthSum","lengthStream","lengthPointFirst","lengthPoint","pathMeasure","cacheDigits","cacheAppend","cacheRadius","cacheCircle","PathString","geoPath","projection","projectionStream","contextStream","pathBounds","TransformStream","fit","fitBounds","clipExtent","fitExtent","fitSize","fitWidth","fitHeight","maxDepth","cosMinDistance","resample","delta2","resampleLineTo","depth","phi2","dx2","dy2","dz","b00","c00","resampleStream","ringPoint","resampleNone","transformRadians","scaleTranslateRotate","scaleTranslate","cosAlpha","sinAlpha","ai","fi","projectionMutator","projectAt","projectResample","projectTransform","projectRotateTransform","cacheStream","preclip","clipAntimeridian","postclip","recenter","transformRotate","clipAngle","reflectX","reflectY","conicProjection","parallels","conicEqualAreaRaw","sy0","forward","cylindricalEqualAreaRaw","r0y","geoConicEqualArea","geoAlbers","conicEqualArea","azimuthalRaw","azimuthalInvert","cc","azimuthalEqualAreaRaw","cxcy","azimuthalEquidistantRaw","mercatorRaw","mercatorProjection","reclip","tany","conicConformalRaw","equirectangularRaw","conicEquidistantRaw","nx","A1","A2","A3","A4","equalEarthRaw","l2","l6","gnomonicRaw","naturalEarth1Raw","phi4","orthographicRaw","stereographicRaw","transverseMercatorRaw","sqrt2","mollweideBromleyTheta","cp","cpsinPhi","mollweideRaw","mollweideBromleyRaw","defaultPath","projectionProperties","proj","projections","getProjectionPath","albers","albersusa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","albersUsa","streams","azimuthalequalarea","azimuthalequidistant","conicconformal","conicequalarea","conicequidistant","equalEarth","equirectangular","gnomonic","mercator","mollweide","naturalEarth1","orthographic","stereographic","transversemercator","cases","contours","smoothLinear","tz","contour","polygons","holes","startIndex","endIndex","isorings","hole","xt","yt","_0","ringContains","xi","yi","pj","xj","yj","segmentContains","collinear","Isocontour","transformPolygon","transformRing","bandwidthNRD","density2D","weight","values0","Float32Array","values1","blurX","blurY","sz","cellSize","LN2","KDE2D","levels","paths","transformPaths","PARAMS","Contour","post","GeoJSON","GeoPath","GeoPoint","GeoShape","Graticule","DX","DY","graticule","outline","extentMajor","extentMinor","stepMajor","stepMinor","geoGraticule","Heatmap","dependency","$x","$y","$value","$max","Projection","_features","_points","lon","lat","geojson","initPath","shapeGenerator","shared","dep","opacity_","color_","can","getImageData","pix","putImageData","toCanvas","featurize","collectGeoJSON","tree","xm","ym","xp","yp","leaf","Quad","defaultX","defaultY","quadtree","Quadtree","leaf_copy","treeProto","constant$1","jiggle","vx","vy","nodeById","nodeId","cover","xz","yz","quads","retainer","removeAll","visitAfter","dispatch","Dispatch","typename","T","taskHead","taskTail","timeout","pokeDelay","clockLast","clockNow","clockSkew","clock","performance","setFrame","requestAnimationFrame","clearNow","Timer","_time","_next","timer","restart","wake","timerFlush","sleep","nap","poke","clearInterval","setInterval","initialRadius","initialAngle","forceSimulation","simulation","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","lcg","tick","iterations","initializeNodes","initializeForce","randomSource","closest","ForceMap","strength","collide","radii","ri","ri2","prepare","rj","_nodes","_random","nbody","strengths","distanceMin2","distanceMax2","theta2","accumulate","distanceMin","distanceMax","links","distances","bias","distance","initializeStrength","initializeDistance","Forces","ForceParams","ForceConfig","ForceOutput","Force","setup","sim","getForce","numForces","setForceParam","change","iters","stopped","static","finish","defaultSeparation","meanXReduce","maxYReduce","hierarchy","mapChildren","objectChildren","childs","Node","eachBefore","computeHeight","copyData","optional","constantZero","eachAfter","each","ancestor","aNodes","ancestors","bNodes","leastCommonAncestor","descendants","leaves","extendBasis","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","dr","enclosesWeak","encloseBasis","encloseBasis1","r21","r3","a2","a3","b2","b3","c3","d3","ab","place","score","packSiblingsRandom","circles","aa","sj","sk","pack","shuffle","packEncloseRandom","defaultRadius","radiusLeaf","packChildrenRandom","translateChild","roundNode","treemapDice","preroot","ambiguous","imputed","defaultId","defaultParentId","parentId","stratify","nodeKey","currentId","currentParentId","nodeByKey","slash","P","parentof","nextLeft","nextRight","moveSubtree","wm","wp","nextAncestor","vim","TreeNode","treemapSlice","squarifyRatio","sumValue","minValue","maxValue","newRatio","minRatio","dice","treemapSquarify","squarify","treemapResquarify","resquarify","_squarify","Nest","treesource","nest","valuesByKey","keyValue","HierarchyLayout","setParams","setFields","Output$3","Pack","Output$2","Partition","Stratify","positionNode","parentKey","Layouts","tidy","nodeSize","treeRoot","firstWalk","secondWalk","sizeNode","siblings","executeShifts","midpoint","vip","vop","vom","sip","sop","som","apportion","cluster","previousNode","meanX","maxY","leafLeft","leafRight","Output$1","Tree","TreeLinks","Tiles","binary","sums","valueOffset","valueTarget","valueLeft","valueRight","slicedice","Output","Treemap","tile","paddingStack","paddingTop","paddingRight","paddingBottom","paddingLeft","treemap","ALPHA_MASK","getBuffer","Uint32Array","DIV","SIZE","RIGHT0","RIGHT1","scaler","bitmap","_set","_clear","getRange","indexStart","indexEnd","setRange","clearRange","outOfBounds","Bitmap","textWidth","textHeight","collision","bm0","bm1","X_DIR","Y_DIR","Aligns","Baselines","boundary","isInside","anchorCode","TOP","MIDDLE","middle","BOTTOM","placeAreaLabel","naive","bitmaps","avoidBaseMark","markIndex","areaWidth","maxAreaWidth","tryLabel","maxSize","_xMid","_yMid","swapTmp","labelPlaced","labelPlaced2","floodfill","bm2","labelLayout","texts","avoidMarks","lineAnchor","positions","getOffsets","anchors","Int8Array","getAnchors","grouptype","isGroupArea","markBoundary","infPadding","isNaiveGroupArea","maxTextWidth","maxTextHeight","labelInside","baseMark","border","baseMarkContext","strokeContext","baseMarkBuffer","strokeBuffer","layer1","layer2","strokeAlpha","baseMarkAlpha","markBitmaps","baseBitmaps","sizeFactor","insideFactor","SQRT1_2","placeMarkLabel","Anchors","Label","Label$1","Loess","regressionLoess","regressionConstant","regressionLinear","regressionLog","regressionExp","regressionPow","regressionQuad","regressionPoly","Regression","dof","degreesOfFreedom","model","dom","splitter","resulterrbound","elen","flen","Qnew","hh","bvirt","enow","fnow","eindex","findex","hindex","vec","ccwerrboundB","ccwerrboundC","C1","C2","orient2d","detleft","detright","det","detsum","acxtail","acytail","bcxtail","bcytail","ahi","alo","bhi","blo","_i","_j","u3","acx","bcx","acy","bcy","estimate","errbound","C1len","C2len","Dlen","orient2dadapt","EPSILON","EDGE_STACK","Delaunator","getX","defaultGetX","getY","defaultGetY","maxTriangles","_triangles","_halfedges","Int32Array","_hashSize","_hullPrev","_hullNext","_hullTri","_hullHash","_ids","_dists","hullPrev","hullNext","hullTri","hullHash","minY","minDist","i0x","i0y","i1x","i1y","minRadius","circumradius","i2x","i2y","quicksort","hull","triangles","halfedges","cl","circumcenter","_cx","_cy","_hullStart","hullSize","_hashKey","trianglesLen","_addTriangle","_legalize","pseudoAngle","ar","al","inCircle","hbl","_link","bp","tempDist","arr","tmp","Voronoi$1","delaunay","xmin","xmax","_circumcenters","vectors","_init","circumcenters","inedges","ti","tj","_renderSegment","_project","renderBounds","renderCell","_clip","cellPolygons","cellPolygon","_regioncode","_clipSegment","_step","neighbors","cj","loop","li","aj","lj","_cell","e0","_simplify","_clipInfinite","_clipFinite","e1","sx0","sx1","sy1","_edgecode","_edge","vx0","vy0","vxn","vyn","jitter","Delaunay","flatArray","flatIterable","_delaunator","_hullIndex","hullIndex","voronoi","Voronoi","dc","renderHull","renderPoints","hullPolygon","renderTriangle","trianglePolygons","trianglePolygon","defaultExtent","toPathString","cloudRadians","ch","cloud","spiral","archimedeanSpiral","words","board","dxdy","startX","startY","maxDelta","cloudCollide","collideRects","sprite","msx","contextAndRatio","zeroArray","tags","xoff","yoff","hasText","cloudSprite","cloudBounds","functor","spirals","di","w32","maxh","wcr","wsr","hcr","hsr","pixels","seen","seenRow","archimedean","rectangular","Wordcloud","fontSizeRange","fsize","sizeScale","array8","Uint8Array","array16","Uint16Array","array32","Dimension","query","onAdd","added","dim","SortedIndex","addi","oldv","oldi","addv","permute","index0","value1","index1","reindex","CrossFilter","lengthen","_index","Bitmaps","_indices","ResolveFilter","reinit","eval","bits","remMap","modMap","indexMap","incrementOne","incrementAll","old","lo1","hi1","lo0","hi0","ignore","pass","Literal","Property","ArrayExpression","BinaryExpression","CallExpression","ConditionalExpression","LogicalExpression","MemberExpression","ObjectExpression","UnaryExpression","ASTNode","TokenName","lookahead","elements","callee","consequent","alternate","argument","TokenBooleanLiteral","TokenEOF","TokenIdentifier","TokenKeyword","TokenNullLiteral","TokenNumericLiteral","TokenPunctuator","TokenStringLiteral","SyntaxArrayExpression","SyntaxBinaryExpression","SyntaxCallExpression","SyntaxConditionalExpression","SyntaxIdentifier","SyntaxLiteral","SyntaxLogicalExpression","SyntaxMemberExpression","SyntaxObjectExpression","SyntaxProperty","SyntaxUnaryExpression","MessageUnexpectedToken","MessageUnexpectedNumber","MessageUnexpectedString","MessageUnexpectedIdentifier","MessageUnexpectedReserved","MessageUnexpectedEOS","MessageInvalidRegExp","MessageUnterminatedRegExp","MessageStrictOctalLiteral","MessageStrictDuplicateProperty","ILLEGAL","DISABLED","RegexNonAsciiIdentifierStart","RegexNonAsciiIdentifierPart","assert","condition","isDecimalDigit","isHexDigit","isOctalDigit","isWhiteSpace","isLineTerminator","isIdentifierStart","fromCharCode","isIdentifierPart","keywords","if","in","do","var","for","new","try","let","else","void","with","enum","while","break","throw","const","yield","return","typeof","switch","export","import","public","finally","extends","package","private","continue","debugger","interface","protected","instanceof","implements","skipComment","scanHexEscape","throwError","scanUnicodeCodePointEscape","cu1","cu2","getEscapedIdentifier","substr","scanIdentifier","getIdentifier","scanPunctuator","code2","ch2","ch3","ch4","ch1","scanNumericLiteral","scanHexLiteral","octal","scanOctalLiteral","parseFloat","scanRegExp","body","classMarker","terminated","literal","scanRegExpBody","search","scanRegExpFlags","$0","$1","exception","testRegExp","regex","advance","scanStringLiteral","lex","finishBinaryExpression","operator","finishCallExpression","finishIdentifier","finishLiteral","finishMemberExpression","computed","member","finishProperty","kind","messageFormat","msg","whole","throwUnexpected","expect","matchKeyword","keyword","parseArrayInitialiser","parseConditionalExpression","finishArrayExpression","parseObjectPropertyKey","parseObjectProperty","parseObjectInitialiser","finishObjectExpression","legalKeywords","parsePrimaryExpression","parseExpression","parseGroupExpression","parseArguments","parseNonComputedProperty","isIdentifierName","parseComputedMember","parsePostfixExpression","parseLeftHandSideExpressionAllowCall","parseUnaryExpression","finishUnaryExpression","binaryPrecedence","prec","marker","markers","parseBinaryExpression","finishConditionalExpression","Constants","LN10","LOG2E","LOG10E","MIN_VALUE","Functions","codegen","cast","fncall","STRING","REGEXP","datetime","timezoneoffset","utcdate","utcday","utcyear","utcmonth","utchours","utcminutes","utcseconds","utcmilliseconds","upper","lower","regexp","allowed","forbidden","constants","functions","globalvar","fieldvar","outputGlobal","globals","memberDepth","ast","Generators","stripQuotes","SELECTION_GETTER","Intersect","Union","SelectionId","$selectionId","TYPE_ENUM","TYPE_RANGE_INC","TYPE_RANGE_EXC","TYPE_RANGE_LE","TYPE_RANGE_RE","UNIT_INDEX","testPoint","dval","others","E_union","E_intersect","R_union","R_intersect","selectionVisitor","scope","indexName","dataName","getData","indataRef","tuplesRef","wrap","dateObj","setYear","ScalePrefix","SignalPrefix","dataVisitor","scaleVisitor","addScaleDependency","scaleName","scaleRef","getScale","nameOrFunction","maybeScale","isRegisteredScale","internalScaleFunctions","fnctx","visitors","__bandwidth","_bandwidth","_range","ref","geoMethod","methodName","globalMethod","geoArea","geoBounds","deltaMax","geoCentroid","channel_luminance_value","channelValue","luminance","equal","equalArray","equalObject","removePredicate","accessors","seq","treeNodes","_window","intersect$1","array$1","markname","functionContext","isDefined","indexof","_len2","_key2","lastindexof","_len3","_key3","repl","_len4","_key4","pluck","contrast","color1","color2","lum1","lum2","monthFormat","monthAbbrevFormat","dayFormat","dayAbbrevFormat","inScope","pinchDistance","touches","pinchAngle","screen","containerSize","container","clientWidth","clientHeight","windowSize","innerWidth","innerHeight","bandspace","setdata","pathShape","pathParse","retval","toggle","predicate","_trigger","lassoAppend","lasso","lassoPath","intersectLasso","pixelLasso","bb","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","testx","testy","intersections","prevX","prevY","pointInPolygon","eventFunctions","thisPrefix","astVisitors","codegenParams","codeGenerator","codegenExpression","expressionFunction","signalName","getSignal","signalRef","$expr","$fields","$params","miss","unitIdx","isMulti","vl5","resUnit","resolved","multiRes","acc","or","and","Skip","Swap","canonicalType","expression","expressionCodegen","parameter","adjustSpatial","lt","gt","_compare","parseParameter","PARSERS","$ref","$key","$flat","parseParameters","parameterExpression","$field","$name","$encode","enc","encodeExpression","$output","$compare","$order","$tupleid","$subflow","subctx","operators","Context","Subcontext","ariaLabel","subcontext","isCollect","$ingest","$format","$request","unresolved","signal","operatorExpression","eventExpression","handlerExpression","eventConfig","parseOperator","parseOperatorParameters","parseStream","updates","parseUpdate","isOperator","srcid","dataset","getState","setState","substate","Default","setCursor","cursor","globalCursor","dataref","_runtime","_viewWidth","_viewHeight","eventExtend","_renderer","vega","itemGroup","extension","VIEW","NO_TRAP","trap","trackEventListener","_eventListeners","permit","_eventConfig","itemFilter","markTarget","invoke","BindClass","NameClass","RadioClass","Event","wrapper","form","checkbox","select","radio","checked","option","valuesEqual","selected","selectedIndex","prepend","initializeRenderer","querySelector","paddingObject","renderHeadless","module","_scenegraph","Width","Height","dataTest","signalTest","proxy","formatArray","formatTooltip","View","_elBind","_renderType","_handler","_globalCursor","_preventDefault","_timers","_resizeListeners","defaults","unpack","initializeEventConfig","runtime","_bind","bindings","_resize","resetSize","_resizeWidth","_resizeHeight","resizePadding","initializeResize","_background","user","hover","lookupSignal","findOperatorHandler","addOperatorListener","removeOperatorListener","resizeRenderer","_desc","_resetRenderer","rerun","addResizeListener","removeResizeListener","addSignalListener","removeSignalListener","addDataListener","removeDataListener","total","_restart","elapsed","timestamp","prevent","allow","finalize","timers","listeners","hoverSet","leaveSet","elBind","initializeAria","prevHandler","initializeHandler","binding","toImageURL","mime","blob","Blob","URL","createObjectURL","toBlobURL","toSVG","LBRACK","RBRACK","LBRACE","RBRACE","COLON","COMMA","NAME","GT","DEFAULT_MARKS","DEFAULT_SOURCE","MARKS","eventSelector","selector","parseMerge","parseSelector","endChar","pushChar","popChar","parseBetween","parseThrottle","isMarkType","parseAutosize","parsePadding","encoder","addEncode","addEncoders","extendEncode","MarkRole","AxisDomainRole","AxisGridRole","AxisLabelRole","AxisTickRole","AxisTitleRole","LegendBandRole","LegendEntryRole","LegendGradientRole","LegendLabelRole","LegendSymbolRole","LegendTitleRole","TitleTextRole","TitleSubtitleRole","applyDefault","entry$1","_color","resolveField","parseEncode","applyDefaults","parseBlock","block","parse$1","OUTER","OUTER_INVALID","outerError","parseSignal","addSignal","addBinding","Entry","refs","fieldRef$1","keyFieldRef","compareRef","Descending","aggrField","Scope$1","isSignal","hasSignal","specValue","deref","mergeStream","nestedStream","eventStream","streamParameters","addStream","eventSource","markrole","filterMark","OP_VALUE_EXPR","isSubscope","mergeSources","addUpdate","streamSource","FIELD_REF_ID","MULTIDOMAIN_SORT_OPS","parseScale","parseScaleDomain","parseScaleRange","parseLiteral","parseScaleInterpolate","parseScaleNice","parseArray","objectProperty","parseScaleBins","dataLookupError","explicitDomain","multipleDomain","singularDomain","valuesRef","parseSort","domainRef","extentRef","coll","addDataPipeline","fieldRef","ordinalMultipleDomain","quantileMultipleDomain","numericMultipleDomain","countsRef","sortRef","multidomain","parseParameter$1","Vertical","Index","Offset","Perc","Perc2","Value","GuideLabelStyle","GuideTitleStyle","GroupTitleStyle","GroupSubtitleStyle","Size","LegendScales","GroupMark","RectMark","RuleMark","SymbolMark","TextMark","guideGroup","isVertical","symbolDirection","gradientDirection","gradientLength","gradientWidth","gradientThickness","gradientHeight","entryColumns","getEncoding","anchorExpr","alignExpr$1","extendOffset","guideMark","extras","legendGradient","userEncode","thickness","legendGradientDiscrete","dataRef","vv","alignExpr","baselineExpr","legendGradientLabels","overlap","labelLimit","gradientLabelLimit","labelOffset","gradientLabelOffset","legendSymbolGroups","symbolOffset","valueRef","xSignal","yEncode","baseFill","baseStroke","symbolBaseFillColor","symbolBaseStrokeColor","facet","isL","isR","isLR","isVG","exprAlign","exprAnchor","exprAngle","exprBaseline","getRole","parseTransform","definition$1","pdef","lookupRef","parseIndexParameter","parseSubParameter","parseSubParameters","projectionRef","parameterValue","isExpr","isField","isCompare","outerExpr","exprRef","outerField","isData","getDataRef","DataScope","aggregate","fieldKey","addSortField","ds","optype","sortKey","parseTrigger","trigger","parseMark","layoutRef","boundRef","keyRef","parseData$1","joinRef","$context","markpath","markRef","encodeRef","pushState","subscope","addData","toRuntime","parseFacet","parseSubflow","popState","tol","parseOverlap","sieve","parseLegend","legendEncode","entryLayout","scaleType","scaleCount","legendType","entryRef","tickMinStep","legendSymbolLayout","getChannel","getStyle","getFontSize","sizeExpression","_anchor","legendTitle","buildLegendEncode","fromEntries","angleExpr","parseTitle","buildTitle","titleEncode","buildSubTitle","groupEncode","parseData","upstream","analyze","getSign","ifLeftTopExpr","ifX","ifXEnc","ifY","ifYEnc","ifTop","ifTopExpr","ifRight","ifRightExpr","$orient","ifEnc","ifExpr","isSimple","toExpr","ifOrient","patch","fallback","axisConfig","styleProp","axisGrid","vscale","gridScale","tickPos","gridStart","gridEnd","flushExpr","axisTitle","titlePos","autoY","autoX","autoLayout","parseAxis","axisBand","xyKeys","axisX","axisY","orientKeys","axisTop","axisBottom","axisLeft","axisRight","axisEncode","tickBand","ticksRef","tickSize","axisTicks","flushOffset","labelAlign","labelBaseline","flushOn","offsetExpr","axisLabels","pos0","pos1","axisDomain","buildAxisEncode","parseScope","preprocessed","addProjection","parseProjection","addScale","initScale","parseSignalUpdates","axes","parseLambdas","rootEncode","parseView","signalObject","pre","collectSignals","Scope","lambdas","_id","_subid","_nextsub","_parent","_encode","_lookup","_markpath","Subscope","propertyLambda","arrayLambda","objectLambda","vref","annotate","check","isExpr$1","sig","hasOwnSignal","addScaleProj","projectionType","dataScope","extend$1","vtx","geo","reg","wordcloud","xf","defaultFont","defaultColor","lightGray","subtitlePadding","bandPosition","domainWidth","domainColor","gridWidth","gridColor","labelAngle","labelPadding","tickColor","tickOffset","tickRound","tickWidth","gridAlign","columnPadding","rowPadding","gradientStrokeColor","gradientStrokeWidth","labelOverlap","symbolLimit","symbolType","symbolSize","symbolStrokeWidth","titleLimit","titleOrient","category","heatmap","ramp","seed"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,53,54,59,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,141,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,196,197,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,256,257,258,259,262,263,264,265,266,267,268,272,275,279]} \ No newline at end of file diff --git a/lerna.json b/lerna.json index 89c5be33c4..191e73e755 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,4 @@ { "version": "independent", - "npmClient": "yarn", - "useWorkspaces": true + "npmClient": "yarn" } diff --git a/package.json b/package.json index b9ef05a554..8d2b8d3394 100644 --- a/package.json +++ b/package.json @@ -20,32 +20,32 @@ }, "dependencies": {}, "devDependencies": { - "@babel/cli": "^7.21.0", - "@babel/core": "^7.21.4", - "@babel/eslint-parser": "^7.21.3", - "@babel/plugin-transform-runtime": "^7.21.4", - "@babel/preset-env": "^7.21.4", + "@babel/cli": "^7.23.0", + "@babel/core": "^7.23.2", + "@babel/eslint-parser": "^7.22.15", + "@babel/plugin-transform-runtime": "^7.23.2", + "@babel/preset-env": "^7.23.2", "@definitelytyped/dtslint": "0.0.159", - "@rollup/plugin-babel": "^6.0.3", - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.0.2", - "@rollup/plugin-terser": "^0.4.1", + "@rollup/plugin-babel": "^6.0.4", + "@rollup/plugin-json": "^6.0.1", + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-terser": "^0.4.4", "@types/node": "^20.8.10", - "@typescript-eslint/eslint-plugin": "^5.59.5", - "@typescript-eslint/parser": "^5.59.5", + "@typescript-eslint/eslint-plugin": "^6.10.0", + "@typescript-eslint/parser": "^6.10.0", "ajv": "^8.12.0", "ajv-formats": "^2.1.1", "canvas": "^2.11.2", - "eslint": "^8.39.0", - "jsdom": "^21.1.1", - "lerna": "^6.6.1", + "eslint": "^8.53.0", + "jsdom": "^21.1.0", + "lerna": "^7.4.2", "pixelmatch": "^5.3.0", "prettier": "^2.8.8", - "rimraf": "^5.0.0", + "rimraf": "^5.0.5", "rollup": "^4.3.0", "rollup-plugin-bundle-size": "^1.0.3", - "serve": "^14.2.0", - "tape": "^5.6.3", + "serve": "^14.2.1", + "tape": "^5.7.2", "typescript": "~5.1.6", "vega-datasets": "^2.7.0" }, diff --git a/packages/vega-cli/package.json b/packages/vega-cli/package.json index 64ee39c706..21b9b9480f 100644 --- a/packages/vega-cli/package.json +++ b/packages/vega-cli/package.json @@ -1,6 +1,6 @@ { "name": "vega-cli", - "version": "5.25.0", + "version": "5.26.0", "description": "Command line utilities for server-side Vega.", "keywords": [ "vega", @@ -21,7 +21,7 @@ }, "dependencies": { "canvas": "^2.11.2", - "vega": "5.25.0", + "vega": "5.26.0", "yargs": "17" } } diff --git a/packages/vega-functions/package.json b/packages/vega-functions/package.json index 222b70708b..379766f66f 100644 --- a/packages/vega-functions/package.json +++ b/packages/vega-functions/package.json @@ -1,6 +1,6 @@ { "name": "vega-functions", - "version": "5.13.2", + "version": "5.14.0", "description": "Custom functions for the Vega expression language.", "keywords": [ "vega", @@ -28,7 +28,7 @@ "vega-expression": "^5.1.0", "vega-scale": "^7.3.0", "vega-scenegraph": "^4.10.2", - "vega-selections": "^5.4.1", + "vega-selections": "^5.4.2", "vega-statistics": "^1.8.1", "vega-time": "^2.1.1", "vega-util": "^1.17.1" diff --git a/packages/vega-parser/package.json b/packages/vega-parser/package.json index 8cd3e66ab0..f929c10639 100644 --- a/packages/vega-parser/package.json +++ b/packages/vega-parser/package.json @@ -1,6 +1,6 @@ { "name": "vega-parser", - "version": "6.2.0", + "version": "6.2.1", "description": "Parse Vega specifications to runtime dataflows.", "keywords": [ "vega", @@ -24,8 +24,8 @@ "dependencies": { "vega-dataflow": "^5.7.5", "vega-event-selector": "^3.0.1", - "vega-functions": "^5.13.1", - "vega-scale": "^7.3.0", - "vega-util": "^1.17.1" + "vega-functions": "^5.14.0", + "vega-scale": "^7.3.1", + "vega-util": "^1.17.2" } } diff --git a/packages/vega-scale/package.json b/packages/vega-scale/package.json index 0d681f8fc4..a0f3acd734 100644 --- a/packages/vega-scale/package.json +++ b/packages/vega-scale/package.json @@ -1,6 +1,6 @@ { "name": "vega-scale", - "version": "7.3.0", + "version": "7.3.1", "description": "Scales and color schemes for visual encoding.", "keywords": [ "vega", diff --git a/packages/vega-scenegraph/package.json b/packages/vega-scenegraph/package.json index 8583a75285..7b9c0f5986 100644 --- a/packages/vega-scenegraph/package.json +++ b/packages/vega-scenegraph/package.json @@ -1,6 +1,6 @@ { "name": "vega-scenegraph", - "version": "4.10.2", + "version": "4.11.0", "description": "Vega scenegraph and renderers.", "license": "BSD-3-Clause", "author": "Jeffrey Heer (http://idl.cs.washington.edu)", diff --git a/packages/vega-schema/package.json b/packages/vega-schema/package.json index f4b8521e50..9bf59c7e55 100644 --- a/packages/vega-schema/package.json +++ b/packages/vega-schema/package.json @@ -1,6 +1,6 @@ { "name": "vega-schema", - "version": "5.25.0", + "version": "5.26.0", "description": "Generate the Vega JSON schema.", "keywords": [ "vega", @@ -20,7 +20,7 @@ "prepublishOnly": "yarn test" }, "dependencies": { - "vega-scale": "^7.3.0" + "vega-scale": "^7.3.1" }, "devDependencies": { "vega-crossfilter": "*", diff --git a/packages/vega-selections/package.json b/packages/vega-selections/package.json index 33015b0c2c..94492de71c 100644 --- a/packages/vega-selections/package.json +++ b/packages/vega-selections/package.json @@ -1,6 +1,6 @@ { "name": "vega-selections", - "version": "5.4.1", + "version": "5.4.2", "description": "Vega expression functions for Vega-Lite selections.", "keywords": [ "vega", diff --git a/packages/vega-transforms/package.json b/packages/vega-transforms/package.json index 90c77bab0f..d041251517 100644 --- a/packages/vega-transforms/package.json +++ b/packages/vega-transforms/package.json @@ -1,6 +1,6 @@ { "name": "vega-transforms", - "version": "4.10.2", + "version": "4.11.0", "description": "Data processing transforms for Vega dataflows.", "keywords": [ "vega", diff --git a/packages/vega-typings/package.json b/packages/vega-typings/package.json index 5317fce74d..01b9a3af3d 100644 --- a/packages/vega-typings/package.json +++ b/packages/vega-typings/package.json @@ -25,6 +25,6 @@ "vega-util": "^1.17.2" }, "devDependencies": { - "ts-json-schema-generator": "^1.2.0" + "ts-json-schema-generator": "^1.4.0" } } diff --git a/packages/vega-typings/tests/spec/valid/nulls-selection.ts b/packages/vega-typings/tests/spec/valid/nulls-selection.ts new file mode 100644 index 0000000000..d38b51d59f --- /dev/null +++ b/packages/vega-typings/tests/spec/valid/nulls-selection.ts @@ -0,0 +1,146 @@ +import { Spec } from 'vega'; + +export const spec: Spec = { + $schema: 'https://vega.github.io/schema/vega/v5.json', + description: 'A simple pie chart with embedded data.', + background: 'white', + padding: 5, + width: 200, + height: 200, + style: 'view', + data: [ + { name: 'click_store' }, + { + name: 'source_0', + values: [ + { category: 1, value: 4 }, + { category: 2, value: 6 }, + { category: 3, value: 10 }, + { category: 4, value: 3 }, + { category: 5, value: 7 }, + { category: 6, value: 8 }, + { category: null, value: 10 } + ] + }, + { + name: 'data_0', + source: 'source_0', + transform: [ + { + type: 'stack', + groupby: [], + field: 'value', + sort: { field: ['category'], order: ['ascending'] }, + as: ['value_start', 'value_end'], + offset: 'zero' + }, + { + type: 'filter', + expr: 'isValid(datum["value"]) && isFinite(+datum["value"])' + } + ] + } + ], + signals: [ + { + name: 'unit', + value: {}, + on: [{ events: 'mousemove', update: 'isTuple(group()) ? group() : unit' }] + }, + { + name: 'click', + update: 'vlSelectionResolve("click_store", "union", true, true)' + }, + { + name: 'click_tuple', + on: [ + { + events: [{ source: 'scope', type: 'click' }], + update: + 'datum && item().mark.marktype !== \'group\' && indexof(item().mark.role, \'legend\') < 0 ? {unit: "", fields: click_tuple_fields, values: [(item().isVoronoi ? datum.datum : datum)["category"]]} : null', + force: true + }, + { events: [{ source: 'view', type: 'dblclick' }], update: 'null' } + ] + }, + { + name: 'click_tuple_fields', + value: [{ field: 'category', channel: 'color', type: 'E' }] + }, + { + name: 'click_toggle', + value: false, + on: [ + { + events: [{ source: 'scope', type: 'click' }], + update: 'event.shiftKey' + }, + { events: [{ source: 'view', type: 'dblclick' }], update: 'false' } + ] + }, + { + name: 'click_modify', + on: [ + { + events: { signal: 'click_tuple' }, + update: + 'modify("click_store", click_toggle ? null : click_tuple, click_toggle ? null : true, click_toggle ? click_tuple : null)' + } + ] + } + ], + marks: [ + { + name: 'marks', + type: 'arc', + style: ['arc'], + interactive: true, + from: { data: 'data_0' }, + encode: { + update: { + fill: { scale: 'color', field: 'category' }, + opacity: [ + { + test: '!length(data("click_store")) || vlSelectionTest("click_store", datum)', + value: 1 + }, + { value: 0.5 } + ], + description: { + signal: + '"value: " + (format(datum["value"], "")) + "; category: " + (isValid(datum["category"]) ? datum["category"] : ""+datum["category"])' + }, + x: { signal: 'width', mult: 0.5 }, + y: { signal: 'height', mult: 0.5 }, + outerRadius: { signal: 'min(width,height)/2' }, + innerRadius: { value: 0 }, + startAngle: { scale: 'theta', field: 'value_end' }, + endAngle: { scale: 'theta', field: 'value_start' } + } + } + } + ], + scales: [ + { + name: 'theta', + type: 'linear', + domain: { data: 'data_0', fields: ['value_start', 'value_end'] }, + range: [0, 6.283185307179586], + zero: true + }, + { + name: 'color', + type: 'ordinal', + domain: { data: 'data_0', field: 'category', sort: true }, + range: 'category' + } + ], + legends: [ + { + fill: 'color', + symbolType: 'circle', + title: 'category', + encode: { symbols: { update: { opacity: { value: 1 } } } } + } + ] +}; diff --git a/packages/vega-typings/vega-to-dataflow.js b/packages/vega-typings/vega-to-dataflow.js index ab0fdf5389..5712779ced 100755 --- a/packages/vega-typings/vega-to-dataflow.js +++ b/packages/vega-typings/vega-to-dataflow.js @@ -10,4 +10,4 @@ const outputPath = process.argv[3]; const spec = require(specPath); const dataflow = vega.parse(spec); const dataflowStr = JSON.stringify(dataflow); -fs.appendFileSync(outputPath, dataflowStr + ';'); +fs.appendFileSync(outputPath, dataflowStr + ';\n'); diff --git a/packages/vega-voronoi/package.json b/packages/vega-voronoi/package.json index f71828183c..4e1d286663 100644 --- a/packages/vega-voronoi/package.json +++ b/packages/vega-voronoi/package.json @@ -1,6 +1,6 @@ { "name": "vega-voronoi", - "version": "4.2.1", + "version": "4.2.2", "description": "Voronoi diagram transform for Vega dataflows.", "keywords": [ "vega", diff --git a/packages/vega/package.json b/packages/vega/package.json index 117f9683b6..21bbf01fea 100644 --- a/packages/vega/package.json +++ b/packages/vega/package.json @@ -1,6 +1,6 @@ { "name": "vega", - "version": "5.25.0", + "version": "5.26.0", "description": "The Vega visualization grammar.", "keywords": [ "vega", @@ -37,25 +37,25 @@ "vega-expression": "~5.1.0", "vega-force": "~4.2.0", "vega-format": "~1.1.1", - "vega-functions": "~5.13.2", + "vega-functions": "~5.14.0", "vega-geo": "~4.4.1", "vega-hierarchy": "~4.1.1", "vega-label": "~1.2.1", "vega-loader": "~4.5.1", - "vega-parser": "~6.2.0", + "vega-parser": "~6.2.1", "vega-projection": "~1.6.0", "vega-regression": "~1.2.0", "vega-runtime": "~6.1.4", - "vega-scale": "~7.3.0", - "vega-scenegraph": "~4.10.2", + "vega-scale": "~7.3.1", + "vega-scenegraph": "~4.11.0", "vega-statistics": "~1.9.0", "vega-time": "~2.1.1", - "vega-transforms": "~4.10.2", + "vega-transforms": "~4.11.0", "vega-typings": "~1.0.0", "vega-util": "~1.17.2", "vega-view": "~5.11.1", "vega-view-transforms": "~4.5.9", - "vega-voronoi": "~4.2.1", + "vega-voronoi": "~4.2.2", "vega-wordcloud": "~4.1.4" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index b36fa86880..39584904ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + "@ampproject/remapping@^2.2.0": version "2.2.1" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" @@ -10,9 +15,9 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/cli@^7.21.0": +"@babel/cli@^7.23.0": version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.23.0.tgz#1d7f37c44d4117c67df46749e0c86e11a58cc64b" + resolved "https://registry.npmjs.org/@babel/cli/-/cli-7.23.0.tgz" integrity sha512-17E1oSkGk2IwNILM4jtfAvgjt+ohmpfBky8aLerUfYZhiPNg7ca+CRCxZn8QDxwNhV/upsc2VHBCqGFIR+iBfA== dependencies: "@jridgewell/trace-mapping" "^0.3.17" @@ -28,25 +33,20 @@ "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.22.13": version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz" integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== dependencies: "@babel/highlight" "^7.22.13" chalk "^2.4.2" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" - integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== - -"@babel/compat-data@^7.22.9": +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.2": version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz" integrity sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ== -"@babel/core@^7.21.4": +"@babel/core@^7.23.2": version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.2.tgz#ed10df0d580fff67c5f3ee70fd22e2e4c90a9f94" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz" integrity sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ== dependencies: "@ampproject/remapping" "^2.2.0" @@ -65,18 +65,18 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/eslint-parser@^7.21.3": - version "7.21.3" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.21.3.tgz#d79e822050f2de65d7f368a076846e7184234af7" - integrity sha512-kfhmPimwo6k4P8zxNs8+T7yR44q1LdpsZdE1NkCsVlfiuTPRfnGgjaF8Qgug9q9Pou17u6wneYF0lDCZJATMFg== +"@babel/eslint-parser@^7.22.15": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz" + integrity sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" - semver "^6.3.0" + semver "^6.3.1" "@babel/generator@^7.23.0": version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz" integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== dependencies: "@babel/types" "^7.23.0" @@ -84,24 +84,23 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" - integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" - integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz" + integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: - "@babel/helper-explode-assignable-expression" "^7.18.6" - "@babel/types" "^7.18.9" + "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.4", "@babel/helper-compilation-targets@^7.22.15": +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz" integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== dependencies: "@babel/compat-data" "^7.22.9" @@ -110,111 +109,78 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz#3a017163dc3c2ba7deb9a7950849a9586ea24c18" - integrity sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-member-expression-to-functions" "^7.21.0" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.20.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/helper-split-export-declaration" "^7.18.6" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz#40411a8ab134258ad2cf3a3d987ec6aa0723cee5" - integrity sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" +"@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz" + integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz" + integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" regexpu-core "^5.3.1" + semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" - integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== +"@babel/helper-define-polyfill-provider@^0.4.3": + version "0.4.3" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz" + integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== -"@babel/helper-environment-visitor@^7.22.20": +"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== -"@babel/helper-explode-assignable-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" - integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" - integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== - dependencies: - "@babel/template" "^7.20.7" - "@babel/types" "^7.21.0" - -"@babel/helper-function-name@^7.23.0": +"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== dependencies: "@babel/template" "^7.22.15" "@babel/types" "^7.23.0" -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== - dependencies: - "@babel/types" "^7.18.6" - "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.20.7", "@babel/helper-member-expression-to-functions@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz#319c6a940431a133897148515877d2f3269c3ba5" - integrity sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q== - dependencies: - "@babel/types" "^7.21.0" - -"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" - integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== +"@babel/helper-member-expression-to-functions@^7.22.15": + version "7.23.0" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz" + integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: - "@babel/types" "^7.21.4" + "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.22.15": +"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.2", "@babel/helper-module-transforms@^7.23.0": +"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.23.0": version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz" integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== dependencies: "@babel/helper-environment-visitor" "^7.22.20" @@ -223,113 +189,84 @@ "@babel/helper-split-export-declaration" "^7.22.6" "@babel/helper-validator-identifier" "^7.22.20" -"@babel/helper-optimise-call-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" - integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== +"@babel/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" - integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== + "@babel/types" "^7.22.5" -"@babel/helper-remap-async-to-generator@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" - integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-wrap-function" "^7.18.9" - "@babel/types" "^7.18.9" +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331" - integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A== +"@babel/helper-remap-async-to-generator@^7.22.20", "@babel/helper-remap-async-to-generator@^7.22.5": + version "7.22.20" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz" + integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-member-expression-to-functions" "^7.20.7" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.7" - "@babel/types" "^7.20.7" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== +"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": + version "7.22.20" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz" + integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== dependencies: - "@babel/types" "^7.20.2" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-simple-access@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== dependencies: "@babel/types" "^7.22.5" -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" - integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== - dependencies: - "@babel/types" "^7.20.0" - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== +"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" "@babel/helper-split-export-declaration@^7.22.6": version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== dependencies: "@babel/types" "^7.22.5" "@babel/helper-string-parser@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== -"@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" - integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== - "@babel/helper-validator-option@^7.22.15": version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz" integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== -"@babel/helper-wrap-function@^7.18.9": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" - integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== +"@babel/helper-wrap-function@^7.22.20": + version "7.22.20" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz" + integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== dependencies: - "@babel/helper-function-name" "^7.19.0" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.5" - "@babel/types" "^7.20.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.22.19" "@babel/helpers@^7.23.2": version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz" integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ== dependencies: "@babel/template" "^7.22.15" @@ -338,7 +275,7 @@ "@babel/highlight@^7.22.13": version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz" integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== dependencies: "@babel/helper-validator-identifier" "^7.22.20" @@ -347,554 +284,577 @@ "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz" integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" - integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" - integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/plugin-proposal-optional-chaining" "^7.20.7" - -"@babel/plugin-proposal-async-generator-functions@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" - integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-class-static-block@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d" - integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.21.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-dynamic-import@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" - integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" - integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" - integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" - integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" - integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" - integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" - integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.20.7" - -"@babel/plugin-proposal-optional-catch-binding@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" - integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.20.7", "@babel/plugin-proposal-optional-chaining@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" - integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" - integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz" + integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-proposal-private-property-in-object@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz#19496bd9883dd83c23c7d7fc45dcd9ad02dfa1dc" - integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz" + integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.21.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.15" -"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" - integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.12.13": version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-class-static-block@^7.14.5": version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" - integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== +"@babel/plugin-syntax-import-assertions@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz" + integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== dependencies: - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-attributes@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz" + integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.10.4": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-private-property-in-object@^7.14.5": version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-top-level-await@^7.14.5": version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz#bea332b0e8b2dab3dafe55a163d8227531ab0551" - integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ== +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-async-to-generator@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" - integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== +"@babel/plugin-transform-arrow-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz" + integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoped-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" - integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== +"@babel/plugin-transform-async-generator-functions@^7.23.2": + version "7.23.2" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz" + integrity sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-transform-async-to-generator@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz" + integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== + dependencies: + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.5" + +"@babel/plugin-transform-block-scoped-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz" + integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-block-scoping@^7.23.0": + version "7.23.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz" + integrity sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz" + integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-static-block@^7.22.11": + version "7.22.11" + resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz" + integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-block-scoping@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz#e737b91037e5186ee16b76e7ae093358a5634f02" - integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - -"@babel/plugin-transform-classes@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz#f469d0b07a4c5a7dbb21afad9e27e57b47031665" - integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-replace-supers" "^7.20.7" - "@babel/helper-split-export-declaration" "^7.18.6" +"@babel/plugin-transform-classes@^7.22.15": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz" + integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz#704cc2fd155d1c996551db8276d55b9d46e4d0aa" - integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ== +"@babel/plugin-transform-computed-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz" + integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/template" "^7.20.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.5" -"@babel/plugin-transform-destructuring@^7.21.3": - version "7.21.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401" - integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== +"@babel/plugin-transform-destructuring@^7.23.0": + version "7.23.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz" + integrity sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" - integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== +"@babel/plugin-transform-dotall-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz" + integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" - integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== +"@babel/plugin-transform-duplicate-keys@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz" + integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-exponentiation-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" - integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== +"@babel/plugin-transform-dynamic-import@^7.22.11": + version "7.22.11" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz" + integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-for-of@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz#964108c9988de1a60b4be2354a7d7e245f36e86e" - integrity sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ== +"@babel/plugin-transform-exponentiation-operator@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz" + integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-function-name@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" - integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== +"@babel/plugin-transform-export-namespace-from@^7.22.11": + version "7.22.11" + resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz" + integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== dependencies: - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" - integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== +"@babel/plugin-transform-for-of@^7.22.15": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz" + integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-member-expression-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" - integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== +"@babel/plugin-transform-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz" + integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.20.11": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" - integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== +"@babel/plugin-transform-json-strings@^7.22.11": + version "7.22.11" + resolved "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz" + integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== dependencies: - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-modules-commonjs@^7.21.2": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz#6ff5070e71e3192ef2b7e39820a06fb78e3058e7" - integrity sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA== +"@babel/plugin-transform-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz" + integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== dependencies: - "@babel/helper-module-transforms" "^7.21.2" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.20.11": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" - integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== +"@babel/plugin-transform-logical-assignment-operators@^7.22.11": + version "7.22.11" + resolved "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz" + integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== dependencies: - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-validator-identifier" "^7.19.1" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-modules-umd@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" - integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== +"@babel/plugin-transform-member-expression-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz" + integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.20.5": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" - integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== +"@babel/plugin-transform-modules-amd@^7.23.0": + version "7.23.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz" + integrity sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.20.5" - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" - integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== +"@babel/plugin-transform-modules-commonjs@^7.23.0": + version "7.23.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz" + integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-object-super@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" - integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== +"@babel/plugin-transform-modules-systemjs@^7.23.0": + version "7.23.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz" + integrity sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.21.3": - version "7.21.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz#18fc4e797cf6d6d972cb8c411dbe8a809fa157db" - integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== +"@babel/plugin-transform-modules-umd@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz" + integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-property-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" - integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.20.5": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" - integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== +"@babel/plugin-transform-new-target@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz" + integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - regenerator-transform "^0.15.1" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-reserved-words@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" - integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": + version "7.22.11" + resolved "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz" + integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-runtime@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.4.tgz#2e1da21ca597a7d01fc96b699b21d8d2023191aa" - integrity sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA== +"@babel/plugin-transform-numeric-separator@^7.22.11": + version "7.22.11" + resolved "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz" + integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== dependencies: - "@babel/helper-module-imports" "^7.21.4" - "@babel/helper-plugin-utils" "^7.20.2" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" - semver "^6.3.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-shorthand-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" - integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== +"@babel/plugin-transform-object-rest-spread@^7.22.15": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz" + integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/compat-data" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.22.15" -"@babel/plugin-transform-spread@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" - integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== +"@babel/plugin-transform-object-super@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz" + integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" - integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== +"@babel/plugin-transform-optional-catch-binding@^7.22.11": + version "7.22.11" + resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz" + integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-transform-optional-chaining@^7.22.15", "@babel/plugin-transform-optional-chaining@^7.23.0": + version "7.23.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz" + integrity sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-template-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" - integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== +"@babel/plugin-transform-parameters@^7.22.15": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz" + integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" - integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== +"@babel/plugin-transform-private-methods@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz" + integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-escapes@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" - integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== +"@babel/plugin-transform-private-property-in-object@^7.22.11": + version "7.22.11" + resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz" + integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-unicode-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" - integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== +"@babel/plugin-transform-property-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz" + integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/preset-env@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.4.tgz#a952482e634a8dd8271a3fe5459a16eb10739c58" - integrity sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw== - dependencies: - "@babel/compat-data" "^7.21.4" - "@babel/helper-compilation-targets" "^7.21.4" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-validator-option" "^7.21.0" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.20.7" - "@babel/plugin-proposal-async-generator-functions" "^7.20.7" - "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-class-static-block" "^7.21.0" - "@babel/plugin-proposal-dynamic-import" "^7.18.6" - "@babel/plugin-proposal-export-namespace-from" "^7.18.9" - "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.20.7" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" - "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.20.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.21.0" - "@babel/plugin-proposal-private-methods" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object" "^7.21.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" +"@babel/plugin-transform-regenerator@^7.22.10": + version "7.22.10" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz" + integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-reserved-words@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz" + integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-runtime@^7.23.2": + version "7.23.2" + resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.2.tgz" + integrity sha512-XOntj6icgzMS58jPVtQpiuF6ZFWxQiJavISGx5KGjRj+3gqZr8+N6Kx+N9BApWzgS+DOjIZfXXj0ZesenOWDyA== + dependencies: + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + babel-plugin-polyfill-corejs2 "^0.4.6" + babel-plugin-polyfill-corejs3 "^0.8.5" + babel-plugin-polyfill-regenerator "^0.5.3" + semver "^6.3.1" + +"@babel/plugin-transform-shorthand-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz" + integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-spread@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz" + integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + +"@babel/plugin-transform-sticky-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz" + integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-template-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz" + integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-typeof-symbol@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz" + integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-escapes@^7.22.10": + version "7.22.10" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz" + integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-property-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz" + integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz" + integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-sets-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz" + integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/preset-env@^7.23.2": + version "7.23.2" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.2.tgz" + integrity sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ== + dependencies: + "@babel/compat-data" "^7.23.2" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.20.0" + "@babel/plugin-syntax-import-assertions" "^7.22.5" + "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" @@ -904,81 +864,96 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.20.7" - "@babel/plugin-transform-async-to-generator" "^7.20.7" - "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.21.0" - "@babel/plugin-transform-classes" "^7.21.0" - "@babel/plugin-transform-computed-properties" "^7.20.7" - "@babel/plugin-transform-destructuring" "^7.21.3" - "@babel/plugin-transform-dotall-regex" "^7.18.6" - "@babel/plugin-transform-duplicate-keys" "^7.18.9" - "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.21.0" - "@babel/plugin-transform-function-name" "^7.18.9" - "@babel/plugin-transform-literals" "^7.18.9" - "@babel/plugin-transform-member-expression-literals" "^7.18.6" - "@babel/plugin-transform-modules-amd" "^7.20.11" - "@babel/plugin-transform-modules-commonjs" "^7.21.2" - "@babel/plugin-transform-modules-systemjs" "^7.20.11" - "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.20.5" - "@babel/plugin-transform-new-target" "^7.18.6" - "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.21.3" - "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.20.5" - "@babel/plugin-transform-reserved-words" "^7.18.6" - "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.20.7" - "@babel/plugin-transform-sticky-regex" "^7.18.6" - "@babel/plugin-transform-template-literals" "^7.18.9" - "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.10" - "@babel/plugin-transform-unicode-regex" "^7.18.6" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.21.4" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" - core-js-compat "^3.25.1" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.22.5" + "@babel/plugin-transform-async-generator-functions" "^7.23.2" + "@babel/plugin-transform-async-to-generator" "^7.22.5" + "@babel/plugin-transform-block-scoped-functions" "^7.22.5" + "@babel/plugin-transform-block-scoping" "^7.23.0" + "@babel/plugin-transform-class-properties" "^7.22.5" + "@babel/plugin-transform-class-static-block" "^7.22.11" + "@babel/plugin-transform-classes" "^7.22.15" + "@babel/plugin-transform-computed-properties" "^7.22.5" + "@babel/plugin-transform-destructuring" "^7.23.0" + "@babel/plugin-transform-dotall-regex" "^7.22.5" + "@babel/plugin-transform-duplicate-keys" "^7.22.5" + "@babel/plugin-transform-dynamic-import" "^7.22.11" + "@babel/plugin-transform-exponentiation-operator" "^7.22.5" + "@babel/plugin-transform-export-namespace-from" "^7.22.11" + "@babel/plugin-transform-for-of" "^7.22.15" + "@babel/plugin-transform-function-name" "^7.22.5" + "@babel/plugin-transform-json-strings" "^7.22.11" + "@babel/plugin-transform-literals" "^7.22.5" + "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" + "@babel/plugin-transform-member-expression-literals" "^7.22.5" + "@babel/plugin-transform-modules-amd" "^7.23.0" + "@babel/plugin-transform-modules-commonjs" "^7.23.0" + "@babel/plugin-transform-modules-systemjs" "^7.23.0" + "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.22.5" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" + "@babel/plugin-transform-numeric-separator" "^7.22.11" + "@babel/plugin-transform-object-rest-spread" "^7.22.15" + "@babel/plugin-transform-object-super" "^7.22.5" + "@babel/plugin-transform-optional-catch-binding" "^7.22.11" + "@babel/plugin-transform-optional-chaining" "^7.23.0" + "@babel/plugin-transform-parameters" "^7.22.15" + "@babel/plugin-transform-private-methods" "^7.22.5" + "@babel/plugin-transform-private-property-in-object" "^7.22.11" + "@babel/plugin-transform-property-literals" "^7.22.5" + "@babel/plugin-transform-regenerator" "^7.22.10" + "@babel/plugin-transform-reserved-words" "^7.22.5" + "@babel/plugin-transform-shorthand-properties" "^7.22.5" + "@babel/plugin-transform-spread" "^7.22.5" + "@babel/plugin-transform-sticky-regex" "^7.22.5" + "@babel/plugin-transform-template-literals" "^7.22.5" + "@babel/plugin-transform-typeof-symbol" "^7.22.5" + "@babel/plugin-transform-unicode-escapes" "^7.22.10" + "@babel/plugin-transform-unicode-property-regex" "^7.22.5" + "@babel/plugin-transform-unicode-regex" "^7.22.5" + "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/preset-modules" "0.1.6-no-external-plugins" + "@babel/types" "^7.23.0" + babel-plugin-polyfill-corejs2 "^0.4.6" + babel-plugin-polyfill-corejs3 "^0.8.5" + babel-plugin-polyfill-regenerator "^0.5.3" + core-js-compat "^3.31.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" "@babel/types" "^7.4.4" esutils "^2.0.2" "@babel/regjsgen@^0.8.0": version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.8.4": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" - integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== + version "7.23.2" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz" + integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== dependencies: - regenerator-runtime "^0.13.11" + regenerator-runtime "^0.14.0" -"@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.22.15": +"@babel/template@^7.22.15", "@babel/template@^7.22.5": version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz" integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== dependencies: "@babel/code-frame" "^7.22.13" "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.23.2": +"@babel/traverse@^7.23.2": version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz" integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== dependencies: "@babel/code-frame" "^7.22.13" @@ -992,9 +967,9 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.4.4": +"@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.4.4": version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz" integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== dependencies: "@babel/helper-string-parser" "^7.22.5" @@ -1062,41 +1037,26 @@ tar "^6.1.11" tar-stream "^2.1.4" -"@eslint-community/eslint-utils@^4.2.0": +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.0.tgz#f6f729b02feee2c749f57e334b7a1b5f40a81724" - integrity sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ== - -"@eslint/eslintrc@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.2.tgz#01575e38707add677cf73ca1589abba8da899a02" - integrity sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.5.1" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331" - integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== +"@eslint/eslintrc@^2.1.3": + version "2.1.3" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz" + integrity sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.5.2" + espree "^9.6.0" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -1104,201 +1064,201 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.39.0.tgz#58b536bcc843f4cd1e02a7e6171da5c040f4d44b" - integrity sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng== - -"@eslint/js@8.40.0": - version "8.40.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.40.0.tgz#3ba73359e11f5a7bd3e407f70b3528abfae69cec" - integrity sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA== +"@eslint/js@8.53.0": + version "8.53.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz" + integrity sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w== "@gar/promisify@^1.1.3": version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@humanwhocodes/config-array@^0.11.8": - version "0.11.8" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" - integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== +"@humanwhocodes/config-array@^0.11.13": + version "0.11.13" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz" + integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" + "@humanwhocodes/object-schema" "^2.0.1" debug "^4.1.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.1": + version "2.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz" + integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== "@hutson/parse-repository-url@^3.0.0": version "3.0.2" - resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" + resolved "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz" integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== -"@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" -"@jest/schemas@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" - integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: - "@sinclair/typebox" "^0.25.16" + "@sinclair/typebox" "^0.27.8" "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== "@jridgewell/set-array@^1.0.1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/source-map@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda" - integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg== +"@jridgewell/source-map@^0.3.3": + version "0.3.5" + resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== dependencies: "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@1.4.14": +"@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" -"@lerna/child-process@6.6.1": - version "6.6.1" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-6.6.1.tgz#e31bc411ad6d474cf7b676904da6f77f58fd64eb" - integrity sha512-yUCDCcRNNbI9UUsUB6FYEmDHpo5Tn/f0q5D7vhDP4i6Or8kBj82y7+e31hwfLvK2ykOYlDVs2MxAluH/+QUBOQ== +"@lerna/child-process@7.4.2": + version "7.4.2" + resolved "https://registry.npmjs.org/@lerna/child-process/-/child-process-7.4.2.tgz" + integrity sha512-je+kkrfcvPcwL5Tg8JRENRqlbzjdlZXyaR88UcnCdNW0AJ1jX9IfHRys1X7AwSroU2ug8ESNC+suoBw1vX833Q== dependencies: chalk "^4.1.0" execa "^5.0.0" strong-log-transformer "^2.1.0" -"@lerna/create@6.6.1": - version "6.6.1" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-6.6.1.tgz#fc20f09e10b612d424a576775ad6eefe6aa96517" - integrity sha512-GDmHFhQ0mr0RcXWXrsLyfMV6ch/dZV/Ped1e6sFVQhsLL9P+FFXX1ZWxa/dQQ90VWF2qWcmK0+S/L3kUz2xvTA== +"@lerna/create@7.4.2": + version "7.4.2" + resolved "https://registry.npmjs.org/@lerna/create/-/create-7.4.2.tgz" + integrity sha512-1wplFbQ52K8E/unnqB0Tq39Z4e+NEoNrpovEnl6GpsTUrC6WDp8+w0Le2uCBV0hXyemxChduCkLz4/y1H1wTeg== dependencies: - "@lerna/child-process" "6.6.1" - dedent "^0.7.0" - fs-extra "^9.1.0" - init-package-json "^3.0.2" - npm-package-arg "8.1.1" - p-reduce "^2.1.0" - pacote "^13.6.1" - pify "^5.0.0" - semver "^7.3.4" - slash "^3.0.0" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^4.0.0" - yargs-parser "20.2.4" - -"@lerna/legacy-package-management@6.6.1": - version "6.6.1" - resolved "https://registry.yarnpkg.com/@lerna/legacy-package-management/-/legacy-package-management-6.6.1.tgz#1f44af40098b9396a4f698514ff2b87016b1ee3d" - integrity sha512-0EYxSFr34VgeudA5rvjGJSY7s4seITMVB7AJ9LRFv9QDUk6jpvapV13ZAaKnhDTxX5vNCfnJuWHXXWq0KyPF/Q== - dependencies: - "@npmcli/arborist" "6.2.3" - "@npmcli/run-script" "4.1.7" - "@nrwl/devkit" ">=15.5.2 < 16" - "@octokit/rest" "19.0.3" - byte-size "7.0.0" + "@lerna/child-process" "7.4.2" + "@npmcli/run-script" "6.0.2" + "@nx/devkit" ">=16.5.1 < 17" + "@octokit/plugin-enterprise-rest" "6.0.1" + "@octokit/rest" "19.0.11" + byte-size "8.1.1" chalk "4.1.0" clone-deep "4.0.1" - cmd-shim "5.0.0" + cmd-shim "6.0.1" columnify "1.6.0" - config-chain "1.1.12" - conventional-changelog-core "4.2.4" - conventional-recommended-bump "6.1.0" - cosmiconfig "7.0.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "^8.2.0" dedent "0.7.0" - dot-prop "6.0.1" execa "5.0.0" - file-url "3.0.0" - find-up "5.0.0" - fs-extra "9.1.0" - get-port "5.1.1" + fs-extra "^11.1.1" get-stream "6.0.0" git-url-parse "13.1.0" glob-parent "5.1.2" globby "11.1.0" - graceful-fs "4.2.10" + graceful-fs "4.2.11" has-unicode "2.0.1" - inquirer "8.2.4" - is-ci "2.0.0" + ini "^1.3.8" + init-package-json "5.0.0" + inquirer "^8.2.4" + is-ci "3.0.1" is-stream "2.0.0" - libnpmpublish "6.0.4" + js-yaml "4.1.0" + libnpmpublish "7.3.0" load-json-file "6.2.0" - make-dir "3.1.0" + lodash "^4.17.21" + make-dir "4.0.0" minimatch "3.0.5" multimatch "5.0.0" node-fetch "2.6.7" npm-package-arg "8.1.1" npm-packlist "5.1.1" - npm-registry-fetch "14.0.3" - npmlog "6.0.2" + npm-registry-fetch "^14.0.5" + npmlog "^6.0.2" + nx ">=16.5.1 < 17" p-map "4.0.0" p-map-series "2.1.0" p-queue "6.6.2" - p-waterfall "2.1.1" - pacote "13.6.2" + p-reduce "^2.1.0" + pacote "^15.2.0" pify "5.0.0" - pretty-format "29.4.3" - read-cmd-shim "3.0.0" - read-package-json "5.0.1" + read-cmd-shim "4.0.0" + read-package-json "6.0.4" resolve-from "5.0.0" - semver "7.3.8" + rimraf "^4.4.1" + semver "^7.3.4" signal-exit "3.0.7" - slash "3.0.0" - ssri "9.0.1" + slash "^3.0.0" + ssri "^9.0.1" strong-log-transformer "2.1.0" tar "6.1.11" temp-dir "1.0.0" - tempy "1.0.0" upath "2.0.1" - uuid "8.3.2" - write-file-atomic "4.0.1" + uuid "^9.0.0" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "5.0.0" + write-file-atomic "5.0.1" write-pkg "4.0.0" yargs "16.2.0" + yargs-parser "20.2.4" + +"@ljharb/resumer@^0.0.1": + version "0.0.1" + resolved "https://registry.npmjs.org/@ljharb/resumer/-/resumer-0.0.1.tgz" + integrity sha512-skQiAOrCfO7vRTq53cxznMpks7wS1va95UCidALlOVWqvBAzwPVErwizDwoMqNVMEn1mDq0utxZd02eIrvF1lw== + dependencies: + "@ljharb/through" "^2.3.9" + +"@ljharb/through@^2.3.11", "@ljharb/through@^2.3.9": + version "2.3.11" + resolved "https://registry.npmjs.org/@ljharb/through/-/through-2.3.11.tgz" + integrity sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w== + dependencies: + call-bind "^1.0.2" "@mapbox/node-pre-gyp@^1.0.0": version "1.0.10" - resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz#8e6735ccebbb1581e5a7e652244cadc8a844d03c" + resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz" integrity sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA== dependencies: detect-libc "^2.0.0" @@ -1313,19 +1273,19 @@ "@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3": version "2.1.8-no-fsevents.3" - resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b" + resolved "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz" integrity sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ== "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" - resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" + resolved "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz" integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== dependencies: eslint-scope "5.1.1" "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -1333,59 +1293,20 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/arborist@6.2.3": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-6.2.3.tgz#31f8aed2588341864d3811151d929c01308f8e71" - integrity sha512-lpGOC2ilSJXcc2zfW9QtukcCTcMbl3fVI0z4wvFB2AFIl0C+Q6Wv7ccrpdrQa8rvJ1ZVuc6qkX7HVTyKlzGqKA== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/fs" "^3.1.0" - "@npmcli/installed-package-contents" "^2.0.0" - "@npmcli/map-workspaces" "^3.0.2" - "@npmcli/metavuln-calculator" "^5.0.0" - "@npmcli/name-from-folder" "^2.0.0" - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/package-json" "^3.0.0" - "@npmcli/query" "^3.0.0" - "@npmcli/run-script" "^6.0.0" - bin-links "^4.0.1" - cacache "^17.0.4" - common-ancestor-path "^1.0.1" - hosted-git-info "^6.1.1" - json-parse-even-better-errors "^3.0.0" - json-stringify-nice "^1.1.4" - minimatch "^6.1.6" - nopt "^7.0.0" - npm-install-checks "^6.0.0" - npm-package-arg "^10.1.0" - npm-pick-manifest "^8.0.1" - npm-registry-fetch "^14.0.3" - npmlog "^7.0.1" - pacote "^15.0.8" - parse-conflict-json "^3.0.0" - proc-log "^3.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^1.0.1" - read-package-json-fast "^3.0.2" - semver "^7.3.7" - ssri "^10.0.1" - treeverse "^3.0.0" - walk-up-path "^1.0.0" - "@npmcli/fs@^2.1.0": version "2.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz" integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== dependencies: "@gar/promisify" "^1.1.3" @@ -1393,30 +1314,15 @@ "@npmcli/fs@^3.1.0": version "3.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz" integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== dependencies: semver "^7.3.5" -"@npmcli/git@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.2.tgz#5c5de6b4d70474cf2d09af149ce42e4e1dacb931" - integrity sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w== - dependencies: - "@npmcli/promise-spawn" "^3.0.0" - lru-cache "^7.4.4" - mkdirp "^1.0.4" - npm-pick-manifest "^7.0.0" - proc-log "^2.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^2.0.2" - "@npmcli/git@^4.0.0": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-4.0.4.tgz#cdf74f21b1d440c0756fb28159d935129d9daa33" - integrity sha512-5yZghx+u5M47LghaybLCkdSyFzV/w4OuH12d96HO389Ik9CDsLaDZJVynSGGVJOLn6gy/k7Dz5XYcplM3uxXRg== + version "4.1.0" + resolved "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz" + integrity sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ== dependencies: "@npmcli/promise-spawn" "^6.0.0" lru-cache "^7.4.4" @@ -1427,119 +1333,38 @@ semver "^7.3.5" which "^3.0.0" -"@npmcli/installed-package-contents@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" - integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== - dependencies: - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - -"@npmcli/installed-package-contents@^2.0.0", "@npmcli/installed-package-contents@^2.0.1": +"@npmcli/installed-package-contents@^2.0.1": version "2.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" + resolved "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz" integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== dependencies: npm-bundled "^3.0.0" npm-normalize-package-bin "^3.0.0" -"@npmcli/map-workspaces@^3.0.2": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.3.tgz#476944b63cd1f65bf83c6fdc7f4ca7be56906b1f" - integrity sha512-HlCvFuTzw4UNoKyZdqiNrln+qMF71QJkxy2dsusV8QQdoa89e2TF4dATCzBxbl4zzRzdDoWWyP5ADVrNAH9cRQ== - dependencies: - "@npmcli/name-from-folder" "^2.0.0" - glob "^9.3.1" - minimatch "^7.4.2" - read-package-json-fast "^3.0.0" - -"@npmcli/metavuln-calculator@^5.0.0": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.1.tgz#426b3e524c2008bcc82dbc2ef390aefedd643d76" - integrity sha512-qb8Q9wIIlEPj3WeA1Lba91R4ZboPL0uspzV0F9uwP+9AYMVB2zOoa7Pbk12g6D2NHAinSbHh6QYmGuRyHZ874Q== - dependencies: - cacache "^17.0.0" - json-parse-even-better-errors "^3.0.0" - pacote "^15.0.0" - semver "^7.3.5" - "@npmcli/move-file@^2.0.0": version "2.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz" integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@npmcli/name-from-folder@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" - integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== - -"@npmcli/node-gyp@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" - integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== - -"@npmcli/node-gyp@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" - integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== - -"@npmcli/package-json@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-3.0.0.tgz#c9219a197e1be8dbf43c4ef8767a72277c0533b6" - integrity sha512-NnuPuM97xfiCpbTEJYtEuKz6CFbpUHtaT0+5via5pQeI25omvQDFbp1GcGJ/c4zvL/WX0qbde6YiLgfZbWFgvg== - dependencies: - json-parse-even-better-errors "^3.0.0" + mkdirp "^1.0.4" + rimraf "^3.0.2" -"@npmcli/promise-spawn@^3.0.0": +"@npmcli/node-gyp@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" - integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== - dependencies: - infer-owner "^1.0.4" + resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz" + integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== "@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": version "6.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2" + resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz" integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== dependencies: which "^3.0.0" -"@npmcli/query@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.0.0.tgz#51a0dfb85811e04f244171f164b6bc83b36113a7" - integrity sha512-MFNDSJNgsLZIEBVZ0Q9w9K7o07j5N4o4yjtdz2uEpuCZlXGMuPENiRaFYk0vRqAA64qVuUQwC05g27fRtfUgnA== - dependencies: - postcss-selector-parser "^6.0.10" - -"@npmcli/run-script@4.1.7": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.1.7.tgz#b1a2f57568eb738e45e9ea3123fb054b400a86f7" - integrity sha512-WXr/MyM4tpKA4BotB81NccGAv8B48lNH0gRoILucbcAhTQXLCoi6HflMV3KdXubIqvP9SuLsFn68Z7r4jl+ppw== - dependencies: - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/promise-spawn" "^3.0.0" - node-gyp "^9.0.0" - read-package-json-fast "^2.0.3" - which "^2.0.2" - -"@npmcli/run-script@^4.1.0": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.2.1.tgz#c07c5c71bc1c70a5f2a06b0d4da976641609b946" - integrity sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg== - dependencies: - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/promise-spawn" "^3.0.0" - node-gyp "^9.0.0" - read-package-json-fast "^2.0.3" - which "^2.0.2" - -"@npmcli/run-script@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-6.0.0.tgz#f89e322c729e26ae29db6cc8cc76559074aac208" - integrity sha512-ql+AbRur1TeOdl1FY+RAwGW9fcr4ZwiVKabdvm93mujGREVuVLbdkXRJDrkTXSdCjaxYydr1wlA2v67jxWG5BQ== +"@npmcli/run-script@6.0.2", "@npmcli/run-script@^6.0.0": + version "6.0.2" + resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz" + integrity sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA== dependencies: "@npmcli/node-gyp" "^3.0.0" "@npmcli/promise-spawn" "^6.0.0" @@ -1547,87 +1372,93 @@ read-package-json-fast "^3.0.0" which "^3.0.0" -"@nrwl/cli@15.9.2": - version "15.9.2" - resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-15.9.2.tgz#82537d3d85410b0143d37a3b4fade09675356084" - integrity sha512-QoCmyrcGakHAYTJaNBbOerRQAmqJHMYGCdqtQidV+aP9p1Dy33XxDELfhd+IYmGqngutXuEWChNpWNhPloLnoA== +"@nrwl/devkit@16.10.0": + version "16.10.0" + resolved "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.10.0.tgz" + integrity sha512-fRloARtsDQoQgQ7HKEy0RJiusg/HSygnmg4gX/0n/Z+SUS+4KoZzvHjXc6T5ZdEiSjvLypJ+HBM8dQzIcVACPQ== dependencies: - nx "15.9.2" + "@nx/devkit" "16.10.0" -"@nrwl/devkit@>=15.5.2 < 16": - version "15.9.2" - resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-15.9.2.tgz#482b89f1bf88d3600b11f8b7e3e4452c5766eca4" - integrity sha512-2DvTstVZb91m+d4wqUJMBHQ3elxyabdmFE6/3aXmtOGeDxTyXyDzf/1O6JvBBiL8K6XC3ZYchjtxUHgxl/NJ5A== +"@nrwl/tao@16.10.0": + version "16.10.0" + resolved "https://registry.npmjs.org/@nrwl/tao/-/tao-16.10.0.tgz" + integrity sha512-QNAanpINbr+Pod6e1xNgFbzK1x5wmZl+jMocgiEFXZ67KHvmbD6MAQQr0MMz+GPhIu7EE4QCTLTyCEMlAG+K5Q== dependencies: + nx "16.10.0" + tslib "^2.3.0" + +"@nx/devkit@16.10.0", "@nx/devkit@>=16.5.1 < 17": + version "16.10.0" + resolved "https://registry.npmjs.org/@nx/devkit/-/devkit-16.10.0.tgz" + integrity sha512-IvKQqRJFDDiaj33SPfGd3ckNHhHi6ceEoqCbAP4UuMXOPPVOX6H0KVk+9tknkPb48B7jWIw6/AgOeWkBxPRO5w== + dependencies: + "@nrwl/devkit" "16.10.0" ejs "^3.1.7" + enquirer "~2.3.6" ignore "^5.0.4" - semver "7.3.4" + semver "7.5.3" tmp "~0.2.1" tslib "^2.3.0" -"@nrwl/nx-darwin-arm64@15.9.2": - version "15.9.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-darwin-arm64/-/nx-darwin-arm64-15.9.2.tgz#612d8d714ec876cafd6f1483bf5565704d1b75be" - integrity sha512-Yv+OVsQt3C/hmWOC+YhJZQlsyph5w1BHfbp4jyCvV1ZXBbb8NdvwxgDHPWXxKPTc1EXuB7aEX3qzxM3/OWEUJg== - -"@nrwl/nx-darwin-x64@15.9.2": - version "15.9.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.9.2.tgz#3f77bd90dbabf4782d81f773cfb2739a443e595f" - integrity sha512-qHfdluHlPzV0UHOwj1ZJ+qNEhzfLGiBuy1cOth4BSzDlvMnkuqBWoprfaXoztzYcus2NSILY1/7b3Jw4DAWmMw== - -"@nrwl/nx-linux-arm-gnueabihf@15.9.2": - version "15.9.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-15.9.2.tgz#3374a5a1692b222ce18f2213a47b4d68fb509e70" - integrity sha512-0GzwbablosnYnnJDCJvAeZv8LlelSrNwUnGhe43saeoZdAew35Ay1E34zBrg/GCGTASuz+knEEYFM+gDD9Mc6A== - -"@nrwl/nx-linux-arm64-gnu@15.9.2": - version "15.9.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-15.9.2.tgz#e3ec95c6ee3285c77422886cf4cbec1f04804460" - integrity sha512-3mFIY7iUTPG45hSIRaM2DmraCy8W6hNoArAGRrTgYw40BIJHtLrW+Rt7DLyvVXaYCvrKugWOKtxC+jG7kpIZVA== - -"@nrwl/nx-linux-arm64-musl@15.9.2": - version "15.9.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm64-musl/-/nx-linux-arm64-musl-15.9.2.tgz#72ce601d256083ded7380c598f1b3eb4dc2a3472" - integrity sha512-FNBnXEtockwxZa4I3NqggrJp0YIbNokJvt/clrICP+ijOacdUDkv8mJedavobkFsRsNq9gzCbRbUScKymrOLrg== - -"@nrwl/nx-linux-x64-gnu@15.9.2": - version "15.9.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-x64-gnu/-/nx-linux-x64-gnu-15.9.2.tgz#2da6bb50cd80d699310e91c7331baa6cfc8ce197" - integrity sha512-gHWsP5lbe4FNQCa1Q/VLxIuik+BqAOcSzyPjdUa4gCDcbxPa8xiE57PgXB5E1XUzOWNnDTlXa/Ll07/TIuKuog== - -"@nrwl/nx-linux-x64-musl@15.9.2": - version "15.9.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-x64-musl/-/nx-linux-x64-musl-15.9.2.tgz#39b3bda5868a53b722f1d42700dce71c5ff3f6b9" - integrity sha512-EaFUukCbmoHsYECX2AS4pxXH933yesBFVvBgD38DkoFDxDoJMVt6JqYwm+d5R7S4R2P9U3l++aurljQTRq567Q== - -"@nrwl/nx-win32-arm64-msvc@15.9.2": - version "15.9.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-15.9.2.tgz#bc350be5cb7d0bfa6c2c5ced40c5af163a457a2c" - integrity sha512-PGAe7QMr51ivx1X3avvs8daNlvv1wGo3OFrobjlu5rSyjC1Y3qHwT9+wdlwzNZ93FIqWOq09s+rE5gfZRfpdAg== - -"@nrwl/nx-win32-x64-msvc@15.9.2": - version "15.9.2" - resolved "https://registry.yarnpkg.com/@nrwl/nx-win32-x64-msvc/-/nx-win32-x64-msvc-15.9.2.tgz#3e46c3f7af196bdbf0deb336ec4f9448c54e4a9f" - integrity sha512-Q8onNzhuAZ0l9DNkm8D4Z1AEIzJr8JiT4L2fVBLYrV/R75C2HS3q7lzvfo6oqMY6mXge1cFPcrTtg3YXBQaSWA== - -"@nrwl/tao@15.9.2": - version "15.9.2" - resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-15.9.2.tgz#e970efa8b3fb828007b02286e9e505247032b5b3" - integrity sha512-+LqNC37w9c6q6Ukdpf0z0tt1PQFNi4gwhHpJvkYQiKRETHjyrrlyqTNEPEyA7PI62RuYC6VrpVw2gzI7ufqZEA== - dependencies: - nx "15.9.2" +"@nx/nx-darwin-arm64@16.10.0": + version "16.10.0" + resolved "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.10.0.tgz" + integrity sha512-YF+MIpeuwFkyvM5OwgY/rTNRpgVAI/YiR0yTYCZR+X3AAvP775IVlusNgQ3oedTBRUzyRnI4Tknj1WniENFsvQ== + +"@nx/nx-darwin-x64@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-16.10.0.tgz#2ccf270418d552fd0a8e0d6089aee4944315adaa" + integrity sha512-ypi6YxwXgb0kg2ixKXE3pwf5myVNUgWf1CsV5OzVccCM8NzheMO51KDXTDmEpXdzUsfT0AkO1sk5GZeCjhVONg== + +"@nx/nx-freebsd-x64@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.10.0.tgz#c3ee6914256e69493fed9355b0d6661d0e86da44" + integrity sha512-UeEYFDmdbbDkTQamqvtU8ibgu5jQLgFF1ruNb/U4Ywvwutw2d4ruOMl2e0u9hiNja9NFFAnDbvzrDcMo7jYqYw== + +"@nx/nx-linux-arm-gnueabihf@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.10.0.tgz#a961eccbb38acb2da7fc125b29d1fead0b39152f" + integrity sha512-WV3XUC2DB6/+bz1sx+d1Ai9q2Cdr+kTZRN50SOkfmZUQyEBaF6DRYpx/a4ahhxH3ktpNfyY8Maa9OEYxGCBkQA== + +"@nx/nx-linux-arm64-gnu@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.10.0.tgz#795f20072549d03822b5c4639ef438e473dbb541" + integrity sha512-aWIkOUw995V3ItfpAi5FuxQ+1e9EWLS1cjWM1jmeuo+5WtaKToJn5itgQOkvSlPz+HSLgM3VfXMvOFALNk125g== + +"@nx/nx-linux-arm64-musl@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.10.0.tgz#f2428ee6dbe2b2c326e8973f76c97666def33607" + integrity sha512-uO6Gg+irqpVcCKMcEPIQcTFZ+tDI02AZkqkP7koQAjniLEappd8DnUBSQdcn53T086pHpdc264X/ZEpXFfrKWQ== + +"@nx/nx-linux-x64-gnu@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.10.0.tgz#d36c2bcf94d49eaa24e3880ddaf6f1f617de539b" + integrity sha512-134PW/u/arNFAQKpqMJniC7irbChMPz+W+qtyKPAUXE0XFKPa7c1GtlI/wK2dvP9qJDZ6bKf0KtA0U/m2HMUOA== + +"@nx/nx-linux-x64-musl@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.10.0.tgz#78bd2ab97a583b3d4ea3387b67fd7b136907493c" + integrity sha512-q8sINYLdIJxK/iUx9vRk5jWAWb/2O0PAbOJFwv4qkxBv4rLoN7y+otgCZ5v0xfx/zztFgk/oNY4lg5xYjIso2Q== + +"@nx/nx-win32-arm64-msvc@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.10.0.tgz#ef20ec8d0c83d66e73e20df12d2c788b8f866396" + integrity sha512-moJkL9kcqxUdJSRpG7dET3UeLIciwrfP08mzBQ12ewo8K8FzxU8ZUsTIVVdNrwt01CXOdXoweGfdQLjJ4qTURA== + +"@nx/nx-win32-x64-msvc@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.10.0.tgz#7410a51d0f8be631eec9552f01b2e5946285927c" + integrity sha512-5iV2NKZnzxJwZZ4DM5JVbRG/nkhAbzEskKaLBB82PmYGKzaDHuMHP1lcPoD/rtYMlowZgNA/RQndfKvPBPwmXA== "@octokit/auth-token@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.3.tgz#ce7e48a3166731f26068d7a7a7996b5da58cbe0c" - integrity sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA== - dependencies: - "@octokit/types" "^9.0.0" + version "3.0.4" + resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz" + integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== -"@octokit/core@^4.0.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.0.tgz#8c253ba9605aca605bc46187c34fcccae6a96648" - integrity sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg== +"@octokit/core@^4.2.1": + version "4.2.4" + resolved "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz" + integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== dependencies: "@octokit/auth-token" "^3.0.0" "@octokit/graphql" "^5.0.0" @@ -1638,66 +1469,56 @@ universal-user-agent "^6.0.0" "@octokit/endpoint@^7.0.0": - version "7.0.5" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.5.tgz#2bb2a911c12c50f10014183f5d596ce30ac67dd1" - integrity sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA== + version "7.0.6" + resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz" + integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== dependencies: "@octokit/types" "^9.0.0" is-plain-object "^5.0.0" universal-user-agent "^6.0.0" "@octokit/graphql@^5.0.0": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.5.tgz#a4cb3ea73f83b861893a6370ee82abb36e81afd2" - integrity sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ== + version "5.0.6" + resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz" + integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== dependencies: "@octokit/request" "^6.0.0" "@octokit/types" "^9.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^12.11.0": - version "12.11.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" - integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== - -"@octokit/openapi-types@^14.0.0": - version "14.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-14.0.0.tgz#949c5019028c93f189abbc2fb42f333290f7134a" - integrity sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw== - -"@octokit/openapi-types@^17.0.0": - version "17.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-17.0.0.tgz#7356d287f48b20e9a1f497ef8dfaabdff9cf8622" - integrity sha512-V8BVJGN0ZmMlURF55VFHFd/L92XQQ43KvFjNmY1IYbCN3V/h/uUFV6iQi19WEHM395Nn+1qhUbViCAD/1czzog== +"@octokit/openapi-types@^18.0.0": + version "18.1.1" + resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz" + integrity sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw== "@octokit/plugin-enterprise-rest@6.0.1": version "6.0.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" + resolved "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz" integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== -"@octokit/plugin-paginate-rest@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz#86f8be759ce2d6d7c879a31490fd2f7410b731f0" - integrity sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA== +"@octokit/plugin-paginate-rest@^6.1.2": + version "6.1.2" + resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz" + integrity sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ== dependencies: - "@octokit/types" "^6.41.0" + "@octokit/tsconfig" "^1.0.2" + "@octokit/types" "^9.2.3" "@octokit/plugin-request-log@^1.0.4": version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz" integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== -"@octokit/plugin-rest-endpoint-methods@^6.0.0": - version "6.8.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.8.1.tgz#97391fda88949eb15f68dc291957ccbe1d3e8ad1" - integrity sha512-QrlaTm8Lyc/TbU7BL/8bO49vp+RZ6W3McxxmmQTgYxf2sWkO8ZKuj4dLhPNJD6VCUW1hetCmeIM0m6FTVpDiEg== +"@octokit/plugin-rest-endpoint-methods@^7.1.2": + version "7.2.3" + resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz" + integrity sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA== dependencies: - "@octokit/types" "^8.1.1" - deprecation "^2.3.1" + "@octokit/types" "^10.0.0" "@octokit/request-error@^3.0.0": version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" + resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz" integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== dependencies: "@octokit/types" "^9.0.0" @@ -1705,9 +1526,9 @@ once "^1.4.0" "@octokit/request@^6.0.0": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.3.tgz#76d5d6d44da5c8d406620a4c285d280ae310bdb4" - integrity sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA== + version "6.2.8" + resolved "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz" + integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== dependencies: "@octokit/endpoint" "^7.0.0" "@octokit/request-error" "^3.0.0" @@ -1716,40 +1537,38 @@ node-fetch "^2.6.7" universal-user-agent "^6.0.0" -"@octokit/rest@19.0.3": - version "19.0.3" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.3.tgz#b9a4e8dc8d53e030d611c053153ee6045f080f02" - integrity sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ== +"@octokit/rest@19.0.11": + version "19.0.11" + resolved "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz" + integrity sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw== dependencies: - "@octokit/core" "^4.0.0" - "@octokit/plugin-paginate-rest" "^3.0.0" + "@octokit/core" "^4.2.1" + "@octokit/plugin-paginate-rest" "^6.1.2" "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^6.0.0" + "@octokit/plugin-rest-endpoint-methods" "^7.1.2" -"@octokit/types@^6.41.0": - version "6.41.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" - integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== - dependencies: - "@octokit/openapi-types" "^12.11.0" +"@octokit/tsconfig@^1.0.2": + version "1.0.2" + resolved "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz" + integrity sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA== -"@octokit/types@^8.1.1": - version "8.2.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-8.2.1.tgz#a6de091ae68b5541f8d4fcf9a12e32836d4648aa" - integrity sha512-8oWMUji8be66q2B9PmEIUyQm00VPDPun07umUWSaCwxmeaquFBro4Hcc3ruVoDo3zkQyZBlRvhIMEYS3pBhanw== +"@octokit/types@^10.0.0": + version "10.0.0" + resolved "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz" + integrity sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg== dependencies: - "@octokit/openapi-types" "^14.0.0" + "@octokit/openapi-types" "^18.0.0" -"@octokit/types@^9.0.0": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.1.2.tgz#1a8d35b1f4a3d2ad386e223f249dd5f7506979c1" - integrity sha512-LPbJIuu1WNoRHbN4UMysEdlissRFpTCWyoKT7kHPufI8T+XX33/qilfMWJo3mCOjNIKu0+43oSQPf+HJa0+TTQ== +"@octokit/types@^9.0.0", "@octokit/types@^9.2.3": + version "9.3.2" + resolved "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz" + integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== dependencies: - "@octokit/openapi-types" "^17.0.0" + "@octokit/openapi-types" "^18.0.0" "@parcel/watcher@2.0.4": version "2.0.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" + resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz" integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== dependencies: node-addon-api "^3.2.1" @@ -1757,12 +1576,12 @@ "@pkgjs/parseargs@^0.11.0": version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== "@qiwi/npm-registry-client@^8.9.1": version "8.9.1" - resolved "https://registry.yarnpkg.com/@qiwi/npm-registry-client/-/npm-registry-client-8.9.1.tgz#1769f6501a436ec39c496ca0a9a2fab9db7718df" + resolved "https://registry.npmjs.org/@qiwi/npm-registry-client/-/npm-registry-client-8.9.1.tgz" integrity sha512-rZF+mG+NfijR0SHphhTLHRr4aM4gtfdwoAMY6we2VGQam8vkN1cxGG1Lg/Llrj8Dd0Mu6VjdFQRyMMRZxtZR2A== dependencies: concat-stream "^2.0.0" @@ -1779,25 +1598,25 @@ optionalDependencies: npmlog "2 || ^3.1.0 || ^4.0.0" -"@rollup/plugin-babel@^6.0.3": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-6.0.3.tgz#07ccde15de278c581673034ad6accdb4a153dfeb" - integrity sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg== +"@rollup/plugin-babel@^6.0.4": + version "6.0.4" + resolved "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.4.tgz" + integrity sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw== dependencies: "@babel/helper-module-imports" "^7.18.6" "@rollup/pluginutils" "^5.0.1" -"@rollup/plugin-json@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-6.0.0.tgz#199fea6670fd4dfb1f4932250569b14719db234a" - integrity sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w== +"@rollup/plugin-json@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.1.tgz" + integrity sha512-RgVfl5hWMkxN1h/uZj8FVESvPuBJ/uf6ly6GTj0GONnkfoBN5KC0MSz+PN2OLDgYXMhtG0mWpTrkiOjoxAIevw== dependencies: "@rollup/pluginutils" "^5.0.1" -"@rollup/plugin-node-resolve@^15.0.2": - version "15.0.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.2.tgz#8183a80c2cbf7b471f5ac86b16747997f3b5d185" - integrity sha512-Y35fRGUjC3FaurG722uhUuG8YHOJRJQbI6/CkbRkdPotSpDj9NtIN85z1zrcyDcCQIW4qp5mgG72U+gJ0TAFEg== +"@rollup/plugin-node-resolve@^15.2.3": + version "15.2.3" + resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz" + integrity sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ== dependencies: "@rollup/pluginutils" "^5.0.1" "@types/resolve" "1.20.2" @@ -1806,19 +1625,19 @@ is-module "^1.0.0" resolve "^1.22.1" -"@rollup/plugin-terser@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-terser/-/plugin-terser-0.4.1.tgz#5c323fd066355056224b6993fcb14c409d29873e" - integrity sha512-aKS32sw5a7hy+fEXVy+5T95aDIwjpGHCTv833HXVtyKMDoVS7pBr5K3L9hEQoNqbJFjfANPrNpIXlTQ7is00eA== +"@rollup/plugin-terser@^0.4.4": + version "0.4.4" + resolved "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz" + integrity sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A== dependencies: - serialize-javascript "^6.0.0" - smob "^0.0.6" - terser "^5.15.1" + serialize-javascript "^6.0.1" + smob "^1.0.0" + terser "^5.17.4" "@rollup/pluginutils@^5.0.1": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33" - integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA== + version "5.0.5" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.5.tgz" + integrity sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q== dependencies: "@types/estree" "^1.0.0" estree-walker "^2.0.2" @@ -1836,7 +1655,7 @@ "@rollup/rollup-darwin-arm64@4.3.0": version "4.3.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.3.0.tgz#80c4a4dd7b120906d4e655808fb9005784a8bf35" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.3.0.tgz" integrity sha512-dGhVBlllt4iHwTGy21IEoMOTN5wZoid19zEIxsdY29xcEiOEHqzDa7Sqrkh5OE7LKCowL61eFJXxYe/+pYa7ZQ== "@rollup/rollup-darwin-x64@4.3.0": @@ -1884,208 +1703,317 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.3.0.tgz#0b9bcc159b93c911efb5a2c39ec5d70dd0a589dc" integrity sha512-dMvGV8p92GQ8jhNlGIKpyhVZPzJlT258pPrM5q2F8lKcc9Iv9BbfdnhX1OfinYWnb9ms5zLw6MlaMnqLfUkKnQ== -"@sigstore/protobuf-specs@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz#957cb64ea2f5ce527cc9cf02a096baeb0d2b99b4" - integrity sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ== +"@sigstore/bundle@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz" + integrity sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog== + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" -"@sinclair/typebox@^0.25.16": - version "0.25.24" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" - integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== +"@sigstore/protobuf-specs@^0.2.0": + version "0.2.1" + resolved "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz" + integrity sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A== + +"@sigstore/sign@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz" + integrity sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA== + dependencies: + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + make-fetch-happen "^11.0.1" + +"@sigstore/tuf@^1.0.3": + version "1.0.3" + resolved "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz" + integrity sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg== + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" + tuf-js "^1.1.7" + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@tootallnate/once@2": version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@tufjs/canonical-json@1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31" + resolved "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz" integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== -"@tufjs/models@1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-1.0.3.tgz#e6cb8a86834da7459a7c836cd892dee56b4bab44" - integrity sha512-mkFEqqRisi13DmR5pX4x+Zk97EiU8djTtpNW1GeuX410y/raAsq/T3ZCjwoRIZ8/cIBfW0olK/sywlAiWevDVw== +"@tufjs/models@1.0.4": + version "1.0.4" + resolved "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz" + integrity sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A== dependencies: "@tufjs/canonical-json" "1.0.0" - minimatch "^7.4.6" + minimatch "^9.0.0" "@types/estree@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.4.tgz#d9748f5742171b26218516cf1828b8eafaf8a9fa" + integrity sha512-2JwWnHK9H+wUZNorf2Zr6ves96WHoWDJIftkcxPKsS7Djta6Zu519LarhRNljPXkpsZR2ZMwNCPeW7omW07BJw== "@types/geojson@7946.0.4": version "7946.0.4" resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.4.tgz#4e049756383c3f055dd8f3d24e63fb543e98eb07" integrity sha512-MHmwBtCb7OCv1DSivz2UNJXPGU/1btAWRKlqJ2saEhVJkpkvqHMMaOpKg0v4sAbDWSQekHGvPVMM8nQ+Jen03Q== -"@types/json-schema@^7.0.11", "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== +"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.9": + version "7.0.14" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz" + integrity sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw== "@types/minimatch@^3.0.3": version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + version "1.2.4" + resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.4.tgz" + integrity sha512-Kfe/D3hxHTusnPNRbycJE1N77WHDsdS4AjUYIzlDzhDrS47NrwuL3YW4VITxwR7KCVpzwgy4Rbj829KSSQmwXQ== "@types/node@^14.14.35": - version "14.18.43" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.43.tgz#679e000d9f1d914132ea295b4a1ffdf20370ec49" - integrity sha512-n3eFEaoem0WNwLux+k272P0+aq++5o05bA9CfiwKPdYPB5ZambWKdWoeHy7/OJiizMhzg27NLaZ6uzjLTzXceQ== + version "14.18.63" + resolved "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz" + integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ== "@types/node@^20.8.10": version "20.8.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.10.tgz#a5448b895c753ae929c26ce85cab557c6d4a365e" + resolved "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz" integrity sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w== dependencies: undici-types "~5.26.4" "@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + version "2.4.3" + resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.3.tgz" + integrity sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg== "@types/parsimmon@^1.10.1": - version "1.10.6" - resolved "https://registry.yarnpkg.com/@types/parsimmon/-/parsimmon-1.10.6.tgz#8fcf95990514d2a7624aa5f630c13bf2427f9cdd" - integrity sha512-FwAQwMRbkhx0J6YELkwIpciVzCcgEqXEbIrIn3a2P5d3kGEHQ3wVhlN3YdVepYP+bZzCYO6OjmD4o9TGOZ40rA== + version "1.10.8" + resolved "https://registry.yarnpkg.com/@types/parsimmon/-/parsimmon-1.10.8.tgz#308ad54da883f4158ca8af960230542a5ab8c24d" + integrity sha512-i6oOxO9QKaqwMdMnnagvtVduc0ii9rl+BkNdAdSDhN27k9ryP8Fm6S9bcvNtuauK7PwTdoxCRorPcJvyGqwHgQ== "@types/resolve@1.20.2": version "1.20.2" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" + resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz" integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== -"@types/semver@^7.3.12": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== +"@types/semver@^7.3.12", "@types/semver@^7.5.0": + version "7.5.4" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz" + integrity sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ== -"@typescript-eslint/eslint-plugin@^5.55.0", "@typescript-eslint/eslint-plugin@^5.59.5": - version "5.59.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.5.tgz#f156827610a3f8cefc56baeaa93cd4a5f32966b4" - integrity sha512-feA9xbVRWJZor+AnLNAr7A8JRWeZqHUf4T9tlP+TN04b05pFVhO5eN7/O93Y/1OUlLMHKbnJisgDURs/qvtqdg== +"@typescript-eslint/eslint-plugin@^5.55.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== dependencies: "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.59.5" - "@typescript-eslint/type-utils" "5.59.5" - "@typescript-eslint/utils" "5.59.5" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" debug "^4.3.4" - grapheme-splitter "^1.0.4" + graphemer "^1.4.0" ignore "^5.2.0" natural-compare-lite "^1.4.0" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.55.0", "@typescript-eslint/parser@^5.59.5": - version "5.59.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.5.tgz#63064f5eafbdbfb5f9dfbf5c4503cdf949852981" - integrity sha512-NJXQC4MRnF9N9yWqQE2/KLRSOLvrrlZb48NGVfBa+RuPMN6B7ZcK5jZOvhuygv4D64fRKnZI4L4p8+M+rfeQuw== +"@typescript-eslint/eslint-plugin@^6.10.0": + version "6.10.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.10.0.tgz" + integrity sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.10.0" + "@typescript-eslint/type-utils" "6.10.0" + "@typescript-eslint/utils" "6.10.0" + "@typescript-eslint/visitor-keys" "6.10.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@^5.55.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + dependencies: + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + debug "^4.3.4" + +"@typescript-eslint/parser@^6.10.0": + version "6.10.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.10.0.tgz" + integrity sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog== dependencies: - "@typescript-eslint/scope-manager" "5.59.5" - "@typescript-eslint/types" "5.59.5" - "@typescript-eslint/typescript-estree" "5.59.5" + "@typescript-eslint/scope-manager" "6.10.0" + "@typescript-eslint/types" "6.10.0" + "@typescript-eslint/typescript-estree" "6.10.0" + "@typescript-eslint/visitor-keys" "6.10.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.59.5": - version "5.59.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.5.tgz#33ffc7e8663f42cfaac873de65ebf65d2bce674d" - integrity sha512-jVecWwnkX6ZgutF+DovbBJirZcAxgxC0EOHYt/niMROf8p4PwxxG32Qdhj/iIQQIuOflLjNkxoXyArkcIP7C3A== +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== dependencies: - "@typescript-eslint/types" "5.59.5" - "@typescript-eslint/visitor-keys" "5.59.5" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" -"@typescript-eslint/type-utils@5.59.5": - version "5.59.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.5.tgz#485b0e2c5b923460bc2ea6b338c595343f06fc9b" - integrity sha512-4eyhS7oGym67/pSxA2mmNq7X164oqDYNnZCUayBwJZIRVvKpBCMBzFnFxjeoDeShjtO6RQBHBuwybuX3POnDqg== +"@typescript-eslint/scope-manager@6.10.0": + version "6.10.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.10.0.tgz" + integrity sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg== dependencies: - "@typescript-eslint/typescript-estree" "5.59.5" - "@typescript-eslint/utils" "5.59.5" + "@typescript-eslint/types" "6.10.0" + "@typescript-eslint/visitor-keys" "6.10.0" + +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== + dependencies: + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.59.5", "@typescript-eslint/types@^5.56.0": - version "5.59.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.5.tgz#e63c5952532306d97c6ea432cee0981f6d2258c7" - integrity sha512-xkfRPHbqSH4Ggx4eHRIO/eGL8XL4Ysb4woL8c87YuAo8Md7AUjyWKa9YMwTL519SyDPrfEgKdewjkxNCVeJW7w== +"@typescript-eslint/type-utils@6.10.0": + version "6.10.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.10.0.tgz" + integrity sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg== + dependencies: + "@typescript-eslint/typescript-estree" "6.10.0" + "@typescript-eslint/utils" "6.10.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/types@5.62.0", "@typescript-eslint/types@^5.56.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/types@6.10.0": + version "6.10.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.10.0.tgz" + integrity sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg== -"@typescript-eslint/typescript-estree@5.59.5", "@typescript-eslint/typescript-estree@^5.55.0": - version "5.59.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.5.tgz#9b252ce55dd765e972a7a2f99233c439c5101e42" - integrity sha512-+XXdLN2CZLZcD/mO7mQtJMvCkzRfmODbeSKuMY/yXbGkzvA9rJyDY5qDYNoiz2kP/dmyAxXquL2BvLQLJFPQIg== +"@typescript-eslint/typescript-estree@5.62.0", "@typescript-eslint/typescript-estree@^5.55.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== dependencies: - "@typescript-eslint/types" "5.59.5" - "@typescript-eslint/visitor-keys" "5.59.5" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.59.5", "@typescript-eslint/utils@^5.55.0": - version "5.59.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.5.tgz#15b3eb619bb223302e60413adb0accd29c32bcae" - integrity sha512-sCEHOiw+RbyTii9c3/qN74hYDPNORb8yWCoPLmB7BIflhplJ65u2PBpdRla12e3SSTJ2erRkPjz7ngLHhUegxA== +"@typescript-eslint/typescript-estree@6.10.0": + version "6.10.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz" + integrity sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg== + dependencies: + "@typescript-eslint/types" "6.10.0" + "@typescript-eslint/visitor-keys" "6.10.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@5.62.0", "@typescript-eslint/utils@^5.55.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.59.5" - "@typescript-eslint/types" "5.59.5" - "@typescript-eslint/typescript-estree" "5.59.5" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.59.5": - version "5.59.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.5.tgz#ba5b8d6791a13cf9fea6716af1e7626434b29b9b" - integrity sha512-qL+Oz+dbeBRTeyJTIy0eniD3uvqU7x+y1QceBismZ41hd4aBSRh8UAw4pZP0+XzLuPZmx4raNMq/I+59W2lXKA== - dependencies: - "@typescript-eslint/types" "5.59.5" +"@typescript-eslint/utils@6.10.0": + version "6.10.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.10.0.tgz" + integrity sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.10.0" + "@typescript-eslint/types" "6.10.0" + "@typescript-eslint/typescript-estree" "6.10.0" + semver "^7.5.4" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@6.10.0": + version "6.10.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.10.0.tgz" + integrity sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg== + dependencies: + "@typescript-eslint/types" "6.10.0" + eslint-visitor-keys "^3.4.1" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + "@yarnpkg/lockfile@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== -"@yarnpkg/parsers@^3.0.0-rc.18": - version "3.0.0-rc.42" - resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.42.tgz#3814e90a81bb1f9c06cc83c6a009139c55efe94d" - integrity sha512-eW9Mbegmb5bJjwawJM9ghjUjUqciNMhC6L7XrQPF/clXS5bbP66MstsgCT5hy9VlfUh/CfBT+0Wucf531dMjHA== +"@yarnpkg/parsers@3.0.0-rc.46": + version "3.0.0-rc.46" + resolved "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz" + integrity sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q== dependencies: js-yaml "^3.10.0" tslib "^2.4.0" "@zeit/schemas@2.29.0": version "2.29.0" - resolved "https://registry.yarnpkg.com/@zeit/schemas/-/schemas-2.29.0.tgz#a59ae6ebfdf4ddc66a876872dd736baa58b6696c" + resolved "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.29.0.tgz" integrity sha512-g5QiLIfbg3pLuYUJPlisNKY+epQJTcMDsOnVNkscrDP1oi7vmJnzOANYJI/1pZcVJ6umUkBv3aFtlg1UvUHGzA== "@zkochan/js-yaml@0.0.6": version "0.0.6" - resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz#975f0b306e705e28b8068a07737fa46d3fc04826" + resolved "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz" integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== dependencies: argparse "^2.0.1" -JSONStream@^1.0.4: +JSONStream@^1.3.5: version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== dependencies: jsonparse "^1.2.0" @@ -2093,29 +2021,17 @@ JSONStream@^1.0.4: abab@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== abbrev@1, abbrev@^1.0.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abbrev@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" - integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - accepts@~1.3.5: version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" @@ -2123,7 +2039,7 @@ accepts@~1.3.5: acorn-globals@^7.0.0: version "7.0.1" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" + resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz" integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== dependencies: acorn "^8.1.0" @@ -2131,43 +2047,41 @@ acorn-globals@^7.0.0: acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.0.2: version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.1.0, acorn@^8.5.0, acorn@^8.8.0, acorn@^8.8.2: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== +acorn@^8.1.0, acorn@^8.8.2, acorn@^8.9.0: + version "8.11.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== add-stream@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz" integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== agent-base@6, agent-base@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" agentkeepalive@^4.2.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255" - integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg== + version "4.5.0" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== dependencies: - debug "^4.1.0" - depd "^2.0.0" humanize-ms "^1.2.1" aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" @@ -2175,14 +2089,14 @@ aggregate-error@^3.0.0: ajv-formats@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== dependencies: ajv "^8.0.0" ajv@8.11.0: version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz" integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== dependencies: fast-deep-equal "^3.1.1" @@ -2190,9 +2104,9 @@ ajv@8.11.0: require-from-string "^2.0.2" uri-js "^4.2.2" -ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: +ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -2202,7 +2116,7 @@ ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: ajv@^8.0.0, ajv@^8.12.0: version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" @@ -2212,70 +2126,70 @@ ajv@^8.0.0, ajv@^8.12.0: ansi-align@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz" integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== dependencies: string-width "^4.1.0" ansi-colors@^4.1.1: version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-escapes@^4.2.1: version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" ansi-regex@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== ansi-styles@^2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== ansi-styles@^6.1.0: version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -2283,22 +2197,22 @@ anymatch@~3.1.2: aproba@^1.0.3: version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: +"aproba@^1.0.3 || ^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== arch@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + resolved "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz" integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== are-we-there-yet@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== dependencies: delegates "^1.0.0" @@ -2306,23 +2220,15 @@ are-we-there-yet@^2.0.0: are-we-there-yet@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== dependencies: delegates "^1.0.0" readable-stream "^3.6.0" -are-we-there-yet@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.0.tgz#3ff397dc14f08b52dd8b2a64d3cee154ab8760d2" - integrity sha512-nSXlV+u3vtVjRgihdTzbfWYzxPWGo424zPgQbHD0ZqIla3jqYAewDcvee0Ua2hjS5IfTAmjGlx1Jf0PKwjZDEw== - dependencies: - delegates "^1.0.0" - readable-stream "^4.1.0" - are-we-there-yet@~1.1.2: version "1.1.7" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz" integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== dependencies: delegates "^1.0.0" @@ -2330,24 +2236,24 @@ are-we-there-yet@~1.1.2: arg@5.0.2: version "5.0.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== argparse@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-buffer-byte-length@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== dependencies: call-bind "^1.0.2" @@ -2355,85 +2261,93 @@ array-buffer-byte-length@^1.0.0: array-differ@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + resolved "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz" integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== array-ify@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz" integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== array-union@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.every@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/array.prototype.every/-/array.prototype.every-1.1.4.tgz#2762daecd9cec87cb63f3ca6be576817074a684e" - integrity sha512-Aui35iRZk1HHLRAyF7QP0KAnOnduaQ6fo6k1NVWfRc0xTs2AZ70ytlXvOmkC6Di4JmUs2Wv3DYzGtCQFSk5uGg== +array.prototype.every@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/array.prototype.every/-/array.prototype.every-1.1.5.tgz" + integrity sha512-FfMQJ+/joFGXpRCltbzV3znaP5QxIhLFySo0fEPn3GuoYlud9LhknMCIxdYKC2qsM/6VHoSp6YGwe3EZXrEcwQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" is-string "^1.0.7" +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + arrify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== arrify@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== asn1@~0.2.3: version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== async@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + version "3.2.5" + resolved "https://registry.npmjs.org/async/-/async-3.2.5.tgz" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - available-typed-arrays@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== aws-sign2@~0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws4@^1.8.0: version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" + resolved "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz" integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== axios@^1.0.0: - version "1.3.6" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.3.6.tgz#1ace9a9fb994314b5f6327960918406fa92c6646" - integrity sha512-PEcdkk7JcdPiMDkvM4K6ZBRYq9keuVJsToxm2zQIM70Qqo2WHTdJZMXcG9X+RmRp2VPNUQC8W1RAGbgt6b1yMg== + version "1.6.0" + resolved "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz" + integrity sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg== dependencies: follow-redirects "^1.15.0" form-data "^4.0.0" @@ -2441,77 +2355,67 @@ axios@^1.0.0: babel-code-frame@^6.22.0: version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + resolved "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz" integrity sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g== dependencies: chalk "^1.1.3" esutils "^2.0.2" js-tokens "^3.0.2" -babel-plugin-polyfill-corejs2@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" - integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== +babel-plugin-polyfill-corejs2@^0.4.6: + version "0.4.6" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz" + integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.3.3" - semver "^6.1.1" + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.4.3" + semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" - integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== +babel-plugin-polyfill-corejs3@^0.8.5: + version "0.8.6" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz" + integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" - core-js-compat "^3.25.1" + "@babel/helper-define-polyfill-provider" "^0.4.3" + core-js-compat "^3.33.1" -babel-plugin-polyfill-regenerator@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" - integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== +babel-plugin-polyfill-regenerator@^0.5.3: + version "0.5.3" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz" + integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" + "@babel/helper-define-polyfill-provider" "^0.4.3" balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== bcrypt-pbkdf@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== dependencies: tweetnacl "^0.14.3" before-after-hook@^2.2.0: version "2.2.3" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz" integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== -bin-links@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.1.tgz#afeb0549e642f61ff889b58ea2f8dca78fb9d8d3" - integrity sha512-bmFEM39CyX336ZGGRsGPlc6jZHriIoHacOQcTt72MktIjpPhZoP4te2jOyUXF3BLILmJ8aNLncoPVeIIFlrDeA== - dependencies: - cmd-shim "^6.0.0" - npm-normalize-package-bin "^3.0.0" - read-cmd-shim "^4.0.0" - write-file-atomic "^5.0.0" - binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bl@^4.0.3, bl@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -2520,7 +2424,7 @@ bl@^4.0.3, bl@^4.1.0: boxen@7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-7.0.0.tgz#9e5f8c26e716793fc96edcf7cf754cdf5e3fbf32" + resolved "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz" integrity sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg== dependencies: ansi-align "^3.0.1" @@ -2534,7 +2438,7 @@ boxen@7.0.0: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -2542,31 +2446,21 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.2, braces@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -browserslist@^4.21.5: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== - dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" - -browserslist@^4.21.9: +browserslist@^4.21.9, browserslist@^4.22.1: version "4.22.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz" integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== dependencies: caniuse-lite "^1.0.30001541" @@ -2576,60 +2470,52 @@ browserslist@^4.21.9: buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer@^5.5.0: version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" ieee754 "^1.1.13" -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - builtin-modules@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" integrity sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ== builtin-modules@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== builtins@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== builtins@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + resolved "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz" integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== dependencies: semver "^7.0.0" -byte-size@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-7.0.0.tgz#36528cd1ca87d39bd9abd51f5715dc93b6ceb032" - integrity sha512-NNiBxKgxybMBtWdmvx7ZITJi4ZG+CYUgwOSZTfqB1qogkRHrhbQE/R2r5Fh94X+InN5MCYz6SvB/ejHMj/HbsQ== +byte-size@8.1.1: + version "8.1.1" + resolved "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz" + integrity sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg== bytes@3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== -cacache@^16.0.0, cacache@^16.1.0: +cacache@^16.1.0: version "16.1.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== dependencies: "@npmcli/fs" "^2.1.0" @@ -2651,41 +2537,41 @@ cacache@^16.0.0, cacache@^16.1.0: tar "^6.1.11" unique-filename "^2.0.0" -cacache@^17.0.0, cacache@^17.0.4: - version "17.0.5" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.0.5.tgz#6dbec26c11f1f6a2b558bc11ed3316577c339ebc" - integrity sha512-Y/PRQevNSsjAPWykl9aeGz8Pr+OI6BYM9fYDNMvOkuUiG9IhG4LEmaYrZZZvioMUEQ+cBCxT0v8wrnCURccyKA== +cacache@^17.0.0: + version "17.1.4" + resolved "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz" + integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== dependencies: "@npmcli/fs" "^3.1.0" fs-minipass "^3.0.0" - glob "^9.3.1" + glob "^10.2.2" lru-cache "^7.7.1" - minipass "^4.0.0" + minipass "^7.0.3" minipass-collect "^1.0.2" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" p-map "^4.0.0" - promise-inflight "^1.0.1" ssri "^10.0.0" tar "^6.1.11" unique-filename "^3.0.0" -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase-keys@^6.2.2: version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== dependencies: camelcase "^5.3.1" @@ -2694,27 +2580,22 @@ camelcase-keys@^6.2.2: camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^7.0.0: version "7.0.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz" integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== -caniuse-lite@^1.0.30001449: - version "1.0.30001481" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz#f58a717afe92f9e69d0e35ff64df596bfad93912" - integrity sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ== - caniuse-lite@^1.0.30001541: version "1.0.30001561" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz#752f21f56f96f1b1a52e97aae98c57c562d5d9da" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz" integrity sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw== canvas@^2.11.2: version "2.11.2" - resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.11.2.tgz#553d87b1e0228c7ac0fc72887c3adbac4abbd860" + resolved "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz" integrity sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw== dependencies: "@mapbox/node-pre-gyp" "^1.0.0" @@ -2723,19 +2604,19 @@ canvas@^2.11.2: caseless@~0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== chalk-template@0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/chalk-template/-/chalk-template-0.4.0.tgz#692c034d0ed62436b9062c1707fadcd0f753204b" + resolved "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz" integrity sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg== dependencies: chalk "^4.1.2" chalk@4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== dependencies: ansi-styles "^4.1.0" @@ -2743,12 +2624,12 @@ chalk@4.1.0: chalk@5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz" integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== dependencies: ansi-styles "^2.2.1" @@ -2759,7 +2640,7 @@ chalk@^1.0.0, chalk@^1.1.3: chalk@^2.3.0, chalk@^2.4.2: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -2768,7 +2649,7 @@ chalk@^2.3.0, chalk@^2.4.2: chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -2776,24 +2657,24 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: chalk@^5.0.1: version "5.2.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz" integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== chardet@^0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== charm@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/charm/-/charm-1.0.2.tgz#8add367153a6d9a581331052c4090991da995e35" + resolved "https://registry.npmjs.org/charm/-/charm-1.0.2.tgz" integrity sha512-wqW3VdPnlSWT4eRiYX+hcs+C6ViBPUWk1qTCd+37qw9kEm/a5n2qcyQDMBWvSYKN/ctqZzeXNQaeBjOetJJUkw== dependencies: inherits "^2.0.1" chokidar@^3.4.0: version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" @@ -2808,49 +2689,44 @@ chokidar@^3.4.0: chownr@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +ci-info@^3.2.0, ci-info@^3.6.1: + version "3.9.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cli-boxes@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" + resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz" integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== cli-cursor@3.1.0, cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" -cli-spinners@2.6.1: +cli-spinners@2.6.1, cli-spinners@^2.5.0: version "2.6.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== -cli-spinners@^2.5.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.8.0.tgz#e97a3e2bd00e6d85aa0c13d7f9e3ce236f7787fc" - integrity sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ== - cli-width@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== clipboardy@3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-3.0.0.tgz#f3876247404d334c9ed01b6f269c11d09a5e3092" + resolved "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz" integrity sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg== dependencies: arch "^2.2.0" @@ -2859,16 +2735,16 @@ clipboardy@3.0.0: cliui@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" wrap-ansi "^6.2.0" -cliui@^7.0.2, cliui@^7.0.4: +cliui@^7.0.2: version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" @@ -2877,7 +2753,7 @@ cliui@^7.0.2, cliui@^7.0.4: cliui@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" @@ -2886,7 +2762,7 @@ cliui@^8.0.1: clone-deep@4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== dependencies: is-plain-object "^2.0.4" @@ -2895,58 +2771,51 @@ clone-deep@4.0.1: clone@^1.0.2: version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== -cmd-shim@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" - integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== - dependencies: - mkdirp-infer-owner "^2.0.0" - -cmd-shim@^6.0.0: +cmd-shim@6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.1.tgz#a65878080548e1dca760b3aea1e21ed05194da9d" + resolved "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.1.tgz" integrity sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q== code-point-at@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color-support@^1.1.2, color-support@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== columnify@1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + resolved "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz" integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== dependencies: strip-ansi "^6.0.1" @@ -2954,44 +2823,39 @@ columnify@1.6.0: combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" command-exists@^1.2.8: version "1.2.9" - resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + resolved "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz" integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== commander@2, commander@^2.12.1, commander@^2.20.0: version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@7: version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +commander@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== + commander@^4.0.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@^9.4.1: - version "9.5.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" - integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== - -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - compare-func@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz" integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== dependencies: array-ify "^1.0.0" @@ -2999,14 +2863,14 @@ compare-func@^2.0.0: compressible@~2.0.16: version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: mime-db ">= 1.43.0 < 2" compression@1.7.4: version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== dependencies: accepts "~1.3.5" @@ -3019,12 +2883,12 @@ compression@1.7.4: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concat-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz" integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== dependencies: buffer-from "^1.0.0" @@ -3032,192 +2896,159 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" -config-chain@1.1.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== content-disposition@0.5.2: version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz" integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== -conventional-changelog-angular@5.0.12: - version "5.0.12" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" - integrity sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw== +conventional-changelog-angular@7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz" + integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== dependencies: compare-func "^2.0.0" - q "^1.5.1" -conventional-changelog-core@4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" - integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== +conventional-changelog-core@5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz" + integrity sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A== dependencies: add-stream "^1.0.0" - conventional-changelog-writer "^5.0.0" - conventional-commits-parser "^3.2.0" - dateformat "^3.0.0" - get-pkg-repo "^4.0.0" - git-raw-commits "^2.0.8" + conventional-changelog-writer "^6.0.0" + conventional-commits-parser "^4.0.0" + dateformat "^3.0.3" + get-pkg-repo "^4.2.1" + git-raw-commits "^3.0.0" git-remote-origin-url "^2.0.0" - git-semver-tags "^4.1.1" - lodash "^4.17.15" - normalize-package-data "^3.0.0" - q "^1.5.1" + git-semver-tags "^5.0.0" + normalize-package-data "^3.0.3" read-pkg "^3.0.0" read-pkg-up "^3.0.0" - through2 "^4.0.0" -conventional-changelog-preset-loader@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" - integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== +conventional-changelog-preset-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz" + integrity sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA== -conventional-changelog-writer@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" - integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== +conventional-changelog-writer@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz" + integrity sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ== dependencies: - conventional-commits-filter "^2.0.7" - dateformat "^3.0.0" + conventional-commits-filter "^3.0.0" + dateformat "^3.0.3" handlebars "^4.7.7" json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^8.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^4.0.0" + meow "^8.1.2" + semver "^7.0.0" + split "^1.0.1" -conventional-commits-filter@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" - integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== +conventional-commits-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz" + integrity sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q== dependencies: lodash.ismatch "^4.4.0" - modify-values "^1.0.0" + modify-values "^1.0.1" -conventional-commits-parser@^3.2.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" - integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== +conventional-commits-parser@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz" + integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== dependencies: - JSONStream "^1.0.4" + JSONStream "^1.3.5" is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" + meow "^8.1.2" + split2 "^3.2.2" -conventional-recommended-bump@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55" - integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== +conventional-recommended-bump@7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz" + integrity sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA== dependencies: concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.3.4" - conventional-commits-filter "^2.0.7" - conventional-commits-parser "^3.2.0" - git-raw-commits "^2.0.8" - git-semver-tags "^4.1.1" - meow "^8.0.0" - q "^1.5.1" + conventional-changelog-preset-loader "^3.0.0" + conventional-commits-filter "^3.0.0" + conventional-commits-parser "^4.0.0" + git-raw-commits "^3.0.0" + git-semver-tags "^5.0.0" + meow "^8.1.2" convert-source-map@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -core-js-compat@^3.25.1: - version "3.30.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.1.tgz#961541e22db9c27fc48bfc13a3cafa8734171dfe" - integrity sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw== +core-js-compat@^3.31.0, core-js-compat@^3.33.1: + version "3.33.2" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.2.tgz" + integrity sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw== dependencies: - browserslist "^4.21.5" + browserslist "^4.22.1" -core-util-is@1.0.2: +core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" - integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== +cosmiconfig@^8.2.0: + version "8.3.6" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" path-type "^4.0.0" - yaml "^1.10.0" cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - cssstyle@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-3.0.0.tgz#17ca9c87d26eac764bb8cfd00583cff21ce0277a" + resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz" integrity sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg== dependencies: rrweb-cssom "^0.6.0" "d3-array@1 - 3", "d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3.2.4, d3-array@^3.2.2: version "3.2.4" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5" + resolved "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz" integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== dependencies: internmap "1 - 2" "d3-color@1 - 3", d3-color@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" + resolved "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz" integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== d3-delaunay@^6.0.2: version "6.0.4" - resolved "https://registry.yarnpkg.com/d3-delaunay/-/d3-delaunay-6.0.4.tgz#98169038733a0a5babbeda55054f795bb9e4a58b" + resolved "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz" integrity sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A== dependencies: delaunator "5" "d3-dispatch@1 - 3": version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e" + resolved "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz" integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg== d3-dsv@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-3.0.1.tgz#c63af978f4d6a0d084a52a673922be2160789b73" + resolved "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz" integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q== dependencies: commander "7" @@ -3226,7 +3057,7 @@ d3-dsv@^3.0.1: d3-force@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-3.0.0.tgz#3e2ba1a61e70888fe3d9194e30d6d14eece155c4" + resolved "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz" integrity sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg== dependencies: d3-dispatch "1 - 3" @@ -3235,12 +3066,12 @@ d3-force@^3.0.0: "d3-format@1 - 3", d3-format@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" + resolved "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz" integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== d3-geo-projection@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/d3-geo-projection/-/d3-geo-projection-4.0.0.tgz#dc229e5ead78d31869a4e87cf1f45bd2716c48ca" + resolved "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-4.0.0.tgz" integrity sha512-p0bK60CEzph1iqmnxut7d/1kyTmm3UWtPlwdkM31AU+LW+BXazd5zJdoCn7VFxNCHXRngPHRnsNn5uGjLRGndg== dependencies: commander "7" @@ -3249,36 +3080,36 @@ d3-geo-projection@^4.0.0: "d3-geo@1.12.0 - 3", d3-geo@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-3.1.0.tgz#74fd54e1f4cebd5185ac2039217a98d39b0a4c0e" + resolved "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz" integrity sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA== dependencies: d3-array "2.5.0 - 3" d3-hierarchy@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#b01cd42c1eed3d46db77a5966cf726f8c09160c6" + resolved "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz" integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA== "d3-interpolate@1.2.0 - 3", d3-interpolate@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" + resolved "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz" integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== dependencies: d3-color "1 - 3" d3-path@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526" + resolved "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz" integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== "d3-quadtree@1 - 3": version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz#6dca3e8be2b393c9a9d514dabbd80a92deef1a4f" + resolved "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz" integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw== d3-scale@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396" + resolved "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz" integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ== dependencies: d3-array "2.10.0 - 3" @@ -3289,73 +3120,73 @@ d3-scale@^4.0.2: d3-shape@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5" + resolved "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz" integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== dependencies: d3-path "^3.1.0" "d3-time-format@2 - 4", d3-time-format@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a" + resolved "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz" integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg== dependencies: d3-time "1 - 3" "d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7" + resolved "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz" integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== dependencies: d3-array "2 - 3" "d3-timer@1 - 3", d3-timer@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" + resolved "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz" integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== dargs@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== dashdash@^1.12.0: version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== dependencies: assert-plus "^1.0.0" data-urls@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-4.0.0.tgz#333a454eca6f9a5b7b0f1013ff89074c3f522dd4" + resolved "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz" integrity sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g== dependencies: abab "^2.0.6" whatwg-mimetype "^3.0.0" whatwg-url "^12.0.0" -dateformat@^3.0.0: +dateformat@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== debug@2.6.9: version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" decamelize-keys@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz" integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== dependencies: decamelize "^1.1.0" @@ -3363,36 +3194,37 @@ decamelize-keys@^1.1.0: decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decimal.js@^10.4.3: version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== decompress-response@^4.2.0: version "4.2.1" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz" integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== dependencies: mimic-response "^2.0.0" -dedent@0.7.0, dedent@^0.7.0: +dedent@0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== -deep-equal@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.0.tgz#5caeace9c781028b9ff459f33b779346637c43e6" - integrity sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw== +deep-equal@^2.2.2: + version "2.2.2" + resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz" + integrity sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA== dependencies: + array-buffer-byte-length "^1.0.0" call-bind "^1.0.2" - es-get-iterator "^1.1.2" - get-intrinsic "^1.1.3" + es-get-iterator "^1.1.3" + get-intrinsic "^1.2.1" is-arguments "^1.1.1" - is-array-buffer "^3.0.1" + is-array-buffer "^3.0.2" is-date-object "^1.0.5" is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" @@ -3400,7 +3232,7 @@ deep-equal@^2.2.0: object-is "^1.1.5" object-keys "^1.1.1" object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" + regexp.prototype.flags "^1.5.0" side-channel "^1.0.4" which-boxed-primitive "^1.0.2" which-collection "^1.0.1" @@ -3408,12 +3240,12 @@ deep-equal@^2.2.0: deep-extend@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: @@ -3423,145 +3255,139 @@ deepmerge@^4.2.2: defaults@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + define-lazy-prop@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + version "1.2.1" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: + define-data-property "^1.0.1" has-property-descriptors "^1.0.0" object-keys "^1.1.1" defined@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" + resolved "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz" integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== -del@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - delaunator@5: version "5.0.0" - resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-5.0.0.tgz#60f052b28bd91c9b4566850ebf7756efe821d81b" + resolved "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz" integrity sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw== dependencies: robust-predicates "^3.0.0" delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== delegates@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -depd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -deprecation@^2.0.0, deprecation@^2.3.1: +deprecation@^2.0.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== detect-indent@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz" integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== detect-libc@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + diff@^3.2.0: version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + resolved "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" domexception@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + resolved "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz" integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== dependencies: webidl-conversions "^7.0.0" -dot-prop@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - dot-prop@^5.1.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: is-obj "^2.0.0" -dotenv@~10.0.0: +dotenv-expand@~10.0.0: version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz" + integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== + +dotenv@~16.3.1: + version "16.3.1" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz" + integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== dotignore@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" + resolved "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz" integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== dependencies: minimatch "^3.0.4" duplexer@^0.1.1: version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== ecc-jsbn@~0.1.1: version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== dependencies: jsbn "~0.1.0" @@ -3569,48 +3395,43 @@ ecc-jsbn@~0.1.1: ejs@^3.1.7: version "3.1.9" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz" integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.284: - version "1.4.374" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.374.tgz#091b2de9d80b970f9b5e689675ea62622cd1d74b" - integrity sha512-dNP9tQNTrjgVlSXMqGaj0BdrCS+9pcUvy5/emB6x8kh0YwCoDZ0Z4ce1+7aod+KhybHUd5o5LgKrc5al4kVmzQ== - electron-to-chromium@^1.4.535: version "1.4.576" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.576.tgz#0c6940fdc0d60f7e34bd742b29d8fa847c9294d1" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.576.tgz" integrity sha512-yXsZyXJfAqzWk1WKryr0Wl0MN2D47xodPvEEwlVePBnhU5E7raevLQR+E6b9JAD3GfL/7MbAL9ZtWQQPcLx7wA== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== encoding@^0.1.13: version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" end-of-stream@^1.4.1: version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" enquirer@~2.3.6: version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== dependencies: ansi-colors "^4.1.1" @@ -3622,45 +3443,46 @@ entities@^4.4.0: env-paths@^2.2.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -envinfo@^7.7.4: +envinfo@7.8.1: version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz" integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== err-code@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.21.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" - integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== +es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.0" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" internal-slot "^1.0.5" is-array-buffer "^3.0.2" is-callable "^1.2.7" @@ -3668,23 +3490,27 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" is-string "^1.0.7" - is-typed-array "^1.1.10" + is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.9" + which-typed-array "^1.1.13" -es-get-iterator@^1.1.2: +es-get-iterator@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + resolved "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz" integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== dependencies: call-bind "^1.0.2" @@ -3698,17 +3524,17 @@ es-get-iterator@^1.1.2: stop-iteration-iterator "^1.0.0" es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + version "2.0.2" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" + get-intrinsic "^1.2.2" has-tostringtag "^1.0.0" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" @@ -3717,22 +3543,22 @@ es-to-primitive@^1.2.1: escalade@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escodegen@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz" integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== dependencies: esprima "^4.0.1" @@ -3744,102 +3570,52 @@ escodegen@^2.0.0: eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" - integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" eslint-visitor-keys@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" - integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== - -eslint-visitor-keys@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" - integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== - -eslint@^8.17.0: - version "8.40.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.40.0.tgz#a564cd0099f38542c4e9a2f630fa45bf33bc42a4" - integrity sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.0.3" - "@eslint/js" "8.40.0" - "@humanwhocodes/config-array" "^0.11.8" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.0" - eslint-visitor-keys "^3.4.1" - espree "^9.5.2" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-sdsl "^4.1.4" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^8.39.0: - version "8.39.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.39.0.tgz#7fd20a295ef92d43809e914b70c39fd5a23cf3f1" - integrity sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og== +eslint@^8.17.0, eslint@^8.53.0: + version "8.53.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz" + integrity sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag== dependencies: "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.0.2" - "@eslint/js" "8.39.0" - "@humanwhocodes/config-array" "^0.11.8" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.3" + "@eslint/js" "8.53.0" + "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.2.0" - eslint-visitor-keys "^3.4.0" - espree "^9.5.1" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -3847,99 +3623,77 @@ eslint@^8.39.0: find-up "^5.0.0" glob-parent "^6.0.2" globals "^13.19.0" - grapheme-splitter "^1.0.4" + graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" - js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" + optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - -espree@^9.5.1: - version "9.5.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.1.tgz#4f26a4d5f18905bf4f2e0bd99002aab807e96dd4" - integrity sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg== - dependencies: - acorn "^8.8.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.0" + text-table "^0.2.0" -espree@^9.5.2: - version "9.5.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" - integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^8.8.0" + acorn "^8.9.0" acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.2: version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== estree-walker@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - eventemitter3@^4.0.4: version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@5.0.0: +execa@5.0.0, execa@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + resolved "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz" integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== dependencies: cross-spawn "^7.0.3" @@ -3952,9 +3706,9 @@ execa@5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execa@^5.0.0, execa@^5.1.1: +execa@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -3967,49 +3721,38 @@ execa@^5.0.0, execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + extend@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^3.0.3: version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" iconv-lite "^0.4.24" tmp "^0.0.33" -extsprintf@1.3.0: +extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - fast-glob@^3.2.9: version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -4020,38 +3763,38 @@ fast-glob@^3.2.9: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-url-parser@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" + resolved "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz" integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== dependencies: punycode "^1.3.2" fastq@^1.6.0: version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" figures@3.2.0, figures@^3.0.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" figures@^1.0.1: version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + resolved "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz" integrity sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ== dependencies: escape-string-regexp "^1.0.5" @@ -4059,56 +3802,51 @@ figures@^1.0.1: file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" -file-url@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/file-url/-/file-url-3.0.0.tgz#247a586a746ce9f7a8ed05560290968afc262a77" - integrity sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA== - -filelist@^1.0.1: +filelist@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== dependencies: minimatch "^5.0.1" fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" -find-up@5.0.0, find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - find-up@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== dependencies: locate-path "^2.0.0" find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat-cache@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: flatted "^3.1.0" @@ -4116,29 +3854,29 @@ flat-cache@^3.0.4: flat@^5.0.2: version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.1.0: version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== follow-redirects@^1.15.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + version "1.15.3" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz" + integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== for-each@^0.3.3: version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: is-callable "^1.1.3" foreground-child@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz" integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== dependencies: cross-spawn "^7.0.0" @@ -4146,12 +3884,12 @@ foreground-child@^3.1.0: forever-agent@~0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== form-data@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" @@ -4160,7 +3898,7 @@ form-data@^4.0.0: form-data@~2.3.2: version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" @@ -4169,22 +3907,12 @@ form-data@~2.3.2: fs-constants@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@9.1.0, fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^11.1.0: +fs-extra@^11.1.0, fs-extra@^11.1.1: version "11.1.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz" integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== dependencies: graceful-fs "^4.2.0" @@ -4193,7 +3921,7 @@ fs-extra@^11.1.0: fs-extra@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz" integrity sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA== dependencies: graceful-fs "^4.1.2" @@ -4202,7 +3930,7 @@ fs-extra@^6.0.1: fs-extra@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: graceful-fs "^4.2.0" @@ -4211,31 +3939,31 @@ fs-extra@^8.1.0: fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" fs-minipass@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.2.tgz#5b383858efa8c1eb8c33b39e994f7e8555b8b3a3" - integrity sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g== + version "3.0.3" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== dependencies: - minipass "^5.0.0" + minipass "^7.0.3" fs-readdir-recursive@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + resolved "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz" integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== fstream@^1.0.12: @@ -4248,29 +3976,29 @@ fstream@^1.0.12: mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" -functions-have-names@^1.2.2, functions-have-names@^1.2.3: +functions-have-names@^1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== gauge@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" + resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== dependencies: aproba "^1.0.3 || ^2.0.0" @@ -4285,7 +4013,7 @@ gauge@^3.0.0: gauge@^4.0.3: version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== dependencies: aproba "^1.0.3 || ^2.0.0" @@ -4297,23 +4025,9 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" -gauge@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.1.tgz#1efc801b8ff076b86ef3e9a7a280a975df572112" - integrity sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^4.0.1" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - gauge@~2.7.3: version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + resolved "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz" integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== dependencies: aproba "^1.0.3" @@ -4327,31 +4041,32 @@ gauge@~2.7.3: gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" - integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" + has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-package-type@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-pkg-repo@^4.0.0: +get-pkg-repo@^4.2.1: version "4.2.1" - resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" + resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz" integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== dependencies: "@hutson/parse-repository-url" "^3.0.0" @@ -4361,22 +4076,17 @@ get-pkg-repo@^4.0.0: get-port@5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + resolved "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== -get-stream@6.0.0: +get-stream@6.0.0, get-stream@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz" integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - get-symbol-description@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: call-bind "^1.0.2" @@ -4384,41 +4094,39 @@ get-symbol-description@^1.0.0: getpass@^0.1.1: version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: assert-plus "^1.0.0" -git-raw-commits@^2.0.8: - version "2.0.11" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" - integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== +git-raw-commits@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz" + integrity sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw== dependencies: dargs "^7.0.0" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" + meow "^8.1.2" + split2 "^3.2.2" git-remote-origin-url@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + resolved "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz" integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== dependencies: gitconfiglocal "^1.0.0" pify "^2.3.0" -git-semver-tags@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" - integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== +git-semver-tags@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz" + integrity sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA== dependencies: - meow "^8.0.0" - semver "^6.0.0" + meow "^8.1.2" + semver "^7.0.0" git-up@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" + resolved "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz" integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== dependencies: is-ssh "^1.4.0" @@ -4426,35 +4134,35 @@ git-up@^7.0.0: git-url-parse@13.1.0: version "13.1.0" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" + resolved "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.0.tgz" integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== dependencies: git-up "^7.0.0" gitconfiglocal@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz" integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== dependencies: ini "^1.3.2" glob-parent@5.1.2, glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob@7.1.4: version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== dependencies: fs.realpath "^1.0.0" @@ -4464,20 +4172,20 @@ glob@7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^10.0.0: - version "10.2.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.2.2.tgz#ce2468727de7e035e8ecf684669dc74d0526ab75" - integrity sha512-Xsa0BcxIC6th9UwNjZkhrMtNo/MnyRL8jGCP+uEwhA5oFOCY1f2s1/oNKY47xQ0Bg5nkjsfAEIej1VeH62bDDQ== +glob@^10.2.2, glob@^10.3.7: + version "10.3.10" + resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== dependencies: foreground-child "^3.1.0" - jackspeak "^2.0.3" - minimatch "^9.0.0" - minipass "^5.0.0" - path-scurry "^1.7.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0, glob@^7.2.3: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -4489,7 +4197,7 @@ glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0, glob@^7.2.3: glob@^8.0.1, glob@^8.0.3: version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" @@ -4498,9 +4206,9 @@ glob@^8.0.1, glob@^8.0.3: minimatch "^5.0.1" once "^1.3.0" -glob@^9.2.0, glob@^9.3.0, glob@^9.3.1: +glob@^9.2.0: version "9.3.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" + resolved "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz" integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== dependencies: fs.realpath "^1.0.0" @@ -4510,26 +4218,26 @@ glob@^9.2.0, glob@^9.3.0, glob@^9.3.1: globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: - version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + version "13.23.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz" + integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== dependencies: type-fest "^0.20.2" globalthis@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== dependencies: define-properties "^1.1.3" -globby@11.1.0, globby@^11.0.1, globby@^11.1.0: +globby@11.1.0, globby@^11.1.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -4541,40 +4249,35 @@ globby@11.1.0, globby@^11.0.1, globby@^11.1.0: gopd@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" -graceful-fs@4.2.10: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6: +graceful-fs@4.2.11, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== gzip-size@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz" integrity sha512-6s8trQiK+OMzSaCSVXX+iqIcLV9tC+E73jrJrJTyS4h/AJhlxHvzFKqM1YLDJWRGgHX8uLkBeXkA0njNj39L4w== dependencies: duplexer "^0.1.1" handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + version "4.7.8" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== dependencies: minimist "^1.2.5" - neo-async "^2.6.0" + neo-async "^2.6.2" source-map "^0.6.1" wordwrap "^1.0.0" optionalDependencies: @@ -4582,12 +4285,12 @@ handlebars@^4.7.7: har-schema@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== har-validator@~5.1.3: version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: ajv "^6.12.3" @@ -4595,24 +4298,24 @@ har-validator@~5.1.3: hard-rejection@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== has-ansi@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== dependencies: ansi-regex "^2.0.0" has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-dynamic-import@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/has-dynamic-import/-/has-dynamic-import-2.0.1.tgz#9bca87846aa264f2ad224fcd014946f5e5182f52" + resolved "https://registry.npmjs.org/has-dynamic-import/-/has-dynamic-import-2.0.1.tgz" integrity sha512-X3fbtsZmwb6W7fJGR9o7x65fZoodygCrZ3TVycvghP62yYQfS0t4RS0Qcz+j5tQYUKeSWS09tHkWW6WhFV3XhQ== dependencies: call-bind "^1.0.2" @@ -4620,98 +4323,91 @@ has-dynamic-import@^2.0.1: has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + version "1.0.1" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: has-symbols "^1.0.2" has-unicode@2.0.1, has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: - function-bind "^1.1.1" + function-bind "^1.1.2" hosted-git-info@^2.1.4: version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== hosted-git-info@^3.0.6: version "3.0.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz" integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== dependencies: lru-cache "^6.0.0" hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== dependencies: lru-cache "^6.0.0" -hosted-git-info@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.2.1.tgz#0ba1c97178ef91f3ab30842ae63d6a272341156f" - integrity sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw== - dependencies: - lru-cache "^7.5.1" - -hosted-git-info@^6.0.0, hosted-git-info@^6.1.1: +hosted-git-info@^6.0.0: version "6.1.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz" integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== dependencies: lru-cache "^7.5.1" html-encoding-sniffer@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz" integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== dependencies: whatwg-encoding "^2.0.0" http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: "@tootallnate/once" "2" @@ -4720,7 +4416,7 @@ http-proxy-agent@^5.0.0: http-signature@~1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== dependencies: assert-plus "^1.0.0" @@ -4729,7 +4425,7 @@ http-signature@~1.2.0: https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -4737,65 +4433,65 @@ https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== humanize-ms@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: ms "^2.0.0" iconv-lite@0.6, iconv-lite@0.6.3, iconv-lite@^0.6.2: version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" iconv-lite@^0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.1.13, ieee754@^1.2.1: +ieee754@^1.1.13: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore-walk@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz" integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== dependencies: minimatch "^5.0.1" ignore-walk@^6.0.0: version "6.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.3.tgz#0fcdb6decaccda35e308a7b0948645dd9523b7bb" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz" integrity sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA== dependencies: minimatch "^9.0.0" -ignore@^5.0.4, ignore@^5.2.0: +ignore@^5.0.4, ignore@^5.2.0, ignore@^5.2.4: version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" -import-local@^3.0.2: +import-local@3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" @@ -4803,22 +4499,22 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== infer-owner@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -4826,51 +4522,30 @@ inflight@^1.0.4: inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: +ini@^1.3.2, ini@^1.3.8, ini@~1.3.0: version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -init-package-json@3.0.2, init-package-json@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-3.0.2.tgz#f5bc9bac93f2bdc005778bc2271be642fecfcd69" - integrity sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A== +init-package-json@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/init-package-json/-/init-package-json-5.0.0.tgz" + integrity sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw== dependencies: - npm-package-arg "^9.0.1" - promzard "^0.3.0" - read "^1.0.7" - read-package-json "^5.0.0" + npm-package-arg "^10.0.0" + promzard "^1.0.0" + read "^2.0.0" + read-package-json "^6.0.0" semver "^7.3.5" validate-npm-package-license "^3.0.4" - validate-npm-package-name "^4.0.0" - -inquirer@8.2.4: - version "8.2.4" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" - integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^7.0.0" + validate-npm-package-name "^5.0.0" inquirer@^8.2.4: version "8.2.5" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz" integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== dependencies: ansi-escapes "^4.2.1" @@ -4890,27 +4565,27 @@ inquirer@^8.2.4: wrap-ansi "^7.0.0" internal-slot@^1.0.4, internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + version "1.0.6" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + get-intrinsic "^1.2.2" + hasown "^2.0.0" side-channel "^1.0.4" "internmap@1 - 2": version "2.0.3" - resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" + resolved "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz" integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== ip@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== is-arguments@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== dependencies: call-bind "^1.0.2" @@ -4918,7 +4593,7 @@ is-arguments@^1.1.1: is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== dependencies: call-bind "^1.0.2" @@ -4927,26 +4602,26 @@ is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-bigint@^1.0.1: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== dependencies: has-bigints "^1.0.1" is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" @@ -4954,148 +4629,143 @@ is-boolean-object@^1.1.0: is-builtin-module@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz" integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== dependencies: builtin-modules "^3.3.0" is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-ci@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== +is-ci@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz" + integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== dependencies: - ci-info "^2.0.0" + ci-info "^3.2.0" -is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" - integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== +is-core-module@^2.13.0, is-core-module@^2.5.0, is-core-module@^2.8.1: + version "2.13.1" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== dependencies: has-tostringtag "^1.0.0" is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-interactive@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-lambda@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== is-map@^2.0.1, is-map@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== is-module@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz" integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== is-negative-zero@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-obj@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.2, is-path-inside@^3.0.3: +is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== is-plain-object@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-plain-object@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== is-port-reachable@4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/is-port-reachable/-/is-port-reachable-4.0.0.tgz#dac044091ef15319c8ab2f34604d8794181f8c2d" + resolved "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz" integrity sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig== is-potential-custom-element-name@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== is-regex@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" @@ -5103,90 +4773,81 @@ is-regex@^1.1.4: is-set@^2.0.1, is-set@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz" integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== is-shared-array-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: call-bind "^1.0.2" is-ssh@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" + resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz" integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== dependencies: protocols "^2.0.1" -is-stream@2.0.0: +is-stream@2.0.0, is-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: has-symbols "^1.0.2" is-text-path@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz" integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.10, is-typed-array@^1.1.9: - version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" + which-typed-array "^1.1.11" is-typedarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-weakmap@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz" integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== is-weakref@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: call-bind "^1.0.2" is-weakset@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" + resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz" integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== dependencies: call-bind "^1.0.2" @@ -5194,80 +4855,90 @@ is-weakset@^2.0.1: is-wsl@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" isarray@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== isstream@~0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== -jackspeak@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.1.0.tgz#69831fe5346532888f279102f39fc4452ebbe6c2" - integrity sha512-DiEwVPqsieUzZBNxQ2cxznmFzfg/AMgJUjYw5xl6rSmCxAQXECcbSdwcLM6Ds6T09+SBfSNCGPhYUoQ96P4h7A== +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== dependencies: - cliui "^7.0.4" + "@isaacs/cliui" "^8.0.2" optionalDependencies: "@pkgjs/parseargs" "^0.11.0" jake@^10.8.5: - version "10.8.5" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" - integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== + version "10.8.7" + resolved "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== dependencies: async "^3.2.3" chalk "^4.0.2" - filelist "^1.0.1" - minimatch "^3.0.4" + filelist "^1.0.4" + minimatch "^3.1.2" -js-sdsl@^4.1.4: - version "4.4.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" - integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg== +"jest-diff@>=29.4.3 < 30", jest-diff@^29.4.1: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== js-tokens@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz" integrity sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg== js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" js-yaml@^3.10.0, js-yaml@^3.7.0: version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" @@ -5275,13 +4946,13 @@ js-yaml@^3.10.0, js-yaml@^3.7.0: jsbn@~0.1.0: version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== -jsdom@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-21.1.1.tgz#ab796361e3f6c01bcfaeda1fea3c06197ac9d8ae" - integrity sha512-Jjgdmw48RKcdAIQyUD1UdBh2ecH7VqwaXPN3ehoZN6MqgVbMn+lRm1aAT1AsdJRAJpwfa4IpwgzySn61h2qu3w== +jsdom@^21.1.0: + version "21.1.2" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-21.1.2.tgz#6433f751b8718248d646af1cdf6662dc8a1ca7f9" + integrity sha512-sCpFmK2jv+1sjff4u7fzft+pUh2KSUbUrEHYHyfSIbGTIcmnjyp83qg6qLwdJ/I3LpTXx33ACxeRL7Lsyc6lGQ== dependencies: abab "^2.0.6" acorn "^8.8.2" @@ -5296,7 +4967,7 @@ jsdom@^21.1.1: http-proxy-agent "^5.0.0" https-proxy-agent "^5.0.1" is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.2" + nwsapi "^2.2.4" parse5 "^7.1.2" rrweb-cssom "^0.6.0" saxes "^6.0.0" @@ -5312,86 +4983,81 @@ jsdom@^21.1.1: jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== json-parse-better-errors@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: +json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-parse-even-better-errors@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz#2cb2ee33069a78870a0c7e3da560026b89669cf7" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz" integrity sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-schema@0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json-stable-stringify@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz#e06f23128e0bbe342dc996ed5a19e28b57b580e0" + resolved "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz" integrity sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g== dependencies: jsonify "^0.0.1" -json-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^2.2.1, json5@^2.2.2, json5@^2.2.3: +json5@^2.2.2, json5@^2.2.3: version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonc-parser@3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== jsonfile@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -5400,17 +5066,17 @@ jsonfile@^6.0.1: jsonify@^0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" + resolved "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz" integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== jsonparse@^1.2.0, jsonparse@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== jsprim@^1.2.2: version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== dependencies: assert-plus "1.0.0" @@ -5418,106 +5084,95 @@ jsprim@^1.2.2: json-schema "0.4.0" verror "1.10.0" -just-diff-apply@^5.2.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" - integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== - -just-diff@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" - integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== - kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -lerna@^6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-6.6.1.tgz#4897171aed64e244a2d0f9000eef5c5b228f9332" - integrity sha512-WJtrvmbmR+6hMB9b5pvsxJzew0lRL6hARgW/My9BM4vYaxwPIA2I0riv3qQu5Zd7lYse7FEqJkTnl9Kn1bXhLA== - dependencies: - "@lerna/child-process" "6.6.1" - "@lerna/create" "6.6.1" - "@lerna/legacy-package-management" "6.6.1" - "@npmcli/arborist" "6.2.3" - "@npmcli/run-script" "4.1.7" - "@nrwl/devkit" ">=15.5.2 < 16" +lerna@^7.4.2: + version "7.4.2" + resolved "https://registry.npmjs.org/lerna/-/lerna-7.4.2.tgz" + integrity sha512-gxavfzHfJ4JL30OvMunmlm4Anw7d7Tq6tdVHzUukLdS9nWnxCN/QB21qR+VJYp5tcyXogHKbdUEGh6qmeyzxSA== + dependencies: + "@lerna/child-process" "7.4.2" + "@lerna/create" "7.4.2" + "@npmcli/run-script" "6.0.2" + "@nx/devkit" ">=16.5.1 < 17" "@octokit/plugin-enterprise-rest" "6.0.1" - "@octokit/rest" "19.0.3" - byte-size "7.0.0" + "@octokit/rest" "19.0.11" + byte-size "8.1.1" chalk "4.1.0" clone-deep "4.0.1" - cmd-shim "5.0.0" + cmd-shim "6.0.1" columnify "1.6.0" - config-chain "1.1.12" - conventional-changelog-angular "5.0.12" - conventional-changelog-core "4.2.4" - conventional-recommended-bump "6.1.0" - cosmiconfig "7.0.0" + conventional-changelog-angular "7.0.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "^8.2.0" dedent "0.7.0" - dot-prop "6.0.1" - envinfo "^7.7.4" + envinfo "7.8.1" execa "5.0.0" - fs-extra "9.1.0" + fs-extra "^11.1.1" get-port "5.1.1" get-stream "6.0.0" git-url-parse "13.1.0" glob-parent "5.1.2" globby "11.1.0" - graceful-fs "4.2.10" + graceful-fs "4.2.11" has-unicode "2.0.1" - import-local "^3.0.2" - init-package-json "3.0.2" + import-local "3.1.0" + ini "^1.3.8" + init-package-json "5.0.0" inquirer "^8.2.4" - is-ci "2.0.0" + is-ci "3.0.1" is-stream "2.0.0" - js-yaml "^4.1.0" - libnpmaccess "6.0.3" - libnpmpublish "6.0.4" + jest-diff ">=29.4.3 < 30" + js-yaml "4.1.0" + libnpmaccess "7.0.2" + libnpmpublish "7.3.0" load-json-file "6.2.0" - make-dir "3.1.0" + lodash "^4.17.21" + make-dir "4.0.0" minimatch "3.0.5" multimatch "5.0.0" node-fetch "2.6.7" npm-package-arg "8.1.1" npm-packlist "5.1.1" - npm-registry-fetch "^14.0.3" + npm-registry-fetch "^14.0.5" npmlog "^6.0.2" - nx ">=15.5.2 < 16" + nx ">=16.5.1 < 17" p-map "4.0.0" p-map-series "2.1.0" p-pipe "3.1.0" p-queue "6.6.2" p-reduce "2.1.0" p-waterfall "2.1.1" - pacote "13.6.2" + pacote "^15.2.0" pify "5.0.0" - read-cmd-shim "3.0.0" - read-package-json "5.0.1" + read-cmd-shim "4.0.0" + read-package-json "6.0.4" resolve-from "5.0.0" rimraf "^4.4.1" semver "^7.3.8" signal-exit "3.0.7" slash "3.0.0" - ssri "9.0.1" + ssri "^9.0.1" strong-log-transformer "2.1.0" tar "6.1.11" temp-dir "1.0.0" - typescript "^3 || ^4" - upath "^2.0.1" - uuid "8.3.2" + typescript ">=3 < 6" + upath "2.0.1" + uuid "^9.0.0" validate-npm-package-license "3.0.4" - validate-npm-package-name "4.0.0" - write-file-atomic "4.0.1" + validate-npm-package-name "5.0.0" + write-file-atomic "5.0.1" write-pkg "4.0.0" yargs "16.2.0" yargs-parser "20.2.4" levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -5525,46 +5180,47 @@ levn@^0.4.1: levn@~0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" -libnpmaccess@6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.3.tgz#473cc3e4aadb2bc713419d92e45d23b070d8cded" - integrity sha512-4tkfUZprwvih2VUZYMozL7EMKgQ5q9VW2NtRyxWtQWlkLTAWHRklcAvBN49CVqEkhUw7vTX2fNgB5LzgUucgYg== +libnpmaccess@7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-7.0.2.tgz" + integrity sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw== dependencies: - aproba "^2.0.0" - minipass "^3.1.1" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" -libnpmpublish@6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-6.0.4.tgz#adb41ec6b0c307d6f603746a4d929dcefb8f1a0b" - integrity sha512-lvAEYW8mB8QblL6Q/PI/wMzKNvIrF7Kpujf/4fGS/32a2i3jzUXi04TNyIBcK6dQJ34IgywfaKGh+Jq4HYPFmg== +libnpmpublish@7.3.0: + version "7.3.0" + resolved "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-7.3.0.tgz" + integrity sha512-fHUxw5VJhZCNSls0KLNEG0mCD2PN1i14gH5elGOgiVnU3VgTcRahagYP2LKI1m0tFCJ+XrAm0zVYyF5RCbXzcg== dependencies: - normalize-package-data "^4.0.0" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" + ci-info "^3.6.1" + normalize-package-data "^5.0.0" + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" + proc-log "^3.0.0" semver "^7.3.7" - ssri "^9.0.0" + sigstore "^1.4.0" + ssri "^10.0.1" lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lines-and-columns@~2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.3.tgz#b2f0badedb556b747020ab8ea7f0373e22efac1b" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz" integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== load-json-file@6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz" integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== dependencies: graceful-fs "^4.1.15" @@ -5574,7 +5230,7 @@ load-json-file@6.2.0: load-json-file@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== dependencies: graceful-fs "^4.1.2" @@ -5584,7 +5240,7 @@ load-json-file@^4.0.0: locate-path@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== dependencies: p-locate "^2.0.0" @@ -5592,41 +5248,41 @@ locate-path@^2.0.0: locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.debounce@^4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.ismatch@^4.4.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz" integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash@^4.17.15, lodash@^4.17.21: +lodash@^4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" @@ -5634,46 +5290,53 @@ log-symbols@^4.1.0: lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: version "7.18.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== -lru-cache@^9.0.0: +"lru-cache@^9.1.1 || ^10.0.0": version "9.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.1.tgz" integrity sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A== -make-dir@3.1.0, make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== +make-dir@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== dependencies: - semver "^6.0.0" + semver "^7.5.3" make-dir@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== dependencies: pify "^4.0.1" semver "^5.6.0" -make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: +make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-fetch-happen@^10.0.3: version "10.2.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== dependencies: agentkeepalive "^4.2.1" @@ -5693,10 +5356,10 @@ make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: socks-proxy-agent "^7.0.0" ssri "^9.0.0" -make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1: - version "11.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.0.tgz#f26b05e89317e960b75fd5e080e40d40f8d7b2a5" - integrity sha512-7ChuOzCb1LzdQZrTy0ky6RsCoMYeM+Fh4cY0+4zsJVhNcH5Q3OJojLY1mGkD0xAhWB29lskECVb6ZopofwjldA== +make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.1: + version "11.1.1" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz" + integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== dependencies: agentkeepalive "^4.2.1" cacache "^17.0.0" @@ -5705,7 +5368,7 @@ make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1: https-proxy-agent "^5.0.0" is-lambda "^1.0.1" lru-cache "^7.7.1" - minipass "^4.0.0" + minipass "^5.0.0" minipass-fetch "^3.0.0" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" @@ -5716,17 +5379,17 @@ make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1: map-obj@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== map-obj@^4.0.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== maxmin@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/maxmin/-/maxmin-2.1.0.tgz#4d3b220903d95eee7eb7ac7fa864e72dc09a3166" + resolved "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz" integrity sha512-NWlApBjW9az9qRPaeg7CX4sQBWwytqz32bIEo1PW9pRW+kBP9KLRfJO3UC+TV31EcQZEUq7eMzikC7zt3zPJcw== dependencies: chalk "^1.0.0" @@ -5734,9 +5397,9 @@ maxmin@^2.1.0: gzip-size "^3.0.0" pretty-bytes "^3.0.0" -meow@^8.0.0: +meow@^8.1.2: version "8.1.2" - resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + resolved "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz" integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== dependencies: "@types/minimist" "^1.2.0" @@ -5753,17 +5416,17 @@ meow@^8.0.0: merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -5771,116 +5434,102 @@ micromatch@^4.0.4: mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-db@~1.33.0: version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz" integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== mime-types@2.1.18: version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz" integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== dependencies: mime-db "~1.33.0" mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-response@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== min-indent@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== minimatch@3.0.5: version "3.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz" integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== dependencies: brace-expansion "^1.1.7" minimatch@3.1.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.0.1: version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" -minimatch@^6.1.6: - version "6.2.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-6.2.0.tgz#2b70fd13294178c69c04dfc05aebdb97a4e79e42" - integrity sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^7.4.2, minimatch@^7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" - integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== - dependencies: - brace-expansion "^2.0.1" - minimatch@^8.0.2: version "8.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz" integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.0.tgz#bfc8e88a1c40ffd40c172ddac3decb8451503b56" - integrity sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w== +minimatch@^9.0.0, minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== dependencies: brace-expansion "^2.0.1" minimist-options@4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== dependencies: arrify "^1.0.1" is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.7: +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass-collect@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: minipass "^3.0.0" minipass-fetch@^2.0.3: version "2.1.2" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz" integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== dependencies: minipass "^3.1.6" @@ -5890,11 +5539,11 @@ minipass-fetch@^2.0.3: encoding "^0.1.13" minipass-fetch@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.3.tgz#d9df70085609864331b533c960fd4ffaa78d15ce" - integrity sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ== + version "3.0.4" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz" + integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== dependencies: - minipass "^5.0.0" + minipass "^7.0.3" minipass-sized "^1.0.3" minizlib "^2.1.2" optionalDependencies: @@ -5902,14 +5551,14 @@ minipass-fetch@^3.0.0: minipass-flush@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: minipass "^3.0.0" minipass-json-stream@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + resolved "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz" integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== dependencies: jsonparse "^1.3.1" @@ -5917,21 +5566,21 @@ minipass-json-stream@^1.0.1: minipass-pipeline@^1.2.4: version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" minipass-sized@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== dependencies: minipass "^3.0.0" minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" @@ -5941,63 +5590,66 @@ minipass@^4.0.0, minipass@^4.2.4: resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== -minipass@^5.0.0: +minipass@^5.0.0, "minipass@^5.0.0 || ^6.0.2 || ^7.0.0": version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== +minipass@^7.0.3: + version "7.0.4" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: minipass "^3.0.0" yallist "^4.0.0" -mkdirp-infer-owner@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" - integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== - dependencies: - chownr "^2.0.0" - infer-owner "^1.0.4" - mkdirp "^1.0.3" - "mkdirp@>=0.5 0", mkdirp@^0.5.1: version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -modify-values@^1.0.0: +mock-property@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/mock-property/-/mock-property-1.0.3.tgz" + integrity sha512-2emPTb1reeLLYwHxyVx993iYyCHEiRRO+y8NFXFPL5kl5q14sgTK76cXyEKkeKCHeRw35SfdkUJ10Q1KfHuiIQ== + dependencies: + define-data-property "^1.1.1" + functions-have-names "^1.2.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + hasown "^2.0.0" + isarray "^2.0.5" + +modify-values@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== ms@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.2: +ms@2.1.2, ms@^2.0.0: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - multimatch@5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" + resolved "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz" integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== dependencies: "@types/minimatch" "^3.0.3" @@ -6006,66 +5658,72 @@ multimatch@5.0.0: arrify "^2.0.1" minimatch "^3.0.4" -mute-stream@0.0.8, mute-stream@~0.0.4: +mute-stream@0.0.8: version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +mute-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + nan@^2.17.0: version "2.17.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" + resolved "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz" integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== natural-compare-lite@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== negotiator@0.6.3, negotiator@^0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.6.0: +neo-async@^2.6.2: version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== node-addon-api@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== node-fetch@2.6.7: version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" node-fetch@^2.6.7: version "2.6.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz" integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== dependencies: whatwg-url "^5.0.0" node-gyp-build@^4.3.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" - integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== + version "4.6.1" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz" + integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== node-gyp@^9.0.0: - version "9.3.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.3.1.tgz#1e19f5f290afcc9c46973d68700cbd21a96192e4" - integrity sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg== + version "9.4.1" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz" + integrity sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ== dependencies: env-paths "^2.2.0" + exponential-backoff "^3.1.1" glob "^7.1.4" graceful-fs "^4.2.6" make-fetch-happen "^10.0.3" @@ -6076,40 +5734,33 @@ node-gyp@^9.0.0: tar "^6.1.2" which "^2.0.2" +node-machine-id@1.1.12: + version "1.1.12" + resolved "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz" + integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== + node-releases@^2.0.13: version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== -node-releases@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" - integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== - nopt@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== dependencies: abbrev "1" nopt@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + resolved "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz" integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== dependencies: abbrev "^1.0.0" -nopt@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.1.0.tgz#91f6a3366182176e72ecab93a09c19b63b485f28" - integrity sha512-ZFPLe9Iu0tnx7oWhFxAo4s7QTn8+NNDDxYNaKLjE7Dp0tbakQ3M1QhQzsnzXHQBTUO3K9BmwaxnyO8Ayn2I95Q== - dependencies: - abbrev "^2.0.0" - normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" @@ -6117,9 +5768,9 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@^3.0.0, "normalize-package-data@~1.0.1 || ^2.0.0 || ^3.0.0": +normalize-package-data@^3.0.0, normalize-package-data@^3.0.3, "normalize-package-data@~1.0.1 || ^2.0.0 || ^3.0.0": version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== dependencies: hosted-git-info "^4.0.1" @@ -6127,19 +5778,9 @@ normalize-package-data@^3.0.0, "normalize-package-data@~1.0.1 || ^2.0.0 || ^3.0. semver "^7.3.4" validate-npm-package-license "^3.0.1" -normalize-package-data@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.1.tgz#b46b24e0616d06cadf9d5718b29b6d445a82a62c" - integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== - dependencies: - hosted-git-info "^5.0.0" - is-core-module "^2.8.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - normalize-package-data@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz" integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q== dependencies: hosted-git-info "^6.0.0" @@ -6149,62 +5790,43 @@ normalize-package-data@^5.0.0: normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -npm-bundled@^1.1.1, npm-bundled@^1.1.2: +npm-bundled@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz" integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== dependencies: npm-normalize-package-bin "^1.0.1" -npm-bundled@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-2.0.1.tgz#94113f7eb342cd7a67de1e789f896b04d2c600f4" - integrity sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw== - dependencies: - npm-normalize-package-bin "^2.0.0" - npm-bundled@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz" integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== dependencies: npm-normalize-package-bin "^3.0.0" -npm-install-checks@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" - integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== - dependencies: - semver "^7.1.1" - npm-install-checks@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.1.1.tgz#b459b621634d06546664207fde16810815808db1" - integrity sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw== + version "6.3.0" + resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz" + integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== dependencies: semver "^7.1.1" npm-normalize-package-bin@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -npm-normalize-package-bin@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" - integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== - npm-normalize-package-bin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.0.tgz#6097436adb4ef09e2628b59a7882576fe53ce485" - integrity sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q== + version "3.0.1" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz" + integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== npm-package-arg@8.1.1: version "8.1.1" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.1.tgz#00ebf16ac395c63318e67ce66780a06db6df1b04" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz" integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== dependencies: hosted-git-info "^3.0.6" @@ -6213,7 +5835,7 @@ npm-package-arg@8.1.1: npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: version "10.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz" integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== dependencies: hosted-git-info "^6.0.0" @@ -6223,26 +5845,16 @@ npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: "npm-package-arg@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^8.0.0": version "8.1.5" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz" integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== dependencies: hosted-git-info "^4.0.1" semver "^7.3.4" validate-npm-package-name "^3.0.0" -npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: - version "9.1.2" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz#fc8acecb00235f42270dda446f36926ddd9ac2bc" - integrity sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg== - dependencies: - hosted-git-info "^5.0.0" - proc-log "^2.0.1" - semver "^7.3.5" - validate-npm-package-name "^4.0.0" - npm-packlist@5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.1.tgz#79bcaf22a26b6c30aa4dd66b976d69cc286800e0" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz" integrity sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw== dependencies: glob "^8.0.1" @@ -6250,76 +5862,30 @@ npm-packlist@5.1.1: npm-bundled "^1.1.2" npm-normalize-package-bin "^1.0.1" -npm-packlist@^5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.3.tgz#69d253e6fd664b9058b85005905012e00e69274b" - integrity sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg== - dependencies: - glob "^8.0.1" - ignore-walk "^5.0.1" - npm-bundled "^2.0.0" - npm-normalize-package-bin "^2.0.0" - npm-packlist@^7.0.0: version "7.0.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz" integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== dependencies: ignore-walk "^6.0.0" -npm-pick-manifest@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz#1d372b4e7ea7c6712316c0e99388a73ed3496e84" - integrity sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw== - dependencies: - npm-install-checks "^5.0.0" - npm-normalize-package-bin "^2.0.0" - npm-package-arg "^9.0.0" - semver "^7.3.5" - -npm-pick-manifest@^8.0.0, npm-pick-manifest@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz#c6acd97d1ad4c5dbb80eac7b386b03ffeb289e5f" - integrity sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA== +npm-pick-manifest@^8.0.0: + version "8.0.2" + resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz" + integrity sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg== dependencies: npm-install-checks "^6.0.0" npm-normalize-package-bin "^3.0.0" npm-package-arg "^10.0.0" semver "^7.3.5" -npm-registry-fetch@14.0.3: - version "14.0.3" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.3.tgz#8545e321c2b36d2c6fe6e009e77e9f0e527f547b" - integrity sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA== - dependencies: - make-fetch-happen "^11.0.0" - minipass "^4.0.0" - minipass-fetch "^3.0.0" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^10.0.0" - proc-log "^3.0.0" - -npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1: - version "13.3.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz#bb078b5fa6c52774116ae501ba1af2a33166af7e" - integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== - dependencies: - make-fetch-happen "^10.0.6" - minipass "^3.1.6" - minipass-fetch "^2.0.3" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^9.0.1" - proc-log "^2.0.0" - -npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3: - version "14.0.4" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.4.tgz#43dfa55ce7c0d0c545d625c7a916bab5b95f7038" - integrity sha512-pMS2DRkwg+M44ct65zrN/Cr9IHK1+n6weuefAo6Er4lc+/8YBCU0Czq04H3ZiSigluh7pb2rMM5JpgcytctB+Q== +npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.5: + version "14.0.5" + resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz" + integrity sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA== dependencies: make-fetch-happen "^11.0.0" - minipass "^4.0.0" + minipass "^5.0.0" minipass-fetch "^3.0.0" minipass-json-stream "^1.0.1" minizlib "^2.1.2" @@ -6328,14 +5894,14 @@ npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3: npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" "npmlog@2 || ^3.1.0 || ^4.0.0": version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: are-we-there-yet "~1.1.2" @@ -6343,19 +5909,9 @@ npm-run-path@^4.0.1: gauge "~2.7.3" set-blocking "~2.0.0" -npmlog@6.0.2, npmlog@^6.0.0, npmlog@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - npmlog@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== dependencies: are-we-there-yet "^2.0.0" @@ -6363,57 +5919,58 @@ npmlog@^5.0.1: gauge "^3.0.0" set-blocking "^2.0.0" -npmlog@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-7.0.1.tgz#7372151a01ccb095c47d8bf1d0771a4ff1f53ac8" - integrity sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg== +npmlog@^6.0.0, npmlog@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== dependencies: - are-we-there-yet "^4.0.0" + are-we-there-yet "^3.0.0" console-control-strings "^1.1.0" - gauge "^5.0.0" + gauge "^4.0.3" set-blocking "^2.0.0" number-is-nan@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== -nwsapi@^2.2.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.4.tgz#fd59d5e904e8e1f03c25a7d5a15cfa16c714a1e5" - integrity sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g== +nwsapi@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" + integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== -nx@15.9.2, "nx@>=15.5.2 < 16": - version "15.9.2" - resolved "https://registry.yarnpkg.com/nx/-/nx-15.9.2.tgz#d7ace1e5ae64a47f1b553dc5da08dbdd858bde96" - integrity sha512-wtcs+wsuplSckvgk+bV+/XuGlo+sVWzSG0RpgWBjQYeqA3QsVFEAPVY66Z5cSoukDbTV77ddcAjEw+Rz8oOR1A== +nx@16.10.0, "nx@>=16.5.1 < 17": + version "16.10.0" + resolved "https://registry.npmjs.org/nx/-/nx-16.10.0.tgz" + integrity sha512-gZl4iCC0Hx0Qe1VWmO4Bkeul2nttuXdPpfnlcDKSACGu3ZIo+uySqwOF8yBAxSTIf8xe2JRhgzJN1aFkuezEBg== dependencies: - "@nrwl/cli" "15.9.2" - "@nrwl/tao" "15.9.2" + "@nrwl/tao" "16.10.0" "@parcel/watcher" "2.0.4" "@yarnpkg/lockfile" "^1.1.0" - "@yarnpkg/parsers" "^3.0.0-rc.18" + "@yarnpkg/parsers" "3.0.0-rc.46" "@zkochan/js-yaml" "0.0.6" axios "^1.0.0" chalk "^4.1.0" cli-cursor "3.1.0" cli-spinners "2.6.1" - cliui "^7.0.2" - dotenv "~10.0.0" + cliui "^8.0.1" + dotenv "~16.3.1" + dotenv-expand "~10.0.0" enquirer "~2.3.6" - fast-glob "3.2.7" figures "3.2.0" flat "^5.0.2" fs-extra "^11.1.0" glob "7.1.4" ignore "^5.0.4" + jest-diff "^29.4.1" js-yaml "4.1.0" jsonc-parser "3.2.0" lines-and-columns "~2.0.3" minimatch "3.0.5" + node-machine-id "1.1.12" npm-run-path "^4.0.1" open "^8.4.0" - semver "7.3.4" + semver "7.5.3" string-width "^4.2.3" strong-log-transformer "^2.1.0" tar-stream "~2.2.0" @@ -6424,34 +5981,35 @@ nx@15.9.2, "nx@>=15.5.2 < 16": yargs "^17.6.2" yargs-parser "21.1.1" optionalDependencies: - "@nrwl/nx-darwin-arm64" "15.9.2" - "@nrwl/nx-darwin-x64" "15.9.2" - "@nrwl/nx-linux-arm-gnueabihf" "15.9.2" - "@nrwl/nx-linux-arm64-gnu" "15.9.2" - "@nrwl/nx-linux-arm64-musl" "15.9.2" - "@nrwl/nx-linux-x64-gnu" "15.9.2" - "@nrwl/nx-linux-x64-musl" "15.9.2" - "@nrwl/nx-win32-arm64-msvc" "15.9.2" - "@nrwl/nx-win32-x64-msvc" "15.9.2" + "@nx/nx-darwin-arm64" "16.10.0" + "@nx/nx-darwin-x64" "16.10.0" + "@nx/nx-freebsd-x64" "16.10.0" + "@nx/nx-linux-arm-gnueabihf" "16.10.0" + "@nx/nx-linux-arm64-gnu" "16.10.0" + "@nx/nx-linux-arm64-musl" "16.10.0" + "@nx/nx-linux-x64-gnu" "16.10.0" + "@nx/nx-linux-x64-musl" "16.10.0" + "@nx/nx-win32-arm64-msvc" "16.10.0" + "@nx/nx-win32-x64-msvc" "16.10.0" oauth-sign@~0.9.0: version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-is@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== dependencies: call-bind "^1.0.2" @@ -6459,12 +6017,12 @@ object-is@^1.1.5: object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.4: version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: call-bind "^1.0.2" @@ -6474,26 +6032,26 @@ object.assign@^4.1.4: on-headers@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" open@^8.4.0: version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz" integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== dependencies: define-lazy-prop "^2.0.0" @@ -6502,7 +6060,7 @@ open@^8.4.0: optionator@^0.8.1: version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: deep-is "~0.1.3" @@ -6512,21 +6070,21 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" ora@^5.4.1: version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: bl "^4.1.0" @@ -6541,76 +6099,76 @@ ora@^5.4.1: os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== p-finally@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== p-limit@^1.1.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== dependencies: p-limit "^1.1.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p-map-series@2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" + resolved "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz" integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== p-map@4.0.0, p-map@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" p-pipe@3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" + resolved "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz" integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== p-queue@6.6.2: version "6.6.2" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz" integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== dependencies: eventemitter3 "^4.0.4" @@ -6618,64 +6176,37 @@ p-queue@6.6.2: p-reduce@2.1.0, p-reduce@^2.0.0, p-reduce@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" + resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz" integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== p-timeout@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== dependencies: p-finally "^1.0.0" p-try@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== p-try@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== p-waterfall@2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" + resolved "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz" integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== dependencies: p-reduce "^2.0.0" -pacote@13.6.2, pacote@^13.6.1: - version "13.6.2" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.2.tgz#0d444ba3618ab3e5cd330b451c22967bbd0ca48a" - integrity sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg== - dependencies: - "@npmcli/git" "^3.0.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/promise-spawn" "^3.0.0" - "@npmcli/run-script" "^4.1.0" - cacache "^16.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - infer-owner "^1.0.4" - minipass "^3.1.6" - mkdirp "^1.0.4" - npm-package-arg "^9.0.0" - npm-packlist "^5.1.0" - npm-pick-manifest "^7.0.0" - npm-registry-fetch "^13.0.1" - proc-log "^2.0.0" - promise-retry "^2.0.1" - read-package-json "^5.0.0" - read-package-json-fast "^2.0.3" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - -pacote@^15.0.0, pacote@^15.0.8: - version "15.1.2" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.1.2.tgz#78b4c1403231fab368c752943f1969c6d8f026bb" - integrity sha512-EAGJrMiIjBTBB6tWGrx9hFJTOo14B3HSAoa/W9SawFEBhUqjxN7qqaFlGVF9jfY/mIri8Mb2xafmkRgWxYXxIQ== +pacote@^15.2.0: + version "15.2.0" + resolved "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz" + integrity sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA== dependencies: "@npmcli/git" "^4.0.0" "@npmcli/installed-package-contents" "^2.0.1" @@ -6683,7 +6214,7 @@ pacote@^15.0.0, pacote@^15.0.8: "@npmcli/run-script" "^6.0.0" cacache "^17.0.0" fs-minipass "^3.0.0" - minipass "^4.0.0" + minipass "^5.0.0" npm-package-arg "^10.0.0" npm-packlist "^7.0.0" npm-pick-manifest "^8.0.0" @@ -6698,31 +6229,22 @@ pacote@^15.0.0, pacote@^15.0.8: parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" -parse-conflict-json@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" - integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== - dependencies: - json-parse-even-better-errors "^3.0.0" - just-diff "^6.0.0" - just-diff-apply "^5.2.0" - parse-json@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-json@^5.0.0: +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -6732,21 +6254,21 @@ parse-json@^5.0.0: parse-path@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" + resolved "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz" integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== dependencies: protocols "^2.0.0" parse-url@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" + resolved "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz" integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== dependencies: parse-path "^7.0.0" parse5@^7.1.2: version "7.1.2" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== dependencies: entities "^4.4.0" @@ -6758,129 +6280,121 @@ parsimmon@^1.13.0: path-exists@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-is-inside@1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.6.1, path-scurry@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.7.0.tgz#99c741a2cfbce782294a39994d63748b5a24f6db" - integrity sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg== +path-scurry@^1.10.1, path-scurry@^1.6.1: + version "1.10.1" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== dependencies: - lru-cache "^9.0.0" - minipass "^5.0.0" + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-to-regexp@2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz" integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== path-type@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== dependencies: pify "^3.0.0" path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== performance-now@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@5.0.0, pify@^5.0.0: +pify@5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + resolved "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz" integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== pify@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== pify@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pixelmatch@^5.3.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-5.3.0.tgz#5e5321a7abedfb7962d60dbf345deda87cb9560a" + resolved "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.3.0.tgz" integrity sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q== dependencies: pngjs "^6.0.0" pkg-dir@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" pngjs@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-6.0.0.tgz#ca9e5d2aa48db0228a52c419c3308e87720da821" + resolved "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz" integrity sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg== -postcss-selector-parser@^6.0.10: - version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" - integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prelude-ls@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== prettier@^2.8.8: @@ -6890,140 +6404,110 @@ prettier@^2.8.8: pretty-bytes@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz#27d0008d778063a0b4811bb35c79f1bd5d5fbccf" + resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz" integrity sha512-eb7ZAeUTgfh294cElcu51w+OTRp/6ItW758LjwJSK72LDevcuJn0P4eD71PLMDGPwwatXmAmYHTkzvpKlJE3ow== dependencies: number-is-nan "^1.0.0" -pretty-format@29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.4.3.tgz#25500ada21a53c9e8423205cf0337056b201244c" - integrity sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA== +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - "@jest/schemas" "^29.4.3" + "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" react-is "^18.0.0" -proc-log@^2.0.0, proc-log@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" - integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== - proc-log@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" + resolved "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz" integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.2.tgz#f64b8dd9ef7693c9c7613e7dfe8d6d24de3031ea" - integrity sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA== - promise-inflight@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== promise-retry@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== dependencies: err-code "^2.0.2" retry "^0.12.0" -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== +promzard@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/promzard/-/promzard-1.0.0.tgz" + integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig== dependencies: - read "1" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + read "^2.0.0" protocols@^2.0.0, protocols@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" + resolved "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz" integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== proxy-from-env@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== psl@^1.1.28, psl@^1.1.33: version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== punycode@^1.3.2: version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== -q@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - qs@~6.5.2: version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== querystringify@^2.1.1: version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-lru@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" range-parser@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz" integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== rc@^1.0.1, rc@^1.1.6: version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" @@ -7033,68 +6517,35 @@ rc@^1.0.1, rc@^1.1.6: react-is@^18.0.0: version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -read-cmd-shim@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz#62b8c638225c61e6cc607f8f4b779f3b8238f155" - integrity sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog== - -read-cmd-shim@^4.0.0: +read-cmd-shim@4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" + resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz" integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== -read-package-json-fast@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" - integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== - dependencies: - json-parse-even-better-errors "^2.3.0" - npm-normalize-package-bin "^1.0.1" - -read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: +read-package-json-fast@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" + resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz" integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== dependencies: json-parse-even-better-errors "^3.0.0" npm-normalize-package-bin "^3.0.0" -read-package-json@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.1.tgz#1ed685d95ce258954596b13e2e0e76c7d0ab4c26" - integrity sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg== - dependencies: - glob "^8.0.1" - json-parse-even-better-errors "^2.3.1" - normalize-package-data "^4.0.0" - npm-normalize-package-bin "^1.0.1" - -read-package-json@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.2.tgz#b8779ccfd169f523b67208a89cc912e3f663f3fa" - integrity sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q== - dependencies: - glob "^8.0.1" - json-parse-even-better-errors "^2.3.1" - normalize-package-data "^4.0.0" - npm-normalize-package-bin "^2.0.0" - -read-package-json@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.1.tgz#566cb06bc05dbddefba4607e9096d5a9efbcd836" - integrity sha512-AaHqXxfAVa+fNL07x8iAghfKOds/XXsu7zoouIVsbm7PEbQ3nMWXlvjcbrNLjElnUHWQtAo4QEa0RXuvD4XlpA== +read-package-json@6.0.4, read-package-json@^6.0.0: + version "6.0.4" + resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz" + integrity sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw== dependencies: - glob "^9.3.0" + glob "^10.2.2" json-parse-even-better-errors "^3.0.0" normalize-package-data "^5.0.0" npm-normalize-package-bin "^3.0.0" read-pkg-up@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz" integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== dependencies: find-up "^2.0.0" @@ -7102,7 +6553,7 @@ read-pkg-up@^3.0.0: read-pkg-up@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: find-up "^4.1.0" @@ -7111,7 +6562,7 @@ read-pkg-up@^7.0.1: read-pkg@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== dependencies: load-json-file "^4.0.0" @@ -7120,7 +6571,7 @@ read-pkg@^3.0.0: read-pkg@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: "@types/normalize-package-data" "^2.4.0" @@ -7128,25 +6579,16 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -read@1, read@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== - dependencies: - mute-stream "~0.0.4" - -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== +read@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/read/-/read-2.1.0.tgz" + integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" + mute-stream "~1.0.0" readable-stream@^2.0.6, readable-stream@~2.3.6: version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" @@ -7157,67 +6599,66 @@ readable-stream@^2.0.6, readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.3.0.tgz#0914d0c72db03b316c9733bb3461d64a3cc50cba" - integrity sha512-MuEnA0lbSi7JS8XM+WNJlWZkHAAdm7gETHdFK//Q/mChGyj2akEFtdLZh32jSdkWGbRwCW9pn6g3LWDdDeZnBQ== +readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" redent@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== dependencies: indent-string "^4.0.0" strip-indent "^3.0.0" regenerate-unicode-properties@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" - integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + version "10.1.1" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== dependencies: regenerate "^1.4.2" regenerate@^1.4.2: version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.11: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== -regenerator-transform@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" - integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.4.3: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== +regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" - functions-have-names "^1.2.3" + set-function-name "^2.0.0" regexpu-core@^5.3.1: version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz" integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== dependencies: "@babel/regjsgen" "^0.8.0" @@ -7229,7 +6670,7 @@ regexpu-core@^5.3.1: registry-auth-token@3.3.2: version "3.3.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" + resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz" integrity sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ== dependencies: rc "^1.1.6" @@ -7237,21 +6678,21 @@ registry-auth-token@3.3.2: registry-url@3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + resolved "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz" integrity sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA== dependencies: rc "^1.0.1" regjsparser@^0.9.1: version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz" integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== dependencies: jsesc "~0.5.0" request@^2.88.2: version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" @@ -7277,82 +6718,75 @@ request@^2.88.2: require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== require-main-filename@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== requires-port@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-cwd@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: resolve-from "^5.0.0" resolve-from@5.0.0, resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve@^1.10.0, resolve@^1.14.2, resolve@^1.22.1, resolve@^1.3.2: - version "1.22.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: - is-core-module "^2.11.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.4: - version "2.0.0-next.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" - integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== +resolve@^2.0.0-next.5: + version "2.0.0-next.5" + resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" signal-exit "^3.0.2" -resumer@^0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" - integrity sha512-Fn9X8rX8yYF4m81rZCK/5VmrmsSbqS/i3rDLl6ZZHAXgC2nTAx3dhwG8q8odP/RmdLa2YrybDJaAMg+X1ajY3w== - dependencies: - through "~2.3.4" - retry@^0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== reusify@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@2: @@ -7364,33 +6798,33 @@ rimraf@2: rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" rimraf@^4.4.1: version "4.4.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz" integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== dependencies: glob "^9.2.0" -rimraf@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.0.tgz#5bda14e410d7e4dd522154891395802ce032c2cb" - integrity sha512-Jf9llaP+RvaEVS5nPShYFhtXIrb3LRKP281ib3So0KkeZKo2wIKyq0Re7TOSwanasA423PSr6CCIL4bP6T040g== +rimraf@^5.0.5: + version "5.0.5" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz" + integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A== dependencies: - glob "^10.0.0" + glob "^10.3.7" robust-predicates@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.1.tgz#ecde075044f7f30118682bd9fb3f123109577f9a" + resolved "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz" integrity sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g== rollup-plugin-bundle-size@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-bundle-size/-/rollup-plugin-bundle-size-1.0.3.tgz#d245cd988486b4040279f9fd33f357f61673e90f" + resolved "https://registry.npmjs.org/rollup-plugin-bundle-size/-/rollup-plugin-bundle-size-1.0.3.tgz" integrity sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ== dependencies: chalk "^1.1.3" @@ -7398,7 +6832,7 @@ rollup-plugin-bundle-size@^1.0.3: rollup@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.3.0.tgz#198e6ae4355899db630d75bc0e17b53f5d0fc20e" + resolved "https://registry.npmjs.org/rollup/-/rollup-4.3.0.tgz" integrity sha512-scIi1NrKLDIYSPK66jjECtII7vIgdAMFmFo8h6qm++I6nN9qDSV35Ku6erzGVqYjx+lj+j5wkusRMr++8SyDZg== optionalDependencies: "@rollup/rollup-android-arm-eabi" "4.3.0" @@ -7417,110 +6851,113 @@ rollup@^4.3.0: rrweb-cssom@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" + resolved "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz" integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== run-async@^2.4.0: version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" rw@1: version "1.3.3" - resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + resolved "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz" integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== rxjs@^7.5.5: version "7.8.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== dependencies: tslib "^2.1.0" +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex-test@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== dependencies: call-bind "^1.0.2" get-intrinsic "^1.1.3" is-regex "^1.1.4" -safe-stable-stringify@^2.4.1: +safe-stable-stringify@^2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== saxes@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + resolved "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz" integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== dependencies: xmlchars "^2.2.0" -"semver@2 >=2.2.1 || 3.x || 4 || 5 || 7", semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: +"semver@2 >=2.2.1 || 3.x || 4 || 5 || 7", semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.6.0: version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@7.3.4: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== - dependencies: - lru-cache "^6.0.0" - -semver@7.3.8: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== +semver@7.5.3: + version "7.5.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: +semver@^6.0.0, semver@^6.2.0, semver@^6.3.1: version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -serialize-javascript@^6.0.0: +serialize-javascript@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz" integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== dependencies: randombytes "^2.1.0" serve-handler@6.1.5: version "6.1.5" - resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.5.tgz#a4a0964f5c55c7e37a02a633232b6f0d6f068375" + resolved "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz" integrity sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg== dependencies: bytes "3.0.0" @@ -7532,10 +6969,10 @@ serve-handler@6.1.5: path-to-regexp "2.2.1" range-parser "1.2.0" -serve@^14.2.0: - version "14.2.0" - resolved "https://registry.yarnpkg.com/serve/-/serve-14.2.0.tgz#3d768e88fa13ad8644f2393599189707176e66b8" - integrity sha512-+HOw/XK1bW8tw5iBilBz/mJLWRzM8XM6MPxL4J/dKzdxq1vfdEWSwhaR7/yS8EJp5wzvP92p1qirysJvnEtjXg== +serve@^14.2.1: + version "14.2.1" + resolved "https://registry.npmjs.org/serve/-/serve-14.2.1.tgz" + integrity sha512-48er5fzHh7GCShLnNyPBRPEjs2I6QBozeGr02gaacROiyS/8ARADlj595j39iZXAqBbJHH/ivJJyPRWY9sQWZA== dependencies: "@zeit/schemas" "2.29.0" ajv "8.11.0" @@ -7551,31 +6988,50 @@ serve@^14.2.0: set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + shallow-clone@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: kind-of "^6.0.2" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" @@ -7584,31 +7040,33 @@ side-channel@^1.0.4: signal-exit@3.0.7, signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== signal-exit@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.1.tgz#96a61033896120ec9335d96851d902cc98f0ba2a" - integrity sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw== + version "4.1.0" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -sigstore@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.4.0.tgz#2e3a28c08b1b8246744c27cfb179c525c3f164d8" - integrity sha512-N7TRpSbFjY/TrFDg6yGAQSYBrQ5s6qmPiq4pD6fkv1LoyfMsLG0NwZWG2s5q+uttLHgyVyTa0Rogx2P78rN8kQ== +sigstore@^1.3.0, sigstore@^1.4.0: + version "1.9.0" + resolved "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz" + integrity sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A== dependencies: - "@sigstore/protobuf-specs" "^0.1.0" + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + "@sigstore/sign" "^1.0.0" + "@sigstore/tuf" "^1.0.3" make-fetch-happen "^11.0.1" - tuf-js "^1.1.3" simple-concat@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== simple-get@^3.0.3: version "3.1.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz" integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== dependencies: decompress-response "^4.2.0" @@ -7617,32 +7075,32 @@ simple-get@^3.0.3: slash@3.0.0, slash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slash@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz" integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== slide@^1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + resolved "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz" integrity sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw== smart-buffer@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== -smob@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/smob/-/smob-0.0.6.tgz#09b268fea916158a2781c152044c6155adbb8aa1" - integrity sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw== +smob@^1.0.0: + version "1.4.1" + resolved "https://registry.npmjs.org/smob/-/smob-1.4.1.tgz" + integrity sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ== socks-proxy-agent@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== dependencies: agent-base "^6.0.2" @@ -7651,7 +7109,7 @@ socks-proxy-agent@^7.0.0: socks@^2.6.2: version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + resolved "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== dependencies: ip "^2.0.0" @@ -7659,14 +7117,14 @@ socks@^2.6.2: sort-keys@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== dependencies: is-plain-obj "^1.0.0" source-map-support@~0.5.20: version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -7674,12 +7132,12 @@ source-map-support@~0.5.20: source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== spdx-correct@^3.0.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" @@ -7687,45 +7145,45 @@ spdx-correct@^3.0.0: spdx-exceptions@^2.1.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.13" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" - integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== + version "3.0.16" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" + integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== -split2@^3.0.0: +split2@^3.2.2: version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== dependencies: readable-stream "^3.0.0" -split@^1.0.0: +split@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz" integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== dependencies: through "2" sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + version "1.18.0" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -7737,158 +7195,158 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@9.0.1, ssri@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" - integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== - dependencies: - minipass "^3.1.1" - ssri@^10.0.0, ssri@^10.0.1: - version "10.0.4" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.4.tgz#5a20af378be586df139ddb2dfb3bf992cf0daba6" - integrity sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ== + version "10.0.5" + resolved "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz" + integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== dependencies: - minipass "^5.0.0" + minipass "^7.0.3" ssri@^8.0.0: version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== dependencies: minipass "^3.1.1" +ssri@^9.0.0, ssri@^9.0.1: + version "9.0.1" + resolved "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + stop-iteration-iterator@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" + resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz" integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== dependencies: internal-slot "^1.0.4" +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" string_decoder@~1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + version "7.1.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-bom@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-indent@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== dependencies: min-indent "^1.0.0" strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" + resolved "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz" integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== dependencies: duplexer "^0.1.1" @@ -7897,63 +7355,64 @@ strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: supports-color@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== symbol-tree@^3.2.4: version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -tape@^5.6.3: - version "5.6.3" - resolved "https://registry.yarnpkg.com/tape/-/tape-5.6.3.tgz#0d3cc82f96b0906f73b0981df1a38a44fec7901d" - integrity sha512-cUDDGSbyoSIpdUAqbqLI/r7i/S4BHuCB9M5j7E/LrLs/x/i4zeAJ798aqo+FGo+kr9seBZwr8AkZW6rjceyAMQ== - dependencies: - array.prototype.every "^1.1.4" - call-bind "^1.0.2" - deep-equal "^2.2.0" +tape@^5.7.2: + version "5.7.2" + resolved "https://registry.npmjs.org/tape/-/tape-5.7.2.tgz" + integrity sha512-cvSyprYahyOYXbtBwV/B7nrx7kINeZ3VZ9fKoSywoPwZN3oQ1WVLvt+Vl0XCz/gi37CDrY3dlW790nzviIzoPw== + dependencies: + "@ljharb/resumer" "^0.0.1" + "@ljharb/through" "^2.3.11" + array.prototype.every "^1.1.5" + call-bind "^1.0.5" + deep-equal "^2.2.2" defined "^1.0.1" dotignore "^0.1.2" for-each "^0.3.3" get-package-type "^0.1.0" glob "^7.2.3" - has "^1.0.3" has-dynamic-import "^2.0.1" + hasown "^2.0.0" inherits "^2.0.4" is-regex "^1.1.4" - minimist "^1.2.7" - object-inspect "^1.12.3" + minimist "^1.2.8" + mock-property "^1.0.2" + object-inspect "^1.13.1" object-is "^1.1.5" object-keys "^1.1.1" object.assign "^4.1.4" - resolve "^2.0.0-next.4" - resumer "^0.0.0" - string.prototype.trim "^1.2.7" - through "^2.3.8" + resolve "^2.0.0-next.5" + string.prototype.trim "^1.2.8" tar-stream@^2.1.4, tar-stream@~2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== dependencies: bl "^4.0.3" @@ -7964,7 +7423,7 @@ tar-stream@^2.1.4, tar-stream@~2.2.0: tar@6.1.11: version "6.1.11" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== dependencies: chownr "^2.0.0" @@ -7976,7 +7435,7 @@ tar@6.1.11: tar@^6.1.11, tar@^6.1.2: version "6.1.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz" integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== dependencies: chownr "^2.0.0" @@ -7988,102 +7447,79 @@ tar@^6.1.11, tar@^6.1.2: temp-dir@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz" integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -tempy@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-1.0.0.tgz#4f192b3ee3328a2684d0e3fc5c491425395aab65" - integrity sha512-eLXG5B1G0mRPHmgH2WydPl5v4jH35qEn3y/rA/aahKhIa91Pn119SsU7n7v/433gtT9ONzC8ISvNHIh2JSTm0w== - dependencies: - del "^6.0.0" - is-stream "^2.0.0" - temp-dir "^2.0.0" - type-fest "^0.16.0" - unique-string "^2.0.0" - -terser@^5.15.1: - version "5.17.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.1.tgz#948f10830454761e2eeedc6debe45c532c83fd69" - integrity sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw== +terser@^5.17.4: + version "5.24.0" + resolved "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz" + integrity sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw== dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" commander "^2.20.0" source-map-support "~0.5.20" text-extensions@^1.0.0: version "1.9.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== text-table@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== through2@^2.0.0: version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: readable-stream "~2.3.6" xtend "~4.0.1" -through2@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8, through@~2.3.4: +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== tmp@^0.0.33: version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" tmp@^0.2.1, tmp@~0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== dependencies: rimraf "^3.0.0" to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" topojson-client@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/topojson-client/-/topojson-client-3.1.0.tgz#22e8b1ed08a2b922feeb4af6f53b6ef09a467b99" + resolved "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz" integrity sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw== dependencies: commander "2" tough-cookie@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" - integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== + version "4.1.3" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== dependencies: psl "^1.1.33" punycode "^2.1.1" @@ -8092,7 +7528,7 @@ tough-cookie@^4.1.2: tough-cookie@~2.5.0: version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== dependencies: psl "^1.1.28" @@ -8100,42 +7536,42 @@ tough-cookie@~2.5.0: tr46@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-4.1.1.tgz#281a758dcc82aeb4fe38c7dfe4d11a395aac8469" + resolved "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz" integrity sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw== dependencies: punycode "^2.3.0" tr46@~0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -treeverse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" - integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== - trim-newlines@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== -ts-json-schema-generator@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ts-json-schema-generator/-/ts-json-schema-generator-1.2.0.tgz#5ccce26c7475ff60a034885bff6bd38e574fb073" - integrity sha512-tUMeO3ZvA12d3HHh7T/AK8W5hmUhDRNtqWRHSMN3ZRbUFt+UmV0oX8k1RK4SA+a+BKNHpmW2v06MS49e8Fi3Yg== +ts-api-utils@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz" + integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== + +ts-json-schema-generator@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ts-json-schema-generator/-/ts-json-schema-generator-1.4.0.tgz#f341b36792c372d3d09245414a4f3a6efa2697f8" + integrity sha512-wm8vyihmGgYpxrqRshmYkWGNwEk+sf3xV2rUgxv8Ryeh7bSpMO7pZQOht+2rS002eDkFTxR7EwRPXVzrS0WJTg== dependencies: - "@types/json-schema" "^7.0.11" - commander "^9.4.1" + "@types/json-schema" "^7.0.12" + commander "^11.0.0" glob "^8.0.3" - json5 "^2.2.1" + json5 "^2.2.3" normalize-path "^3.0.0" - safe-stable-stringify "^2.4.1" - typescript "~4.9.3" + safe-stable-stringify "^2.4.3" + typescript "~5.2.2" tsconfig-paths@^4.1.2: version "4.2.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz" integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== dependencies: json5 "^2.2.2" @@ -8144,17 +7580,17 @@ tsconfig-paths@^4.1.2: tslib@^1.8.0, tslib@^1.8.1: version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== tslint@5.14.0: version "5.14.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.14.0.tgz#be62637135ac244fc9b37ed6ea5252c9eba1616e" + resolved "https://registry.npmjs.org/tslint/-/tslint-5.14.0.tgz" integrity sha512-IUla/ieHVnB8Le7LdQFRGlVJid2T/gaJe5VkjzRVSRR6pA2ODYrnfR1hmxi+5+au9l50jBwpbBL34txgv4NnTQ== dependencies: babel-code-frame "^6.22.0" @@ -8173,95 +7609,121 @@ tslint@5.14.0: tsutils@^2.29.0: version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz" integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== dependencies: tslib "^1.8.1" tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" -tuf-js@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.4.tgz#e85a936b16859c7fae23e5f040bc0f7b559b3192" - integrity sha512-Lw2JRM3HTYhEtQJM2Th3aNCPbnXirtWMl065BawwmM2pX6XStH/ZO9e8T2hh0zk/HUa+1i6j+Lv6eDitKTau6A== +tuf-js@^1.1.7: + version "1.1.7" + resolved "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz" + integrity sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg== dependencies: - "@tufjs/models" "1.0.3" - make-fetch-happen "^11.0.1" + "@tufjs/models" "1.0.4" + debug "^4.3.4" + make-fetch-happen "^11.1.1" tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-check@~0.3.2: version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== dependencies: prelude-ls "~1.1.2" -type-fest@^0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" - integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== - type-fest@^0.18.0: version "0.18.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz" integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== type-fest@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== type-fest@^0.8.1: version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== type-fest@^2.13.0: version "2.19.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + typed-array-length@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== dependencies: call-bind "^1.0.2" @@ -8270,13 +7732,13 @@ typed-array-length@^1.0.4: typedarray@^0.0.6: version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -"typescript@^3 || ^4", typescript@~4.9.3: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +"typescript@>=3 < 6", typescript@~5.2.2: + version "5.2.2" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== typescript@~5.1.6: version "5.1.6" @@ -8285,12 +7747,12 @@ typescript@~5.1.6: uglify-js@^3.1.4: version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== unbox-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: call-bind "^1.0.2" @@ -8300,17 +7762,17 @@ unbox-primitive@^1.0.2: undici-types@~5.26.4: version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== unicode-match-property-ecmascript@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: unicode-canonical-property-names-ecmascript "^2.0.0" @@ -8318,85 +7780,70 @@ unicode-match-property-ecmascript@^2.0.0: unicode-match-property-value-ecmascript@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz" integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== unicode-property-aliases-ecmascript@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== unique-filename@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz" integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== dependencies: unique-slug "^3.0.0" unique-filename@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz" integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== dependencies: unique-slug "^4.0.0" unique-slug@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz" integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== dependencies: imurmurhash "^0.1.4" unique-slug@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz" integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== dependencies: imurmurhash "^0.1.4" -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + version "6.0.1" + resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz" + integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== universalify@^0.1.0: version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -upath@2.0.1, upath@^2.0.1: +upath@2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" + resolved "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== -update-browserslist-db@^1.0.10: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - update-browserslist-db@^1.0.13: version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz" integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== dependencies: escalade "^3.1.1" @@ -8404,7 +7851,7 @@ update-browserslist-db@^1.0.13: update-check@1.5.4: version "1.5.4" - resolved "https://registry.yarnpkg.com/update-check/-/update-check-1.5.4.tgz#5b508e259558f1ad7dbc8b4b0457d4c9d28c8743" + resolved "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz" integrity sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ== dependencies: registry-auth-token "3.3.2" @@ -8412,81 +7859,74 @@ update-check@1.5.4: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" url-parse@^1.5.3: version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== dependencies: querystringify "^2.1.1" requires-port "^1.0.0" -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -uuid@8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - uuid@^3.3.2: version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + v8-compile-cache@2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== validate-npm-package-license@3.0.4, validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@4.0.0, validate-npm-package-name@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" - integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== +validate-npm-package-name@5.0.0, validate-npm-package-name@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz" + integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== dependencies: builtins "^5.0.0" validate-npm-package-name@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz" integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== dependencies: builtins "^1.0.3" -validate-npm-package-name@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" - integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== - dependencies: - builtins "^5.0.0" - vary@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== vega-datasets@^2.7.0: version "2.7.0" - resolved "https://registry.yarnpkg.com/vega-datasets/-/vega-datasets-2.7.0.tgz#458bec5e4ec1b506fc1ba63fed59ea86feaef764" + resolved "https://registry.npmjs.org/vega-datasets/-/vega-datasets-2.7.0.tgz" integrity sha512-dvHJFK9ousiblywNcRcJbedwbcAfVY/RH1UAqEWfvu4GZrXFibPlO+u8nP/onxDETcaHFDOGFs/+SK1P/sjjOQ== verror@1.10.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: assert-plus "^1.0.0" @@ -8495,48 +7935,43 @@ verror@1.10.0: w3c-xmlserializer@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" + resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz" integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== dependencies: xml-name-validator "^4.0.0" -walk-up-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" - integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== - wcwidth@^1.0.0, wcwidth@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webidl-conversions@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== whatwg-encoding@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz" integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== dependencies: iconv-lite "0.6.3" whatwg-mimetype@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz" integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== whatwg-url@^12.0.0, whatwg-url@^12.0.1: version "12.0.1" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-12.0.1.tgz#fd7bcc71192e7c3a2a97b9a8d6b094853ed8773c" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz" integrity sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ== dependencies: tr46 "^4.1.1" @@ -8544,7 +7979,7 @@ whatwg-url@^12.0.0, whatwg-url@^12.0.1: whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -8552,7 +7987,7 @@ whatwg-url@^5.0.0: which-boxed-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: is-bigint "^1.0.1" @@ -8563,7 +7998,7 @@ which-boxed-primitive@^1.0.2: which-collection@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz" integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== dependencies: is-map "^2.0.1" @@ -8576,77 +8011,76 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== +which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.9: + version "1.1.13" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" which@^2.0.1, which@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" which@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/which/-/which-3.0.0.tgz#a9efd016db59728758a390d23f1687b6e8f59f8e" - integrity sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ== + version "3.0.1" + resolved "https://registry.npmjs.org/which/-/which-3.0.1.tgz" + integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg== dependencies: isexe "^2.0.0" wide-align@^1.1.0, wide-align@^1.1.2, wide-align@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: string-width "^1.0.2 || 2 || 3 || 4" widest-line@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" + resolved "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz" integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== dependencies: string-width "^5.0.1" -word-wrap@^1.2.3, word-wrap@~1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" - integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== +word-wrap@~1.2.3: + version "1.2.5" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== wordwrap@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^8.0.1: +wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" @@ -8655,37 +8089,29 @@ wrap-ansi@^8.0.1: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" - integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== +write-file-atomic@5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== dependencies: imurmurhash "^0.1.4" - signal-exit "^3.0.7" + signal-exit "^4.0.1" write-file-atomic@^2.4.2: version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz" integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" - integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^4.0.1" - write-json-file@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" + resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz" integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== dependencies: detect-indent "^5.0.0" @@ -8697,7 +8123,7 @@ write-json-file@^3.2.0: write-pkg@4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" + resolved "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz" integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== dependencies: sort-keys "^2.0.0" @@ -8706,75 +8132,65 @@ write-pkg@4.0.0: ws@^8.13.0: version "8.13.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== xml-name-validator@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== xmlchars@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== xtend@~4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^4.0.0: version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@20.2.4: +yargs-parser@20.2.4, yargs-parser@^20.2.2, yargs-parser@^20.2.3: version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== yargs-parser@21.1.1, yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs-parser@^18.1.2: version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - yargs@16.2.0, yargs@^16.2.0: version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" @@ -8787,7 +8203,7 @@ yargs@16.2.0, yargs@^16.2.0: yargs@17, yargs@^17.6.2: version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" @@ -8800,7 +8216,7 @@ yargs@17, yargs@^17.6.2: yargs@^15.1.0, yargs@^15.3.1: version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== dependencies: cliui "^6.0.0" @@ -8817,5 +8233,5 @@ yargs@^15.1.0, yargs@^15.3.1: yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==